瀏覽代碼

pms 瑞都日报 油耗 填报 详情 汇总

zhangcl 2 天之前
父節點
當前提交
774997489f

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

@@ -1,6 +1,8 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
@@ -11,7 +13,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotcarzhbd.vo.IotCarZhbdPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportattrs.vo.IotDailyReportAttrsPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportfuel.vo.IotDailyReportFuelPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPlatformVO;
@@ -24,19 +28,25 @@ import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceSimpleRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotcarzhbd.IotCarZhbdDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportattrs.IotDailyReportAttrsDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportfuel.IotDailyReportFuelDO;
 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.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotcarzhbd.IotCarZhbdMapper;
 import cn.iocoder.yudao.module.pms.enums.AttachmentCategoryEnum;
 import cn.iocoder.yudao.module.pms.enums.AttachmentTypeEnum;
+import cn.iocoder.yudao.module.pms.job.IotDeviceCarFuelVO;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotattachment.IotAttachmentService;
 import cn.iocoder.yudao.module.pms.service.iotdailyreportattrs.IotDailyReportAttrsService;
+import cn.iocoder.yudao.module.pms.service.iotdailyreportfuel.IotDailyReportFuelService;
 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.pms.util.ZHBDUtil;
 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;
@@ -46,6 +56,7 @@ import cn.iocoder.yudao.module.system.service.dict.DictDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.log4j.Log4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -55,6 +66,10 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -67,6 +82,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAnd
 @RestController
 @RequestMapping("/pms/iot-rd-daily-report")
 @Validated
+@Log4j
 public class IotRdDailyReportController {
 
     @Resource
@@ -95,6 +111,12 @@ public class IotRdDailyReportController {
 
     @Resource
     private DictDataService dictDataService;
+    @Resource
+    private IotCarZhbdMapper iotCarZhbdMapper;
+    @Resource
+    private ZHBDUtil zhbdUtil;
+    @Resource
+    private IotDailyReportFuelService iotDailyReportFuelService;
 
     @PostMapping("/create")
     @Operation(summary = "创建瑞都日报")
@@ -142,7 +164,7 @@ public class IotRdDailyReportController {
     @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));
     }
 
@@ -174,6 +196,17 @@ public class IotRdDailyReportController {
             // 虚拟项目标识
             dailyReportVO.setVirtualProject(project.getContractSubject());
         }
+        // 查询当前日报是否已经绑定了油耗信息
+        boolean hasFuels = false;
+        IotDailyReportFuelPageReqVO fuelPageReqVO = new IotDailyReportFuelPageReqVO();
+        fuelPageReqVO.setType("RD");
+        fuelPageReqVO.setReportId(dailyReport.getId());
+        List<IotDailyReportFuelDO> reportFuels = iotDailyReportFuelService.getIotDailyReportFuels(fuelPageReqVO);
+        if (CollUtil.isNotEmpty(reportFuels)) {
+            hasFuels = true;
+            dailyReportVO.setReportedFuels(reportFuels);
+        } else {
+        }
         // 查询日报对应的任务信息
         if (ObjUtil.isNotEmpty(dailyReport.getTaskId())) {
             IotProjectTaskDO task = iotProjectTaskService.getIotProjectTask(dailyReport.getTaskId());
@@ -182,6 +215,16 @@ public class IotRdDailyReportController {
             dailyReportVO.setLocation(task.getLocation());
             Set<Long> deviceIds = task.getDeviceIds();
             Set<Long> responsiblePersonIds = task.getResponsiblePerson();
+            // 日报对应的任务中的设备列表
+            Set<String> carDeviceCodes = new HashSet<>();
+            // 中航北斗车辆id集合
+            Set<String> zhbdCarIds = new HashSet<>();
+            // key中航北斗carId   value设备编码
+            Map<String, String> carIdDeviceCodePair = new HashMap<>();
+            // key设备编码   value设备对象
+            Map<String, IotDeviceRespVO> devicePair = new HashMap<>();
+            // 生成 carId 与 IotDeviceDO 的对应关系Map
+            Map<String, IotDeviceRespVO> carIdDevicePair = new HashMap<>();
             if (CollUtil.isNotEmpty(deviceIds)) {
                 // 查询设备id集合对应的设备详情
                 List<IotDeviceRespVO> devices = iotDeviceService.getDeviceList(deviceIds);
@@ -190,8 +233,48 @@ public class IotRdDailyReportController {
                             .map(IotDeviceRespVO::getDeviceName) // 提取每个设备的deviceName
                             .collect(Collectors.joining(","));   // 用逗号拼接所有名称
                     dailyReportVO.setDeviceNames(deviceNames);
+
+                    // 组装任务关联的 设备编码 进而查询 中航北斗carId集合
+                    if (!hasFuels) {
+                        devices.forEach(device -> {
+                            carDeviceCodes.add(device.getDeviceCode());
+                            if (ObjUtil.isNotEmpty(device.getCarId())) {
+                                zhbdCarIds.add(String.valueOf(device.getCarId()));
+                                carIdDeviceCodePair.put(String.valueOf(device.getCarId()), device.getDeviceCode());
+                            }
+                            devicePair.put(device.getDeviceCode(), device);
+                        });
+                        // 查询中航北斗表中的设备车辆
+                        IotCarZhbdPageReqVO customDeviceReqVO = new IotCarZhbdPageReqVO();
+                        // 设备表中存在的设备编码
+                        customDeviceReqVO.setDeviceCodes(carDeviceCodes);
+                        List<IotCarZhbdDO> deviceCars = iotCarZhbdMapper.selectList(customDeviceReqVO);
+                        if (CollUtil.isNotEmpty(deviceCars)) {
+                            deviceCars.forEach(car -> {
+                                zhbdCarIds.add(car.getCarId());
+                                carIdDeviceCodePair.put(car.getCarId(), car.getDeviceCode());
+                            });
+                        }
+                        // 额外匹配的 RA 与 设备表对应的编码
+                        customDeviceReqVO.setDeviceCodes(null);
+                        customDeviceReqVO.setCustomDeviceCodes(carDeviceCodes);
+                        List<IotCarZhbdDO> raCars = iotCarZhbdMapper.selectList(customDeviceReqVO);
+                        if (CollUtil.isNotEmpty(raCars)) {
+                            raCars.forEach(car -> {
+                                zhbdCarIds.add(car.getCarId());
+                                carIdDeviceCodePair.put(car.getCarId(), car.getUserName());
+                            });
+                        }
+                        // 生成 carId 与 IotDeviceDO 的对应关系Map
+                        carIdDevicePair = carIdDeviceCodePair.entrySet().stream()
+                                .filter(entry -> devicePair.containsKey(entry.getValue()))
+                                .collect(Collectors.toMap(
+                                        Map.Entry::getKey,
+                                        entry -> devicePair.get(entry.getValue())
+                                ));
+                    }
                 }
-                // 查询设备id集合关联的设备列表
+                // 查询设备id集合关联的设备列表 施工队伍下的设备+瑞都所有设备
                 IotDevicePageReqVO deviceReqVO = new IotDevicePageReqVO();
                 deviceReqVO.setDeviceIds(new ArrayList<>(deviceIds));
                 List<IotDeviceDO> selectedDevices = iotDeviceService.getDevicesByDepts(deviceReqVO);
@@ -205,6 +288,65 @@ public class IotRdDailyReportController {
                         .collect(Collectors.joining(","));   // 用逗号拼接所有名称
                 dailyReportVO.setResponsiblePersonNames(userNames);
             }
+            // 填报日报时 查询当前日报关联的任务中的车辆 查询中航北斗指定日报区间范围内的油耗数据 子表 主表
+            List<IotDailyReportFuelDO> tobeAddedReportFuels = new ArrayList<>();
+            if (!hasFuels) {
+                // 取1个任务的车辆信息 就算是平台井 所有关联井的车辆信息是相同的
+                // 获取中航北斗车辆的油耗信息
+                LocalDateTime createTime = dailyReport.getCreateTime();
+                // 获得昨天的日期
+                String yesterdayDateStr = StrUtil.EMPTY;
+                LocalDateTime yesterday = createTime.minusDays(1);
+                yesterdayDateStr = LocalDateTimeUtil.format(yesterday, DatePattern.NORM_DATE_PATTERN);
+
+                // 当前日报总油耗
+                BigDecimal totalOilUsage = BigDecimal.ZERO;
+                if (CollUtil.isNotEmpty(zhbdCarIds)) {
+                    if (StrUtil.isNotBlank(yesterdayDateStr)) {
+                        try {
+                            Map<Integer, IotDeviceCarFuelVO> carFuels = zhbdUtil.carFuels(StrUtil.join(",", zhbdCarIds),
+                                    StrUtil.join(" ", yesterdayDateStr, "00:00:00"), StrUtil.join(" ", yesterdayDateStr, "23:59:59"));
+                            System.out.println("请求参数:" + zhbdCarIds.size() + " -开始时间: "
+                                    + StrUtil.join(" ", yesterdayDateStr, "00:00:00") + " -开始时间: "
+                                    + StrUtil.join(" ", yesterdayDateStr, "23:59:59"));
+                            if (CollUtil.isNotEmpty(carFuels)) {
+                                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                                Map<String, IotDeviceRespVO> finalCarIdDevicePair = carIdDevicePair;
+                                for (Map.Entry<Integer, IotDeviceCarFuelVO> carFuelEntry : carFuels.entrySet()) {
+                                    Integer carId = carFuelEntry.getKey();
+                                    IotDeviceCarFuelVO carFuel = carFuelEntry.getValue();
+                                    // carId中航北斗车辆id   value车辆油耗
+                                    IotDailyReportFuelDO reportFuel = new IotDailyReportFuelDO();
+                                    reportFuel.setType("RD");
+                                    reportFuel.setReportId(dailyReport.getId());
+                                    reportFuel.setCarId(String.valueOf(carId));
+                                    // 使用 carIdDeviceMap 获取对应的设备对象并设置deviceId
+                                    IotDeviceRespVO device = finalCarIdDevicePair.get(String.valueOf(carId));
+                                    reportFuel.setDeviceId(device.getId());
+                                    reportFuel.setDeviceCode(device.getDeviceCode());
+                                    reportFuel.setDeviceName(device.getDeviceName());
+                                    BigDecimal tempOil = new BigDecimal(carFuel.getOil());
+                                    totalOilUsage = totalOilUsage.add(tempOil);
+                                    reportFuel.setZhbdFuel(tempOil);
+                                    // 将字符串转换为LocalDateTime
+                                    try {
+                                        LocalDateTime queryDate = LocalDate.parse(carFuel.getCreatetime(), formatter).atStartOfDay();;
+                                        reportFuel.setQueryDate(queryDate);
+                                    } catch (DateTimeParseException e) {
+                                        log.error("瑞都日报-中航北斗油耗-日期格式解析失败: {}", e);
+                                        // 根据业务需求设置默认值或抛出异常
+                                        reportFuel.setQueryDate(null);
+                                    }
+                                    tobeAddedReportFuels.add(reportFuel);
+                                }
+                            }
+                        } catch (Exception e) {
+                            log.info("获取油耗数据失败!");
+                        }
+                    }
+                }
+            }
+            dailyReportVO.setReportFuels(tobeAddedReportFuels);
         }
         // 查询当前日报关联的附件信息
         IotAttachmentPageReqVO reqVO = new IotAttachmentPageReqVO();

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

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProject
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceSimpleRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportattrs.IotDailyReportAttrsDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportfuel.IotDailyReportFuelDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -301,4 +302,10 @@ public class IotRdDailyReportRespVO {
 
     @Schema(description = "虚拟项目标识", example = "Y N")
     private String virtualProject;
+
+    @Schema(description = "日报关联的油耗记录")
+    private List<IotDailyReportFuelDO> reportFuels;
+
+    @Schema(description = "日报关联的已经填报的油耗记录")
+    private List<IotDailyReportFuelDO> reportedFuels;
 }

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

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo;
 
 import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportfuel.vo.IotDailyReportFuelSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -145,4 +146,7 @@ public class IotRdDailyReportSaveReqVO {
 
     @Schema(description = "平台井标识 1平台井 0非平台井")
     private Integer platformWell;
+
+    @Schema(description = "车辆油耗")
+    private List<IotDailyReportFuelSaveReqVO> reportFuels;
 }

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

@@ -66,6 +66,10 @@ public class IotRdDailyReportStatisticsRespVO {
     @ExcelProperty("任务创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "油耗L")
+    @ExcelProperty("油耗L")
+    private BigDecimal totalDailyFuel;
+
     @Schema(description = "工作量明细")
     @ExcelProperty("工作量明细")
     private List<IotRdDailyReportStatisticsItemVO> items;

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotcarzhbd/IotCarZhbdMapper.java

@@ -31,6 +31,7 @@ public interface IotCarZhbdMapper extends BaseMapperX<IotCarZhbdDO> {
     default List<IotCarZhbdDO> selectList(IotCarZhbdPageReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<IotCarZhbdDO>()
                 .eqIfPresent(IotCarZhbdDO::getDeviceCode, reqVO.getDeviceCode())
+                .inIfPresent(IotCarZhbdDO::getDeviceCode, reqVO.getDeviceCodes())
                 .likeIfPresent(IotCarZhbdDO::getDeviceName, reqVO.getDeviceName())
                 .eqIfPresent(IotCarZhbdDO::getCarId, reqVO.getCarId())
                 .betweenIfPresent(IotCarZhbdDO::getCreateTime, reqVO.getCreateTime())

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

@@ -7,15 +7,18 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportfuel.vo.IotDailyReportFuelSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.*;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdailyreportfuel.IotDailyReportFuelDO;
 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.iotprojecttaskattrs.IotTaskAttrModelProperty;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotattachment.IotAttachmentMapper;
+import cn.iocoder.yudao.module.pms.dal.mysql.iotdailyreportfuel.IotDailyReportFuelMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojectinfo.IotProjectInfoMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask.IotProjectTaskMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport.IotRdDailyReportMapper;
@@ -48,6 +51,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -89,6 +93,9 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
     @Resource
     private PmsMessage pmsMessage;
 
+    @Resource
+    private IotDailyReportFuelMapper iotDailyReportFuelMapper;
+
     @Override
     public Long createIotRdDailyReport(IotRdDailyReportSaveReqVO createReqVO) {
         // 插入
@@ -117,6 +124,34 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
         // 设置 日报审批状态为 审批中 auditStatus = 10
         updateObj.setAuditStatus(10);
         iotRdDailyReportMapper.updateById(updateObj);
+        // 保存油耗信息
+        if (CollUtil.isNotEmpty(updateReqVO.getReportFuels())) {
+            // 新增 or 更新 油耗子表数据
+            AtomicBoolean addFlag = new AtomicBoolean(false);
+            List<IotDailyReportFuelDO> tobeAddedOrUpdatedFuels = new ArrayList<>();
+            // 如果有油耗记录 id 更新 如果没有 id 新增
+            List<IotDailyReportFuelSaveReqVO> reportFuels = updateReqVO.getReportFuels();
+            reportFuels.forEach(fuel -> {
+                IotDailyReportFuelDO reportFuel = BeanUtils.toBean(fuel, IotDailyReportFuelDO.class);
+                tobeAddedOrUpdatedFuels.add(reportFuel);
+                if (ObjUtil.isNotEmpty(fuel.getId())) {
+                    // 已有油耗数据 更新
+                    addFlag.set(false);
+                } else {
+                    // 新增油耗数据
+                    addFlag.set(true);
+                }
+            });
+            if (CollUtil.isNotEmpty(tobeAddedOrUpdatedFuels)) {
+                if (addFlag.get()) {
+                    // 新增油耗数据
+                    iotDailyReportFuelMapper.insertBatch(tobeAddedOrUpdatedFuels);
+                } else {
+                    // 更新现有油耗数据
+                    iotDailyReportFuelMapper.updateBatch(tobeAddedOrUpdatedFuels);
+                }
+            }
+        }
         // 如果上传了附件 保存附件
         if (CollUtil.isNotEmpty(updateReqVO.getAttachments())) {
             List<IotAttachmentSaveReqVO> attachments = updateReqVO.getAttachments();
@@ -461,6 +496,10 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                 });
             }
 
+            // 以任务为单位组装任务关联的日报的当日油耗总和
+            // key任务id   value任务关联的日报油耗总和
+            Map<Long, BigDecimal> taskFuelPair = new HashMap<>();
+
             // 设置 小队 任务已经完成的工作量集合 (按照不同的单位统计任务的不同工作量)
             // key任务井id      value队伍工作量数据
             Map<Long, BigDecimal> bridgePlugPair = new HashMap<>();
@@ -473,6 +512,15 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
             Map<Long, BigDecimal> mixSandPair = new HashMap<>();
 
             dailyReports.forEach(report -> {
+                BigDecimal dailyFuel = report.getDailyFuel();
+                if (taskFuelPair.containsKey(report.getTaskId())) {
+                    BigDecimal existTotalFuel = taskFuelPair.get(report.getTaskId());
+                    BigDecimal tempTotalFuel = existTotalFuel.add(dailyFuel);
+                    taskFuelPair.put(report.getTaskId(), tempTotalFuel);
+                } else {
+                    taskFuelPair.put(report.getTaskId(), dailyFuel);
+                }
+
                 // 设置每个任务的工作量数据  单位相同的工作量值作合并处理
                 List<IotTaskAttrModelProperty> taskAttrs = report.getExtProperty();
                 Long taskId = report.getTaskId();
@@ -616,12 +664,9 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
                     if (taskCreateTimePair.containsKey(taskId)) {
                         uniqueReport.setCreateTime(taskCreateTimePair.get(taskId));
                     }
-                    /* if (teamProjectPair.containsKey(deptId)) {
-                        Long parentId = teamProjectPair.get(deptId);
-                        if (projectDeptPair.containsKey(parentId)) {
-                            uniqueReport.setProjectDeptName(projectDeptPair.get(parentId));
-                        }
-                    } */
+                    if (taskFuelPair.containsKey(taskId)) {
+                        uniqueReport.setTotalDailyFuel(taskFuelPair.get(taskId));
+                    }
                     if (taskProjectDeptPair.containsKey(taskId)) {
                         uniqueReport.setProjectDeptName(taskProjectDeptPair.get(taskId));
                     }

+ 3 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrhdailyreport/IotRhDailyReportServiceImpl.java

@@ -151,7 +151,7 @@ public class IotRhDailyReportServiceImpl implements IotRhDailyReportService {
                 // 查询中航北斗表中的设备车辆
                 IotCarZhbdPageReqVO customDeviceReqVO = new IotCarZhbdPageReqVO();
                 // 设备表中存在的设备编码
-                customDeviceReqVO.setCustomDeviceCodes(carDeviceCodes);
+                customDeviceReqVO.setDeviceCodes(carDeviceCodes);
                 List<IotCarZhbdDO> deviceCars = iotCarZhbdMapper.selectList(customDeviceReqVO);
                 if (CollUtil.isNotEmpty(deviceCars)) {
                     deviceCars.forEach(car -> {
@@ -160,8 +160,8 @@ public class IotRhDailyReportServiceImpl implements IotRhDailyReportService {
                     });
                 }
                 // 额外匹配的 RA 与 设备表对应的编码
-                customDeviceReqVO.setCustomDeviceCodes(null);
-                customDeviceReqVO.setDeviceCodes(carDeviceCodes);
+                customDeviceReqVO.setDeviceCodes(null);
+                customDeviceReqVO.setCustomDeviceCodes(carDeviceCodes);
                 List<IotCarZhbdDO> raCars = iotCarZhbdMapper.selectList(customDeviceReqVO);
                 if (CollUtil.isNotEmpty(raCars)) {
                     raCars.forEach(car -> {