Ver Fonte

pms 瑞都日报 代码初始化

zhangcl há 1 semana atrás
pai
commit
269a331928
21 ficheiros alterados com 1627 adições e 4 exclusões
  1. 2 0
      yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/ErrorCodeConstant.java
  2. 2 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdailyreportattrs/vo/IotDailyReportAttrsRespVO.java
  3. 2 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdailyreportattrs/vo/IotDailyReportAttrsSaveReqVO.java
  4. 176 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java
  5. 150 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportPageReqVO.java
  6. 236 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportRespVO.java
  7. 134 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportSaveReqVO.java
  8. 93 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreportitem/IotRdDailyReportItemController.java
  9. 61 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreportitem/vo/IotRdDailyReportItemPageReqVO.java
  10. 72 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreportitem/vo/IotRdDailyReportItemRespVO.java
  11. 51 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreportitem/vo/IotRdDailyReportItemSaveReqVO.java
  12. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdailyreportattrs/IotDailyReportAttrsDO.java
  13. 19 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotprojecttask/IotProjectTaskDO.java
  14. 196 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotrddailyreport/IotRdDailyReportDO.java
  15. 80 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotrddailyreportitem/IotRdDailyReportItemDO.java
  16. 62 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotrddailyreport/IotRdDailyReportMapper.java
  17. 36 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotrddailyreportitem/IotRdDailyReportItemMapper.java
  18. 55 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportService.java
  19. 71 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java
  20. 55 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreportitem/IotRdDailyReportItemService.java
  21. 71 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreportitem/IotRdDailyReportItemServiceImpl.java

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

@@ -92,4 +92,6 @@ public interface ErrorCodeConstant{
     ErrorCode IOT_RY_DAILY_REPORT_NOT_EXISTS = new ErrorCode(267, "瑞鹰日报不存在");
     ErrorCode IOT_RY_DAILY_REPORT_CURRENT_DEPTH_NOT_EXISTS = new ErrorCode(268, "未传递运行记录当前井深");
     ErrorCode IOT_SAP_STOCK_LOG_NOT_EXISTS = new ErrorCode(269, "PMS SAP 库存(sap同步的原始数据日志)不存在");
+    ErrorCode IOT_RD_DAILY_REPORT_NOT_EXISTS = new ErrorCode(270, "瑞都日报不存在");
+    ErrorCode IOT_RD_DAILY_REPORT_ITEM_NOT_EXISTS = new ErrorCode(271, "瑞都日报 (工作量)明细不存在");
 }

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdailyreportattrs/vo/IotDailyReportAttrsRespVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportattrs.vo;
 
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -82,7 +83,7 @@ public class IotDailyReportAttrsRespVO {
 
     @Schema(description = "不同专业公司的扩展属性")
     @ExcelProperty("不同专业公司的扩展属性")
-    private String extProperty;
+    private IotTaskAttrModelProperty extProperty;
 
     @Schema(description = "排序值")
     @ExcelProperty("排序值")

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdailyreportattrs/vo/IotDailyReportAttrsSaveReqVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportattrs.vo;
 
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -59,7 +60,7 @@ public class IotDailyReportAttrsSaveReqVO {
     private String minValue;
 
     @Schema(description = "不同专业公司的扩展属性")
-    private String extProperty;
+    private IotTaskAttrModelProperty extProperty;
 
     @Schema(description = "排序值")
     private Integer sort;

+ 176 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java

@@ -0,0 +1,176 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+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.collection.MapUtils;
+import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
+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.iotmainworkorder.vo.IotMainWorkOrderRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+import cn.iocoder.yudao.module.pms.service.IotDeviceService;
+import cn.iocoder.yudao.module.pms.service.iotprojectinfo.IotProjectInfoService;
+import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
+import cn.iocoder.yudao.module.pms.service.iotrddailyreport.IotRdDailyReportService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
+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 java.util.Set;
+import java.util.stream.Collectors;
+
+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-rd-daily-report")
+@Validated
+public class IotRdDailyReportController {
+
+    @Resource
+    private IotRdDailyReportService iotRdDailyReportService;
+
+    @Resource
+    private IotProjectInfoService iotProjectInfoService;
+
+    @Resource
+    private IotProjectTaskService iotProjectTaskService;
+
+    @Resource
+    private DeptService deptService;
+
+    @Resource
+    private IotDeviceService iotDeviceService;
+
+    @Resource
+    private AdminUserApi adminUserApi;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建瑞都日报")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:create')")
+    public CommonResult<Long> createIotRdDailyReport(@Valid @RequestBody IotRdDailyReportSaveReqVO createReqVO) {
+        return success(iotRdDailyReportService.createIotRdDailyReport(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新瑞都日报")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:update')")
+    public CommonResult<Boolean> updateIotRdDailyReport(@Valid @RequestBody IotRdDailyReportSaveReqVO updateReqVO) {
+        iotRdDailyReportService.updateIotRdDailyReport(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除瑞都日报")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:delete')")
+    public CommonResult<Boolean> deleteIotRdDailyReport(@RequestParam("id") Long id) {
+        iotRdDailyReportService.deleteIotRdDailyReport(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得瑞都日报")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")
+    public CommonResult<IotRdDailyReportRespVO> getIotRdDailyReport(@RequestParam("id") Long id) {
+        IotRdDailyReportDO iotRdDailyReport = iotRdDailyReportService.getIotRdDailyReport(id);
+        // 查询日报相关的 项目 任务 施工工艺
+        return success(buildDailyReport(iotRdDailyReport));
+    }
+
+    /**
+     * 查询日报对应的项目 任务信息
+     * @param dailyReport
+     * @return
+     */
+    private IotRdDailyReportRespVO buildDailyReport(IotRdDailyReportDO dailyReport) {
+        IotRdDailyReportRespVO dailyReportVO = BeanUtils.toBean(dailyReport, IotRdDailyReportRespVO.class);
+        // 查询日报对应的项目信息
+        if (ObjUtil.isNotEmpty(dailyReport.getProjectId())) {
+            IotProjectInfoDO project = iotProjectInfoService.getIotProjectInfo(dailyReport.getProjectId());
+            dailyReportVO.setContractName(project.getContractName());
+            dailyReportVO.setManufactureName(project.getManufactureName());
+            dailyReportVO.setCompanyId(project.getDeptId());
+        }
+        // 查询日报对应的任务信息
+        if (ObjUtil.isNotEmpty(dailyReport.getTaskId())) {
+            IotProjectTaskDO task = iotProjectTaskService.getIotProjectTask(dailyReport.getTaskId());
+            dailyReportVO.setTaskName(StrUtil.join("-", task.getWellName(), task.getLocation()));
+            dailyReportVO.setWellName(task.getWellName());
+            dailyReportVO.setLocation(task.getLocation());
+            Set<Long> deviceIds = task.getDeviceIds();
+            Set<Long> responsiblePersonIds = task.getResponsiblePerson();
+            if (CollUtil.isNotEmpty(deviceIds)) {
+                // 查询设备id集合对应的设备详情
+                List<IotDeviceRespVO> devices = iotDeviceService.getDeviceList(deviceIds);
+                if (CollUtil.isNotEmpty(devices)) {
+                    String deviceNames = devices.stream()
+                            .map(IotDeviceRespVO::getDeviceName) // 提取每个设备的deviceName
+                            .collect(Collectors.joining(","));   // 用逗号拼接所有名称
+                    dailyReportVO.setDeviceNames(deviceNames);
+                }
+            }
+            if (CollUtil.isNotEmpty(responsiblePersonIds)) {
+                List<AdminUserRespDTO> users = adminUserApi.getUserList(responsiblePersonIds);
+                String userNames = users.stream()
+                        .map(AdminUserRespDTO::getNickname) // 提取每个员工的nickName
+                        .collect(Collectors.joining(","));   // 用逗号拼接所有名称
+                dailyReportVO.setResponsiblePersonNames(userNames);
+            }
+        }
+        // 查询日报对应的部门信息
+        if (ObjUtil.isNotEmpty(dailyReport.getDeptId())) {
+            DeptDO dept = deptService.getDept(dailyReport.getDeptId());
+            dailyReportVO.setDeptName(dept.getName());
+        }
+        return dailyReportVO;
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得瑞都日报分页")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")
+    public CommonResult<PageResult<IotRdDailyReportRespVO>> getIotRdDailyReportPage(@Valid IotRdDailyReportPageReqVO pageReqVO) {
+        PageResult<IotRdDailyReportDO> pageResult = iotRdDailyReportService.getIotRdDailyReportPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, IotRdDailyReportRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出瑞都日报 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportIotRdDailyReportExcel(@Valid IotRdDailyReportPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotRdDailyReportDO> list = iotRdDailyReportService.getIotRdDailyReportPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞都日报.xls", "数据", IotRdDailyReportRespVO.class,
+                        BeanUtils.toBean(list, IotRdDailyReportRespVO.class));
+    }
+
+}

+ 150 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportPageReqVO.java

@@ -0,0 +1,150 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.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 java.time.LocalTime;
+
+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 IotRdDailyReportPageReqVO extends PageParam {
+
+    @Schema(description = "施工队伍id", example = "22577")
+    private Long deptId;
+
+    @Schema(description = "日报名称", example = "西南压裂项目部/2025-10-17日报填报")
+    private String reportName;
+
+    @Schema(description = "项目id", example = "32587")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "15678")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺([123,233])")
+    private String techniqueIds;
+
+    @Schema(description = "施工设备([123,233])")
+    private String deviceIds;
+
+    @Schema(description = "时间节点-开始")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalTime[] startTime;
+
+    @Schema(description = "时间节点-结束")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalTime[] endTime;
+
+    @Schema(description = "累计施工井")
+    private BigDecimal cumulativeWorkingWell;
+
+    @Schema(description = "累计施工层")
+    private BigDecimal cumulativeWorkingLayers;
+
+    @Schema(description = "当日泵车台次")
+    private BigDecimal dailyPumpTrips;
+
+    @Schema(description = "当日仪表/混砂")
+    private BigDecimal dailyToolsSand;
+
+    @Schema(description = "趟数", example = "29453")
+    private BigDecimal runCount;
+
+    @Schema(description = "桥塞")
+    private BigDecimal bridgePlug;
+
+    @Schema(description = "水方量")
+    private BigDecimal waterVolume;
+
+    @Schema(description = "时间H", example = "5062")
+    private BigDecimal hourCount;
+
+    @Schema(description = "当日油耗(吨)")
+    private BigDecimal dailyFuel;
+
+    @Schema(description = "当日用电量(kWh)")
+    private BigDecimal dailyPowerUsage;
+
+    @Schema(description = "生产时间(H)")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private BigDecimal[] productionTime;
+
+    @Schema(description = "非生产时间(H)")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private BigDecimal[] nonProductionTime;
+
+    @Schema(description = "非生产时间原因", example = "不喜欢")
+    private String rdNptReason;
+
+    @Schema(description = "施工开始日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] constructionStartDate;
+
+    @Schema(description = "施工结束日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] constructionEndDate;
+
+    @Schema(description = "当日生产情况生产动态", example = "2")
+    private String productionStatus;
+
+    @Schema(description = "外租情况(可能有附件)")
+    private String externalRental;
+
+    @Schema(description = "下步工作计划")
+    private String nextPlan;
+
+    @Schema(description = "施工状态(动迁上井/动迁下井/施工准备/施工...)", example = "1")
+    private String rdStatus;
+
+    @Schema(description = "故障情况")
+    private String malfunction;
+
+    @Schema(description = "故障误工h")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private BigDecimal[] faultDowntime;
+
+    @Schema(description = "人员情况")
+    private String personnel;
+
+    @Schema(description = "全员数量")
+    private BigDecimal totalStaffNum;
+
+    @Schema(description = "休假人员数量")
+    private BigDecimal leaveStaffNum;
+
+    @Schema(description = "不同专业公司的扩展属性值")
+    private String extProperty;
+
+    @Schema(description = "排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "16415")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
+    private Integer auditStatus;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 236 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportRespVO.java

@@ -0,0 +1,236 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.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;
+import java.time.LocalTime;
+import java.util.Set;
+
+@Schema(description = "管理后台 - 瑞都日报 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class IotRdDailyReportRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13853")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "施工队伍id", example = "22577")
+    @ExcelProperty("施工队伍id")
+    private Long deptId;
+
+    @Schema(description = "日报名称", example = "西南压裂项目部/2025-10-17日报填报")
+    @ExcelProperty("日报名称")
+    private String reportName;
+
+    @Schema(description = "项目id", example = "32587")
+    @ExcelProperty("项目id")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "15678")
+    @ExcelProperty("任务id")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    @ExcelProperty("项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺([123,233])")
+    @ExcelProperty("施工工艺([123,233])")
+    private Set<Long> techniqueIds;
+
+    @Schema(description = "施工设备([123,233])")
+    @ExcelProperty("施工设备([123,233])")
+    private String deviceIds;
+
+    @Schema(description = "时间节点-开始")
+    @ExcelProperty("时间节点-开始")
+    private LocalTime startTime;
+
+    @Schema(description = "时间节点-结束")
+    @ExcelProperty("时间节点-结束")
+    private LocalTime endTime;
+
+    @Schema(description = "累计施工井")
+    @ExcelProperty("累计施工井")
+    private BigDecimal cumulativeWorkingWell;
+
+    @Schema(description = "累计施工层")
+    @ExcelProperty("累计施工层")
+    private BigDecimal cumulativeWorkingLayers;
+
+    @Schema(description = "当日泵车台次")
+    @ExcelProperty("当日泵车台次")
+    private BigDecimal dailyPumpTrips;
+
+    @Schema(description = "当日仪表/混砂")
+    @ExcelProperty("当日仪表/混砂")
+    private BigDecimal dailyToolsSand;
+
+    @Schema(description = "趟数", example = "29453")
+    @ExcelProperty("趟数")
+    private BigDecimal runCount;
+
+    @Schema(description = "桥塞")
+    @ExcelProperty("桥塞")
+    private BigDecimal bridgePlug;
+
+    @Schema(description = "水方量")
+    @ExcelProperty("水方量")
+    private BigDecimal waterVolume;
+
+    @Schema(description = "时间H", example = "5062")
+    @ExcelProperty("时间H")
+    private BigDecimal hourCount;
+
+    @Schema(description = "当日油耗(吨)")
+    @ExcelProperty("当日油耗(吨)")
+    private BigDecimal dailyFuel;
+
+    @Schema(description = "当日用电量(kWh)")
+    @ExcelProperty("当日用电量(kWh)")
+    private BigDecimal dailyPowerUsage;
+
+    @Schema(description = "生产时间(H)")
+    @ExcelProperty("生产时间(H)")
+    private BigDecimal productionTime;
+
+    @Schema(description = "非生产时间(H)")
+    @ExcelProperty("非生产时间(H)")
+    private BigDecimal nonProductionTime;
+
+    @Schema(description = "非生产时间原因", example = "不喜欢")
+    @ExcelProperty("非生产时间原因")
+    private String rdNptReason;
+
+    @Schema(description = "施工开始日期")
+    @ExcelProperty("施工开始日期")
+    private LocalDateTime constructionStartDate;
+
+    @Schema(description = "施工结束日期")
+    @ExcelProperty("施工结束日期")
+    private LocalDateTime constructionEndDate;
+
+    @Schema(description = "当日生产情况生产动态", example = "2")
+    @ExcelProperty("当日生产情况生产动态")
+    private String productionStatus;
+
+    @Schema(description = "外租情况(可能有附件)")
+    @ExcelProperty("外租情况(可能有附件)")
+    private String externalRental;
+
+    @Schema(description = "下步工作计划")
+    @ExcelProperty("下步工作计划")
+    private String nextPlan;
+
+    @Schema(description = "施工状态(动迁上井/动迁下井/施工准备/施工...)", example = "1")
+    @ExcelProperty("施工状态(动迁上井/动迁下井/施工准备/施工...)")
+    private String rdStatus;
+
+    @Schema(description = "故障情况")
+    @ExcelProperty("故障情况")
+    private String malfunction;
+
+    @Schema(description = "故障误工h")
+    @ExcelProperty("故障误工h")
+    private BigDecimal faultDowntime;
+
+    @Schema(description = "人员情况")
+    @ExcelProperty("人员情况")
+    private String personnel;
+
+    @Schema(description = "全员数量")
+    @ExcelProperty("全员数量")
+    private BigDecimal totalStaffNum;
+
+    @Schema(description = "休假人员数量")
+    @ExcelProperty("休假人员数量")
+    private BigDecimal leaveStaffNum;
+
+    @Schema(description = "不同专业公司的扩展属性值")
+    @ExcelProperty("不同专业公司的扩展属性值")
+    private String extProperty;
+
+    @Schema(description = "排序值")
+    @ExcelProperty("排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "随便")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    @ExcelProperty("状态(0启用 1禁用)")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "16415")
+    @ExcelProperty("流程实例id")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "1")
+    @ExcelProperty("审批状态 未提交、审批中、审批通过、审批不通过、已取消")
+    private Integer auditStatus;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "日报填写时间")
+    @ExcelProperty("日报填写时间")
+    private LocalDateTime fillTime;
+
+    @Schema(description = "审批时间")
+    @ExcelProperty("审批时间")
+    private LocalDateTime approvalTime;
+
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "时间节点区域 startTime-endTime", example = "8:00 - 8:00")
+    @ExcelProperty("时间节点区域")
+    private String timeRange;
+
+    @Schema(description = "部门名称", example = "压裂二队")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
+    @Schema(description = "合同/项目名称", example = "酸化压裂合同")
+    @ExcelProperty("合同/项目名称")
+    private String contractName;
+
+    @Schema(description = "任务名称", example = "YS45-211平台-山西兴县")
+    @ExcelProperty("任务名称")
+    private String taskName;
+
+    @Schema(description = "井号", example = "YS45-211平台")
+    @ExcelProperty("井号")
+    private String wellName;
+
+    @Schema(description = "施工地点", example = "山西兴县")
+    @ExcelProperty("施工地点")
+    private String location;
+
+    @Schema(description = "客户名称", example = "YS45-211平台-山西兴县")
+    @ExcelProperty("客户名称")
+    private String manufactureName;
+
+    @Schema(description = "施工工艺(多个逗号分隔)", example = "压裂大包,主压裂车...")
+    @ExcelProperty("施工工艺(多个逗号分隔)")
+    private String techniqueNames;
+
+    @Schema(description = "设备配置", example = "黑EN9500,黑EN7958...")
+    @ExcelProperty("设备配置")
+    private String deviceNames;
+
+    @Schema(description = "带班干部", example = "张三,李四...")
+    @ExcelProperty("带班干部")
+    private String responsiblePersonNames;
+
+    @Schema(description = "公司id", example = "125")
+    @ExcelProperty("公司id")
+    private Long companyId;
+}

+ 134 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportSaveReqVO.java

@@ -0,0 +1,134 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Set;
+
+@Schema(description = "管理后台 - 瑞都日报新增/修改 Request VO")
+@Data
+public class IotRdDailyReportSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13853")
+    private Long id;
+
+    @Schema(description = "施工队伍id", example = "22577")
+    private Long deptId;
+
+    @Schema(description = "日报名称", example = "西南压裂项目部/2025-10-17日报填报")
+    private String reportName;
+
+    @Schema(description = "项目id", example = "32587")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "15678")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺([123,233])")
+    private Set<Long> techniqueIds;
+
+    @Schema(description = "施工设备([123,233])")
+    private Set<Long> deviceIds;
+
+    @Schema(description = "时间节点-开始")
+    private String startTime;
+
+    @Schema(description = "时间节点-结束")
+    private String endTime;
+
+    @Schema(description = "累计施工井")
+    private BigDecimal cumulativeWorkingWell;
+
+    @Schema(description = "累计施工层")
+    private BigDecimal cumulativeWorkingLayers;
+
+    @Schema(description = "当日泵车台次")
+    private BigDecimal dailyPumpTrips;
+
+    @Schema(description = "当日仪表/混砂")
+    private BigDecimal dailyToolsSand;
+
+    @Schema(description = "趟数", example = "29453")
+    private BigDecimal runCount;
+
+    @Schema(description = "桥塞")
+    private BigDecimal bridgePlug;
+
+    @Schema(description = "水方量")
+    private BigDecimal waterVolume;
+
+    @Schema(description = "时间H", example = "5062")
+    private BigDecimal hourCount;
+
+    @Schema(description = "当日油耗(吨)")
+    private BigDecimal dailyFuel;
+
+    @Schema(description = "当日用电量(kWh)")
+    private BigDecimal dailyPowerUsage;
+
+    @Schema(description = "生产时间(H)")
+    private BigDecimal productionTime;
+
+    @Schema(description = "非生产时间(H)")
+    private BigDecimal nonProductionTime;
+
+    @Schema(description = "非生产时间原因", example = "不喜欢")
+    private String rdNptReason;
+
+    @Schema(description = "施工开始日期")
+    private LocalDateTime constructionStartDate;
+
+    @Schema(description = "施工结束日期")
+    private LocalDateTime constructionEndDate;
+
+    @Schema(description = "当日生产情况生产动态", example = "2")
+    private String productionStatus;
+
+    @Schema(description = "外租情况(可能有附件)")
+    private String externalRental;
+
+    @Schema(description = "下步工作计划")
+    private String nextPlan;
+
+    @Schema(description = "施工状态(动迁上井/动迁下井/施工准备/施工...)", example = "1")
+    private String rdStatus;
+
+    @Schema(description = "故障情况")
+    private String malfunction;
+
+    @Schema(description = "故障误工h")
+    private BigDecimal faultDowntime;
+
+    @Schema(description = "人员情况")
+    private String personnel;
+
+    @Schema(description = "全员数量")
+    private BigDecimal totalStaffNum;
+
+    @Schema(description = "休假人员数量")
+    private BigDecimal leaveStaffNum;
+
+    @Schema(description = "不同专业公司的扩展属性值")
+    private String extProperty;
+
+    @Schema(description = "排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "随便")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    private Integer status;
+
+    @Schema(description = "流程实例id", example = "16415")
+    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/iotrddailyreportitem/IotRdDailyReportItemController.java

@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem;
+
+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.iotrddailyreportitem.vo.IotRdDailyReportItemPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo.IotRdDailyReportItemRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo.IotRdDailyReportItemSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreportitem.IotRdDailyReportItemDO;
+import cn.iocoder.yudao.module.pms.service.iotrddailyreportitem.IotRdDailyReportItemService;
+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-rd-daily-report-item")
+@Validated
+public class IotRdDailyReportItemController {
+
+    @Resource
+    private IotRdDailyReportItemService iotRdDailyReportItemService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建瑞都日报 (工作量)明细")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:create')")
+    public CommonResult<Long> createIotRdDailyReportItem(@Valid @RequestBody IotRdDailyReportItemSaveReqVO createReqVO) {
+        return success(iotRdDailyReportItemService.createIotRdDailyReportItem(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新瑞都日报 (工作量)明细")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:update')")
+    public CommonResult<Boolean> updateIotRdDailyReportItem(@Valid @RequestBody IotRdDailyReportItemSaveReqVO updateReqVO) {
+        iotRdDailyReportItemService.updateIotRdDailyReportItem(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除瑞都日报 (工作量)明细")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:delete')")
+    public CommonResult<Boolean> deleteIotRdDailyReportItem(@RequestParam("id") Long id) {
+        iotRdDailyReportItemService.deleteIotRdDailyReportItem(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得瑞都日报 (工作量)明细")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:query')")
+    public CommonResult<IotRdDailyReportItemRespVO> getIotRdDailyReportItem(@RequestParam("id") Long id) {
+        IotRdDailyReportItemDO iotRdDailyReportItem = iotRdDailyReportItemService.getIotRdDailyReportItem(id);
+        return success(BeanUtils.toBean(iotRdDailyReportItem, IotRdDailyReportItemRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得瑞都日报 (工作量)明细分页")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:query')")
+    public CommonResult<PageResult<IotRdDailyReportItemRespVO>> getIotRdDailyReportItemPage(@Valid IotRdDailyReportItemPageReqVO pageReqVO) {
+        PageResult<IotRdDailyReportItemDO> pageResult = iotRdDailyReportItemService.getIotRdDailyReportItemPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, IotRdDailyReportItemRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出瑞都日报 (工作量)明细 Excel")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report-item:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportIotRdDailyReportItemExcel(@Valid IotRdDailyReportItemPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<IotRdDailyReportItemDO> list = iotRdDailyReportItemService.getIotRdDailyReportItemPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "瑞都日报 (工作量)明细.xls", "数据", IotRdDailyReportItemRespVO.class,
+                        BeanUtils.toBean(list, IotRdDailyReportItemRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.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 IotRdDailyReportItemPageReqVO extends PageParam {
+
+    @Schema(description = "日报id", example = "14332")
+    private Long reportId;
+
+    @Schema(description = "施工队伍id", example = "11886")
+    private Long deptId;
+
+    @Schema(description = "项目id", example = "13694")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "29127")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺")
+    private String technique;
+
+    @Schema(description = "工作量属性标识符(bridgePlug waterVolume...)")
+    private String reportAttrIdentifier;
+
+    @Schema(description = "工作量属性名称(泵车台次 仪表/混砂...)", example = "芋艿")
+    private String reportAttrName;
+
+    @Schema(description = "工作量属性值")
+    private BigDecimal reportAttrValue;
+
+    @Schema(description = "排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    private Integer status;
+
+    @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/iotrddailyreportitem/vo/IotRdDailyReportItemRespVO.java

@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.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 IotRdDailyReportItemRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14985")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "日报id", example = "14332")
+    @ExcelProperty("日报id")
+    private Long reportId;
+
+    @Schema(description = "施工队伍id", example = "11886")
+    @ExcelProperty("施工队伍id")
+    private Long deptId;
+
+    @Schema(description = "项目id", example = "13694")
+    @ExcelProperty("项目id")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "29127")
+    @ExcelProperty("任务id")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    @ExcelProperty("项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺")
+    @ExcelProperty("施工工艺")
+    private String technique;
+
+    @Schema(description = "工作量属性标识符(bridgePlug waterVolume...)")
+    @ExcelProperty("工作量属性标识符(bridgePlug waterVolume...)")
+    private String reportAttrIdentifier;
+
+    @Schema(description = "工作量属性名称(泵车台次 仪表/混砂...)", example = "芋艿")
+    @ExcelProperty("工作量属性名称(泵车台次 仪表/混砂...)")
+    private String reportAttrName;
+
+    @Schema(description = "工作量属性值")
+    @ExcelProperty("工作量属性值")
+    private BigDecimal reportAttrValue;
+
+    @Schema(description = "排序值")
+    @ExcelProperty("排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "你猜")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    @ExcelProperty("状态(0启用 1禁用)")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 瑞都日报 (工作量)明细新增/修改 Request VO")
+@Data
+public class IotRdDailyReportItemSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14985")
+    private Long id;
+
+    @Schema(description = "日报id", example = "14332")
+    private Long reportId;
+
+    @Schema(description = "施工队伍id", example = "11886")
+    private Long deptId;
+
+    @Schema(description = "项目id", example = "13694")
+    private Long projectId;
+
+    @Schema(description = "任务id", example = "29127")
+    private Long taskId;
+
+    @Schema(description = "项目类别(钻井 修井 注氮 酸化压裂... )")
+    private String projectClassification;
+
+    @Schema(description = "施工工艺")
+    private String technique;
+
+    @Schema(description = "工作量属性标识符(bridgePlug waterVolume...)")
+    private String reportAttrIdentifier;
+
+    @Schema(description = "工作量属性名称(泵车台次 仪表/混砂...)", example = "芋艿")
+    private String reportAttrName;
+
+    @Schema(description = "工作量属性值")
+    private BigDecimal reportAttrValue;
+
+    @Schema(description = "排序值")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态(0启用 1禁用)", example = "2")
+    private Integer status;
+
+}

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdailyreportattrs/IotDailyReportAttrsDO.java

@@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportattrs;
 
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import lombok.*;
 
 /**
@@ -93,6 +95,7 @@ public class IotDailyReportAttrsDO extends BaseDO {
     /**
      * 不同专业公司的扩展属性
      */
+    @TableField(typeHandler = JacksonTypeHandler.class)
     private String extProperty;
     /**
      * 排序值

+ 19 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotprojecttask/IotProjectTaskDO.java

@@ -64,7 +64,12 @@ public class IotProjectTaskDO extends BaseDO {
     /**
      * 责任人([123,234])
      */
-    private String responsiblePerson;
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Set<Long> responsiblePerson;
+    /**
+     * 工单填报人([123,234])
+     */
+    private String submitter;
     /**
      * 设计工作量
      */
@@ -74,9 +79,21 @@ public class IotProjectTaskDO extends BaseDO {
      */
     private String workloadUnit;
     /**
-     * 状态
+     * 状态 瑞恒施工状态
      */
     private String status;
+    /**
+     * 瑞都施工状态(动迁上井 动迁下井 ...)
+     */
+    private String rdStatus;
+    /**
+     * 瑞鹰钻井施工状态(开钻前准备 钻进 ...)
+     */
+    private String rigStatus;
+    /**
+     * 瑞鹰修井施工状态(开工准备 施工 ...)
+     */
+    private String repairStatus;
     /**
      * 用户名
      */

+ 196 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotrddailyreport/IotRdDailyReportDO.java

@@ -0,0 +1,196 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+/**
+ * 瑞都日报 DO
+ *
+ * @author ruiqi
+ */
+@TableName("rq_iot_rd_daily_report")
+@KeySequence("rq_iot_rd_daily_report_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotRdDailyReportDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 施工队伍id
+     */
+    private Long deptId;
+    /**
+     * 日报名称 西南压裂项目部/2025-10-17日报填报
+     */
+    private String reportName;
+    /**
+     * 项目id
+     */
+    private Long projectId;
+    /**
+     * 任务id
+     */
+    private Long taskId;
+    /**
+     * 项目类别(钻井 修井 注氮 酸化压裂... )
+     */
+    private String projectClassification;
+    /**
+     * 施工工艺([123,233])
+     */
+    private String techniqueIds;
+    /**
+     * 施工设备([123,233])
+     */
+    private String deviceIds;
+    /**
+     * 时间节点-开始
+     */
+    private LocalTime startTime;
+    /**
+     * 时间节点-结束
+     */
+    private LocalTime endTime;
+    /**
+     * 累计施工井
+     */
+    private BigDecimal cumulativeWorkingWell;
+    /**
+     * 累计施工层
+     */
+    private BigDecimal cumulativeWorkingLayers;
+    /**
+     * 当日泵车台次
+     */
+    private BigDecimal dailyPumpTrips;
+    /**
+     * 当日仪表/混砂
+     */
+    private BigDecimal dailyToolsSand;
+    /**
+     * 趟数
+     */
+    private BigDecimal runCount;
+    /**
+     * 桥塞
+     */
+    private BigDecimal bridgePlug;
+    /**
+     * 水方量
+     */
+    private BigDecimal waterVolume;
+    /**
+     * 时间H
+     */
+    private BigDecimal hourCount;
+    /**
+     * 当日油耗(吨)
+     */
+    private BigDecimal dailyFuel;
+    /**
+     * 当日用电量(kWh)
+     */
+    private BigDecimal dailyPowerUsage;
+    /**
+     * 生产时间(H)
+     */
+    private BigDecimal productionTime;
+    /**
+     * 非生产时间(H)
+     */
+    private BigDecimal nonProductionTime;
+    /**
+     * 非生产时间原因
+     */
+    private String rdNptReason;
+    /**
+     * 施工开始日期
+     */
+    private LocalDateTime constructionStartDate;
+    /**
+     * 施工结束日期
+     */
+    private LocalDateTime constructionEndDate;
+    /**
+     * 当日生产情况生产动态
+     */
+    private String productionStatus;
+    /**
+     * 外租情况(可能有附件)
+     */
+    private String externalRental;
+    /**
+     * 下步工作计划
+     */
+    private String nextPlan;
+    /**
+     * 施工状态(动迁上井/动迁下井/施工准备/施工...)
+     */
+    private String rdStatus;
+    /**
+     * 故障情况
+     */
+    private String malfunction;
+    /**
+     * 故障误工h
+     */
+    private BigDecimal faultDowntime;
+    /**
+     * 人员情况
+     */
+    private String personnel;
+    /**
+     * 全员数量
+     */
+    private BigDecimal totalStaffNum;
+    /**
+     * 休假人员数量
+     */
+    private BigDecimal leaveStaffNum;
+    /**
+     * 不同专业公司的扩展属性值
+     */
+    private String extProperty;
+    /**
+     * 排序值
+     */
+    private Integer sort;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态(1填写中 2待填写 3已完成)
+     */
+    private Integer status;
+    /**
+     * 流程实例id
+     */
+    private String processInstanceId;
+    /**
+     * 审批状态 未提交、审批中、审批通过、审批不通过、已取消
+     */
+    private Integer auditStatus;
+    /**
+     * 日报填写时间
+     */
+    private LocalDateTime fillTime;
+    /**
+     * 审批时间
+     */
+    private LocalDateTime approvalTime;
+
+}

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

@@ -0,0 +1,80 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreportitem;
+
+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;
+
+/**
+ * 瑞都日报 (工作量)明细 DO
+ *
+ * @author ruiqi
+ */
+@TableName("rq_iot_rd_daily_report_item")
+@KeySequence("rq_iot_rd_daily_report_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotRdDailyReportItemDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 日报id
+     */
+    private Long reportId;
+    /**
+     * 施工队伍id
+     */
+    private Long deptId;
+    /**
+     * 项目id
+     */
+    private Long projectId;
+    /**
+     * 任务id
+     */
+    private Long taskId;
+    /**
+     * 项目类别(钻井 修井 注氮 酸化压裂... )
+     */
+    private String projectClassification;
+    /**
+     * 施工工艺
+     */
+    private String technique;
+    /**
+     * 工作量属性标识符(bridgePlug waterVolume...)
+     */
+    private String reportAttrIdentifier;
+    /**
+     * 工作量属性名称(泵车台次 仪表/混砂...)
+     */
+    private String reportAttrName;
+    /**
+     * 工作量属性值
+     */
+    private BigDecimal reportAttrValue;
+    /**
+     * 排序值
+     */
+    private Integer sort;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态(0启用 1禁用)
+     */
+    private Integer status;
+
+}

+ 62 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotrddailyreport/IotRdDailyReportMapper.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport;
+
+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.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 瑞都日报 Mapper
+ *
+ * @author ruiqi
+ */
+@Mapper
+public interface IotRdDailyReportMapper extends BaseMapperX<IotRdDailyReportDO> {
+
+    default PageResult<IotRdDailyReportDO> selectPage(IotRdDailyReportPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<IotRdDailyReportDO>()
+                .eqIfPresent(IotRdDailyReportDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(IotRdDailyReportDO::getProjectId, reqVO.getProjectId())
+                .eqIfPresent(IotRdDailyReportDO::getTaskId, reqVO.getTaskId())
+                .eqIfPresent(IotRdDailyReportDO::getProjectClassification, reqVO.getProjectClassification())
+                .eqIfPresent(IotRdDailyReportDO::getTechniqueIds, reqVO.getTechniqueIds())
+                .eqIfPresent(IotRdDailyReportDO::getDeviceIds, reqVO.getDeviceIds())
+                .betweenIfPresent(IotRdDailyReportDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(IotRdDailyReportDO::getEndTime, reqVO.getEndTime())
+                .eqIfPresent(IotRdDailyReportDO::getCumulativeWorkingWell, reqVO.getCumulativeWorkingWell())
+                .eqIfPresent(IotRdDailyReportDO::getCumulativeWorkingLayers, reqVO.getCumulativeWorkingLayers())
+                .eqIfPresent(IotRdDailyReportDO::getDailyPumpTrips, reqVO.getDailyPumpTrips())
+                .eqIfPresent(IotRdDailyReportDO::getDailyToolsSand, reqVO.getDailyToolsSand())
+                .eqIfPresent(IotRdDailyReportDO::getRunCount, reqVO.getRunCount())
+                .eqIfPresent(IotRdDailyReportDO::getBridgePlug, reqVO.getBridgePlug())
+                .eqIfPresent(IotRdDailyReportDO::getWaterVolume, reqVO.getWaterVolume())
+                .eqIfPresent(IotRdDailyReportDO::getHourCount, reqVO.getHourCount())
+                .eqIfPresent(IotRdDailyReportDO::getDailyFuel, reqVO.getDailyFuel())
+                .eqIfPresent(IotRdDailyReportDO::getDailyPowerUsage, reqVO.getDailyPowerUsage())
+                .betweenIfPresent(IotRdDailyReportDO::getProductionTime, reqVO.getProductionTime())
+                .betweenIfPresent(IotRdDailyReportDO::getNonProductionTime, reqVO.getNonProductionTime())
+                .eqIfPresent(IotRdDailyReportDO::getRdNptReason, reqVO.getRdNptReason())
+                .betweenIfPresent(IotRdDailyReportDO::getConstructionStartDate, reqVO.getConstructionStartDate())
+                .betweenIfPresent(IotRdDailyReportDO::getConstructionEndDate, reqVO.getConstructionEndDate())
+                .eqIfPresent(IotRdDailyReportDO::getProductionStatus, reqVO.getProductionStatus())
+                .eqIfPresent(IotRdDailyReportDO::getExternalRental, reqVO.getExternalRental())
+                .eqIfPresent(IotRdDailyReportDO::getNextPlan, reqVO.getNextPlan())
+                .eqIfPresent(IotRdDailyReportDO::getRdStatus, reqVO.getRdStatus())
+                .eqIfPresent(IotRdDailyReportDO::getMalfunction, reqVO.getMalfunction())
+                .betweenIfPresent(IotRdDailyReportDO::getFaultDowntime, reqVO.getFaultDowntime())
+                .eqIfPresent(IotRdDailyReportDO::getPersonnel, reqVO.getPersonnel())
+                .eqIfPresent(IotRdDailyReportDO::getTotalStaffNum, reqVO.getTotalStaffNum())
+                .eqIfPresent(IotRdDailyReportDO::getLeaveStaffNum, reqVO.getLeaveStaffNum())
+                .eqIfPresent(IotRdDailyReportDO::getExtProperty, reqVO.getExtProperty())
+                .eqIfPresent(IotRdDailyReportDO::getSort, reqVO.getSort())
+                .eqIfPresent(IotRdDailyReportDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(IotRdDailyReportDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(IotRdDailyReportDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+                .eqIfPresent(IotRdDailyReportDO::getAuditStatus, reqVO.getAuditStatus())
+                .betweenIfPresent(IotRdDailyReportDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(IotRdDailyReportDO::getId));
+    }
+
+}

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

@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreportitem;
+
+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.iotrddailyreportitem.vo.IotRdDailyReportItemPageReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreportitem.IotRdDailyReportItemDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 瑞都日报 (工作量)明细 Mapper
+ *
+ * @author ruiqi
+ */
+@Mapper
+public interface IotRdDailyReportItemMapper extends BaseMapperX<IotRdDailyReportItemDO> {
+
+    default PageResult<IotRdDailyReportItemDO> selectPage(IotRdDailyReportItemPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<IotRdDailyReportItemDO>()
+                .eqIfPresent(IotRdDailyReportItemDO::getReportId, reqVO.getReportId())
+                .eqIfPresent(IotRdDailyReportItemDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(IotRdDailyReportItemDO::getProjectId, reqVO.getProjectId())
+                .eqIfPresent(IotRdDailyReportItemDO::getTaskId, reqVO.getTaskId())
+                .eqIfPresent(IotRdDailyReportItemDO::getProjectClassification, reqVO.getProjectClassification())
+                .eqIfPresent(IotRdDailyReportItemDO::getTechnique, reqVO.getTechnique())
+                .eqIfPresent(IotRdDailyReportItemDO::getReportAttrIdentifier, reqVO.getReportAttrIdentifier())
+                .likeIfPresent(IotRdDailyReportItemDO::getReportAttrName, reqVO.getReportAttrName())
+                .eqIfPresent(IotRdDailyReportItemDO::getReportAttrValue, reqVO.getReportAttrValue())
+                .eqIfPresent(IotRdDailyReportItemDO::getSort, reqVO.getSort())
+                .eqIfPresent(IotRdDailyReportItemDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(IotRdDailyReportItemDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(IotRdDailyReportItemDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(IotRdDailyReportItemDO::getId));
+    }
+
+}

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

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.pms.service.iotrddailyreport;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+
+import javax.validation.Valid;
+
+/**
+ * 瑞都日报 Service 接口
+ *
+ * @author ruiqi
+ */
+public interface IotRdDailyReportService {
+
+    /**
+     * 创建瑞都日报
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createIotRdDailyReport(@Valid IotRdDailyReportSaveReqVO createReqVO);
+
+    /**
+     * 更新瑞都日报
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateIotRdDailyReport(@Valid IotRdDailyReportSaveReqVO updateReqVO);
+
+    /**
+     * 删除瑞都日报
+     *
+     * @param id 编号
+     */
+    void deleteIotRdDailyReport(Long id);
+
+    /**
+     * 获得瑞都日报
+     *
+     * @param id 编号
+     * @return 瑞都日报
+     */
+    IotRdDailyReportDO getIotRdDailyReport(Long id);
+
+    /**
+     * 获得瑞都日报分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 瑞都日报分页
+     */
+    PageResult<IotRdDailyReportDO> getIotRdDailyReportPage(IotRdDailyReportPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.pms.service.iotrddailyreport;
+
+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.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport.IotRdDailyReportMapper;
+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_RD_DAILY_REPORT_NOT_EXISTS;
+
+/**
+ * 瑞都日报 Service 实现类
+ *
+ * @author ruiqi
+ */
+@Service
+@Validated
+public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
+
+    @Resource
+    private IotRdDailyReportMapper iotRdDailyReportMapper;
+
+    @Override
+    public Long createIotRdDailyReport(IotRdDailyReportSaveReqVO createReqVO) {
+        // 插入
+        IotRdDailyReportDO iotRdDailyReport = BeanUtils.toBean(createReqVO, IotRdDailyReportDO.class);
+        iotRdDailyReportMapper.insert(iotRdDailyReport);
+        // 返回
+        return iotRdDailyReport.getId();
+    }
+
+    @Override
+    public void updateIotRdDailyReport(IotRdDailyReportSaveReqVO updateReqVO) {
+        // 校验存在
+        validateIotRdDailyReportExists(updateReqVO.getId());
+        // 更新
+        IotRdDailyReportDO updateObj = BeanUtils.toBean(updateReqVO, IotRdDailyReportDO.class);
+        iotRdDailyReportMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteIotRdDailyReport(Long id) {
+        // 校验存在
+        validateIotRdDailyReportExists(id);
+        // 删除
+        iotRdDailyReportMapper.deleteById(id);
+    }
+
+    private void validateIotRdDailyReportExists(Long id) {
+        if (iotRdDailyReportMapper.selectById(id) == null) {
+            throw exception(IOT_RD_DAILY_REPORT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public IotRdDailyReportDO getIotRdDailyReport(Long id) {
+        return iotRdDailyReportMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<IotRdDailyReportDO> getIotRdDailyReportPage(IotRdDailyReportPageReqVO pageReqVO) {
+        return iotRdDailyReportMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.pms.service.iotrddailyreportitem;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo.IotRdDailyReportItemPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo.IotRdDailyReportItemSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreportitem.IotRdDailyReportItemDO;
+
+import javax.validation.Valid;
+
+/**
+ * 瑞都日报 (工作量)明细 Service 接口
+ *
+ * @author ruiqi
+ */
+public interface IotRdDailyReportItemService {
+
+    /**
+     * 创建瑞都日报 (工作量)明细
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createIotRdDailyReportItem(@Valid IotRdDailyReportItemSaveReqVO createReqVO);
+
+    /**
+     * 更新瑞都日报 (工作量)明细
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateIotRdDailyReportItem(@Valid IotRdDailyReportItemSaveReqVO updateReqVO);
+
+    /**
+     * 删除瑞都日报 (工作量)明细
+     *
+     * @param id 编号
+     */
+    void deleteIotRdDailyReportItem(Long id);
+
+    /**
+     * 获得瑞都日报 (工作量)明细
+     *
+     * @param id 编号
+     * @return 瑞都日报 (工作量)明细
+     */
+    IotRdDailyReportItemDO getIotRdDailyReportItem(Long id);
+
+    /**
+     * 获得瑞都日报 (工作量)明细分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 瑞都日报 (工作量)明细分页
+     */
+    PageResult<IotRdDailyReportItemDO> getIotRdDailyReportItemPage(IotRdDailyReportItemPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.pms.service.iotrddailyreportitem;
+
+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.iotrddailyreportitem.vo.IotRdDailyReportItemPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreportitem.vo.IotRdDailyReportItemSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreportitem.IotRdDailyReportItemDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreportitem.IotRdDailyReportItemMapper;
+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_RD_DAILY_REPORT_ITEM_NOT_EXISTS;
+
+/**
+ * 瑞都日报 (工作量)明细 Service 实现类
+ *
+ * @author ruiqi
+ */
+@Service
+@Validated
+public class IotRdDailyReportItemServiceImpl implements IotRdDailyReportItemService {
+
+    @Resource
+    private IotRdDailyReportItemMapper iotRdDailyReportItemMapper;
+
+    @Override
+    public Long createIotRdDailyReportItem(IotRdDailyReportItemSaveReqVO createReqVO) {
+        // 插入
+        IotRdDailyReportItemDO iotRdDailyReportItem = BeanUtils.toBean(createReqVO, IotRdDailyReportItemDO.class);
+        iotRdDailyReportItemMapper.insert(iotRdDailyReportItem);
+        // 返回
+        return iotRdDailyReportItem.getId();
+    }
+
+    @Override
+    public void updateIotRdDailyReportItem(IotRdDailyReportItemSaveReqVO updateReqVO) {
+        // 校验存在
+        validateIotRdDailyReportItemExists(updateReqVO.getId());
+        // 更新
+        IotRdDailyReportItemDO updateObj = BeanUtils.toBean(updateReqVO, IotRdDailyReportItemDO.class);
+        iotRdDailyReportItemMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteIotRdDailyReportItem(Long id) {
+        // 校验存在
+        validateIotRdDailyReportItemExists(id);
+        // 删除
+        iotRdDailyReportItemMapper.deleteById(id);
+    }
+
+    private void validateIotRdDailyReportItemExists(Long id) {
+        if (iotRdDailyReportItemMapper.selectById(id) == null) {
+            throw exception(IOT_RD_DAILY_REPORT_ITEM_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public IotRdDailyReportItemDO getIotRdDailyReportItem(Long id) {
+        return iotRdDailyReportItemMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<IotRdDailyReportItemDO> getIotRdDailyReportItemPage(IotRdDailyReportItemPageReqVO pageReqVO) {
+        return iotRdDailyReportItemMapper.selectPage(pageReqVO);
+    }
+
+}