Explorar el Código

初始化用户特征表(指纹、面部)、角色和岗位关联表、系统邮件任务表、系统邮件提醒周期配置表、物资归还异常、异常记录、黑名单关联表

车车 hace 11 meses
padre
commit
2ba1197b84
Se han modificado 63 ficheros con 3491 adiciones y 0 borrados
  1. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/BlacklistController.java
  2. 32 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistPageReqVO.java
  3. 39 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistRespVO.java
  4. 28 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistSaveReqVO.java
  5. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/ExceptionController.java
  6. 55 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionPageReqVO.java
  7. 67 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionRespVO.java
  8. 50 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionSaveReqVO.java
  9. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/ExceptionMisplaceController.java
  10. 52 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplacePageReqVO.java
  11. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplaceRespVO.java
  12. 47 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplaceSaveReqVO.java
  13. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/MailNotifyConfigController.java
  14. 49 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigPageReqVO.java
  15. 59 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigRespVO.java
  16. 45 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigSaveReqVO.java
  17. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/MailSendTaskItemController.java
  18. 56 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemPageReqVO.java
  19. 67 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemRespVO.java
  20. 56 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemSaveReqVO.java
  21. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/RoleWorkstationController.java
  22. 20 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationPageReqVO.java
  23. 27 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationRespVO.java
  24. 18 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationSaveReqVO.java
  25. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/UserCharacteristicController.java
  26. 53 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicPageReqVO.java
  27. 67 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicRespVO.java
  28. 51 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicSaveReqVO.java
  29. 48 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/blacklist/BlacklistDO.java
  30. 78 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/exception/ExceptionDO.java
  31. 74 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/exceptionmisplace/ExceptionMisplaceDO.java
  32. 68 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mailnotifyconfig/MailNotifyConfigDO.java
  33. 79 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mailsendtaskitem/MailSendTaskItemDO.java
  34. 33 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/roleworkstation/RoleWorkstationDO.java
  35. 76 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/usercharacteristic/UserCharacteristicDO.java
  36. 30 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/blacklist/BlacklistMapper.java
  37. 37 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/exception/ExceptionMapper.java
  38. 36 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/exceptionmisplace/ExceptionMisplaceMapper.java
  39. 35 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/mailnotifyconfig/MailNotifyConfigMapper.java
  40. 37 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/mailsendtaskitem/MailSendTaskItemMapper.java
  41. 23 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/roleworkstation/RoleWorkstationMapper.java
  42. 37 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/usercharacteristic/UserCharacteristicMapper.java
  43. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/blacklist/BlacklistService.java
  44. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/blacklist/BlacklistServiceImpl.java
  45. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exception/ExceptionService.java
  46. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exception/ExceptionServiceImpl.java
  47. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exceptionmisplace/ExceptionMisplaceService.java
  48. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exceptionmisplace/ExceptionMisplaceServiceImpl.java
  49. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailnotifyconfig/MailNotifyConfigService.java
  50. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailnotifyconfig/MailNotifyConfigServiceImpl.java
  51. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailsendtaskitem/MailSendTaskItemService.java
  52. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailsendtaskitem/MailSendTaskItemServiceImpl.java
  53. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/roleworkstation/RoleWorkstationService.java
  54. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/roleworkstation/RoleWorkstationServiceImpl.java
  55. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/usercharacteristic/UserCharacteristicService.java
  56. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/usercharacteristic/UserCharacteristicServiceImpl.java
  57. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/BlacklistMapper.xml
  58. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/ExceptionMapper.xml
  59. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/ExceptionMisplaceMapper.xml
  60. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/MailNotifyConfigMapper.xml
  61. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/MailSendTaskItemMapper.xml
  62. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/RoleWorkstationMapper.xml
  63. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/UserCharacteristicMapper.xml

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/BlacklistController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.blacklist;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.blacklist.BlacklistDO;
+import cn.iocoder.yudao.module.iscs.service.blacklist.BlacklistService;
+
+@Tag(name = "管理后台 - 黑名单关联")
+@RestController
+@RequestMapping("/iscs/blacklist")
+@Validated
+public class BlacklistController {
+
+    @Resource
+    private BlacklistService blacklistService;
+
+    @PostMapping("/insertBlacklist")
+    @Operation(summary = "创建黑名单关联")
+    @PreAuthorize("@ss.hasPermission('iscs:blacklist:create')")
+    public CommonResult<Long> insertBlacklist(@Valid @RequestBody BlacklistSaveReqVO createReqVO) {
+        return success(blacklistService.createBlacklist(createReqVO));
+    }
+
+    @PutMapping("/updateBlacklist")
+    @Operation(summary = "更新黑名单关联")
+    @PreAuthorize("@ss.hasPermission('iscs:blacklist:update')")
+    public CommonResult<Boolean> updateBlacklist(@Valid @RequestBody BlacklistSaveReqVO updateReqVO) {
+        blacklistService.updateBlacklist(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteBlacklistList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除黑名单关联")
+                @PreAuthorize("@ss.hasPermission('iscs:blacklist:delete')")
+    public CommonResult<Boolean> deleteBlacklistList(@RequestParam("ids") List<Long> ids) {
+        blacklistService.deleteBlacklistListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectBlacklistById")
+    @Operation(summary = "获得黑名单关联")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:blacklist:query')")
+    public CommonResult<BlacklistRespVO> selectBlacklistById(@RequestParam("id") Long id) {
+        BlacklistDO blacklist = blacklistService.getBlacklist(id);
+        return success(BeanUtils.toBean(blacklist, BlacklistRespVO.class));
+    }
+
+    @GetMapping("/getBlacklistPage")
+    @Operation(summary = "获得黑名单关联分页")
+    @PreAuthorize("@ss.hasPermission('iscs:blacklist:query')")
+    public CommonResult<PageResult<BlacklistRespVO>> getBlacklistPage(@Valid BlacklistPageReqVO pageReqVO) {
+        PageResult<BlacklistDO> pageResult = blacklistService.getBlacklistPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, BlacklistRespVO.class));
+    }
+
+    @GetMapping("/exportBlacklistExcel")
+    @Operation(summary = "导出黑名单关联 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:blacklist:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportBlacklistExcel(@Valid BlacklistPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<BlacklistDO> list = blacklistService.getBlacklistPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "黑名单关联.xls", "数据", BlacklistRespVO.class,
+                        BeanUtils.toBean(list, BlacklistRespVO.class));
+    }
+
+}

+ 32 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistPageReqVO.java

@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 黑名单关联分页 Request VO")
+@Data
+public class BlacklistPageReqVO extends PageParam {
+
+    @Schema(description = "用户ID", example = "7311")
+    private Long userId;
+
+    @Schema(description = "模块")
+    private String module;
+
+    @Schema(description = "物资柜ID", example = "8570")
+    private Long cabinetId;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 39 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistRespVO.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 黑名单关联 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BlacklistRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15301")
+    @ExcelProperty("主键ID")
+    private Long id;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7311")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "模块")
+    @ExcelProperty("模块")
+    private String module;
+
+    @Schema(description = "物资柜ID", example = "8570")
+    @ExcelProperty("物资柜ID")
+    private Long cabinetId;
+
+    @Schema(description = "备注", example = "你说的对")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/blacklist/vo/BlacklistSaveReqVO.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 黑名单关联新增/修改 Request VO")
+@Data
+public class BlacklistSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15301")
+    private Long id;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7311")
+    @NotNull(message = "用户ID不能为空")
+    private Long userId;
+
+    @Schema(description = "模块")
+    private String module;
+
+    @Schema(description = "物资柜ID", example = "8570")
+    private Long cabinetId;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/ExceptionController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exception;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.exception.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exception.ExceptionDO;
+import cn.iocoder.yudao.module.iscs.service.exception.ExceptionService;
+
+@Tag(name = "管理后台 - 异常记录")
+@RestController
+@RequestMapping("/iscs/exception")
+@Validated
+public class ExceptionController {
+
+    @Resource
+    private ExceptionService exceptionService;
+
+    @PostMapping("/insertException")
+    @Operation(summary = "创建异常记录")
+    @PreAuthorize("@ss.hasPermission('iscs:exception:create')")
+    public CommonResult<Long> insertException(@Valid @RequestBody ExceptionSaveReqVO createReqVO) {
+        return success(exceptionService.createException(createReqVO));
+    }
+
+    @PutMapping("/updateException")
+    @Operation(summary = "更新异常记录")
+    @PreAuthorize("@ss.hasPermission('iscs:exception:update')")
+    public CommonResult<Boolean> updateException(@Valid @RequestBody ExceptionSaveReqVO updateReqVO) {
+        exceptionService.updateException(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteExceptionList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除异常记录")
+                @PreAuthorize("@ss.hasPermission('iscs:exception:delete')")
+    public CommonResult<Boolean> deleteExceptionList(@RequestParam("ids") List<Long> ids) {
+        exceptionService.deleteExceptionListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectExceptionById")
+    @Operation(summary = "获得异常记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:exception:query')")
+    public CommonResult<ExceptionRespVO> selectExceptionById(@RequestParam("id") Long id) {
+        ExceptionDO exception = exceptionService.getException(id);
+        return success(BeanUtils.toBean(exception, ExceptionRespVO.class));
+    }
+
+    @GetMapping("/getExceptionPage")
+    @Operation(summary = "获得异常记录分页")
+    @PreAuthorize("@ss.hasPermission('iscs:exception:query')")
+    public CommonResult<PageResult<ExceptionRespVO>> getExceptionPage(@Valid ExceptionPageReqVO pageReqVO) {
+        PageResult<ExceptionDO> pageResult = exceptionService.getExceptionPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ExceptionRespVO.class));
+    }
+
+    @GetMapping("/exportExceptionExcel")
+    @Operation(summary = "导出异常记录 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:exception:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportExceptionExcel(@Valid ExceptionPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ExceptionDO> list = exceptionService.getExceptionPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "异常记录.xls", "数据", ExceptionRespVO.class,
+                        BeanUtils.toBean(list, ExceptionRespVO.class));
+    }
+
+}

+ 55 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionPageReqVO.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exception.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 异常记录分页 Request VO")
+@Data
+public class ExceptionPageReqVO extends PageParam {
+
+    @Schema(description = "异常种类(1-锁控柜 2-物资柜)")
+    private String exceptionCategory;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "1")
+    private String exceptionType;
+
+    @Schema(description = "异常等级")
+    private String exceptionLevel;
+
+    @Schema(description = "异常描述", example = "随便")
+    private String exceptionDescription;
+
+    @Schema(description = "来源ID", example = "4696")
+    private Long sourceId;
+
+    @Schema(description = "异常发生时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] raiseTime;
+
+    @Schema(description = "引发人ID")
+    private Long raiser;
+
+    @Schema(description = "参数ID")
+    private Long parameters;
+
+    @Schema(description = "异常处理时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] handleTime;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "2")
+    private String status;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 67 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionRespVO.java

@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exception.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 异常记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ExceptionRespVO {
+
+    @Schema(description = "异常主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15940")
+    @ExcelProperty("异常主键ID")
+    private Long id;
+
+    @Schema(description = "异常种类(1-锁控柜 2-物资柜)")
+    @ExcelProperty("异常种类(1-锁控柜 2-物资柜)")
+    private String exceptionCategory;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "1")
+    @ExcelProperty("异常类型(字典exception_type)")
+    private String exceptionType;
+
+    @Schema(description = "异常等级")
+    @ExcelProperty("异常等级")
+    private String exceptionLevel;
+
+    @Schema(description = "异常描述", example = "随便")
+    @ExcelProperty("异常描述")
+    private String exceptionDescription;
+
+    @Schema(description = "来源ID", example = "4696")
+    @ExcelProperty("来源ID")
+    private Long sourceId;
+
+    @Schema(description = "异常发生时间")
+    @ExcelProperty("异常发生时间")
+    private LocalDateTime raiseTime;
+
+    @Schema(description = "引发人ID")
+    @ExcelProperty("引发人ID")
+    private Long raiser;
+
+    @Schema(description = "参数ID")
+    @ExcelProperty("参数ID")
+    private Long parameters;
+
+    @Schema(description = "异常处理时间")
+    @ExcelProperty("异常处理时间")
+    private LocalDateTime handleTime;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "2")
+    @ExcelProperty("状态(0-未处理 1-已处理)")
+    private String status;
+
+    @Schema(description = "备注", example = "你说的对")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 50 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exception/vo/ExceptionSaveReqVO.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exception.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 异常记录新增/修改 Request VO")
+@Data
+public class ExceptionSaveReqVO {
+
+    @Schema(description = "异常主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15940")
+    private Long id;
+
+    @Schema(description = "异常种类(1-锁控柜 2-物资柜)")
+    private String exceptionCategory;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "1")
+    private String exceptionType;
+
+    @Schema(description = "异常等级")
+    private String exceptionLevel;
+
+    @Schema(description = "异常描述", example = "随便")
+    private String exceptionDescription;
+
+    @Schema(description = "来源ID", example = "4696")
+    private Long sourceId;
+
+    @Schema(description = "异常发生时间")
+    private LocalDateTime raiseTime;
+
+    @Schema(description = "引发人ID")
+    private Long raiser;
+
+    @Schema(description = "参数ID")
+    private Long parameters;
+
+    @Schema(description = "异常处理时间")
+    private LocalDateTime handleTime;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "2")
+    private String status;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/ExceptionMisplaceController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace.ExceptionMisplaceDO;
+import cn.iocoder.yudao.module.iscs.service.exceptionmisplace.ExceptionMisplaceService;
+
+@Tag(name = "管理后台 - 物资归还异常")
+@RestController
+@RequestMapping("/iscs/exception-misplace")
+@Validated
+public class ExceptionMisplaceController {
+
+    @Resource
+    private ExceptionMisplaceService exceptionMisplaceService;
+
+    @PostMapping("/insertExceptionMisplace")
+    @Operation(summary = "创建物资归还异常")
+    @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:create')")
+    public CommonResult<Long> insertExceptionMisplace(@Valid @RequestBody ExceptionMisplaceSaveReqVO createReqVO) {
+        return success(exceptionMisplaceService.createExceptionMisplace(createReqVO));
+    }
+
+    @PutMapping("/updateExceptionMisplace")
+    @Operation(summary = "更新物资归还异常")
+    @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:update')")
+    public CommonResult<Boolean> updateExceptionMisplace(@Valid @RequestBody ExceptionMisplaceSaveReqVO updateReqVO) {
+        exceptionMisplaceService.updateExceptionMisplace(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteExceptionMisplaceList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除物资归还异常")
+                @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:delete')")
+    public CommonResult<Boolean> deleteExceptionMisplaceList(@RequestParam("ids") List<Long> ids) {
+        exceptionMisplaceService.deleteExceptionMisplaceListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectExceptionMisplaceById")
+    @Operation(summary = "获得物资归还异常")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:query')")
+    public CommonResult<ExceptionMisplaceRespVO> selectExceptionMisplaceById(@RequestParam("id") Long id) {
+        ExceptionMisplaceDO exceptionMisplace = exceptionMisplaceService.getExceptionMisplace(id);
+        return success(BeanUtils.toBean(exceptionMisplace, ExceptionMisplaceRespVO.class));
+    }
+
+    @GetMapping("/getExceptionMisplacePage")
+    @Operation(summary = "获得物资归还异常分页")
+    @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:query')")
+    public CommonResult<PageResult<ExceptionMisplaceRespVO>> getExceptionMisplacePage(@Valid ExceptionMisplacePageReqVO pageReqVO) {
+        PageResult<ExceptionMisplaceDO> pageResult = exceptionMisplaceService.getExceptionMisplacePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ExceptionMisplaceRespVO.class));
+    }
+
+    @GetMapping("/exportExceptionMisplaceExcel")
+    @Operation(summary = "导出物资归还异常 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:exception-misplace:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportExceptionMisplaceExcel(@Valid ExceptionMisplacePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ExceptionMisplaceDO> list = exceptionMisplaceService.getExceptionMisplacePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物资归还异常.xls", "数据", ExceptionMisplaceRespVO.class,
+                        BeanUtils.toBean(list, ExceptionMisplaceRespVO.class));
+    }
+
+}

+ 52 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplacePageReqVO.java

@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物资归还异常分页 Request VO")
+@Data
+public class ExceptionMisplacePageReqVO extends PageParam {
+
+    @Schema(description = "物资ID", example = "30106")
+    private Long materialsId;
+
+    @Schema(description = "出借主键ID", example = "13436")
+    private Long materialsLoanId;
+
+    @Schema(description = "物资所属柜ID", example = "21798")
+    private Long loanFromId;
+
+    @Schema(description = "归还人ID", example = "6104")
+    private Long restitutionUserId;
+
+    @Schema(description = "归还柜ID", example = "10131")
+    private Long restitutionToId;
+
+    @Schema(description = "异常处理时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] handleTime;
+
+    @Schema(description = "异常发生时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] occurTime;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "1")
+    private String status;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "2")
+    private String exceptionType;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplaceRespVO.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物资归还异常 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ExceptionMisplaceRespVO {
+
+    @Schema(description = "异常主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1449")
+    @ExcelProperty("异常主键ID")
+    private Long id;
+
+    @Schema(description = "物资ID", example = "30106")
+    @ExcelProperty("物资ID")
+    private Long materialsId;
+
+    @Schema(description = "出借主键ID", example = "13436")
+    @ExcelProperty("出借主键ID")
+    private Long materialsLoanId;
+
+    @Schema(description = "物资所属柜ID", example = "21798")
+    @ExcelProperty("物资所属柜ID")
+    private Long loanFromId;
+
+    @Schema(description = "归还人ID", example = "6104")
+    @ExcelProperty("归还人ID")
+    private Long restitutionUserId;
+
+    @Schema(description = "归还柜ID", example = "10131")
+    @ExcelProperty("归还柜ID")
+    private Long restitutionToId;
+
+    @Schema(description = "异常处理时间")
+    @ExcelProperty("异常处理时间")
+    private LocalDateTime handleTime;
+
+    @Schema(description = "异常发生时间")
+    @ExcelProperty("异常发生时间")
+    private LocalDateTime occurTime;
+
+    @Schema(description = "备注", example = "随便")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "1")
+    @ExcelProperty("状态(0-未处理 1-已处理)")
+    private String status;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "2")
+    @ExcelProperty("异常类型(字典exception_type)")
+    private String exceptionType;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 47 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/exceptionmisplace/vo/ExceptionMisplaceSaveReqVO.java

@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 物资归还异常新增/修改 Request VO")
+@Data
+public class ExceptionMisplaceSaveReqVO {
+
+    @Schema(description = "异常主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1449")
+    private Long id;
+
+    @Schema(description = "物资ID", example = "30106")
+    private Long materialsId;
+
+    @Schema(description = "出借主键ID", example = "13436")
+    private Long materialsLoanId;
+
+    @Schema(description = "物资所属柜ID", example = "21798")
+    private Long loanFromId;
+
+    @Schema(description = "归还人ID", example = "6104")
+    private Long restitutionUserId;
+
+    @Schema(description = "归还柜ID", example = "10131")
+    private Long restitutionToId;
+
+    @Schema(description = "异常处理时间")
+    private LocalDateTime handleTime;
+
+    @Schema(description = "异常发生时间")
+    private LocalDateTime occurTime;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0-未处理 1-已处理)", example = "1")
+    private String status;
+
+    @Schema(description = "异常类型(字典exception_type)", example = "2")
+    private String exceptionType;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/MailNotifyConfigController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig.MailNotifyConfigDO;
+import cn.iocoder.yudao.module.iscs.service.mailnotifyconfig.MailNotifyConfigService;
+
+@Tag(name = "管理后台 - 系统邮件提醒周期配置")
+@RestController
+@RequestMapping("/iscs/mail-notify-config")
+@Validated
+public class MailNotifyConfigController {
+
+    @Resource
+    private MailNotifyConfigService mailNotifyConfigService;
+
+    @PostMapping("/insertMailNotifyConfig")
+    @Operation(summary = "创建系统邮件提醒周期配置")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:create')")
+    public CommonResult<Long> insertMailNotifyConfig(@Valid @RequestBody MailNotifyConfigSaveReqVO createReqVO) {
+        return success(mailNotifyConfigService.createMailNotifyConfig(createReqVO));
+    }
+
+    @PutMapping("/updateMailNotifyConfig")
+    @Operation(summary = "更新系统邮件提醒周期配置")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:update')")
+    public CommonResult<Boolean> updateMailNotifyConfig(@Valid @RequestBody MailNotifyConfigSaveReqVO updateReqVO) {
+        mailNotifyConfigService.updateMailNotifyConfig(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteMailNotifyConfigList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除系统邮件提醒周期配置")
+                @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:delete')")
+    public CommonResult<Boolean> deleteMailNotifyConfigList(@RequestParam("ids") List<Long> ids) {
+        mailNotifyConfigService.deleteMailNotifyConfigListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectMailNotifyConfigById")
+    @Operation(summary = "获得系统邮件提醒周期配置")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:query')")
+    public CommonResult<MailNotifyConfigRespVO> selectMailNotifyConfigById(@RequestParam("id") Long id) {
+        MailNotifyConfigDO mailNotifyConfig = mailNotifyConfigService.getMailNotifyConfig(id);
+        return success(BeanUtils.toBean(mailNotifyConfig, MailNotifyConfigRespVO.class));
+    }
+
+    @GetMapping("/getMailNotifyConfigPage")
+    @Operation(summary = "获得系统邮件提醒周期配置分页")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:query')")
+    public CommonResult<PageResult<MailNotifyConfigRespVO>> getMailNotifyConfigPage(@Valid MailNotifyConfigPageReqVO pageReqVO) {
+        PageResult<MailNotifyConfigDO> pageResult = mailNotifyConfigService.getMailNotifyConfigPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MailNotifyConfigRespVO.class));
+    }
+
+    @GetMapping("/exportMailNotifyConfigExcel")
+    @Operation(summary = "导出系统邮件提醒周期配置 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-notify-config:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMailNotifyConfigExcel(@Valid MailNotifyConfigPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MailNotifyConfigDO> list = mailNotifyConfigService.getMailNotifyConfigPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "系统邮件提醒周期配置.xls", "数据", MailNotifyConfigRespVO.class,
+                        BeanUtils.toBean(list, MailNotifyConfigRespVO.class));
+    }
+
+}

+ 49 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigPageReqVO.java

@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 系统邮件提醒周期配置分页 Request VO")
+@Data
+public class MailNotifyConfigPageReqVO extends PageParam {
+
+    @Schema(description = "配置名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "邮件模版编号")
+    private String templateCode;
+
+    @Schema(description = "提醒时长")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private Integer[] reminderTime;
+
+    @Schema(description = "模版备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0-未激活 1-已激活)", example = "1")
+    private String status;
+
+    @Schema(description = "计划频率")
+    private String planFrequency;
+
+    @Schema(description = "计划日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] planDate;
+
+    @Schema(description = "启动状态(0-未启动 1-启动)", example = "1")
+    private String startStatus;
+
+    @Schema(description = "检察员", example = "26355")
+    private Long checkUserId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 59 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigRespVO.java

@@ -0,0 +1,59 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 系统邮件提醒周期配置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MailNotifyConfigRespVO {
+
+    @Schema(description = "配置id主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2439")
+    @ExcelProperty("配置id主键")
+    private Long id;
+
+    @Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @ExcelProperty("配置名称")
+    private String name;
+
+    @Schema(description = "邮件模版编号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("邮件模版编号")
+    private String templateCode;
+
+    @Schema(description = "提醒时长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("提醒时长")
+    private Integer reminderTime;
+
+    @Schema(description = "模版备注", example = "随便")
+    @ExcelProperty("模版备注")
+    private String remark;
+
+    @Schema(description = "状态(0-未激活 1-已激活)", example = "1")
+    @ExcelProperty("状态(0-未激活 1-已激活)")
+    private String status;
+
+    @Schema(description = "计划频率")
+    @ExcelProperty("计划频率")
+    private String planFrequency;
+
+    @Schema(description = "计划日期")
+    @ExcelProperty("计划日期")
+    private String planDate;
+
+    @Schema(description = "启动状态(0-未启动 1-启动)", example = "1")
+    @ExcelProperty("启动状态(0-未启动 1-启动)")
+    private String startStatus;
+
+    @Schema(description = "检察员", example = "26355")
+    @ExcelProperty("检察员")
+    private Long checkUserId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 45 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailnotifyconfig/vo/MailNotifyConfigSaveReqVO.java

@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 系统邮件提醒周期配置新增/修改 Request VO")
+@Data
+public class MailNotifyConfigSaveReqVO {
+
+    @Schema(description = "配置id主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2439")
+    private Long id;
+
+    @Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @NotEmpty(message = "配置名称不能为空")
+    private String name;
+
+    @Schema(description = "邮件模版编号", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "邮件模版编号不能为空")
+    private String templateCode;
+
+    @Schema(description = "提醒时长", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "提醒时长不能为空")
+    private Integer reminderTime;
+
+    @Schema(description = "模版备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0-未激活 1-已激活)", example = "1")
+    private String status;
+
+    @Schema(description = "计划频率")
+    private String planFrequency;
+
+    @Schema(description = "计划日期")
+    private String planDate;
+
+    @Schema(description = "启动状态(0-未启动 1-启动)", example = "1")
+    private String startStatus;
+
+    @Schema(description = "检察员", example = "26355")
+    private Long checkUserId;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/MailSendTaskItemController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem.MailSendTaskItemDO;
+import cn.iocoder.yudao.module.iscs.service.mailsendtaskitem.MailSendTaskItemService;
+
+@Tag(name = "管理后台 - 系统邮件任务")
+@RestController
+@RequestMapping("/iscs/mail-send-task-item")
+@Validated
+public class MailSendTaskItemController {
+
+    @Resource
+    private MailSendTaskItemService mailSendTaskItemService;
+
+    @PostMapping("/insertMailSendTaskItem")
+    @Operation(summary = "创建系统邮件任务")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:create')")
+    public CommonResult<Long> insertMailSendTaskItem(@Valid @RequestBody MailSendTaskItemSaveReqVO createReqVO) {
+        return success(mailSendTaskItemService.createMailSendTaskItem(createReqVO));
+    }
+
+    @PutMapping("/updateMailSendTaskItem")
+    @Operation(summary = "更新系统邮件任务")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:update')")
+    public CommonResult<Boolean> updateMailSendTaskItem(@Valid @RequestBody MailSendTaskItemSaveReqVO updateReqVO) {
+        mailSendTaskItemService.updateMailSendTaskItem(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteMailSendTaskItemList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除系统邮件任务")
+                @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:delete')")
+    public CommonResult<Boolean> deleteMailSendTaskItemList(@RequestParam("ids") List<Long> ids) {
+        mailSendTaskItemService.deleteMailSendTaskItemListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectMailSendTaskItemById")
+    @Operation(summary = "获得系统邮件任务")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:query')")
+    public CommonResult<MailSendTaskItemRespVO> selectMailSendTaskItemById(@RequestParam("id") Long id) {
+        MailSendTaskItemDO mailSendTaskItem = mailSendTaskItemService.getMailSendTaskItem(id);
+        return success(BeanUtils.toBean(mailSendTaskItem, MailSendTaskItemRespVO.class));
+    }
+
+    @GetMapping("/getMailSendTaskItemPage")
+    @Operation(summary = "获得系统邮件任务分页")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:query')")
+    public CommonResult<PageResult<MailSendTaskItemRespVO>> getMailSendTaskItemPage(@Valid MailSendTaskItemPageReqVO pageReqVO) {
+        PageResult<MailSendTaskItemDO> pageResult = mailSendTaskItemService.getMailSendTaskItemPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MailSendTaskItemRespVO.class));
+    }
+
+    @GetMapping("/exportMailSendTaskItemExcel")
+    @Operation(summary = "导出系统邮件任务 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:mail-send-task-item:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMailSendTaskItemExcel(@Valid MailSendTaskItemPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MailSendTaskItemDO> list = mailSendTaskItemService.getMailSendTaskItemPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "系统邮件任务.xls", "数据", MailSendTaskItemRespVO.class,
+                        BeanUtils.toBean(list, MailSendTaskItemRespVO.class));
+    }
+
+}

+ 56 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemPageReqVO.java

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 系统邮件任务分页 Request VO")
+@Data
+public class MailSendTaskItemPageReqVO extends PageParam {
+
+    @Schema(description = "接收邮件用户id", example = "11260")
+    private Long sendToUserId;
+
+    @Schema(description = "模版编码", example = "7218")
+    private Long emailTemplateId;
+
+    @Schema(description = "标题")
+    private String title;
+
+    @Schema(description = "内容")
+    private String content;
+
+    @Schema(description = "实际发送时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] sendTime;
+
+    @Schema(description = "计划发送时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] scheduledSendTime;
+
+    @Schema(description = "所属计划id", example = "17158")
+    private Long belongId;
+
+    @Schema(description = "发送状态(0-未发送 1-已发送)", example = "1")
+    private Integer sendStatus;
+
+    @Schema(description = "取消状态(0-未取消 1-已取消 2-缺失邮箱取消 3-发送时未知异常取消)")
+    private Integer isCancelled;
+
+    @Schema(description = "取消时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] cancelTime;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 67 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemRespVO.java

@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 系统邮件任务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MailSendTaskItemRespVO {
+
+    @Schema(description = "id主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28002")
+    @ExcelProperty("id主键")
+    private Long id;
+
+    @Schema(description = "接收邮件用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11260")
+    @ExcelProperty("接收邮件用户id")
+    private Long sendToUserId;
+
+    @Schema(description = "模版编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "7218")
+    @ExcelProperty("模版编码")
+    private Long emailTemplateId;
+
+    @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("标题")
+    private String title;
+
+    @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("内容")
+    private String content;
+
+    @Schema(description = "实际发送时间")
+    @ExcelProperty("实际发送时间")
+    private LocalDateTime sendTime;
+
+    @Schema(description = "计划发送时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("计划发送时间")
+    private LocalDateTime scheduledSendTime;
+
+    @Schema(description = "所属计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17158")
+    @ExcelProperty("所属计划id")
+    private Long belongId;
+
+    @Schema(description = "发送状态(0-未发送 1-已发送)", example = "1")
+    @ExcelProperty("发送状态(0-未发送 1-已发送)")
+    private Integer sendStatus;
+
+    @Schema(description = "取消状态(0-未取消 1-已取消 2-缺失邮箱取消 3-发送时未知异常取消)")
+    @ExcelProperty("取消状态(0-未取消 1-已取消 2-缺失邮箱取消 3-发送时未知异常取消)")
+    private Integer isCancelled;
+
+    @Schema(description = "取消时间")
+    @ExcelProperty("取消时间")
+    private LocalDateTime cancelTime;
+
+    @Schema(description = "备注", example = "你猜")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 56 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/mailsendtaskitem/vo/MailSendTaskItemSaveReqVO.java

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 系统邮件任务新增/修改 Request VO")
+@Data
+public class MailSendTaskItemSaveReqVO {
+
+    @Schema(description = "id主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28002")
+    private Long id;
+
+    @Schema(description = "接收邮件用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11260")
+    @NotNull(message = "接收邮件用户id不能为空")
+    private Long sendToUserId;
+
+    @Schema(description = "模版编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "7218")
+    @NotNull(message = "模版编码不能为空")
+    private Long emailTemplateId;
+
+    @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "标题不能为空")
+    private String title;
+
+    @Schema(description = "内容", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "内容不能为空")
+    private String content;
+
+    @Schema(description = "实际发送时间")
+    private LocalDateTime sendTime;
+
+    @Schema(description = "计划发送时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "计划发送时间不能为空")
+    private LocalDateTime scheduledSendTime;
+
+    @Schema(description = "所属计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17158")
+    @NotNull(message = "所属计划id不能为空")
+    private Long belongId;
+
+    @Schema(description = "发送状态(0-未发送 1-已发送)", example = "1")
+    private Integer sendStatus;
+
+    @Schema(description = "取消状态(0-未取消 1-已取消 2-缺失邮箱取消 3-发送时未知异常取消)")
+    private Integer isCancelled;
+
+    @Schema(description = "取消时间")
+    private LocalDateTime cancelTime;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/RoleWorkstationController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.roleworkstation.RoleWorkstationDO;
+import cn.iocoder.yudao.module.iscs.service.roleworkstation.RoleWorkstationService;
+
+@Tag(name = "管理后台 - 角色和岗位关联")
+@RestController
+@RequestMapping("/iscs/role-workstation")
+@Validated
+public class RoleWorkstationController {
+
+    @Resource
+    private RoleWorkstationService roleWorkstationService;
+
+    @PostMapping("/insertRoleWorkstation")
+    @Operation(summary = "创建角色和岗位关联")
+    @PreAuthorize("@ss.hasPermission('iscs:role-workstation:create')")
+    public CommonResult<Long> insertRoleWorkstation(@Valid @RequestBody RoleWorkstationSaveReqVO createReqVO) {
+        return success(roleWorkstationService.createRoleWorkstation(createReqVO));
+    }
+
+    @PutMapping("/updateRoleWorkstation")
+    @Operation(summary = "更新角色和岗位关联")
+    @PreAuthorize("@ss.hasPermission('iscs:role-workstation:update')")
+    public CommonResult<Boolean> updateRoleWorkstation(@Valid @RequestBody RoleWorkstationSaveReqVO updateReqVO) {
+        roleWorkstationService.updateRoleWorkstation(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteRoleWorkstationList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除角色和岗位关联")
+                @PreAuthorize("@ss.hasPermission('iscs:role-workstation:delete')")
+    public CommonResult<Boolean> deleteRoleWorkstationList(@RequestParam("ids") List<Long> ids) {
+        roleWorkstationService.deleteRoleWorkstationListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectRoleWorkstationById")
+    @Operation(summary = "获得角色和岗位关联")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:role-workstation:query')")
+    public CommonResult<RoleWorkstationRespVO> selectRoleWorkstationById(@RequestParam("id") Long id) {
+        RoleWorkstationDO roleWorkstation = roleWorkstationService.getRoleWorkstation(id);
+        return success(BeanUtils.toBean(roleWorkstation, RoleWorkstationRespVO.class));
+    }
+
+    @GetMapping("/getRoleWorkstationPage")
+    @Operation(summary = "获得角色和岗位关联分页")
+    @PreAuthorize("@ss.hasPermission('iscs:role-workstation:query')")
+    public CommonResult<PageResult<RoleWorkstationRespVO>> getRoleWorkstationPage(@Valid RoleWorkstationPageReqVO pageReqVO) {
+        PageResult<RoleWorkstationDO> pageResult = roleWorkstationService.getRoleWorkstationPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, RoleWorkstationRespVO.class));
+    }
+
+    @GetMapping("/exportRoleWorkstationExcel")
+    @Operation(summary = "导出角色和岗位关联 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:role-workstation:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRoleWorkstationExcel(@Valid RoleWorkstationPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<RoleWorkstationDO> list = roleWorkstationService.getRoleWorkstationPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "角色和岗位关联.xls", "数据", RoleWorkstationRespVO.class,
+                        BeanUtils.toBean(list, RoleWorkstationRespVO.class));
+    }
+
+}

+ 20 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationPageReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 角色和岗位关联分页 Request VO")
+@Data
+public class RoleWorkstationPageReqVO extends PageParam {
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 27 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationRespVO.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 角色和岗位关联 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class RoleWorkstationRespVO {
+
+    @Schema(description = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19019")
+    @ExcelProperty("角色ID")
+    private Long roleId;
+
+    @Schema(description = "部门ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20776")
+    @ExcelProperty("部门ID")
+    private Long workstationId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 18 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/roleworkstation/vo/RoleWorkstationSaveReqVO.java

@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 角色和岗位关联新增/修改 Request VO")
+@Data
+public class RoleWorkstationSaveReqVO {
+
+    @Schema(description = "角色ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19019")
+    private Long roleId;
+
+    @Schema(description = "部门ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20776")
+    private Long workstationId;
+
+}

+ 95 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/UserCharacteristicController.java

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.usercharacteristic.UserCharacteristicDO;
+import cn.iocoder.yudao.module.iscs.service.usercharacteristic.UserCharacteristicService;
+
+@Tag(name = "管理后台 - 用户特征表(指纹、面部)")
+@RestController
+@RequestMapping("/iscs/user-characteristic")
+@Validated
+public class UserCharacteristicController {
+
+    @Resource
+    private UserCharacteristicService userCharacteristicService;
+
+    @PostMapping("/insertUserCharacteristic")
+    @Operation(summary = "创建用户特征表(指纹、面部)")
+    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:create')")
+    public CommonResult<Long> insertUserCharacteristic(@Valid @RequestBody UserCharacteristicSaveReqVO createReqVO) {
+        return success(userCharacteristicService.createUserCharacteristic(createReqVO));
+    }
+
+    @PutMapping("/updateUserCharacteristic")
+    @Operation(summary = "更新用户特征表(指纹、面部)")
+    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:update')")
+    public CommonResult<Boolean> updateUserCharacteristic(@Valid @RequestBody UserCharacteristicSaveReqVO updateReqVO) {
+        userCharacteristicService.updateUserCharacteristic(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteUserCharacteristicList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除用户特征表(指纹、面部)")
+                @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:delete')")
+    public CommonResult<Boolean> deleteUserCharacteristicList(@RequestParam("ids") List<Long> ids) {
+        userCharacteristicService.deleteUserCharacteristicListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectUserCharacteristicById")
+    @Operation(summary = "获得用户特征表(指纹、面部)")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:query')")
+    public CommonResult<UserCharacteristicRespVO> selectUserCharacteristicById(@RequestParam("id") Long id) {
+        UserCharacteristicDO userCharacteristic = userCharacteristicService.getUserCharacteristic(id);
+        return success(BeanUtils.toBean(userCharacteristic, UserCharacteristicRespVO.class));
+    }
+
+    @GetMapping("/getUserCharacteristicPage")
+    @Operation(summary = "获得用户特征表(指纹、面部)分页")
+    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:query')")
+    public CommonResult<PageResult<UserCharacteristicRespVO>> getUserCharacteristicPage(@Valid UserCharacteristicPageReqVO pageReqVO) {
+        PageResult<UserCharacteristicDO> pageResult = userCharacteristicService.getUserCharacteristicPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserCharacteristicRespVO.class));
+    }
+
+    @GetMapping("/exportUserCharacteristicExcel")
+    @Operation(summary = "导出用户特征表(指纹、面部) Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:user-characteristic:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportUserCharacteristicExcel(@Valid UserCharacteristicPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<UserCharacteristicDO> list = userCharacteristicService.getUserCharacteristicPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用户特征表(指纹、面部).xls", "数据", UserCharacteristicRespVO.class,
+                        BeanUtils.toBean(list, UserCharacteristicRespVO.class));
+    }
+
+}

+ 53 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicPageReqVO.java

@@ -0,0 +1,53 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 用户特征表(指纹、面部)分页 Request VO")
+@Data
+public class UserCharacteristicPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "25805")
+    private Long userId;
+
+    @Schema(description = "类型(1-指纹图片 2-面部图片)", example = "2")
+    private String type;
+
+    @Schema(description = "内容(指纹特征值)")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    private String imageUrl;
+
+    @Schema(description = "图片路径")
+    private String imagePath;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "排序")
+    private Integer orderNum;
+
+    @Schema(description = "直方图rows")
+    private Integer matRows;
+
+    @Schema(description = "直方图cols")
+    private Integer matCols;
+
+    @Schema(description = "直方图type", example = "1")
+    private Integer matType;
+
+    @Schema(description = "直方图数据")
+    private String matData;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 67 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicRespVO.java

@@ -0,0 +1,67 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 用户特征表(指纹、面部) Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class UserCharacteristicRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23456")
+    @ExcelProperty("主键ID")
+    private Long id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25805")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "类型(1-指纹图片 2-面部图片)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("类型(1-指纹图片 2-面部图片)")
+    private String type;
+
+    @Schema(description = "内容(指纹特征值)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("内容(指纹特征值)")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    @ExcelProperty("图片地址")
+    private String imageUrl;
+
+    @Schema(description = "图片路径")
+    @ExcelProperty("图片路径")
+    private String imagePath;
+
+    @Schema(description = "备注", example = "随便")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "排序")
+    @ExcelProperty("排序")
+    private Integer orderNum;
+
+    @Schema(description = "直方图rows")
+    @ExcelProperty("直方图rows")
+    private Integer matRows;
+
+    @Schema(description = "直方图cols")
+    @ExcelProperty("直方图cols")
+    private Integer matCols;
+
+    @Schema(description = "直方图type", example = "1")
+    @ExcelProperty("直方图type")
+    private Integer matType;
+
+    @Schema(description = "直方图数据")
+    @ExcelProperty("直方图数据")
+    private String matData;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 51 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/usercharacteristic/vo/UserCharacteristicSaveReqVO.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 用户特征表(指纹、面部)新增/修改 Request VO")
+@Data
+public class UserCharacteristicSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23456")
+    private Long id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25805")
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    @Schema(description = "类型(1-指纹图片 2-面部图片)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotEmpty(message = "类型(1-指纹图片 2-面部图片)不能为空")
+    private String type;
+
+    @Schema(description = "内容(指纹特征值)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "内容(指纹特征值)不能为空")
+    private String content;
+
+    @Schema(description = "图片地址", example = "https://www.iocoder.cn")
+    private String imageUrl;
+
+    @Schema(description = "图片路径")
+    private String imagePath;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "排序")
+    private Integer orderNum;
+
+    @Schema(description = "直方图rows")
+    private Integer matRows;
+
+    @Schema(description = "直方图cols")
+    private Integer matCols;
+
+    @Schema(description = "直方图type", example = "1")
+    private Integer matType;
+
+    @Schema(description = "直方图数据")
+    private String matData;
+
+}

+ 48 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/blacklist/BlacklistDO.java

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.blacklist;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 黑名单关联 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_blacklist")
+@KeySequence("sys_blacklist_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BlacklistDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 模块
+     */
+    private String module;
+    /**
+     * 物资柜ID
+     */
+    private Long cabinetId;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 78 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/exception/ExceptionDO.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.exception;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 异常记录 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_exception")
+@KeySequence("sys_exception_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExceptionDO extends BaseDO {
+
+    /**
+     * 异常主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 异常种类(1-锁控柜 2-物资柜)
+     */
+    private String exceptionCategory;
+    /**
+     * 异常类型(字典exception_type)
+     */
+    private String exceptionType;
+    /**
+     * 异常等级
+     */
+    private String exceptionLevel;
+    /**
+     * 异常描述
+     */
+    private String exceptionDescription;
+    /**
+     * 来源ID
+     */
+    private Long sourceId;
+    /**
+     * 异常发生时间
+     */
+    private LocalDateTime raiseTime;
+    /**
+     * 引发人ID
+     */
+    private Long raiser;
+    /**
+     * 参数ID
+     */
+    private Long parameters;
+    /**
+     * 异常处理时间
+     */
+    private LocalDateTime handleTime;
+    /**
+     * 状态(0-未处理 1-已处理)
+     */
+    private String status;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 74 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/exceptionmisplace/ExceptionMisplaceDO.java

@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 物资归还异常 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_exception_misplace")
+@KeySequence("sys_exception_misplace_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ExceptionMisplaceDO extends BaseDO {
+
+    /**
+     * 异常主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 物资ID
+     */
+    private Long materialsId;
+    /**
+     * 出借主键ID
+     */
+    private Long materialsLoanId;
+    /**
+     * 物资所属柜ID
+     */
+    private Long loanFromId;
+    /**
+     * 归还人ID
+     */
+    private Long restitutionUserId;
+    /**
+     * 归还柜ID
+     */
+    private Long restitutionToId;
+    /**
+     * 异常处理时间
+     */
+    private LocalDateTime handleTime;
+    /**
+     * 异常发生时间
+     */
+    private LocalDateTime occurTime;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态(0-未处理 1-已处理)
+     */
+    private String status;
+    /**
+     * 异常类型(字典exception_type)
+     */
+    private String exceptionType;
+
+
+}

+ 68 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mailnotifyconfig/MailNotifyConfigDO.java

@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 系统邮件提醒周期配置 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_mail_notify_config")
+@KeySequence("sys_mail_notify_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MailNotifyConfigDO extends BaseDO {
+
+    /**
+     * 配置id主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 配置名称
+     */
+    private String name;
+    /**
+     * 邮件模版编号
+     */
+    private String templateCode;
+    /**
+     * 提醒时长
+     */
+    private Integer reminderTime;
+    /**
+     * 模版备注
+     */
+    private String remark;
+    /**
+     * 状态(0-未激活 1-已激活)
+     */
+    private String status;
+    /**
+     * 计划频率
+     */
+    private String planFrequency;
+    /**
+     * 计划日期
+     */
+    private String planDate;
+    /**
+     * 启动状态(0-未启动 1-启动)
+     */
+    private String startStatus;
+    /**
+     * 检察员
+     */
+    private Long checkUserId;
+
+
+}

+ 79 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/mailsendtaskitem/MailSendTaskItemDO.java

@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 系统邮件任务 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_mail_send_task_item")
+@KeySequence("sys_mail_send_task_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MailSendTaskItemDO extends BaseDO {
+
+    /**
+     * id主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 接收邮件用户id
+     */
+    private Long sendToUserId;
+    /**
+     * 模版编码
+     */
+    private Long emailTemplateId;
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 实际发送时间
+     */
+    private LocalDateTime sendTime;
+    /**
+     * 计划发送时间
+     */
+    private LocalDateTime scheduledSendTime;
+    /**
+     * 所属计划id
+     */
+    private Long belongId;
+    /**
+     * 发送状态(0-未发送 1-已发送)
+     */
+    private Integer sendStatus;
+    /**
+     * 取消状态(0-未取消 1-已取消 2-缺失邮箱取消 3-发送时未知异常取消)
+     */
+    private Integer isCancelled;
+    /**
+     * 取消时间
+     */
+    private LocalDateTime cancelTime;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 33 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/roleworkstation/RoleWorkstationDO.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.roleworkstation;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 角色和岗位关联 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_role_workstation")
+@KeySequence("sys_role_workstation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class RoleWorkstationDO extends BaseDO {
+
+    /**
+     * 角色ID
+     */
+    private Long roleId;
+    /**
+     * 部门ID
+     */
+    private Long workstationId;
+
+
+}

+ 76 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/usercharacteristic/UserCharacteristicDO.java

@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.usercharacteristic;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 用户特征表(指纹、面部) DO
+ *
+ * @author 芋道源码
+ */
+@TableName("sys_user_characteristic")
+@KeySequence("sys_user_characteristic_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserCharacteristicDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 类型(1-指纹图片 2-面部图片)
+     */
+    private String type;
+    /**
+     * 内容(指纹特征值)
+     */
+    private String content;
+    /**
+     * 图片地址
+     */
+    private String imageUrl;
+    /**
+     * 图片路径
+     */
+    private String imagePath;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 排序
+     */
+    private Integer orderNum;
+    /**
+     * 直方图rows
+     */
+    private Integer matRows;
+    /**
+     * 直方图cols
+     */
+    private Integer matCols;
+    /**
+     * 直方图type
+     */
+    private Integer matType;
+    /**
+     * 直方图数据
+     */
+    private String matData;
+
+
+}

+ 30 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/blacklist/BlacklistMapper.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.blacklist;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.blacklist.BlacklistDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo.*;
+
+/**
+ * 黑名单关联 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface BlacklistMapper extends BaseMapperX<BlacklistDO> {
+
+    default PageResult<BlacklistDO> selectPage(BlacklistPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<BlacklistDO>()
+                .eqIfPresent(BlacklistDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(BlacklistDO::getModule, reqVO.getModule())
+                .eqIfPresent(BlacklistDO::getCabinetId, reqVO.getCabinetId())
+                .eqIfPresent(BlacklistDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(BlacklistDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(BlacklistDO::getId));
+    }
+
+}

+ 37 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/exception/ExceptionMapper.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.exception;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exception.ExceptionDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.exception.vo.*;
+
+/**
+ * 异常记录 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface ExceptionMapper extends BaseMapperX<ExceptionDO> {
+
+    default PageResult<ExceptionDO> selectPage(ExceptionPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ExceptionDO>()
+                .eqIfPresent(ExceptionDO::getExceptionCategory, reqVO.getExceptionCategory())
+                .eqIfPresent(ExceptionDO::getExceptionType, reqVO.getExceptionType())
+                .eqIfPresent(ExceptionDO::getExceptionLevel, reqVO.getExceptionLevel())
+                .eqIfPresent(ExceptionDO::getExceptionDescription, reqVO.getExceptionDescription())
+                .eqIfPresent(ExceptionDO::getSourceId, reqVO.getSourceId())
+                .betweenIfPresent(ExceptionDO::getRaiseTime, reqVO.getRaiseTime())
+                .eqIfPresent(ExceptionDO::getRaiser, reqVO.getRaiser())
+                .eqIfPresent(ExceptionDO::getParameters, reqVO.getParameters())
+                .betweenIfPresent(ExceptionDO::getHandleTime, reqVO.getHandleTime())
+                .eqIfPresent(ExceptionDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(ExceptionDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(ExceptionDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ExceptionDO::getId));
+    }
+
+}

+ 36 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/exceptionmisplace/ExceptionMisplaceMapper.java

@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.exceptionmisplace;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace.ExceptionMisplaceDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo.*;
+
+/**
+ * 物资归还异常 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface ExceptionMisplaceMapper extends BaseMapperX<ExceptionMisplaceDO> {
+
+    default PageResult<ExceptionMisplaceDO> selectPage(ExceptionMisplacePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ExceptionMisplaceDO>()
+                .eqIfPresent(ExceptionMisplaceDO::getMaterialsId, reqVO.getMaterialsId())
+                .eqIfPresent(ExceptionMisplaceDO::getMaterialsLoanId, reqVO.getMaterialsLoanId())
+                .eqIfPresent(ExceptionMisplaceDO::getLoanFromId, reqVO.getLoanFromId())
+                .eqIfPresent(ExceptionMisplaceDO::getRestitutionUserId, reqVO.getRestitutionUserId())
+                .eqIfPresent(ExceptionMisplaceDO::getRestitutionToId, reqVO.getRestitutionToId())
+                .betweenIfPresent(ExceptionMisplaceDO::getHandleTime, reqVO.getHandleTime())
+                .betweenIfPresent(ExceptionMisplaceDO::getOccurTime, reqVO.getOccurTime())
+                .eqIfPresent(ExceptionMisplaceDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(ExceptionMisplaceDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(ExceptionMisplaceDO::getExceptionType, reqVO.getExceptionType())
+                .betweenIfPresent(ExceptionMisplaceDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ExceptionMisplaceDO::getId));
+    }
+
+}

+ 35 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/mailnotifyconfig/MailNotifyConfigMapper.java

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.mailnotifyconfig;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig.MailNotifyConfigDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo.*;
+
+/**
+ * 系统邮件提醒周期配置 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface MailNotifyConfigMapper extends BaseMapperX<MailNotifyConfigDO> {
+
+    default PageResult<MailNotifyConfigDO> selectPage(MailNotifyConfigPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MailNotifyConfigDO>()
+                .likeIfPresent(MailNotifyConfigDO::getName, reqVO.getName())
+                .eqIfPresent(MailNotifyConfigDO::getTemplateCode, reqVO.getTemplateCode())
+                .betweenIfPresent(MailNotifyConfigDO::getReminderTime, reqVO.getReminderTime())
+                .eqIfPresent(MailNotifyConfigDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(MailNotifyConfigDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(MailNotifyConfigDO::getPlanFrequency, reqVO.getPlanFrequency())
+                .betweenIfPresent(MailNotifyConfigDO::getPlanDate, reqVO.getPlanDate())
+                .eqIfPresent(MailNotifyConfigDO::getStartStatus, reqVO.getStartStatus())
+                .eqIfPresent(MailNotifyConfigDO::getCheckUserId, reqVO.getCheckUserId())
+                .betweenIfPresent(MailNotifyConfigDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(MailNotifyConfigDO::getId));
+    }
+
+}

+ 37 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/mailsendtaskitem/MailSendTaskItemMapper.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.mailsendtaskitem;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem.MailSendTaskItemDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo.*;
+
+/**
+ * 系统邮件任务 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface MailSendTaskItemMapper extends BaseMapperX<MailSendTaskItemDO> {
+
+    default PageResult<MailSendTaskItemDO> selectPage(MailSendTaskItemPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MailSendTaskItemDO>()
+                .eqIfPresent(MailSendTaskItemDO::getSendToUserId, reqVO.getSendToUserId())
+                .eqIfPresent(MailSendTaskItemDO::getEmailTemplateId, reqVO.getEmailTemplateId())
+                .eqIfPresent(MailSendTaskItemDO::getTitle, reqVO.getTitle())
+                .eqIfPresent(MailSendTaskItemDO::getContent, reqVO.getContent())
+                .betweenIfPresent(MailSendTaskItemDO::getSendTime, reqVO.getSendTime())
+                .betweenIfPresent(MailSendTaskItemDO::getScheduledSendTime, reqVO.getScheduledSendTime())
+                .eqIfPresent(MailSendTaskItemDO::getBelongId, reqVO.getBelongId())
+                .eqIfPresent(MailSendTaskItemDO::getSendStatus, reqVO.getSendStatus())
+                .eqIfPresent(MailSendTaskItemDO::getIsCancelled, reqVO.getIsCancelled())
+                .betweenIfPresent(MailSendTaskItemDO::getCancelTime, reqVO.getCancelTime())
+                .eqIfPresent(MailSendTaskItemDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(MailSendTaskItemDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(MailSendTaskItemDO::getId));
+    }
+
+}

+ 23 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/roleworkstation/RoleWorkstationMapper.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.roleworkstation;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo.RoleWorkstationPageReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.roleworkstation.RoleWorkstationDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 角色和岗位关联 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface RoleWorkstationMapper extends BaseMapperX<RoleWorkstationDO> {
+
+    default PageResult<RoleWorkstationDO> selectPage(RoleWorkstationPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<RoleWorkstationDO>()
+                .betweenIfPresent(RoleWorkstationDO::getCreateTime, reqVO.getCreateTime()));
+    }
+
+}

+ 37 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/usercharacteristic/UserCharacteristicMapper.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.usercharacteristic;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.usercharacteristic.UserCharacteristicDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo.*;
+
+/**
+ * 用户特征表(指纹、面部) Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface UserCharacteristicMapper extends BaseMapperX<UserCharacteristicDO> {
+
+    default PageResult<UserCharacteristicDO> selectPage(UserCharacteristicPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserCharacteristicDO>()
+                .eqIfPresent(UserCharacteristicDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(UserCharacteristicDO::getType, reqVO.getType())
+                .eqIfPresent(UserCharacteristicDO::getContent, reqVO.getContent())
+                .eqIfPresent(UserCharacteristicDO::getImageUrl, reqVO.getImageUrl())
+                .eqIfPresent(UserCharacteristicDO::getImagePath, reqVO.getImagePath())
+                .eqIfPresent(UserCharacteristicDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(UserCharacteristicDO::getOrderNum, reqVO.getOrderNum())
+                .eqIfPresent(UserCharacteristicDO::getMatRows, reqVO.getMatRows())
+                .eqIfPresent(UserCharacteristicDO::getMatCols, reqVO.getMatCols())
+                .eqIfPresent(UserCharacteristicDO::getMatType, reqVO.getMatType())
+                .eqIfPresent(UserCharacteristicDO::getMatData, reqVO.getMatData())
+                .betweenIfPresent(UserCharacteristicDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(UserCharacteristicDO::getId));
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/blacklist/BlacklistService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.blacklist;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.blacklist.BlacklistDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 黑名单关联 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface BlacklistService extends IService<BlacklistDO> {
+
+    /**
+     * 创建黑名单关联
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createBlacklist(@Valid BlacklistSaveReqVO createReqVO);
+
+    /**
+     * 更新黑名单关联
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateBlacklist(@Valid BlacklistSaveReqVO updateReqVO);
+
+    /**
+     * 删除黑名单关联
+     *
+     * @param id 编号
+     */
+    void deleteBlacklist(Long id);
+
+    /**
+    * 批量删除黑名单关联
+    *
+    * @param ids 编号
+    */
+    void deleteBlacklistListByIds(List<Long> ids);
+
+    /**
+     * 获得黑名单关联
+     *
+     * @param id 编号
+     * @return 黑名单关联
+     */
+    BlacklistDO getBlacklist(Long id);
+
+    /**
+     * 获得黑名单关联分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 黑名单关联分页
+     */
+    PageResult<BlacklistDO> getBlacklistPage(BlacklistPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/blacklist/BlacklistServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.blacklist;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo.BlacklistPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.blacklist.vo.BlacklistSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.blacklist.BlacklistDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.blacklist.BlacklistMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 黑名单关联 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class BlacklistServiceImpl extends ServiceImpl<BlacklistMapper, BlacklistDO> implements BlacklistService {
+
+    @Resource
+    private BlacklistMapper blacklistMapper;
+
+    @Override
+    public Long createBlacklist(BlacklistSaveReqVO createReqVO) {
+        // 插入
+        BlacklistDO blacklist = BeanUtils.toBean(createReqVO, BlacklistDO.class);
+        blacklistMapper.insert(blacklist);
+
+        // 返回
+        return blacklist.getId();
+    }
+
+    @Override
+    public void updateBlacklist(BlacklistSaveReqVO updateReqVO) {
+        // 校验存在
+        validateBlacklistExists(updateReqVO.getId());
+        // 更新
+        BlacklistDO updateObj = BeanUtils.toBean(updateReqVO, BlacklistDO.class);
+        blacklistMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteBlacklist(Long id) {
+        // 校验存在
+        validateBlacklistExists(id);
+        // 删除
+        blacklistMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteBlacklistListByIds(List<Long> ids) {
+        // 校验存在
+        validateBlacklistExists(ids);
+        // 删除
+        blacklistMapper.deleteByIds(ids);
+        }
+
+    private void validateBlacklistExists(List<Long> ids) {
+        List<BlacklistDO> list = blacklistMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(BLACKLIST_NOT_EXISTS);
+        }
+    }
+
+    private void validateBlacklistExists(Long id) {
+        if (blacklistMapper.selectById(id) == null) {
+            /// throw exception(BLACKLIST_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public BlacklistDO getBlacklist(Long id) {
+        return blacklistMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<BlacklistDO> getBlacklistPage(BlacklistPageReqVO pageReqVO) {
+        return blacklistMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exception/ExceptionService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.exception;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.exception.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exception.ExceptionDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 异常记录 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface ExceptionService extends IService<ExceptionDO> {
+
+    /**
+     * 创建异常记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createException(@Valid ExceptionSaveReqVO createReqVO);
+
+    /**
+     * 更新异常记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateException(@Valid ExceptionSaveReqVO updateReqVO);
+
+    /**
+     * 删除异常记录
+     *
+     * @param id 编号
+     */
+    void deleteException(Long id);
+
+    /**
+    * 批量删除异常记录
+    *
+    * @param ids 编号
+    */
+    void deleteExceptionListByIds(List<Long> ids);
+
+    /**
+     * 获得异常记录
+     *
+     * @param id 编号
+     * @return 异常记录
+     */
+    ExceptionDO getException(Long id);
+
+    /**
+     * 获得异常记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 异常记录分页
+     */
+    PageResult<ExceptionDO> getExceptionPage(ExceptionPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exception/ExceptionServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.exception;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.exception.vo.ExceptionPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.exception.vo.ExceptionSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exception.ExceptionDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.exception.ExceptionMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 异常记录 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class ExceptionServiceImpl extends ServiceImpl<ExceptionMapper, ExceptionDO> implements ExceptionService {
+
+    @Resource
+    private ExceptionMapper exceptionMapper;
+
+    @Override
+    public Long createException(ExceptionSaveReqVO createReqVO) {
+        // 插入
+        ExceptionDO exception = BeanUtils.toBean(createReqVO, ExceptionDO.class);
+        exceptionMapper.insert(exception);
+
+        // 返回
+        return exception.getId();
+    }
+
+    @Override
+    public void updateException(ExceptionSaveReqVO updateReqVO) {
+        // 校验存在
+        validateExceptionExists(updateReqVO.getId());
+        // 更新
+        ExceptionDO updateObj = BeanUtils.toBean(updateReqVO, ExceptionDO.class);
+        exceptionMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteException(Long id) {
+        // 校验存在
+        validateExceptionExists(id);
+        // 删除
+        exceptionMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteExceptionListByIds(List<Long> ids) {
+        // 校验存在
+        validateExceptionExists(ids);
+        // 删除
+        exceptionMapper.deleteByIds(ids);
+        }
+
+    private void validateExceptionExists(List<Long> ids) {
+        List<ExceptionDO> list = exceptionMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(EXCEPTION_NOT_EXISTS);
+        }
+    }
+
+    private void validateExceptionExists(Long id) {
+        if (exceptionMapper.selectById(id) == null) {
+            /// throw exception(EXCEPTION_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ExceptionDO getException(Long id) {
+        return exceptionMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ExceptionDO> getExceptionPage(ExceptionPageReqVO pageReqVO) {
+        return exceptionMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exceptionmisplace/ExceptionMisplaceService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.exceptionmisplace;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace.ExceptionMisplaceDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 物资归还异常 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface ExceptionMisplaceService extends IService<ExceptionMisplaceDO> {
+
+    /**
+     * 创建物资归还异常
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createExceptionMisplace(@Valid ExceptionMisplaceSaveReqVO createReqVO);
+
+    /**
+     * 更新物资归还异常
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateExceptionMisplace(@Valid ExceptionMisplaceSaveReqVO updateReqVO);
+
+    /**
+     * 删除物资归还异常
+     *
+     * @param id 编号
+     */
+    void deleteExceptionMisplace(Long id);
+
+    /**
+    * 批量删除物资归还异常
+    *
+    * @param ids 编号
+    */
+    void deleteExceptionMisplaceListByIds(List<Long> ids);
+
+    /**
+     * 获得物资归还异常
+     *
+     * @param id 编号
+     * @return 物资归还异常
+     */
+    ExceptionMisplaceDO getExceptionMisplace(Long id);
+
+    /**
+     * 获得物资归还异常分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物资归还异常分页
+     */
+    PageResult<ExceptionMisplaceDO> getExceptionMisplacePage(ExceptionMisplacePageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/exceptionmisplace/ExceptionMisplaceServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.exceptionmisplace;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo.ExceptionMisplacePageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.exceptionmisplace.vo.ExceptionMisplaceSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.exceptionmisplace.ExceptionMisplaceDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.exceptionmisplace.ExceptionMisplaceMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 物资归还异常 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class ExceptionMisplaceServiceImpl extends ServiceImpl<ExceptionMisplaceMapper, ExceptionMisplaceDO> implements ExceptionMisplaceService {
+
+    @Resource
+    private ExceptionMisplaceMapper exceptionMisplaceMapper;
+
+    @Override
+    public Long createExceptionMisplace(ExceptionMisplaceSaveReqVO createReqVO) {
+        // 插入
+        ExceptionMisplaceDO exceptionMisplace = BeanUtils.toBean(createReqVO, ExceptionMisplaceDO.class);
+        exceptionMisplaceMapper.insert(exceptionMisplace);
+
+        // 返回
+        return exceptionMisplace.getId();
+    }
+
+    @Override
+    public void updateExceptionMisplace(ExceptionMisplaceSaveReqVO updateReqVO) {
+        // 校验存在
+        validateExceptionMisplaceExists(updateReqVO.getId());
+        // 更新
+        ExceptionMisplaceDO updateObj = BeanUtils.toBean(updateReqVO, ExceptionMisplaceDO.class);
+        exceptionMisplaceMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteExceptionMisplace(Long id) {
+        // 校验存在
+        validateExceptionMisplaceExists(id);
+        // 删除
+        exceptionMisplaceMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteExceptionMisplaceListByIds(List<Long> ids) {
+        // 校验存在
+        validateExceptionMisplaceExists(ids);
+        // 删除
+        exceptionMisplaceMapper.deleteByIds(ids);
+        }
+
+    private void validateExceptionMisplaceExists(List<Long> ids) {
+        List<ExceptionMisplaceDO> list = exceptionMisplaceMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(EXCEPTION_MISPLACE_NOT_EXISTS);
+        }
+    }
+
+    private void validateExceptionMisplaceExists(Long id) {
+        if (exceptionMisplaceMapper.selectById(id) == null) {
+            /// throw exception(EXCEPTION_MISPLACE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ExceptionMisplaceDO getExceptionMisplace(Long id) {
+        return exceptionMisplaceMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ExceptionMisplaceDO> getExceptionMisplacePage(ExceptionMisplacePageReqVO pageReqVO) {
+        return exceptionMisplaceMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailnotifyconfig/MailNotifyConfigService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.mailnotifyconfig;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig.MailNotifyConfigDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 系统邮件提醒周期配置 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface MailNotifyConfigService extends IService<MailNotifyConfigDO> {
+
+    /**
+     * 创建系统邮件提醒周期配置
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createMailNotifyConfig(@Valid MailNotifyConfigSaveReqVO createReqVO);
+
+    /**
+     * 更新系统邮件提醒周期配置
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMailNotifyConfig(@Valid MailNotifyConfigSaveReqVO updateReqVO);
+
+    /**
+     * 删除系统邮件提醒周期配置
+     *
+     * @param id 编号
+     */
+    void deleteMailNotifyConfig(Long id);
+
+    /**
+    * 批量删除系统邮件提醒周期配置
+    *
+    * @param ids 编号
+    */
+    void deleteMailNotifyConfigListByIds(List<Long> ids);
+
+    /**
+     * 获得系统邮件提醒周期配置
+     *
+     * @param id 编号
+     * @return 系统邮件提醒周期配置
+     */
+    MailNotifyConfigDO getMailNotifyConfig(Long id);
+
+    /**
+     * 获得系统邮件提醒周期配置分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 系统邮件提醒周期配置分页
+     */
+    PageResult<MailNotifyConfigDO> getMailNotifyConfigPage(MailNotifyConfigPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailnotifyconfig/MailNotifyConfigServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.mailnotifyconfig;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo.MailNotifyConfigPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailnotifyconfig.vo.MailNotifyConfigSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig.MailNotifyConfigDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.mailnotifyconfig.MailNotifyConfigMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 系统邮件提醒周期配置 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class MailNotifyConfigServiceImpl extends ServiceImpl<MailNotifyConfigMapper, MailNotifyConfigDO> implements MailNotifyConfigService {
+
+    @Resource
+    private MailNotifyConfigMapper mailNotifyConfigMapper;
+
+    @Override
+    public Long createMailNotifyConfig(MailNotifyConfigSaveReqVO createReqVO) {
+        // 插入
+        MailNotifyConfigDO mailNotifyConfig = BeanUtils.toBean(createReqVO, MailNotifyConfigDO.class);
+        mailNotifyConfigMapper.insert(mailNotifyConfig);
+
+        // 返回
+        return mailNotifyConfig.getId();
+    }
+
+    @Override
+    public void updateMailNotifyConfig(MailNotifyConfigSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMailNotifyConfigExists(updateReqVO.getId());
+        // 更新
+        MailNotifyConfigDO updateObj = BeanUtils.toBean(updateReqVO, MailNotifyConfigDO.class);
+        mailNotifyConfigMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMailNotifyConfig(Long id) {
+        // 校验存在
+        validateMailNotifyConfigExists(id);
+        // 删除
+        mailNotifyConfigMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMailNotifyConfigListByIds(List<Long> ids) {
+        // 校验存在
+        validateMailNotifyConfigExists(ids);
+        // 删除
+        mailNotifyConfigMapper.deleteByIds(ids);
+        }
+
+    private void validateMailNotifyConfigExists(List<Long> ids) {
+        List<MailNotifyConfigDO> list = mailNotifyConfigMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(MAIL_NOTIFY_CONFIG_NOT_EXISTS);
+        }
+    }
+
+    private void validateMailNotifyConfigExists(Long id) {
+        if (mailNotifyConfigMapper.selectById(id) == null) {
+            /// throw exception(MAIL_NOTIFY_CONFIG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MailNotifyConfigDO getMailNotifyConfig(Long id) {
+        return mailNotifyConfigMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MailNotifyConfigDO> getMailNotifyConfigPage(MailNotifyConfigPageReqVO pageReqVO) {
+        return mailNotifyConfigMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailsendtaskitem/MailSendTaskItemService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.mailsendtaskitem;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem.MailSendTaskItemDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 系统邮件任务 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface MailSendTaskItemService extends IService<MailSendTaskItemDO> {
+
+    /**
+     * 创建系统邮件任务
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createMailSendTaskItem(@Valid MailSendTaskItemSaveReqVO createReqVO);
+
+    /**
+     * 更新系统邮件任务
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMailSendTaskItem(@Valid MailSendTaskItemSaveReqVO updateReqVO);
+
+    /**
+     * 删除系统邮件任务
+     *
+     * @param id 编号
+     */
+    void deleteMailSendTaskItem(Long id);
+
+    /**
+    * 批量删除系统邮件任务
+    *
+    * @param ids 编号
+    */
+    void deleteMailSendTaskItemListByIds(List<Long> ids);
+
+    /**
+     * 获得系统邮件任务
+     *
+     * @param id 编号
+     * @return 系统邮件任务
+     */
+    MailSendTaskItemDO getMailSendTaskItem(Long id);
+
+    /**
+     * 获得系统邮件任务分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 系统邮件任务分页
+     */
+    PageResult<MailSendTaskItemDO> getMailSendTaskItemPage(MailSendTaskItemPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/mailsendtaskitem/MailSendTaskItemServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.mailsendtaskitem;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo.MailSendTaskItemPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.mailsendtaskitem.vo.MailSendTaskItemSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem.MailSendTaskItemDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.mailsendtaskitem.MailSendTaskItemMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 系统邮件任务 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class MailSendTaskItemServiceImpl extends ServiceImpl<MailSendTaskItemMapper, MailSendTaskItemDO> implements MailSendTaskItemService {
+
+    @Resource
+    private MailSendTaskItemMapper mailSendTaskItemMapper;
+
+    @Override
+    public Long createMailSendTaskItem(MailSendTaskItemSaveReqVO createReqVO) {
+        // 插入
+        MailSendTaskItemDO mailSendTaskItem = BeanUtils.toBean(createReqVO, MailSendTaskItemDO.class);
+        mailSendTaskItemMapper.insert(mailSendTaskItem);
+
+        // 返回
+        return mailSendTaskItem.getId();
+    }
+
+    @Override
+    public void updateMailSendTaskItem(MailSendTaskItemSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMailSendTaskItemExists(updateReqVO.getId());
+        // 更新
+        MailSendTaskItemDO updateObj = BeanUtils.toBean(updateReqVO, MailSendTaskItemDO.class);
+        mailSendTaskItemMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMailSendTaskItem(Long id) {
+        // 校验存在
+        validateMailSendTaskItemExists(id);
+        // 删除
+        mailSendTaskItemMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMailSendTaskItemListByIds(List<Long> ids) {
+        // 校验存在
+        validateMailSendTaskItemExists(ids);
+        // 删除
+        mailSendTaskItemMapper.deleteByIds(ids);
+        }
+
+    private void validateMailSendTaskItemExists(List<Long> ids) {
+        List<MailSendTaskItemDO> list = mailSendTaskItemMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(MAIL_SEND_TASK_ITEM_NOT_EXISTS);
+        }
+    }
+
+    private void validateMailSendTaskItemExists(Long id) {
+        if (mailSendTaskItemMapper.selectById(id) == null) {
+            /// throw exception(MAIL_SEND_TASK_ITEM_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MailSendTaskItemDO getMailSendTaskItem(Long id) {
+        return mailSendTaskItemMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MailSendTaskItemDO> getMailSendTaskItemPage(MailSendTaskItemPageReqVO pageReqVO) {
+        return mailSendTaskItemMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/roleworkstation/RoleWorkstationService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.roleworkstation;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.roleworkstation.RoleWorkstationDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 角色和岗位关联 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface RoleWorkstationService extends IService<RoleWorkstationDO> {
+
+    /**
+     * 创建角色和岗位关联
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRoleWorkstation(@Valid RoleWorkstationSaveReqVO createReqVO);
+
+    /**
+     * 更新角色和岗位关联
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRoleWorkstation(@Valid RoleWorkstationSaveReqVO updateReqVO);
+
+    /**
+     * 删除角色和岗位关联
+     *
+     * @param id 编号
+     */
+    void deleteRoleWorkstation(Long id);
+
+    /**
+    * 批量删除角色和岗位关联
+    *
+    * @param ids 编号
+    */
+    void deleteRoleWorkstationListByIds(List<Long> ids);
+
+    /**
+     * 获得角色和岗位关联
+     *
+     * @param id 编号
+     * @return 角色和岗位关联
+     */
+    RoleWorkstationDO getRoleWorkstation(Long id);
+
+    /**
+     * 获得角色和岗位关联分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 角色和岗位关联分页
+     */
+    PageResult<RoleWorkstationDO> getRoleWorkstationPage(RoleWorkstationPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/roleworkstation/RoleWorkstationServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.roleworkstation;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo.RoleWorkstationPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.roleworkstation.vo.RoleWorkstationSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.roleworkstation.RoleWorkstationDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.roleworkstation.RoleWorkstationMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 角色和岗位关联 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class RoleWorkstationServiceImpl extends ServiceImpl<RoleWorkstationMapper, RoleWorkstationDO> implements RoleWorkstationService {
+
+    @Resource
+    private RoleWorkstationMapper roleWorkstationMapper;
+
+    @Override
+    public Long createRoleWorkstation(RoleWorkstationSaveReqVO createReqVO) {
+        // 插入
+        RoleWorkstationDO roleWorkstation = BeanUtils.toBean(createReqVO, RoleWorkstationDO.class);
+        roleWorkstationMapper.insert(roleWorkstation);
+
+        // 返回
+        return 1L;
+    }
+
+    @Override
+    public void updateRoleWorkstation(RoleWorkstationSaveReqVO updateReqVO) {
+        // 校验存在
+        /// validateRoleWorkstationExists(updateReqVO.getId());
+        // 更新
+        RoleWorkstationDO updateObj = BeanUtils.toBean(updateReqVO, RoleWorkstationDO.class);
+        roleWorkstationMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteRoleWorkstation(Long id) {
+        // 校验存在
+        validateRoleWorkstationExists(id);
+        // 删除
+        roleWorkstationMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteRoleWorkstationListByIds(List<Long> ids) {
+        // 校验存在
+        validateRoleWorkstationExists(ids);
+        // 删除
+        roleWorkstationMapper.deleteByIds(ids);
+        }
+
+    private void validateRoleWorkstationExists(List<Long> ids) {
+        List<RoleWorkstationDO> list = roleWorkstationMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(ROLE_WORKSTATION_NOT_EXISTS);
+        }
+    }
+
+    private void validateRoleWorkstationExists(Long id) {
+        if (roleWorkstationMapper.selectById(id) == null) {
+            /// throw exception(ROLE_WORKSTATION_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public RoleWorkstationDO getRoleWorkstation(Long id) {
+        return roleWorkstationMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<RoleWorkstationDO> getRoleWorkstationPage(RoleWorkstationPageReqVO pageReqVO) {
+        return roleWorkstationMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/usercharacteristic/UserCharacteristicService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.usercharacteristic;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.usercharacteristic.UserCharacteristicDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 用户特征表(指纹、面部) Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface UserCharacteristicService extends IService<UserCharacteristicDO> {
+
+    /**
+     * 创建用户特征表(指纹、面部)
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createUserCharacteristic(@Valid UserCharacteristicSaveReqVO createReqVO);
+
+    /**
+     * 更新用户特征表(指纹、面部)
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserCharacteristic(@Valid UserCharacteristicSaveReqVO updateReqVO);
+
+    /**
+     * 删除用户特征表(指纹、面部)
+     *
+     * @param id 编号
+     */
+    void deleteUserCharacteristic(Long id);
+
+    /**
+    * 批量删除用户特征表(指纹、面部)
+    *
+    * @param ids 编号
+    */
+    void deleteUserCharacteristicListByIds(List<Long> ids);
+
+    /**
+     * 获得用户特征表(指纹、面部)
+     *
+     * @param id 编号
+     * @return 用户特征表(指纹、面部)
+     */
+    UserCharacteristicDO getUserCharacteristic(Long id);
+
+    /**
+     * 获得用户特征表(指纹、面部)分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户特征表(指纹、面部)分页
+     */
+    PageResult<UserCharacteristicDO> getUserCharacteristicPage(UserCharacteristicPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/usercharacteristic/UserCharacteristicServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.usercharacteristic;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo.UserCharacteristicPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.usercharacteristic.vo.UserCharacteristicSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.usercharacteristic.UserCharacteristicDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.usercharacteristic.UserCharacteristicMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+/**
+ * 用户特征表(指纹、面部) Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class UserCharacteristicServiceImpl extends ServiceImpl<UserCharacteristicMapper, UserCharacteristicDO> implements UserCharacteristicService {
+
+    @Resource
+    private UserCharacteristicMapper userCharacteristicMapper;
+
+    @Override
+    public Long createUserCharacteristic(UserCharacteristicSaveReqVO createReqVO) {
+        // 插入
+        UserCharacteristicDO userCharacteristic = BeanUtils.toBean(createReqVO, UserCharacteristicDO.class);
+        userCharacteristicMapper.insert(userCharacteristic);
+
+        // 返回
+        return userCharacteristic.getId();
+    }
+
+    @Override
+    public void updateUserCharacteristic(UserCharacteristicSaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserCharacteristicExists(updateReqVO.getId());
+        // 更新
+        UserCharacteristicDO updateObj = BeanUtils.toBean(updateReqVO, UserCharacteristicDO.class);
+        userCharacteristicMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserCharacteristic(Long id) {
+        // 校验存在
+        validateUserCharacteristicExists(id);
+        // 删除
+        userCharacteristicMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteUserCharacteristicListByIds(List<Long> ids) {
+        // 校验存在
+        validateUserCharacteristicExists(ids);
+        // 删除
+        userCharacteristicMapper.deleteByIds(ids);
+        }
+
+    private void validateUserCharacteristicExists(List<Long> ids) {
+        List<UserCharacteristicDO> list = userCharacteristicMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(USER_CHARACTERISTIC_NOT_EXISTS);
+        }
+    }
+
+    private void validateUserCharacteristicExists(Long id) {
+        if (userCharacteristicMapper.selectById(id) == null) {
+            /// throw exception(USER_CHARACTERISTIC_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserCharacteristicDO getUserCharacteristic(Long id) {
+        return userCharacteristicMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserCharacteristicDO> getUserCharacteristicPage(UserCharacteristicPageReqVO pageReqVO) {
+        return userCharacteristicMapper.selectPage(pageReqVO);
+    }
+
+}

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/BlacklistMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.blacklist.BlacklistMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/ExceptionMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.exception.ExceptionMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/ExceptionMisplaceMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.exceptionmisplace.ExceptionMisplaceMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/MailNotifyConfigMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.mailnotifyconfig.MailNotifyConfigMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/MailSendTaskItemMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.mailsendtaskitem.MailSendTaskItemMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/RoleWorkstationMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.roleworkstation.RoleWorkstationMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-iscs/src/main/java/resources/mapper/UserCharacteristicMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.iscs.dal.mysql.usercharacteristic.UserCharacteristicMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>