Просмотр исходного кода

初始化物资柜开关门记录、物资属性项、物资属性值、物资类型表

车车 11 месяцев назад
Родитель
Сommit
157f6d6bd4
36 измененных файлов с 1909 добавлено и 0 удалено
  1. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/CabinetOpenRecordController.java
  2. 37 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordPageReqVO.java
  3. 43 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordRespVO.java
  4. 33 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordSaveReqVO.java
  5. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/MaterialsPropertyController.java
  6. 29 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertyPageReqVO.java
  7. 35 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertyRespVO.java
  8. 24 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertySaveReqVO.java
  9. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialspropertyvalue/MaterialsPropertyValueController.java
  10. 32 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialspropertyvalue/vo/MaterialsPropertyValuePageReqVO.java
  11. 39 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialspropertyvalue/vo/MaterialsPropertyValueRespVO.java
  12. 28 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialspropertyvalue/vo/MaterialsPropertyValueSaveReqVO.java
  13. 95 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/MaterialsTypeController.java
  14. 65 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypePageReqVO.java
  15. 83 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypeRespVO.java
  16. 64 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypeSaveReqVO.java
  17. 54 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/cabinetopenrecord/CabinetOpenRecordDO.java
  18. 44 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/materialsproperty/MaterialsPropertyDO.java
  19. 48 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/materialspropertyvalue/MaterialsPropertyValueDO.java
  20. 92 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/materialstype/MaterialsTypeDO.java
  21. 31 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/cabinetopenrecord/CabinetOpenRecordMapper.java
  22. 29 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/materialsproperty/MaterialsPropertyMapper.java
  23. 30 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/materialspropertyvalue/MaterialsPropertyValueMapper.java
  24. 41 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/materialstype/MaterialsTypeMapper.java
  25. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/cabinetopenrecord/CabinetOpenRecordService.java
  26. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/cabinetopenrecord/CabinetOpenRecordServiceImpl.java
  27. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialsproperty/MaterialsPropertyService.java
  28. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialsproperty/MaterialsPropertyServiceImpl.java
  29. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialspropertyvalue/MaterialsPropertyValueService.java
  30. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialspropertyvalue/MaterialsPropertyValueServiceImpl.java
  31. 63 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialstype/MaterialsTypeService.java
  32. 87 0
      yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialstype/MaterialsTypeServiceImpl.java
  33. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/CabinetOpenRecordMapper.xml
  34. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/MaterialsPropertyMapper.xml
  35. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/MaterialsPropertyValueMapper.xml
  36. 12 0
      yudao-module-iscs/src/main/java/resources/mapper/MaterialsTypeMapper.xml

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord;
+
+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.cabinetopenrecord.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.cabinetopenrecord.CabinetOpenRecordDO;
+import cn.iocoder.yudao.module.iscs.service.cabinetopenrecord.CabinetOpenRecordService;
+
+@Tag(name = "管理后台 - 物资柜开关门记录")
+@RestController
+@RequestMapping("/iscs/cabinet-open-record")
+@Validated
+public class CabinetOpenRecordController {
+
+    @Resource
+    private CabinetOpenRecordService cabinetOpenRecordService;
+
+    @PostMapping("/insertCabinetOpenRecord")
+    @Operation(summary = "创建物资柜开关门记录")
+    @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:create')")
+    public CommonResult<Long> insertCabinetOpenRecord(@Valid @RequestBody CabinetOpenRecordSaveReqVO createReqVO) {
+        return success(cabinetOpenRecordService.createCabinetOpenRecord(createReqVO));
+    }
+
+    @PutMapping("/updateCabinetOpenRecord")
+    @Operation(summary = "更新物资柜开关门记录")
+    @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:update')")
+    public CommonResult<Boolean> updateCabinetOpenRecord(@Valid @RequestBody CabinetOpenRecordSaveReqVO updateReqVO) {
+        cabinetOpenRecordService.updateCabinetOpenRecord(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteCabinetOpenRecordList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除物资柜开关门记录")
+                @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:delete')")
+    public CommonResult<Boolean> deleteCabinetOpenRecordList(@RequestParam("ids") List<Long> ids) {
+        cabinetOpenRecordService.deleteCabinetOpenRecordListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectCabinetOpenRecordById")
+    @Operation(summary = "获得物资柜开关门记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:query')")
+    public CommonResult<CabinetOpenRecordRespVO> selectCabinetOpenRecordById(@RequestParam("id") Long id) {
+        CabinetOpenRecordDO cabinetOpenRecord = cabinetOpenRecordService.getCabinetOpenRecord(id);
+        return success(BeanUtils.toBean(cabinetOpenRecord, CabinetOpenRecordRespVO.class));
+    }
+
+    @GetMapping("/getCabinetOpenRecordPage")
+    @Operation(summary = "获得物资柜开关门记录分页")
+    @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:query')")
+    public CommonResult<PageResult<CabinetOpenRecordRespVO>> getCabinetOpenRecordPage(@Valid CabinetOpenRecordPageReqVO pageReqVO) {
+        PageResult<CabinetOpenRecordDO> pageResult = cabinetOpenRecordService.getCabinetOpenRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, CabinetOpenRecordRespVO.class));
+    }
+
+    @GetMapping("/exportCabinetOpenRecordExcel")
+    @Operation(summary = "导出物资柜开关门记录 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:cabinet-open-record:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportCabinetOpenRecordExcel(@Valid CabinetOpenRecordPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<CabinetOpenRecordDO> list = cabinetOpenRecordService.getCabinetOpenRecordPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物资柜开关门记录.xls", "数据", CabinetOpenRecordRespVO.class,
+                        BeanUtils.toBean(list, CabinetOpenRecordRespVO.class));
+    }
+
+}

+ 37 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordPageReqVO.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.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 CabinetOpenRecordPageReqVO extends PageParam {
+
+    @Schema(description = "物资柜ID", example = "29907")
+    private Long cabinetId;
+
+    @Schema(description = "开门类型(0-物资领取归还 1-物资检查 2-物资更换)", example = "1")
+    private String openType;
+
+    @Schema(description = "开门时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] openTime;
+
+    @Schema(description = "关门时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] closeTime;
+
+    @Schema(description = "开门人员", example = "20546")
+    private String userId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 43 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordRespVO.java

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.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 CabinetOpenRecordRespVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "678")
+    @ExcelProperty("主键ID")
+    private Long id;
+
+    @Schema(description = "物资柜ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29907")
+    @ExcelProperty("物资柜ID")
+    private Long cabinetId;
+
+    @Schema(description = "开门类型(0-物资领取归还 1-物资检查 2-物资更换)", example = "1")
+    @ExcelProperty("开门类型(0-物资领取归还 1-物资检查 2-物资更换)")
+    private String openType;
+
+    @Schema(description = "开门时间")
+    @ExcelProperty("开门时间")
+    private LocalDateTime openTime;
+
+    @Schema(description = "关门时间")
+    @ExcelProperty("关门时间")
+    private LocalDateTime closeTime;
+
+    @Schema(description = "开门人员", example = "20546")
+    @ExcelProperty("开门人员")
+    private String userId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 33 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/cabinetopenrecord/vo/CabinetOpenRecordSaveReqVO.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.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 CabinetOpenRecordSaveReqVO {
+
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "678")
+    private Long id;
+
+    @Schema(description = "物资柜ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29907")
+    @NotNull(message = "物资柜ID不能为空")
+    private Long cabinetId;
+
+    @Schema(description = "开门类型(0-物资领取归还 1-物资检查 2-物资更换)", example = "1")
+    private String openType;
+
+    @Schema(description = "开门时间")
+    private LocalDateTime openTime;
+
+    @Schema(description = "关门时间")
+    private LocalDateTime closeTime;
+
+    @Schema(description = "开门人员", example = "20546")
+    private String userId;
+
+}

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty;
+
+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.materialsproperty.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialsproperty.MaterialsPropertyDO;
+import cn.iocoder.yudao.module.iscs.service.materialsproperty.MaterialsPropertyService;
+
+@Tag(name = "管理后台 - 物资属性项")
+@RestController
+@RequestMapping("/iscs/materials-property")
+@Validated
+public class MaterialsPropertyController {
+
+    @Resource
+    private MaterialsPropertyService materialsPropertyService;
+
+    @PostMapping("/insertMaterialsProperty")
+    @Operation(summary = "创建物资属性项")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property:create')")
+    public CommonResult<Long> insertMaterialsProperty(@Valid @RequestBody MaterialsPropertySaveReqVO createReqVO) {
+        return success(materialsPropertyService.createMaterialsProperty(createReqVO));
+    }
+
+    @PutMapping("/updateMaterialsProperty")
+    @Operation(summary = "更新物资属性项")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property:update')")
+    public CommonResult<Boolean> updateMaterialsProperty(@Valid @RequestBody MaterialsPropertySaveReqVO updateReqVO) {
+        materialsPropertyService.updateMaterialsProperty(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteMaterialsPropertyList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除物资属性项")
+                @PreAuthorize("@ss.hasPermission('iscs:materials-property:delete')")
+    public CommonResult<Boolean> deleteMaterialsPropertyList(@RequestParam("ids") List<Long> ids) {
+        materialsPropertyService.deleteMaterialsPropertyListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectMaterialsPropertyById")
+    @Operation(summary = "获得物资属性项")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property:query')")
+    public CommonResult<MaterialsPropertyRespVO> selectMaterialsPropertyById(@RequestParam("id") Long id) {
+        MaterialsPropertyDO materialsProperty = materialsPropertyService.getMaterialsProperty(id);
+        return success(BeanUtils.toBean(materialsProperty, MaterialsPropertyRespVO.class));
+    }
+
+    @GetMapping("/getMaterialsPropertyPage")
+    @Operation(summary = "获得物资属性项分页")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property:query')")
+    public CommonResult<PageResult<MaterialsPropertyRespVO>> getMaterialsPropertyPage(@Valid MaterialsPropertyPageReqVO pageReqVO) {
+        PageResult<MaterialsPropertyDO> pageResult = materialsPropertyService.getMaterialsPropertyPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MaterialsPropertyRespVO.class));
+    }
+
+    @GetMapping("/exportMaterialsPropertyExcel")
+    @Operation(summary = "导出物资属性项 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMaterialsPropertyExcel(@Valid MaterialsPropertyPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MaterialsPropertyDO> list = materialsPropertyService.getMaterialsPropertyPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物资属性项.xls", "数据", MaterialsPropertyRespVO.class,
+                        BeanUtils.toBean(list, MaterialsPropertyRespVO.class));
+    }
+
+}

+ 29 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertyPageReqVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.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 MaterialsPropertyPageReqVO extends PageParam {
+
+    @Schema(description = "属性项名称", example = "王五")
+    private String propertyName;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    private String status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 35 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertyRespVO.java

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.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 MaterialsPropertyRespVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7377")
+    @ExcelProperty("编号")
+    private Long id;
+
+    @Schema(description = "属性项名称", example = "王五")
+    @ExcelProperty("属性项名称")
+    private String propertyName;
+
+    @Schema(description = "备注", example = "你猜")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    @ExcelProperty("物资状态(0-正常 1-异常 2-被更换)")
+    private String status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 24 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialsproperty/vo/MaterialsPropertySaveReqVO.java

@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.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 MaterialsPropertySaveReqVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7377")
+    private Long id;
+
+    @Schema(description = "属性项名称", example = "王五")
+    private String propertyName;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    private String status;
+
+}

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue;
+
+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.materialspropertyvalue.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialspropertyvalue.MaterialsPropertyValueDO;
+import cn.iocoder.yudao.module.iscs.service.materialspropertyvalue.MaterialsPropertyValueService;
+
+@Tag(name = "管理后台 - 物资属性值")
+@RestController
+@RequestMapping("/iscs/materials-property-value")
+@Validated
+public class MaterialsPropertyValueController {
+
+    @Resource
+    private MaterialsPropertyValueService materialsPropertyValueService;
+
+    @PostMapping("/insertMaterialsPropertyValue")
+    @Operation(summary = "创建物资属性值")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:create')")
+    public CommonResult<Long> insertMaterialsPropertyValue(@Valid @RequestBody MaterialsPropertyValueSaveReqVO createReqVO) {
+        return success(materialsPropertyValueService.createMaterialsPropertyValue(createReqVO));
+    }
+
+    @PutMapping("/updateMaterialsPropertyValue")
+    @Operation(summary = "更新物资属性值")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:update')")
+    public CommonResult<Boolean> updateMaterialsPropertyValue(@Valid @RequestBody MaterialsPropertyValueSaveReqVO updateReqVO) {
+        materialsPropertyValueService.updateMaterialsPropertyValue(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteMaterialsPropertyValueList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除物资属性值")
+                @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:delete')")
+    public CommonResult<Boolean> deleteMaterialsPropertyValueList(@RequestParam("ids") List<Long> ids) {
+        materialsPropertyValueService.deleteMaterialsPropertyValueListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectMaterialsPropertyValueById")
+    @Operation(summary = "获得物资属性值")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:query')")
+    public CommonResult<MaterialsPropertyValueRespVO> selectMaterialsPropertyValueById(@RequestParam("id") Long id) {
+        MaterialsPropertyValueDO materialsPropertyValue = materialsPropertyValueService.getMaterialsPropertyValue(id);
+        return success(BeanUtils.toBean(materialsPropertyValue, MaterialsPropertyValueRespVO.class));
+    }
+
+    @GetMapping("/getMaterialsPropertyValuePage")
+    @Operation(summary = "获得物资属性值分页")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:query')")
+    public CommonResult<PageResult<MaterialsPropertyValueRespVO>> getMaterialsPropertyValuePage(@Valid MaterialsPropertyValuePageReqVO pageReqVO) {
+        PageResult<MaterialsPropertyValueDO> pageResult = materialsPropertyValueService.getMaterialsPropertyValuePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MaterialsPropertyValueRespVO.class));
+    }
+
+    @GetMapping("/exportMaterialsPropertyValueExcel")
+    @Operation(summary = "导出物资属性值 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-property-value:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMaterialsPropertyValueExcel(@Valid MaterialsPropertyValuePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MaterialsPropertyValueDO> list = materialsPropertyValueService.getMaterialsPropertyValuePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物资属性值.xls", "数据", MaterialsPropertyValueRespVO.class,
+                        BeanUtils.toBean(list, MaterialsPropertyValueRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.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 MaterialsPropertyValuePageReqVO extends PageParam {
+
+    @Schema(description = "属性项的编号", example = "15806")
+    private Long propertyId;
+
+    @Schema(description = "属性值名称", example = "王五")
+    private String valueName;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    private String status;
+
+    @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/materialspropertyvalue/vo/MaterialsPropertyValueRespVO.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.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 MaterialsPropertyValueRespVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25844")
+    @ExcelProperty("编号")
+    private Long id;
+
+    @Schema(description = "属性项的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15806")
+    @ExcelProperty("属性项的编号")
+    private Long propertyId;
+
+    @Schema(description = "属性值名称", example = "王五")
+    @ExcelProperty("属性值名称")
+    private String valueName;
+
+    @Schema(description = "备注", example = "随便")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    @ExcelProperty("物资状态(0-正常 1-异常 2-被更换)")
+    private String status;
+
+    @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/materialspropertyvalue/vo/MaterialsPropertyValueSaveReqVO.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.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 MaterialsPropertyValueSaveReqVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25844")
+    private Long id;
+
+    @Schema(description = "属性项的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15806")
+    @NotNull(message = "属性项的编号不能为空")
+    private Long propertyId;
+
+    @Schema(description = "属性值名称", example = "王五")
+    private String valueName;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "物资状态(0-正常 1-异常 2-被更换)", example = "1")
+    private String status;
+
+}

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

@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialstype;
+
+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.materialstype.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialstype.MaterialsTypeDO;
+import cn.iocoder.yudao.module.iscs.service.materialstype.MaterialsTypeService;
+
+@Tag(name = "管理后台 - 物资类型")
+@RestController
+@RequestMapping("/iscs/materials-type")
+@Validated
+public class MaterialsTypeController {
+
+    @Resource
+    private MaterialsTypeService materialsTypeService;
+
+    @PostMapping("/insertMaterialsType")
+    @Operation(summary = "创建物资类型")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-type:create')")
+    public CommonResult<Long> insertMaterialsType(@Valid @RequestBody MaterialsTypeSaveReqVO createReqVO) {
+        return success(materialsTypeService.createMaterialsType(createReqVO));
+    }
+
+    @PutMapping("/updateMaterialsType")
+    @Operation(summary = "更新物资类型")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-type:update')")
+    public CommonResult<Boolean> updateMaterialsType(@Valid @RequestBody MaterialsTypeSaveReqVO updateReqVO) {
+        materialsTypeService.updateMaterialsType(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/deleteMaterialsTypeList")
+    @Parameter(name = "ids", description = "编号", required = true)
+    @Operation(summary = "批量删除物资类型")
+                @PreAuthorize("@ss.hasPermission('iscs:materials-type:delete')")
+    public CommonResult<Boolean> deleteMaterialsTypeList(@RequestParam("ids") List<Long> ids) {
+        materialsTypeService.deleteMaterialsTypeListByIds(ids);
+        return success(true);
+    }
+
+    @GetMapping("/selectMaterialsTypeById")
+    @Operation(summary = "获得物资类型")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-type:query')")
+    public CommonResult<MaterialsTypeRespVO> selectMaterialsTypeById(@RequestParam("id") Long id) {
+        MaterialsTypeDO materialsType = materialsTypeService.getMaterialsType(id);
+        return success(BeanUtils.toBean(materialsType, MaterialsTypeRespVO.class));
+    }
+
+    @GetMapping("/getMaterialsTypePage")
+    @Operation(summary = "获得物资类型分页")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-type:query')")
+    public CommonResult<PageResult<MaterialsTypeRespVO>> getMaterialsTypePage(@Valid MaterialsTypePageReqVO pageReqVO) {
+        PageResult<MaterialsTypeDO> pageResult = materialsTypeService.getMaterialsTypePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, MaterialsTypeRespVO.class));
+    }
+
+    @GetMapping("/exportMaterialsTypeExcel")
+    @Operation(summary = "导出物资类型 Excel")
+    @PreAuthorize("@ss.hasPermission('iscs:materials-type:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportMaterialsTypeExcel(@Valid MaterialsTypePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<MaterialsTypeDO> list = materialsTypeService.getMaterialsTypePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物资类型.xls", "数据", MaterialsTypeRespVO.class,
+                        BeanUtils.toBean(list, MaterialsTypeRespVO.class));
+    }
+
+}

+ 65 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypePageReqVO.java

@@ -0,0 +1,65 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialstype.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 MaterialsTypePageReqVO extends PageParam {
+
+    @Schema(description = "物资类型编号")
+    private String materialsTypeCode;
+
+    @Schema(description = "物资类型名称", example = "王五")
+    private String materialsTypeName;
+
+    @Schema(description = "父类型ID", example = "18911")
+    private Long parentId;
+
+    @Schema(description = "所有父节点ID,各值之间用逗号分隔")
+    private String ancestors;
+
+    @Schema(description = "是否启用")
+    private String enableFlag;
+
+    @Schema(description = "可用寿命")
+    private String serviceLife;
+
+    @Schema(description = "剩余寿命")
+    private String availableLife;
+
+    @Schema(description = "可用次数")
+    private Integer serviceTimes;
+
+    @Schema(description = "剩余次数")
+    private Integer availableTimes;
+
+    @Schema(description = "物资类型图标")
+    private String materialsTypeIcon;
+
+    @Schema(description = "物资类型缩略图")
+    private String materialsTypePicture;
+
+    @Schema(description = "物资检查标准")
+    private String checkStandard;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态", example = "1")
+    private String status;
+
+    @Schema(description = "规格属性项")
+    private String propertyIds;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 83 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypeRespVO.java

@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialstype.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 MaterialsTypeRespVO {
+
+    @Schema(description = "物资类型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19160")
+    @ExcelProperty("物资类型ID")
+    private Long id;
+
+    @Schema(description = "物资类型编号")
+    @ExcelProperty("物资类型编号")
+    private String materialsTypeCode;
+
+    @Schema(description = "物资类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @ExcelProperty("物资类型名称")
+    private String materialsTypeName;
+
+    @Schema(description = "父类型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18911")
+    @ExcelProperty("父类型ID")
+    private Long parentId;
+
+    @Schema(description = "所有父节点ID,各值之间用逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("所有父节点ID,各值之间用逗号分隔")
+    private String ancestors;
+
+    @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("是否启用")
+    private String enableFlag;
+
+    @Schema(description = "可用寿命")
+    @ExcelProperty("可用寿命")
+    private String serviceLife;
+
+    @Schema(description = "剩余寿命")
+    @ExcelProperty("剩余寿命")
+    private String availableLife;
+
+    @Schema(description = "可用次数")
+    @ExcelProperty("可用次数")
+    private Integer serviceTimes;
+
+    @Schema(description = "剩余次数")
+    @ExcelProperty("剩余次数")
+    private Integer availableTimes;
+
+    @Schema(description = "物资类型图标")
+    @ExcelProperty("物资类型图标")
+    private String materialsTypeIcon;
+
+    @Schema(description = "物资类型缩略图")
+    @ExcelProperty("物资类型缩略图")
+    private String materialsTypePicture;
+
+    @Schema(description = "物资检查标准")
+    @ExcelProperty("物资检查标准")
+    private String checkStandard;
+
+    @Schema(description = "备注", example = "你猜")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态", example = "1")
+    @ExcelProperty("状态")
+    private String status;
+
+    @Schema(description = "规格属性项")
+    @ExcelProperty("规格属性项")
+    private String propertyIds;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 64 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/materialstype/vo/MaterialsTypeSaveReqVO.java

@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.materialstype.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 MaterialsTypeSaveReqVO {
+
+    @Schema(description = "物资类型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19160")
+    private Long id;
+
+    @Schema(description = "物资类型编号")
+    private String materialsTypeCode;
+
+    @Schema(description = "物资类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @NotEmpty(message = "物资类型名称不能为空")
+    private String materialsTypeName;
+
+    @Schema(description = "父类型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18911")
+    @NotNull(message = "父类型ID不能为空")
+    private Long parentId;
+
+    @Schema(description = "所有父节点ID,各值之间用逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "所有父节点ID,各值之间用逗号分隔不能为空")
+    private String ancestors;
+
+    @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "是否启用不能为空")
+    private String enableFlag;
+
+    @Schema(description = "可用寿命")
+    private String serviceLife;
+
+    @Schema(description = "剩余寿命")
+    private String availableLife;
+
+    @Schema(description = "可用次数")
+    private Integer serviceTimes;
+
+    @Schema(description = "剩余次数")
+    private Integer availableTimes;
+
+    @Schema(description = "物资类型图标")
+    private String materialsTypeIcon;
+
+    @Schema(description = "物资类型缩略图")
+    private String materialsTypePicture;
+
+    @Schema(description = "物资检查标准")
+    private String checkStandard;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态", example = "1")
+    private String status;
+
+    @Schema(description = "规格属性项")
+    private String propertyIds;
+
+}

+ 54 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/cabinetopenrecord/CabinetOpenRecordDO.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.cabinetopenrecord;
+
+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("isc_cabinet_open_record")
+@KeySequence("isc_cabinet_open_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CabinetOpenRecordDO extends BaseDO {
+
+    /**
+     * 主键ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 物资柜ID
+     */
+    private Long cabinetId;
+    /**
+     * 开门类型(0-物资领取归还 1-物资检查 2-物资更换)
+     */
+    private String openType;
+    /**
+     * 开门时间
+     */
+    private LocalDateTime openTime;
+    /**
+     * 关门时间
+     */
+    private LocalDateTime closeTime;
+    /**
+     * 开门人员
+     */
+    private String userId;
+
+
+}

+ 44 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/materialsproperty/MaterialsPropertyDO.java

@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.materialsproperty;
+
+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("isc_materials_property")
+@KeySequence("isc_materials_property_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialsPropertyDO extends BaseDO {
+
+    /**
+     * 编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 属性项名称
+     */
+    private String propertyName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 物资状态(0-正常 1-异常 2-被更换)
+     */
+    private String status;
+
+
+}

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

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.materialspropertyvalue;
+
+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("isc_materials_property_value")
+@KeySequence("isc_materials_property_value_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialsPropertyValueDO extends BaseDO {
+
+    /**
+     * 编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 属性项的编号
+     */
+    private Long propertyId;
+    /**
+     * 属性值名称
+     */
+    private String valueName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 物资状态(0-正常 1-异常 2-被更换)
+     */
+    private String status;
+
+
+}

+ 92 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/materialstype/MaterialsTypeDO.java

@@ -0,0 +1,92 @@
+package cn.iocoder.yudao.module.iscs.dal.dataobject.materialstype;
+
+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("isc_materials_type")
+@KeySequence("isc_materials_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialsTypeDO extends BaseDO {
+
+    /**
+     * 物资类型ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 物资类型编号
+     */
+    private String materialsTypeCode;
+    /**
+     * 物资类型名称
+     */
+    private String materialsTypeName;
+    /**
+     * 父类型ID
+     */
+    private Long parentId;
+    /**
+     * 所有父节点ID,各值之间用逗号分隔
+     */
+    private String ancestors;
+    /**
+     * 是否启用
+     */
+    private String enableFlag;
+    /**
+     * 可用寿命
+     */
+    private String serviceLife;
+    /**
+     * 剩余寿命
+     */
+    private String availableLife;
+    /**
+     * 可用次数
+     */
+    private Integer serviceTimes;
+    /**
+     * 剩余次数
+     */
+    private Integer availableTimes;
+    /**
+     * 物资类型图标
+     */
+    private String materialsTypeIcon;
+    /**
+     * 物资类型缩略图
+     */
+    private String materialsTypePicture;
+    /**
+     * 物资检查标准
+     */
+    private String checkStandard;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态
+     */
+    private String status;
+    /**
+     * 规格属性项
+     */
+    private String propertyIds;
+
+
+}

+ 31 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/cabinetopenrecord/CabinetOpenRecordMapper.java

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.cabinetopenrecord;
+
+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.cabinetopenrecord.CabinetOpenRecordDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.vo.*;
+
+/**
+ * 物资柜开关门记录 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface CabinetOpenRecordMapper extends BaseMapperX<CabinetOpenRecordDO> {
+
+    default PageResult<CabinetOpenRecordDO> selectPage(CabinetOpenRecordPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<CabinetOpenRecordDO>()
+                .eqIfPresent(CabinetOpenRecordDO::getCabinetId, reqVO.getCabinetId())
+                .eqIfPresent(CabinetOpenRecordDO::getOpenType, reqVO.getOpenType())
+                .betweenIfPresent(CabinetOpenRecordDO::getOpenTime, reqVO.getOpenTime())
+                .betweenIfPresent(CabinetOpenRecordDO::getCloseTime, reqVO.getCloseTime())
+                .eqIfPresent(CabinetOpenRecordDO::getUserId, reqVO.getUserId())
+                .betweenIfPresent(CabinetOpenRecordDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(CabinetOpenRecordDO::getId));
+    }
+
+}

+ 29 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/materialsproperty/MaterialsPropertyMapper.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.materialsproperty;
+
+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.materialsproperty.MaterialsPropertyDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.vo.*;
+
+/**
+ * 物资属性项 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface MaterialsPropertyMapper extends BaseMapperX<MaterialsPropertyDO> {
+
+    default PageResult<MaterialsPropertyDO> selectPage(MaterialsPropertyPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MaterialsPropertyDO>()
+                .likeIfPresent(MaterialsPropertyDO::getPropertyName, reqVO.getPropertyName())
+                .eqIfPresent(MaterialsPropertyDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(MaterialsPropertyDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(MaterialsPropertyDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(MaterialsPropertyDO::getId));
+    }
+
+}

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

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.materialspropertyvalue;
+
+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.materialspropertyvalue.MaterialsPropertyValueDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.vo.*;
+
+/**
+ * 物资属性值 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface MaterialsPropertyValueMapper extends BaseMapperX<MaterialsPropertyValueDO> {
+
+    default PageResult<MaterialsPropertyValueDO> selectPage(MaterialsPropertyValuePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MaterialsPropertyValueDO>()
+                .eqIfPresent(MaterialsPropertyValueDO::getPropertyId, reqVO.getPropertyId())
+                .likeIfPresent(MaterialsPropertyValueDO::getValueName, reqVO.getValueName())
+                .eqIfPresent(MaterialsPropertyValueDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(MaterialsPropertyValueDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(MaterialsPropertyValueDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(MaterialsPropertyValueDO::getId));
+    }
+
+}

+ 41 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/materialstype/MaterialsTypeMapper.java

@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.iscs.dal.mysql.materialstype;
+
+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.materialstype.MaterialsTypeDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialstype.vo.*;
+
+/**
+ * 物资类型 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface MaterialsTypeMapper extends BaseMapperX<MaterialsTypeDO> {
+
+    default PageResult<MaterialsTypeDO> selectPage(MaterialsTypePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<MaterialsTypeDO>()
+                .eqIfPresent(MaterialsTypeDO::getMaterialsTypeCode, reqVO.getMaterialsTypeCode())
+                .likeIfPresent(MaterialsTypeDO::getMaterialsTypeName, reqVO.getMaterialsTypeName())
+                .eqIfPresent(MaterialsTypeDO::getParentId, reqVO.getParentId())
+                .eqIfPresent(MaterialsTypeDO::getAncestors, reqVO.getAncestors())
+                .eqIfPresent(MaterialsTypeDO::getEnableFlag, reqVO.getEnableFlag())
+                .eqIfPresent(MaterialsTypeDO::getServiceLife, reqVO.getServiceLife())
+                .eqIfPresent(MaterialsTypeDO::getAvailableLife, reqVO.getAvailableLife())
+                .eqIfPresent(MaterialsTypeDO::getServiceTimes, reqVO.getServiceTimes())
+                .eqIfPresent(MaterialsTypeDO::getAvailableTimes, reqVO.getAvailableTimes())
+                .eqIfPresent(MaterialsTypeDO::getMaterialsTypeIcon, reqVO.getMaterialsTypeIcon())
+                .eqIfPresent(MaterialsTypeDO::getMaterialsTypePicture, reqVO.getMaterialsTypePicture())
+                .eqIfPresent(MaterialsTypeDO::getCheckStandard, reqVO.getCheckStandard())
+                .eqIfPresent(MaterialsTypeDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(MaterialsTypeDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(MaterialsTypeDO::getPropertyIds, reqVO.getPropertyIds())
+                .betweenIfPresent(MaterialsTypeDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(MaterialsTypeDO::getId));
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/cabinetopenrecord/CabinetOpenRecordService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.cabinetopenrecord;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.cabinetopenrecord.CabinetOpenRecordDO;
+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 CabinetOpenRecordService extends IService<CabinetOpenRecordDO> {
+
+    /**
+     * 创建物资柜开关门记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createCabinetOpenRecord(@Valid CabinetOpenRecordSaveReqVO createReqVO);
+
+    /**
+     * 更新物资柜开关门记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateCabinetOpenRecord(@Valid CabinetOpenRecordSaveReqVO updateReqVO);
+
+    /**
+     * 删除物资柜开关门记录
+     *
+     * @param id 编号
+     */
+    void deleteCabinetOpenRecord(Long id);
+
+    /**
+    * 批量删除物资柜开关门记录
+    *
+    * @param ids 编号
+    */
+    void deleteCabinetOpenRecordListByIds(List<Long> ids);
+
+    /**
+     * 获得物资柜开关门记录
+     *
+     * @param id 编号
+     * @return 物资柜开关门记录
+     */
+    CabinetOpenRecordDO getCabinetOpenRecord(Long id);
+
+    /**
+     * 获得物资柜开关门记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物资柜开关门记录分页
+     */
+    PageResult<CabinetOpenRecordDO> getCabinetOpenRecordPage(CabinetOpenRecordPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/cabinetopenrecord/CabinetOpenRecordServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.cabinetopenrecord;
+
+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.cabinetopenrecord.vo.CabinetOpenRecordPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.cabinetopenrecord.vo.CabinetOpenRecordSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.cabinetopenrecord.CabinetOpenRecordDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.cabinetopenrecord.CabinetOpenRecordMapper;
+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 CabinetOpenRecordServiceImpl extends ServiceImpl<CabinetOpenRecordMapper, CabinetOpenRecordDO> implements CabinetOpenRecordService {
+
+    @Resource
+    private CabinetOpenRecordMapper cabinetOpenRecordMapper;
+
+    @Override
+    public Long createCabinetOpenRecord(CabinetOpenRecordSaveReqVO createReqVO) {
+        // 插入
+        CabinetOpenRecordDO cabinetOpenRecord = BeanUtils.toBean(createReqVO, CabinetOpenRecordDO.class);
+        cabinetOpenRecordMapper.insert(cabinetOpenRecord);
+
+        // 返回
+        return cabinetOpenRecord.getId();
+    }
+
+    @Override
+    public void updateCabinetOpenRecord(CabinetOpenRecordSaveReqVO updateReqVO) {
+        // 校验存在
+        validateCabinetOpenRecordExists(updateReqVO.getId());
+        // 更新
+        CabinetOpenRecordDO updateObj = BeanUtils.toBean(updateReqVO, CabinetOpenRecordDO.class);
+        cabinetOpenRecordMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteCabinetOpenRecord(Long id) {
+        // 校验存在
+        validateCabinetOpenRecordExists(id);
+        // 删除
+        cabinetOpenRecordMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteCabinetOpenRecordListByIds(List<Long> ids) {
+        // 校验存在
+        validateCabinetOpenRecordExists(ids);
+        // 删除
+        cabinetOpenRecordMapper.deleteByIds(ids);
+        }
+
+    private void validateCabinetOpenRecordExists(List<Long> ids) {
+        List<CabinetOpenRecordDO> list = cabinetOpenRecordMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(CABINET_OPEN_RECORD_NOT_EXISTS);
+        }
+    }
+
+    private void validateCabinetOpenRecordExists(Long id) {
+        if (cabinetOpenRecordMapper.selectById(id) == null) {
+            /// throw exception(CABINET_OPEN_RECORD_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public CabinetOpenRecordDO getCabinetOpenRecord(Long id) {
+        return cabinetOpenRecordMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<CabinetOpenRecordDO> getCabinetOpenRecordPage(CabinetOpenRecordPageReqVO pageReqVO) {
+        return cabinetOpenRecordMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialsproperty/MaterialsPropertyService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.materialsproperty;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialsproperty.MaterialsPropertyDO;
+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 MaterialsPropertyService extends IService<MaterialsPropertyDO> {
+
+    /**
+     * 创建物资属性项
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createMaterialsProperty(@Valid MaterialsPropertySaveReqVO createReqVO);
+
+    /**
+     * 更新物资属性项
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMaterialsProperty(@Valid MaterialsPropertySaveReqVO updateReqVO);
+
+    /**
+     * 删除物资属性项
+     *
+     * @param id 编号
+     */
+    void deleteMaterialsProperty(Long id);
+
+    /**
+    * 批量删除物资属性项
+    *
+    * @param ids 编号
+    */
+    void deleteMaterialsPropertyListByIds(List<Long> ids);
+
+    /**
+     * 获得物资属性项
+     *
+     * @param id 编号
+     * @return 物资属性项
+     */
+    MaterialsPropertyDO getMaterialsProperty(Long id);
+
+    /**
+     * 获得物资属性项分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物资属性项分页
+     */
+    PageResult<MaterialsPropertyDO> getMaterialsPropertyPage(MaterialsPropertyPageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialsproperty/MaterialsPropertyServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.materialsproperty;
+
+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.materialsproperty.vo.MaterialsPropertyPageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialsproperty.vo.MaterialsPropertySaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialsproperty.MaterialsPropertyDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.materialsproperty.MaterialsPropertyMapper;
+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 MaterialsPropertyServiceImpl extends ServiceImpl<MaterialsPropertyMapper, MaterialsPropertyDO> implements MaterialsPropertyService {
+
+    @Resource
+    private MaterialsPropertyMapper materialsPropertyMapper;
+
+    @Override
+    public Long createMaterialsProperty(MaterialsPropertySaveReqVO createReqVO) {
+        // 插入
+        MaterialsPropertyDO materialsProperty = BeanUtils.toBean(createReqVO, MaterialsPropertyDO.class);
+        materialsPropertyMapper.insert(materialsProperty);
+
+        // 返回
+        return materialsProperty.getId();
+    }
+
+    @Override
+    public void updateMaterialsProperty(MaterialsPropertySaveReqVO updateReqVO) {
+        // 校验存在
+        validateMaterialsPropertyExists(updateReqVO.getId());
+        // 更新
+        MaterialsPropertyDO updateObj = BeanUtils.toBean(updateReqVO, MaterialsPropertyDO.class);
+        materialsPropertyMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMaterialsProperty(Long id) {
+        // 校验存在
+        validateMaterialsPropertyExists(id);
+        // 删除
+        materialsPropertyMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMaterialsPropertyListByIds(List<Long> ids) {
+        // 校验存在
+        validateMaterialsPropertyExists(ids);
+        // 删除
+        materialsPropertyMapper.deleteByIds(ids);
+        }
+
+    private void validateMaterialsPropertyExists(List<Long> ids) {
+        List<MaterialsPropertyDO> list = materialsPropertyMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(MATERIALS_PROPERTY_NOT_EXISTS);
+        }
+    }
+
+    private void validateMaterialsPropertyExists(Long id) {
+        if (materialsPropertyMapper.selectById(id) == null) {
+            /// throw exception(MATERIALS_PROPERTY_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MaterialsPropertyDO getMaterialsProperty(Long id) {
+        return materialsPropertyMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MaterialsPropertyDO> getMaterialsPropertyPage(MaterialsPropertyPageReqVO pageReqVO) {
+        return materialsPropertyMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialspropertyvalue/MaterialsPropertyValueService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.materialspropertyvalue;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialspropertyvalue.MaterialsPropertyValueDO;
+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 MaterialsPropertyValueService extends IService<MaterialsPropertyValueDO> {
+
+    /**
+     * 创建物资属性值
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createMaterialsPropertyValue(@Valid MaterialsPropertyValueSaveReqVO createReqVO);
+
+    /**
+     * 更新物资属性值
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMaterialsPropertyValue(@Valid MaterialsPropertyValueSaveReqVO updateReqVO);
+
+    /**
+     * 删除物资属性值
+     *
+     * @param id 编号
+     */
+    void deleteMaterialsPropertyValue(Long id);
+
+    /**
+    * 批量删除物资属性值
+    *
+    * @param ids 编号
+    */
+    void deleteMaterialsPropertyValueListByIds(List<Long> ids);
+
+    /**
+     * 获得物资属性值
+     *
+     * @param id 编号
+     * @return 物资属性值
+     */
+    MaterialsPropertyValueDO getMaterialsPropertyValue(Long id);
+
+    /**
+     * 获得物资属性值分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物资属性值分页
+     */
+    PageResult<MaterialsPropertyValueDO> getMaterialsPropertyValuePage(MaterialsPropertyValuePageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialspropertyvalue/MaterialsPropertyValueServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.materialspropertyvalue;
+
+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.materialspropertyvalue.vo.MaterialsPropertyValuePageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialspropertyvalue.vo.MaterialsPropertyValueSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialspropertyvalue.MaterialsPropertyValueDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.materialspropertyvalue.MaterialsPropertyValueMapper;
+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 MaterialsPropertyValueServiceImpl extends ServiceImpl<MaterialsPropertyValueMapper, MaterialsPropertyValueDO> implements MaterialsPropertyValueService {
+
+    @Resource
+    private MaterialsPropertyValueMapper materialsPropertyValueMapper;
+
+    @Override
+    public Long createMaterialsPropertyValue(MaterialsPropertyValueSaveReqVO createReqVO) {
+        // 插入
+        MaterialsPropertyValueDO materialsPropertyValue = BeanUtils.toBean(createReqVO, MaterialsPropertyValueDO.class);
+        materialsPropertyValueMapper.insert(materialsPropertyValue);
+
+        // 返回
+        return materialsPropertyValue.getId();
+    }
+
+    @Override
+    public void updateMaterialsPropertyValue(MaterialsPropertyValueSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMaterialsPropertyValueExists(updateReqVO.getId());
+        // 更新
+        MaterialsPropertyValueDO updateObj = BeanUtils.toBean(updateReqVO, MaterialsPropertyValueDO.class);
+        materialsPropertyValueMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMaterialsPropertyValue(Long id) {
+        // 校验存在
+        validateMaterialsPropertyValueExists(id);
+        // 删除
+        materialsPropertyValueMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMaterialsPropertyValueListByIds(List<Long> ids) {
+        // 校验存在
+        validateMaterialsPropertyValueExists(ids);
+        // 删除
+        materialsPropertyValueMapper.deleteByIds(ids);
+        }
+
+    private void validateMaterialsPropertyValueExists(List<Long> ids) {
+        List<MaterialsPropertyValueDO> list = materialsPropertyValueMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(MATERIALS_PROPERTY_VALUE_NOT_EXISTS);
+        }
+    }
+
+    private void validateMaterialsPropertyValueExists(Long id) {
+        if (materialsPropertyValueMapper.selectById(id) == null) {
+            /// throw exception(MATERIALS_PROPERTY_VALUE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MaterialsPropertyValueDO getMaterialsPropertyValue(Long id) {
+        return materialsPropertyValueMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MaterialsPropertyValueDO> getMaterialsPropertyValuePage(MaterialsPropertyValuePageReqVO pageReqVO) {
+        return materialsPropertyValueMapper.selectPage(pageReqVO);
+    }
+
+}

+ 63 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialstype/MaterialsTypeService.java

@@ -0,0 +1,63 @@
+package cn.iocoder.yudao.module.iscs.service.materialstype;
+
+import java.util.*;
+import jakarta.validation.*;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialstype.vo.*;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialstype.MaterialsTypeDO;
+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 MaterialsTypeService extends IService<MaterialsTypeDO> {
+
+    /**
+     * 创建物资类型
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createMaterialsType(@Valid MaterialsTypeSaveReqVO createReqVO);
+
+    /**
+     * 更新物资类型
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateMaterialsType(@Valid MaterialsTypeSaveReqVO updateReqVO);
+
+    /**
+     * 删除物资类型
+     *
+     * @param id 编号
+     */
+    void deleteMaterialsType(Long id);
+
+    /**
+    * 批量删除物资类型
+    *
+    * @param ids 编号
+    */
+    void deleteMaterialsTypeListByIds(List<Long> ids);
+
+    /**
+     * 获得物资类型
+     *
+     * @param id 编号
+     * @return 物资类型
+     */
+    MaterialsTypeDO getMaterialsType(Long id);
+
+    /**
+     * 获得物资类型分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物资类型分页
+     */
+    PageResult<MaterialsTypeDO> getMaterialsTypePage(MaterialsTypePageReqVO pageReqVO);
+
+}

+ 87 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/materialstype/MaterialsTypeServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.module.iscs.service.materialstype;
+
+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.materialstype.vo.MaterialsTypePageReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.materialstype.vo.MaterialsTypeSaveReqVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialstype.MaterialsTypeDO;
+import cn.iocoder.yudao.module.iscs.dal.mysql.materialstype.MaterialsTypeMapper;
+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 MaterialsTypeServiceImpl extends ServiceImpl<MaterialsTypeMapper, MaterialsTypeDO> implements MaterialsTypeService {
+
+    @Resource
+    private MaterialsTypeMapper materialsTypeMapper;
+
+    @Override
+    public Long createMaterialsType(MaterialsTypeSaveReqVO createReqVO) {
+        // 插入
+        MaterialsTypeDO materialsType = BeanUtils.toBean(createReqVO, MaterialsTypeDO.class);
+        materialsTypeMapper.insert(materialsType);
+
+        // 返回
+        return materialsType.getId();
+    }
+
+    @Override
+    public void updateMaterialsType(MaterialsTypeSaveReqVO updateReqVO) {
+        // 校验存在
+        validateMaterialsTypeExists(updateReqVO.getId());
+        // 更新
+        MaterialsTypeDO updateObj = BeanUtils.toBean(updateReqVO, MaterialsTypeDO.class);
+        materialsTypeMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteMaterialsType(Long id) {
+        // 校验存在
+        validateMaterialsTypeExists(id);
+        // 删除
+        materialsTypeMapper.deleteById(id);
+    }
+
+    @Override
+        public void deleteMaterialsTypeListByIds(List<Long> ids) {
+        // 校验存在
+        validateMaterialsTypeExists(ids);
+        // 删除
+        materialsTypeMapper.deleteByIds(ids);
+        }
+
+    private void validateMaterialsTypeExists(List<Long> ids) {
+        List<MaterialsTypeDO> list = materialsTypeMapper.selectByIds(ids);
+        if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
+            /// throw exception(MATERIALS_TYPE_NOT_EXISTS);
+        }
+    }
+
+    private void validateMaterialsTypeExists(Long id) {
+        if (materialsTypeMapper.selectById(id) == null) {
+            /// throw exception(MATERIALS_TYPE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public MaterialsTypeDO getMaterialsType(Long id) {
+        return materialsTypeMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<MaterialsTypeDO> getMaterialsTypePage(MaterialsTypePageReqVO pageReqVO) {
+        return materialsTypeMapper.selectPage(pageReqVO);
+    }
+
+}

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