瀏覽代碼

运行记录统计

yuanchao 1 月之前
父節點
當前提交
478547ac76

+ 20 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java

@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountListDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodel.IotModelDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
@@ -148,6 +149,7 @@ public class IotOpeationFillController {
         dailyToTotalMap1.put("底盘发动机累计公里数填报", "底盘发动机累计公里数");
         dailyToTotalMap1.put("底盘发动机累计运行时长填报", "底盘发动机累计运行时长");
         dailyToTotalMap1.put("台上发动机累计运转时长填报", "台上发动机累计运转时长");
+        dailyToTotalMap1.put("台上变速箱累计运转时长填报", "台上变速箱累计运转时长");
 
 
         // 存储当日数据值的映射
@@ -332,6 +334,12 @@ public class IotOpeationFillController {
         return success(BeanUtils.toBean( iotOpeationFillService.fillRecords(pageReqVO), IotOpeationFillOrderDO.class));
     }
 
+    @GetMapping("/countPage")
+    @Operation(summary = "获得运行记录设备填报分页")
+    public CommonResult<PageResult<IotDeviceCountData>> countPage(@Valid IotOpeationFillPageReqVO pageReqVO) {
+        return success(BeanUtils.toBean( iotOpeationFillService.deviceCountList(pageReqVO), IotDeviceCountData.class));
+    }
+
     @GetMapping("/getCount")
     @PermitAll
     @Operation(summary = "获得PMS 功能优化 设备模板属性")
@@ -346,6 +354,18 @@ public class IotOpeationFillController {
         return success(BeanUtils.toBean(listDO,IotCountListDO.class));
     }
 
+    @GetMapping("/getDeviceCount")
+    @PermitAll
+    @Operation(summary = "获得PMS 功能优化 设备模板属性")
+    @Parameter(name = "deviceCategoryName", description = "名称", required = true, example = "1024")
+    public CommonResult<IotCountListDO> getDeviceCount(IotCountDataDO vo) throws SQLException{
+        List<IotCountDataDO> list = iotOpeationFillService.countDeviceList(vo);
+        IotCountListDO listDO = new IotCountListDO();
+        listDO.setTotalList(list);
+        return success(BeanUtils.toBean(listDO,IotCountListDO.class));
+    }
+
+
 
     @GetMapping("/getAttrs")
     @PermitAll

+ 30 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicecountdata/IotDeviceCountData.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata;
+
+import lombok.Data;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+/**
+ * @author yc
+ * @version 1.0
+ * @className IotDeviceCountData
+ * @date 2025/7/10 18:17
+ * @description
+ */
+@Data
+@ToString(callSuper = true)
+public class IotDeviceCountData {
+    private String deviceCode;
+    private String deviceName;
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime createTime;
+    private String deptName;
+    private String isFill;
+    private String nickname;
+    private String orderName;
+
+}

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotopeationfill/IotOpeationFillMapper.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.dal.mysql.iotopeationfill;
 
+import java.time.LocalDateTime;
 import java.util.*;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -16,6 +17,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotZHBD.DeviceZHBDDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodel.IotModelDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
@@ -118,5 +120,10 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
     IotOpeationFillDO getFillById(IotOpeationFillDO fillDO);
     @TenantIgnore
     List<IotCountDataDO> countList(IotCountDataDO dataDO);
+    @TenantIgnore
+    List<IotCountDataDO> countDeviceList(IotCountDataDO dataDO);
+    @TenantIgnore
+    IPage<IotDeviceCountData> deviceCountList(IPage<IotOpeationFillPageReqVO> page, @Param("deptId") Long deptId,
+                                              @Param("createTime")LocalDateTime[] createTime,@Param("isFill") Integer isFill,@Param("orderName") String orderName);
 
 }

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillService.java

@@ -9,10 +9,13 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeati
 import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillOrderDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 运行记录填报 Service 接口
@@ -116,6 +119,10 @@ public interface IotOpeationFillService {
 
     PageResult<IotOpeationFillOrderDO> fillRecords(IotOpeationFillPageReqVO vo);
 
+    PageResult<IotDeviceCountData> deviceCountList(IotOpeationFillPageReqVO vo);
+
     List<IotCountDataDO> countList(IotCountDataDO dataDO);
 
+    List<IotCountDataDO> countDeviceList(IotCountDataDO dataDO);
+
 }

+ 13 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillServiceImpl.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeati
 import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicerunlog.IotDeviceRunLogDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmodeltemplateattrs.IotModelTemplateAttrsDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO;
@@ -223,9 +224,21 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
         return new PageResult<>(fillOrderDOIPage.getRecords(),fillOrderDOIPage.getTotal());
     }
 
+    @Override
+    public PageResult<IotDeviceCountData> deviceCountList(IotOpeationFillPageReqVO vo) {
+        IPage<IotDeviceCountData> countDataIPage = iotOpeationFillMapper.deviceCountList(Page.of(vo.getPageNo(),vo.getPageSize()),
+                vo.getDeptId(),vo.getCreateTime(),vo.getIsFill(),vo.getOrderName());
+        return new PageResult<>(countDataIPage.getRecords(),countDataIPage.getTotal());
+    }
+
     @Override
     public List<IotCountDataDO> countList(IotCountDataDO dataDO) {
         return iotOpeationFillMapper.countList(dataDO);
     }
 
+    @Override
+    public List<IotCountDataDO> countDeviceList(IotCountDataDO dataDO) {
+        return iotOpeationFillMapper.countDeviceList(dataDO);
+    }
+
 }

+ 101 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

@@ -490,6 +490,67 @@
         update rq_iot_device set location= #{location} where device_code = #{deviceCode}
     </update>
 
+    <select id="deviceCountList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicecountdata.IotDeviceCountData">
+        select
+               distinct
+               a.device_code,
+               a.device_name,
+               a.create_time,
+               b.name dept_name,
+               a.is_fill,
+               d.nickname,
+               e.order_name
+        FROM rq_iot_opeation_fill a
+        LEFT JOIN system_dept b
+        ON a.dept_id = b.id
+        AND b.deleted = 0 -- 将删除检查移至JOIN条件
+        LEFT JOIN rq_iot_device_person c
+        ON a.device_id = c.device_id
+        AND c.deleted = 0 -- 将删除检查移至JOIN条件
+        LEFT JOIN system_users d
+        ON c.person_id = d.id
+        AND d.deleted = 0 -- 将删除检查移至JOIN条件
+        LEFT JOIN rq_iot_opeation_fill_order e
+        ON a.order_id = e.id
+        and e.deleted = 0
+        WHERE a.deleted = 0
+        and e.order_name is not null
+        AND b.id IN (
+        SELECT id FROM system_dept WHERE id = #{deptId}
+        UNION ALL
+        SELECT id FROM system_dept WHERE parent_id = #{deptId}
+        UNION ALL
+        SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId})
+        UNION ALL
+        SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId}))
+        UNION ALL
+        SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId})))
+        )
+        <if test="isFill != null">
+            and a.is_fill = #{isFill}
+        </if>
+        <if test="createTime != null and createTime.length > 0">
+            <choose>
+                <when test="createTime.length == 1">
+                    AND a.create_time = #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
+                </when>
+                <otherwise>
+                    AND a.create_time BETWEEN #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler} AND #{createTime[1],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
+                </otherwise>
+            </choose>
+        </if>
+        <if test="orderName != null and orderName != ''">
+            AND (e.order_name LIKE CONCAT('%', #{orderName}, '%')
+            OR a.device_code LIKE CONCAT('%', #{orderName}, '%')
+            OR a.device_name LIKE CONCAT('%', #{orderName}, '%')
+            OR d.nickname LIKE CONCAT('%', #{orderName}, '%'))
+        </if>
+        order by a.create_time desc,a.is_fill asc,b.name asc
+    </select>
+
+
+
 
     <select id="countList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO"
     resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO">
@@ -579,4 +640,44 @@
 
     </select>
 
+
+
+    <select id="countDeviceList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO">
+        -- 统计指定部门及其子部门的工单状态
+        -- 第一行:汇总数据
+        SELECT
+            COUNT(a.id) AS total_count,
+            SUM(CASE WHEN a.is_fill = 1 THEN 1 ELSE 0 END) AS filled_count,
+            COUNT(a.id) - SUM(CASE WHEN a.is_fill = 1 THEN 1 ELSE 0 END) AS unfilled_count
+        FROM rq_iot_opeation_fill a
+        WHERE a.deleted = 0
+          AND EXISTS (
+                SELECT 1 FROM system_dept b
+                WHERE a.dept_id = b.id
+                  AND b.deleted = 0
+                  AND (b.id = #{deptId} OR b.parent_id = #{deptId}
+                    OR b.parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId})
+                    OR b.parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId}))
+                    OR b.parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId})))
+                    )
+            )
+          AND EXISTS (
+                SELECT 1 FROM rq_iot_opeation_fill_order e
+                WHERE a.order_id = e.id
+                  AND e.deleted = 0
+                  AND e.order_name IS NOT NULL
+            )
+        <if test="createTime != null and createTime.length > 0">
+            <choose>
+                <when test="createTime.length == 1">
+                    AND a.create_time = #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
+                </when>
+                <otherwise>
+                    AND a.create_time BETWEEN #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler} AND #{createTime[1],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
+                </otherwise>
+            </choose>
+        </if>
+    </select>
+
 </mapper>