Bladeren bron

pms 物料领用

zhangcl 2 maanden geleden
bovenliggende
commit
15d025a0e1
17 gewijzigde bestanden met toevoegingen van 1088 en 0 verwijderingen
  1. 2 0
      yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/ErrorCodeConstant.java
  2. 93 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/IotMaterialRequisitionController.java
  3. 71 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionPageReqVO.java
  4. 84 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionRespVO.java
  5. 61 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionSaveReqVO.java
  6. 93 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailController.java
  7. 61 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailPageReqVO.java
  8. 72 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailRespVO.java
  9. 51 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailSaveReqVO.java
  10. 93 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmaterialrequisition/IotMaterialRequisitionDO.java
  11. 80 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailDO.java
  12. 39 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialrequisition/IotMaterialRequisitionMapper.java
  13. 36 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailMapper.java
  14. 55 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisition/IotMaterialRequisitionService.java
  15. 71 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisition/IotMaterialRequisitionServiceImpl.java
  16. 55 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailService.java
  17. 71 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailServiceImpl.java

+ 2 - 0
yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/ErrorCodeConstant.java

@@ -64,4 +64,6 @@ public interface ErrorCodeConstant{
     ErrorCode IOT_DEVICE_ALLOT_LOG_NOT_EXISTS = new ErrorCode(150, "设备调拨日志不存在");
     ErrorCode IOT_DEVICE_PERSON_LOG_NOT_EXISTS = new ErrorCode(151, "设备责任人日志不存在");
     ErrorCode IOT_SAP_SYNC_LOG_NOT_EXISTS = new ErrorCode(153, "操作日志记录 V2 版本不存在");
+    ErrorCode IOT_MATERIAL_REQUISITION_NOT_EXISTS = new ErrorCode(154, "物料领用不存在");
+    ErrorCode IOT_MATERIAL_REQUISITION_DETAIL_NOT_EXISTS = new ErrorCode(155, "PMS 物料领用明细不存在");
 }

+ 93 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/IotMaterialRequisitionController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition.IotMaterialRequisitionDO;
+import cn.iocoder.yudao.module.pms.service.iotmaterialrequisition.IotMaterialRequisitionService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 物料领用")
+@RestController
+@RequestMapping("/pms/iot-material-requisition")
+@Validated
+public class IotMaterialRequisitionController {
+
+    @Resource
+    private IotMaterialRequisitionService iotMaterialRequisitionService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建物料领用")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:create')")
+    public CommonResult<Long> createIotMaterialRequisition(@Valid @RequestBody IotMaterialRequisitionSaveReqVO createReqVO) {
+        return success(iotMaterialRequisitionService.createIotMaterialRequisition(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新物料领用")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:update')")
+    public CommonResult<Boolean> updateIotMaterialRequisition(@Valid @RequestBody IotMaterialRequisitionSaveReqVO updateReqVO) {
+        iotMaterialRequisitionService.updateIotMaterialRequisition(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除物料领用")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:delete')")
+    public CommonResult<Boolean> deleteIotMaterialRequisition(@RequestParam("id") Long id) {
+        iotMaterialRequisitionService.deleteIotMaterialRequisition(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得物料领用")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:query')")
+    public CommonResult<IotMaterialRequisitionRespVO> getIotMaterialRequisition(@RequestParam("id") Long id) {
+        IotMaterialRequisitionDO iotMaterialRequisition = iotMaterialRequisitionService.getIotMaterialRequisition(id);
+        return success(BeanUtils.toBean(iotMaterialRequisition, IotMaterialRequisitionRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得物料领用分页")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:query')")
+    public CommonResult<PageResult<IotMaterialRequisitionRespVO>> getIotMaterialRequisitionPage(@Valid IotMaterialRequisitionPageReqVO pageReqVO) {
+        PageResult<IotMaterialRequisitionDO> pageResult = iotMaterialRequisitionService.getIotMaterialRequisitionPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, IotMaterialRequisitionRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出物料领用 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportIotMaterialRequisitionExcel(@Valid IotMaterialRequisitionPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotMaterialRequisitionDO> list = iotMaterialRequisitionService.getIotMaterialRequisitionPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "物料领用.xls", "数据", IotMaterialRequisitionRespVO.class,
+                        BeanUtils.toBean(list, IotMaterialRequisitionRespVO.class));
+    }
+
+}

+ 71 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionPageReqVO.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+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
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class IotMaterialRequisitionPageReqVO extends PageParam {
+
+    @Schema(description = "部门id", example = "21691")
+    private Long deptId;
+
+    @Schema(description = "物料领用单编号")
+    private String requisitionNumber;
+
+    @Schema(description = "物料领用单名称", example = "李四")
+    private String name;
+
+    @Schema(description = "领用用途(1维修  2保养 3其它)", example = "2")
+    private Integer type;
+
+    @Schema(description = "领用人姓名")
+    private String responsiblePerson;
+
+    @Schema(description = "物料总费用")
+    private BigDecimal cost;
+
+    @Schema(description = "领用结果(1待执行 2已执行)")
+    private Integer result;
+
+    @Schema(description = "其他费用")
+    private BigDecimal otherCost;
+
+    @Schema(description = "人工费用")
+    private BigDecimal laborCost;
+
+    @Schema(description = "领用日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] requisitionTime;
+
+    @Schema(description = "领用原因", example = "不好")
+    private String reason;
+
+    @Schema(description = "备注(如特殊要求、紧急程度)", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "状态 0=未出库 1=已出库 2=已关闭", example = "1")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "3328")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
+    private Integer auditStatus;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 84 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionRespVO.java

@@ -0,0 +1,84 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 物料领用 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotMaterialRequisitionRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32508")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "部门id", example = "21691")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "物料领用单编号")
+    @ExcelProperty("物料领用单编号")
+    private String requisitionNumber;
+
+    @Schema(description = "物料领用单名称", example = "李四")
+    @ExcelProperty("物料领用单名称")
+    private String name;
+
+    @Schema(description = "领用用途(1维修  2保养 3其它)", example = "2")
+    @ExcelProperty("领用用途(1维修  2保养 3其它)")
+    private Integer type;
+
+    @Schema(description = "领用人姓名")
+    @ExcelProperty("领用人姓名")
+    private String responsiblePerson;
+
+    @Schema(description = "物料总费用")
+    @ExcelProperty("物料总费用")
+    private BigDecimal cost;
+
+    @Schema(description = "领用结果(1待执行 2已执行)")
+    @ExcelProperty("领用结果(1待执行 2已执行)")
+    private Integer result;
+
+    @Schema(description = "其他费用")
+    @ExcelProperty("其他费用")
+    private BigDecimal otherCost;
+
+    @Schema(description = "人工费用")
+    @ExcelProperty("人工费用")
+    private BigDecimal laborCost;
+
+    @Schema(description = "领用日期")
+    @ExcelProperty("领用日期")
+    private LocalDateTime requisitionTime;
+
+    @Schema(description = "领用原因", example = "不好")
+    @ExcelProperty("领用原因")
+    private String reason;
+
+    @Schema(description = "备注(如特殊要求、紧急程度)", example = "你说的对")
+    @ExcelProperty("备注(如特殊要求、紧急程度)")
+    private String remark;
+
+    @Schema(description = "状态 0=未出库 1=已出库 2=已关闭", example = "1")
+    @ExcelProperty("状态 0=未出库 1=已出库 2=已关闭")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "3328")
+    @ExcelProperty("流程实例id")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
+    @ExcelProperty("审批状态 未提交、审批中、审批通过、审批不通过、已取消")
+    private Integer auditStatus;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 61 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisition/vo/IotMaterialRequisitionSaveReqVO.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 物料领用新增/修改 Request VO")
+@Data
+public class IotMaterialRequisitionSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32508")
+    private Long id;
+
+    @Schema(description = "部门id", example = "21691")
+    private Long deptId;
+
+    @Schema(description = "物料领用单编号")
+    private String requisitionNumber;
+
+    @Schema(description = "物料领用单名称", example = "李四")
+    private String name;
+
+    @Schema(description = "领用用途(1维修  2保养 3其它)", example = "2")
+    private Integer type;
+
+    @Schema(description = "领用人姓名")
+    private String responsiblePerson;
+
+    @Schema(description = "物料总费用")
+    private BigDecimal cost;
+
+    @Schema(description = "领用结果(1待执行 2已执行)")
+    private Integer result;
+
+    @Schema(description = "其他费用")
+    private BigDecimal otherCost;
+
+    @Schema(description = "人工费用")
+    private BigDecimal laborCost;
+
+    @Schema(description = "领用日期")
+    private LocalDateTime requisitionTime;
+
+    @Schema(description = "领用原因", example = "不好")
+    private String reason;
+
+    @Schema(description = "备注(如特殊要求、紧急程度)", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "状态 0=未出库 1=已出库 2=已关闭", example = "1")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "3328")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
+    private Integer auditStatus;
+
+}

+ 93 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailDO;
+import cn.iocoder.yudao.module.pms.service.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - PMS 物料领用明细")
+@RestController
+@RequestMapping("/pms/iot-material-requisition-detail")
+@Validated
+public class IotMaterialRequisitionDetailController {
+
+    @Resource
+    private IotMaterialRequisitionDetailService iotMaterialRequisitionDetailService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建PMS 物料领用明细")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:create')")
+    public CommonResult<Long> createIotMaterialRequisitionDetail(@Valid @RequestBody IotMaterialRequisitionDetailSaveReqVO createReqVO) {
+        return success(iotMaterialRequisitionDetailService.createIotMaterialRequisitionDetail(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新PMS 物料领用明细")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:update')")
+    public CommonResult<Boolean> updateIotMaterialRequisitionDetail(@Valid @RequestBody IotMaterialRequisitionDetailSaveReqVO updateReqVO) {
+        iotMaterialRequisitionDetailService.updateIotMaterialRequisitionDetail(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除PMS 物料领用明细")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:delete')")
+    public CommonResult<Boolean> deleteIotMaterialRequisitionDetail(@RequestParam("id") Long id) {
+        iotMaterialRequisitionDetailService.deleteIotMaterialRequisitionDetail(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得PMS 物料领用明细")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:query')")
+    public CommonResult<IotMaterialRequisitionDetailRespVO> getIotMaterialRequisitionDetail(@RequestParam("id") Long id) {
+        IotMaterialRequisitionDetailDO iotMaterialRequisitionDetail = iotMaterialRequisitionDetailService.getIotMaterialRequisitionDetail(id);
+        return success(BeanUtils.toBean(iotMaterialRequisitionDetail, IotMaterialRequisitionDetailRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得PMS 物料领用明细分页")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:query')")
+    public CommonResult<PageResult<IotMaterialRequisitionDetailRespVO>> getIotMaterialRequisitionDetailPage(@Valid IotMaterialRequisitionDetailPageReqVO pageReqVO) {
+        PageResult<IotMaterialRequisitionDetailDO> pageResult = iotMaterialRequisitionDetailService.getIotMaterialRequisitionDetailPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, IotMaterialRequisitionDetailRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出PMS 物料领用明细 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-material-requisition-detail:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportIotMaterialRequisitionDetailExcel(@Valid IotMaterialRequisitionDetailPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotMaterialRequisitionDetailDO> list = iotMaterialRequisitionDetailService.getIotMaterialRequisitionDetailPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "PMS 物料领用明细.xls", "数据", IotMaterialRequisitionDetailRespVO.class,
+                        BeanUtils.toBean(list, IotMaterialRequisitionDetailRespVO.class));
+    }
+
+}

+ 61 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailPageReqVO.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - PMS 物料领用明细分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class IotMaterialRequisitionDetailPageReqVO extends PageParam {
+
+    @Schema(description = "物料领用单id", example = "19409")
+    private Long requisitionId;
+
+    @Schema(description = "物料id", example = "16249")
+    private Long materialId;
+
+    @Schema(description = "物料编码")
+    private String materialCode;
+
+    @Schema(description = "物料名称", example = "王五")
+    private String materialName;
+
+    @Schema(description = "领用数量")
+    private BigDecimal requisitionQuantity;
+
+    @Schema(description = "基本单位")
+    private String unit;
+
+    @Schema(description = "单价(元)", example = "16087")
+    private BigDecimal unitPrice;
+
+    @Schema(description = "总金额(元)", example = "26026")
+    private BigDecimal totalPrice;
+
+    @Schema(description = "规格型号")
+    private String specification;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态 0启用  1停用", example = "1")
+    private Integer status;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 72 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailRespVO.java

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - PMS 物料领用明细 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotMaterialRequisitionDetailRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4336")
+    @ExcelProperty("主键")
+    private Long id;
+
+    @Schema(description = "物料领用单id", example = "19409")
+    @ExcelProperty("物料领用单id")
+    private Long requisitionId;
+
+    @Schema(description = "物料id", example = "16249")
+    @ExcelProperty("物料id")
+    private Long materialId;
+
+    @Schema(description = "物料编码")
+    @ExcelProperty("物料编码")
+    private String materialCode;
+
+    @Schema(description = "物料名称", example = "王五")
+    @ExcelProperty("物料名称")
+    private String materialName;
+
+    @Schema(description = "领用数量")
+    @ExcelProperty("领用数量")
+    private BigDecimal requisitionQuantity;
+
+    @Schema(description = "基本单位")
+    @ExcelProperty("基本单位")
+    private String unit;
+
+    @Schema(description = "单价(元)", example = "16087")
+    @ExcelProperty("单价(元)")
+    private BigDecimal unitPrice;
+
+    @Schema(description = "总金额(元)", example = "26026")
+    @ExcelProperty("总金额(元)")
+    private BigDecimal totalPrice;
+
+    @Schema(description = "规格型号")
+    @ExcelProperty("规格型号")
+    private String specification;
+
+    @Schema(description = "排序")
+    @ExcelProperty("排序")
+    private Integer sort;
+
+    @Schema(description = "状态 0启用  1停用", example = "1")
+    @ExcelProperty("状态 0启用  1停用")
+    private Integer status;
+
+    @Schema(description = "备注", example = "你说的对")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 51 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialrequisitiondetail/vo/IotMaterialRequisitionDetailSaveReqVO.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - PMS 物料领用明细新增/修改 Request VO")
+@Data
+public class IotMaterialRequisitionDetailSaveReqVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4336")
+    private Long id;
+
+    @Schema(description = "物料领用单id", example = "19409")
+    private Long requisitionId;
+
+    @Schema(description = "物料id", example = "16249")
+    private Long materialId;
+
+    @Schema(description = "物料编码")
+    private String materialCode;
+
+    @Schema(description = "物料名称", example = "王五")
+    private String materialName;
+
+    @Schema(description = "领用数量")
+    private BigDecimal requisitionQuantity;
+
+    @Schema(description = "基本单位")
+    private String unit;
+
+    @Schema(description = "单价(元)", example = "16087")
+    private BigDecimal unitPrice;
+
+    @Schema(description = "总金额(元)", example = "26026")
+    private BigDecimal totalPrice;
+
+    @Schema(description = "规格型号")
+    private String specification;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态 0启用  1停用", example = "1")
+    private Integer status;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+}

+ 93 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmaterialrequisition/IotMaterialRequisitionDO.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 物料领用 DO
+ *
+ * @author ruiqi
+ */
+@TableName("rq_iot_material_requisition")
+@KeySequence("rq_iot_material_requisition_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotMaterialRequisitionDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 物料领用单编号
+     */
+    private String requisitionNumber;
+    /**
+     * 物料领用单名称
+     */
+    private String name;
+    /**
+     * 领用用途(1维修  2保养 3其它)
+     */
+    private Integer type;
+    /**
+     * 领用人姓名
+     */
+    private String responsiblePerson;
+    /**
+     * 物料总费用
+     */
+    private BigDecimal cost;
+    /**
+     * 领用结果(1待执行 2已执行)
+     */
+    private Integer result;
+    /**
+     * 其他费用
+     */
+    private BigDecimal otherCost;
+    /**
+     * 人工费用
+     */
+    private BigDecimal laborCost;
+    /**
+     * 领用日期
+     */
+    private LocalDateTime requisitionTime;
+    /**
+     * 领用原因
+     */
+    private String reason;
+    /**
+     * 备注(如特殊要求、紧急程度)
+     */
+    private String remark;
+    /**
+     * 状态 0=未出库 1=已出库 2=已关闭
+     */
+    private Integer status;
+    /**
+     * 流程实例id
+     */
+    private String processInstanceId;
+    /**
+     * 审批状态 未提交、审批中、审批通过、审批不通过、已取消
+     */
+    private Integer auditStatus;
+
+}

+ 80 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailDO.java

@@ -0,0 +1,80 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisitiondetail;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * PMS 物料领用明细 DO
+ *
+ * @author ruiqi
+ */
+@TableName("rq_iot_material_requisition_detail")
+@KeySequence("rq_iot_material_requisition_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotMaterialRequisitionDetailDO extends BaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 物料领用单id
+     */
+    private Long requisitionId;
+    /**
+     * 物料id
+     */
+    private Long materialId;
+    /**
+     * 物料编码
+     */
+    private String materialCode;
+    /**
+     * 物料名称
+     */
+    private String materialName;
+    /**
+     * 领用数量
+     */
+    private BigDecimal requisitionQuantity;
+    /**
+     * 基本单位
+     */
+    private String unit;
+    /**
+     * 单价(元)
+     */
+    private BigDecimal unitPrice;
+    /**
+     * 总金额(元)
+     */
+    private BigDecimal totalPrice;
+    /**
+     * 规格型号
+     */
+    private String specification;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 状态 0启用  1停用
+     */
+    private Integer status;
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 39 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialrequisition/IotMaterialRequisitionMapper.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.pms.dal.mysql.iotmaterialrequisition;
+
+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.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionPageReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition.IotMaterialRequisitionDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 物料领用 Mapper
+ *
+ * @author ruiqi
+ */
+@Mapper
+public interface IotMaterialRequisitionMapper extends BaseMapperX<IotMaterialRequisitionDO> {
+
+    default PageResult<IotMaterialRequisitionDO> selectPage(IotMaterialRequisitionPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<IotMaterialRequisitionDO>()
+                .eqIfPresent(IotMaterialRequisitionDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(IotMaterialRequisitionDO::getRequisitionNumber, reqVO.getRequisitionNumber())
+                .likeIfPresent(IotMaterialRequisitionDO::getName, reqVO.getName())
+                .eqIfPresent(IotMaterialRequisitionDO::getType, reqVO.getType())
+                .eqIfPresent(IotMaterialRequisitionDO::getResponsiblePerson, reqVO.getResponsiblePerson())
+                .eqIfPresent(IotMaterialRequisitionDO::getCost, reqVO.getCost())
+                .eqIfPresent(IotMaterialRequisitionDO::getResult, reqVO.getResult())
+                .eqIfPresent(IotMaterialRequisitionDO::getOtherCost, reqVO.getOtherCost())
+                .eqIfPresent(IotMaterialRequisitionDO::getLaborCost, reqVO.getLaborCost())
+                .betweenIfPresent(IotMaterialRequisitionDO::getRequisitionTime, reqVO.getRequisitionTime())
+                .eqIfPresent(IotMaterialRequisitionDO::getReason, reqVO.getReason())
+                .eqIfPresent(IotMaterialRequisitionDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(IotMaterialRequisitionDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(IotMaterialRequisitionDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+                .eqIfPresent(IotMaterialRequisitionDO::getAuditStatus, reqVO.getAuditStatus())
+                .betweenIfPresent(IotMaterialRequisitionDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(IotMaterialRequisitionDO::getId));
+    }
+
+}

+ 36 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailMapper.java

@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.pms.dal.mysql.iotmaterialrequisitiondetail;
+
+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.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailPageReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * PMS 物料领用明细 Mapper
+ *
+ * @author ruiqi
+ */
+@Mapper
+public interface IotMaterialRequisitionDetailMapper extends BaseMapperX<IotMaterialRequisitionDetailDO> {
+
+    default PageResult<IotMaterialRequisitionDetailDO> selectPage(IotMaterialRequisitionDetailPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<IotMaterialRequisitionDetailDO>()
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getRequisitionId, reqVO.getRequisitionId())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getMaterialId, reqVO.getMaterialId())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getMaterialCode, reqVO.getMaterialCode())
+                .likeIfPresent(IotMaterialRequisitionDetailDO::getMaterialName, reqVO.getMaterialName())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getRequisitionQuantity, reqVO.getRequisitionQuantity())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getUnit, reqVO.getUnit())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getUnitPrice, reqVO.getUnitPrice())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getTotalPrice, reqVO.getTotalPrice())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getSpecification, reqVO.getSpecification())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getSort, reqVO.getSort())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(IotMaterialRequisitionDetailDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(IotMaterialRequisitionDetailDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(IotMaterialRequisitionDetailDO::getId));
+    }
+
+}

+ 55 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisition/IotMaterialRequisitionService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.pms.service.iotmaterialrequisition;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition.IotMaterialRequisitionDO;
+
+import javax.validation.Valid;
+
+/**
+ * 物料领用 Service 接口
+ *
+ * @author ruiqi
+ */
+public interface IotMaterialRequisitionService {
+
+    /**
+     * 创建物料领用
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createIotMaterialRequisition(@Valid IotMaterialRequisitionSaveReqVO createReqVO);
+
+    /**
+     * 更新物料领用
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateIotMaterialRequisition(@Valid IotMaterialRequisitionSaveReqVO updateReqVO);
+
+    /**
+     * 删除物料领用
+     *
+     * @param id 编号
+     */
+    void deleteIotMaterialRequisition(Long id);
+
+    /**
+     * 获得物料领用
+     *
+     * @param id 编号
+     * @return 物料领用
+     */
+    IotMaterialRequisitionDO getIotMaterialRequisition(Long id);
+
+    /**
+     * 获得物料领用分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 物料领用分页
+     */
+    PageResult<IotMaterialRequisitionDO> getIotMaterialRequisitionPage(IotMaterialRequisitionPageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisition/IotMaterialRequisitionServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.pms.service.iotmaterialrequisition;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisition.vo.IotMaterialRequisitionSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisition.IotMaterialRequisitionDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotmaterialrequisition.IotMaterialRequisitionMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_REQUISITION_NOT_EXISTS;
+
+/**
+ * 物料领用 Service 实现类
+ *
+ * @author ruiqi
+ */
+@Service
+@Validated
+public class IotMaterialRequisitionServiceImpl implements IotMaterialRequisitionService {
+
+    @Resource
+    private IotMaterialRequisitionMapper iotMaterialRequisitionMapper;
+
+    @Override
+    public Long createIotMaterialRequisition(IotMaterialRequisitionSaveReqVO createReqVO) {
+        // 插入
+        IotMaterialRequisitionDO iotMaterialRequisition = BeanUtils.toBean(createReqVO, IotMaterialRequisitionDO.class);
+        iotMaterialRequisitionMapper.insert(iotMaterialRequisition);
+        // 返回
+        return iotMaterialRequisition.getId();
+    }
+
+    @Override
+    public void updateIotMaterialRequisition(IotMaterialRequisitionSaveReqVO updateReqVO) {
+        // 校验存在
+        validateIotMaterialRequisitionExists(updateReqVO.getId());
+        // 更新
+        IotMaterialRequisitionDO updateObj = BeanUtils.toBean(updateReqVO, IotMaterialRequisitionDO.class);
+        iotMaterialRequisitionMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteIotMaterialRequisition(Long id) {
+        // 校验存在
+        validateIotMaterialRequisitionExists(id);
+        // 删除
+        iotMaterialRequisitionMapper.deleteById(id);
+    }
+
+    private void validateIotMaterialRequisitionExists(Long id) {
+        if (iotMaterialRequisitionMapper.selectById(id) == null) {
+            throw exception(IOT_MATERIAL_REQUISITION_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public IotMaterialRequisitionDO getIotMaterialRequisition(Long id) {
+        return iotMaterialRequisitionMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<IotMaterialRequisitionDO> getIotMaterialRequisitionPage(IotMaterialRequisitionPageReqVO pageReqVO) {
+        return iotMaterialRequisitionMapper.selectPage(pageReqVO);
+    }
+
+}

+ 55 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailService.java

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.pms.service.iotmaterialrequisitiondetail;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailDO;
+
+import javax.validation.Valid;
+
+/**
+ * PMS 物料领用明细 Service 接口
+ *
+ * @author ruiqi
+ */
+public interface IotMaterialRequisitionDetailService {
+
+    /**
+     * 创建PMS 物料领用明细
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createIotMaterialRequisitionDetail(@Valid IotMaterialRequisitionDetailSaveReqVO createReqVO);
+
+    /**
+     * 更新PMS 物料领用明细
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateIotMaterialRequisitionDetail(@Valid IotMaterialRequisitionDetailSaveReqVO updateReqVO);
+
+    /**
+     * 删除PMS 物料领用明细
+     *
+     * @param id 编号
+     */
+    void deleteIotMaterialRequisitionDetail(Long id);
+
+    /**
+     * 获得PMS 物料领用明细
+     *
+     * @param id 编号
+     * @return PMS 物料领用明细
+     */
+    IotMaterialRequisitionDetailDO getIotMaterialRequisitionDetail(Long id);
+
+    /**
+     * 获得PMS 物料领用明细分页
+     *
+     * @param pageReqVO 分页查询
+     * @return PMS 物料领用明细分页
+     */
+    PageResult<IotMaterialRequisitionDetailDO> getIotMaterialRequisitionDetailPage(IotMaterialRequisitionDetailPageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialrequisitiondetail/IotMaterialRequisitionDetailServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.pms.service.iotmaterialrequisitiondetail;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialrequisitiondetail.vo.IotMaterialRequisitionDetailSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotmaterialrequisitiondetail.IotMaterialRequisitionDetailMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_REQUISITION_DETAIL_NOT_EXISTS;
+
+/**
+ * PMS 物料领用明细 Service 实现类
+ *
+ * @author ruiqi
+ */
+@Service
+@Validated
+public class IotMaterialRequisitionDetailServiceImpl implements IotMaterialRequisitionDetailService {
+
+    @Resource
+    private IotMaterialRequisitionDetailMapper iotMaterialRequisitionDetailMapper;
+
+    @Override
+    public Long createIotMaterialRequisitionDetail(IotMaterialRequisitionDetailSaveReqVO createReqVO) {
+        // 插入
+        IotMaterialRequisitionDetailDO iotMaterialRequisitionDetail = BeanUtils.toBean(createReqVO, IotMaterialRequisitionDetailDO.class);
+        iotMaterialRequisitionDetailMapper.insert(iotMaterialRequisitionDetail);
+        // 返回
+        return iotMaterialRequisitionDetail.getId();
+    }
+
+    @Override
+    public void updateIotMaterialRequisitionDetail(IotMaterialRequisitionDetailSaveReqVO updateReqVO) {
+        // 校验存在
+        validateIotMaterialRequisitionDetailExists(updateReqVO.getId());
+        // 更新
+        IotMaterialRequisitionDetailDO updateObj = BeanUtils.toBean(updateReqVO, IotMaterialRequisitionDetailDO.class);
+        iotMaterialRequisitionDetailMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteIotMaterialRequisitionDetail(Long id) {
+        // 校验存在
+        validateIotMaterialRequisitionDetailExists(id);
+        // 删除
+        iotMaterialRequisitionDetailMapper.deleteById(id);
+    }
+
+    private void validateIotMaterialRequisitionDetailExists(Long id) {
+        if (iotMaterialRequisitionDetailMapper.selectById(id) == null) {
+            throw exception(IOT_MATERIAL_REQUISITION_DETAIL_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public IotMaterialRequisitionDetailDO getIotMaterialRequisitionDetail(Long id) {
+        return iotMaterialRequisitionDetailMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<IotMaterialRequisitionDetailDO> getIotMaterialRequisitionDetailPage(IotMaterialRequisitionDetailPageReqVO pageReqVO) {
+        return iotMaterialRequisitionDetailMapper.selectPage(pageReqVO);
+    }
+
+}