From 3423bb9ee5b25d270a00763b69ed73970d790f63 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 18 二月 2025 16:43:43 +0800
Subject: [PATCH] update

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMttrInfoMapper.java                          |   24 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMttrInfoService.java                       |   37 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java                  |   42 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcRepairInfoMapper.xml                     |   20 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcRepairInfoServiceImpl.java             |   53 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcRepairInfo.java                              |   13 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java |    7 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/util/FileUtils.java              |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDownTimeController.java                  |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDownTimeMapper.xml                       |   20 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMttrInfo.java                                |   91 +++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDownTime.java                                |    9 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml   |   18 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/FileUtils.java                                    |  189 +++++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java                                  |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcRepairInfoController.java                |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDownTimeMapper.java                          |   17 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMttrInfoMapper.xml                       |   30 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMttrInfoController.java                  |   77 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDownTimeServiceImpl.java               |   70 ++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcMttrInfoVo.java                                  |   20 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcRepairInfoMapper.java                        |   18 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMttrInfoServiceImpl.java               |  142 ++++++++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOeeInfo.java                                 |    2 
 24 files changed, 869 insertions(+), 38 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDownTimeController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDownTimeController.java
index 4a3e494..7dc5aaa 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDownTimeController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDownTimeController.java
@@ -170,7 +170,7 @@
     @AutoLog(value = "璁惧鏁呴殰鍋滄満鏃堕暱琛�-璁$畻MTBF")
     @ApiOperation(value = "璁惧鏁呴殰鍋滄満鏃堕暱琛�-璁$畻MTBF", notes = "璁惧鏁呴殰鍋滄満鏃堕暱琛�-璁$畻MTBF")
     @PostMapping(value = "/computeMtbf")
-    public Result<?> computeMtbf(@RequestBody String month) {
+    public Result<?> computeMtbf(@RequestParam(name = "month", required = true) String month) {
         mdcDownTimeService.computeMtbf(month);
         return Result.OK("璁$畻鎴愬姛锛�");
     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMttrInfoController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMttrInfoController.java
new file mode 100644
index 0000000..85e7d42
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcMttrInfoController.java
@@ -0,0 +1,77 @@
+package org.jeecg.modules.mdc.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
+import org.jeecg.modules.mdc.entity.MdcOeeInfo;
+import org.jeecg.modules.mdc.service.IMdcMttrInfoService;
+import org.jeecg.modules.mdc.vo.MdcMttrInfoVo;
+import org.jeecg.modules.mdc.vo.MdcOeeInfoVo;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Description: 璁惧鏁呴殰缁翠慨琛�
+ * @Author: lius
+ * @Date: 2025-02-18
+ */
+@Slf4j
+@Api(tags = "璁惧鏁呴殰缁翠慨琛�")
+@RestController
+@RequestMapping("/mdc/mdcMttrInfo")
+public class MdcMttrInfoController extends JeecgController<MdcMttrInfo, IMdcMttrInfoService> {
+
+    @Resource
+    private IMdcMttrInfoService mdcMttrInfoService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param mdcMttrInfoVo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "璁惧鏁呴殰缁翠慨琛�-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "璁惧鏁呴殰缁翠慨琛�-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧鏁呴殰缁翠慨琛�-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(MdcMttrInfoVo mdcMttrInfoVo,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        Page<MdcMttrInfo> page = new Page<MdcMttrInfo>(pageNo, pageSize);
+        IPage<MdcMttrInfo> pageList = mdcMttrInfoService.pageList(userId, page, mdcMttrInfoVo, req);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param mdcMttrInfoVo
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MdcMttrInfoVo mdcMttrInfoVo) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        return mdcMttrInfoService.exportXls(userId, mdcMttrInfoVo);
+    }
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcRepairInfoController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcRepairInfoController.java
index 24415f6..9d600fb 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcRepairInfoController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcRepairInfoController.java
@@ -170,7 +170,7 @@
     @AutoLog(value = "璁惧缁翠慨鏃堕暱琛�-璁$畻MTTR")
     @ApiOperation(value = "璁惧缁翠慨鏃堕暱琛�-璁$畻MTTR", notes = "璁惧缁翠慨鏃堕暱琛�-璁$畻MTTR")
     @PostMapping(value = "/computeMttr")
-    public Result<?> computeMttr(@RequestBody String month) {
+    public Result<?> computeMttr(@RequestParam(name = "month", required = true) String month) {
         mdcRepairInfoService.computeMttr(month);
         return Result.OK("璁$畻鎴愬姛锛�");
     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDownTime.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDownTime.java
index 907be2f..6e1c804 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDownTime.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDownTime.java
@@ -10,6 +10,7 @@
 import org.jeecgframework.poi.excel.annotation.Excel;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 璁惧鏁呴殰鍋滄満鏃堕暱琛�
@@ -38,10 +39,10 @@
     @ApiModelProperty(value = "鏃ユ湡")
     private String theDate;
     /**
-     * 鏁呴殰鍋滄満鏃堕暱(min)
+     * 鏁呴殰鍋滄満鏃堕暱(hour)
      */
-    @Excel(name = "鏁呴殰鍋滄満鏃堕暱(min)", width = 15)
-    @ApiModelProperty(value = "鏁呴殰鍋滄満鏃堕暱(min)")
-    private Integer downLong;
+    @Excel(name = "鏁呴殰鍋滄満鏃堕暱(hour)", width = 15)
+    @ApiModelProperty(value = "鏁呴殰鍋滄満鏃堕暱(hour)")
+    private BigDecimal downLong;
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMttrInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMttrInfo.java
new file mode 100644
index 0000000..1c37128
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcMttrInfo.java
@@ -0,0 +1,91 @@
+package org.jeecg.modules.mdc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author Lius
+ * @date 2025/2/7 9:31
+ */
+@Data
+@TableName("mdc_mttr_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "mdc_mttr_info瀵硅薄", description = "璁惧鏁呴殰缁翠慨琛�")
+public class MdcMttrInfo extends JeecgEntity implements Serializable {
+
+    private static final long serialVersionUID = -4164370727294921773L;
+
+    /**
+     * 璁惧缂栧彿
+     */
+    @Excel(name = "璁惧缂栧彿", width = 15)
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private String equipmentId;
+
+    /**
+     * 鏃ユ湡
+     */
+    @Excel(name = "鏃ユ湡", width = 15)
+    @ApiModelProperty(value = "鏃ユ湡")
+    private String theDate;
+
+    /**
+     * 鏃ュ巻鏃堕棿
+     */
+    @Excel(name = "鏃ュ巻鏃堕棿", width = 15)
+    @ApiModelProperty(value = "鏃ュ巻鏃堕棿(hour)")
+    private BigDecimal calendarLong = BigDecimal.ZERO;
+
+    /**
+     * 鎬绘晠闅滃仠鏈烘椂闂�
+     */
+    @Excel(name = "鎬绘晠闅滃仠鏈烘椂闂�", width = 15)
+    @ApiModelProperty(value = "鎬绘晠闅滃仠鏈烘椂闂�(hour)")
+    private BigDecimal totalDownLong = BigDecimal.ZERO;
+
+    /**
+     * 鎬绘晠闅滄鏁�
+     */
+    @Excel(name = "鎬绘晠闅滄鏁�", width = 15)
+    @ApiModelProperty(value = "鎬绘晠闅滄鏁�")
+    private Integer totalDownCount = 0;
+
+    /**
+     * MTBF
+     */
+    @Excel(name = "MTBF", width = 15)
+    @ApiModelProperty(value = "MTBF(hour)")
+    private BigDecimal mtbf = BigDecimal.ZERO;
+
+    /**
+     * 鎬荤淮淇椂闂�
+     */
+    @Excel(name = "鎬荤淮淇椂闂�", width = 15)
+    @ApiModelProperty(value = "鎬荤淮淇椂闂�(hour)")
+    private BigDecimal totalRepairLong = BigDecimal.ZERO;
+
+    /**
+     * 鎬荤淮淇鏁�
+     */
+    @Excel(name = "鎬荤淮淇鏁�", width = 15)
+    @ApiModelProperty(value = "鎬荤淮淇鏁�")
+    private Integer totalRepairCount = 0;
+
+    /**
+     * MTTR
+     */
+    @Excel(name = "MTTR", width = 15)
+    @ApiModelProperty(value = "MTTR(hour)")
+    private BigDecimal mttr = BigDecimal.ZERO;
+
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOeeInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOeeInfo.java
index 4cdb420..6832055 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOeeInfo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOeeInfo.java
@@ -24,6 +24,8 @@
 @ApiModel(value = "mdc_oee_info瀵硅薄", description = "OEE琛�")
 public class MdcOeeInfo extends JeecgEntity implements Serializable {
 
+    private static final long serialVersionUID = -1029070983514140912L;
+
     /**
      * 璁惧缂栧彿
      */
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcRepairInfo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcRepairInfo.java
index 29b6a52..42d92b7 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcRepairInfo.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcRepairInfo.java
@@ -10,6 +10,7 @@
 import org.jeecgframework.poi.excel.annotation.Excel;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 璁惧缁翠慨鏃堕暱琛�
@@ -30,18 +31,18 @@
      */
     @Excel(name = "璁惧缂栧彿", width = 15)
     @ApiModelProperty(value = "璁惧缂栧彿")
-    private java.lang.String equipmentId;
+    private String equipmentId;
     /**
      * 鏃ユ湡
      */
     @Excel(name = "鏃ユ湡", width = 15)
     @ApiModelProperty(value = "鏃ユ湡")
-    private java.lang.String theDate;
+    private String theDate;
     /**
-     * 缁翠慨鏃堕暱(min)
+     * 缁翠慨鏃堕暱(hour)
      */
-    @Excel(name = "缁翠慨鏃堕暱(min)", width = 15)
-    @ApiModelProperty(value = "缁翠慨鏃堕暱(min)")
-    private java.lang.Integer repairLong;
+    @Excel(name = "缁翠慨鏃堕暱(hour)", width = 15)
+    @ApiModelProperty(value = "缁翠慨鏃堕暱(hour)")
+    private BigDecimal repairLong;
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDownTimeMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDownTimeMapper.java
index fedf22d..eaa509a 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDownTimeMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDownTimeMapper.java
@@ -7,6 +7,8 @@
 import org.jeecg.modules.mdc.entity.MdcDownTime;
 import org.jeecg.modules.mdc.vo.MdcDownTimeVo;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 璁惧鏁呴殰鍋滄満鏃堕暱琛�
  * @Author: Lius
@@ -23,4 +25,19 @@
      */
     IPage<MdcDownTime> pageList(Page<MdcDownTime> page, @Param("mdcDownTimeVo") MdcDownTimeVo mdcDownTimeVo);
 
+    /**
+     * 鏌ヨ褰撴湀鎬绘晠闅滃仠鏈烘椂闂�
+     *
+     * @param month
+     * @return
+     */
+    BigDecimal findTotalDownLong(@Param("month") String month);
+
+    /**
+     * 鏌ヨ褰撴湀鎬绘晠闅滃仠鏈烘鏁�
+     *
+     * @param month
+     * @return
+     */
+    Integer findTotalDownCount(@Param("month") String month);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMttrInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMttrInfoMapper.java
new file mode 100644
index 0000000..6d1af92
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcMttrInfoMapper.java
@@ -0,0 +1,24 @@
+package org.jeecg.modules.mdc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
+import org.jeecg.modules.mdc.vo.MdcMttrInfoVo;
+
+/**
+ * @author Lius
+ * @date 2025/2/18 13:53
+ */
+public interface MdcMttrInfoMapper extends BaseMapper<MdcMttrInfo> {
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     *
+     * @param page
+     * @param mdcMttrInfoVo
+     * @return
+     */
+    IPage<MdcMttrInfo> pageList(Page<MdcMttrInfo> page, @Param("mdcMttrInfoVo") MdcMttrInfoVo mdcMttrInfoVo);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcRepairInfoMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcRepairInfoMapper.java
index 5ec663f..ea0694c 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcRepairInfoMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcRepairInfoMapper.java
@@ -7,6 +7,8 @@
 import org.jeecg.modules.mdc.entity.MdcRepairInfo;
 import org.jeecg.modules.mdc.vo.MdcRepairInfoVo;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 璁惧缁翠慨鏃堕暱琛�
  * @Author: Lius
@@ -22,4 +24,20 @@
      * @return
      */
     IPage<MdcRepairInfo> pageList(Page<MdcRepairInfo> page, @Param("mdcRepairInfoVo") MdcRepairInfoVo mdcRepairInfoVo);
+
+    /**
+     * 鏌ヨ褰撴湀鎬荤淮淇椂闂�
+     *
+     * @param month
+     * @return
+     */
+    BigDecimal findTotalRepairLong(@Param("month") String month);
+
+    /**
+     * 鏌ヨ褰撴湀鎬荤淮淇鏁�
+     *
+     * @param month
+     * @return
+     */
+    Integer findTotalRepairCount(@Param("month") String month);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDownTimeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDownTimeMapper.xml
index aa4344b..c0d4bb3 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDownTimeMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDownTimeMapper.xml
@@ -27,4 +27,24 @@
         </where>
         ORDER BY the_date DESC, equipment_id ASC
     </select>
+
+    <!--鏌ヨ褰撴湀鎬绘晠闅滃仠鏈烘椂闂�-->
+    <select id="findTotalDownLong" resultType="java.math.BigDecimal">
+        SELECT
+            SUM(down_long)
+        FROM
+            mdc_down_time
+        WHERE
+            the_date LIKE CONCAT(#{month}, '%')
+    </select>
+
+    <!--鏌ヨ褰撴湀鎬绘晠闅滃仠鏈烘鏁�-->
+    <select id="findTotalDownCount" resultType="java.lang.Integer">
+        SELECT
+            COUNT(down_long)
+        FROM
+            mdc_down_time
+        WHERE
+            the_date LIKE CONCAT(#{month}, '%')
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMttrInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMttrInfoMapper.xml
new file mode 100644
index 0000000..5280753
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcMttrInfoMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.MdcMttrInfoMapper">
+
+    <!--鍒嗛〉鍒楄〃-->
+    <select id="pageList" resultType="org.jeecg.modules.mdc.entity.MdcMttrInfo">
+        SELECT
+            *
+        FROM
+            mdc_mttr_info
+        <where>
+            <if test="MdcMttrInfoVo.equipmentId != null and MdcMttrInfoVo.equipmentId != ''">
+                AND equipment_id = #{ MdcMttrInfoVo.equipmentId }
+            </if>
+            <if test="MdcMttrInfoVo.startTime != null and MdcMttrInfoVo.startTime != ''">
+                AND the_date &gt;= #{ MdcMttrInfoVo.startTime }
+            </if>
+            <if test="MdcMttrInfoVo.endTime != null and MdcMttrInfoVo.endTime != ''">
+                AND the_date &lt;= #{MdcMttrInfoVo.endTime }
+            </if>
+            <if test="MdcMttrInfoVo.equipmentIdList != null and MdcMttrInfoVo.equipmentIdList.size() > 0 ">
+                AND equipment_id IN
+                <foreach collection="MdcMttrInfoVo.equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
+                    #{ id }
+                </foreach>
+            </if>
+        </where>
+        ORDER BY the_date DESC, equipment_id ASC
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcRepairInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcRepairInfoMapper.xml
index 8531fc7..c44cf58 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcRepairInfoMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcRepairInfoMapper.xml
@@ -27,4 +27,24 @@
         </where>
         ORDER BY the_date DESC, equipment_id ASC
     </select>
+
+    <!--鏌ヨ褰撴湀鎬荤淮淇椂闂�-->
+    <select id="findTotalRepairLong" resultType="java.math.BigDecimal">
+        SELECT
+            SUM(repair_long)
+        FROM
+            mdc_repair_info
+        WHERE
+            the_date LIKE CONCAT(#{month}, '%')
+    </select>
+
+    <!--鏌ヨ褰撴湀鎬荤淮淇鏁�-->
+    <select id="findTotalRepairCount" resultType="java.lang.Integer">
+        SELECT
+            COUNT(repair_long)
+        FROM
+            mdc_repair_info
+        WHERE
+            the_date LIKE CONCAT(#{month}, '%')
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMttrInfoService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMttrInfoService.java
new file mode 100644
index 0000000..7c2cb78
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcMttrInfoService.java
@@ -0,0 +1,37 @@
+package org.jeecg.modules.mdc.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
+import org.jeecg.modules.mdc.vo.MdcMttrInfoVo;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author Lius
+ * @date 2025/2/18 13:48
+ */
+public interface IMdcMttrInfoService extends IService<MdcMttrInfo> {
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     *
+     * @param userId
+     * @param page
+     * @param mdcMttrInfoVo
+     * @param req
+     * @return
+     */
+    IPage<MdcMttrInfo> pageList(String userId, Page<MdcMttrInfo> page, MdcMttrInfoVo mdcMttrInfoVo, HttpServletRequest req);
+
+    /**
+     * 瀵煎嚭
+     *
+     * @param userId
+     * @param mdcMttrInfoVo
+     * @return
+     */
+    ModelAndView exportXls(String userId, MdcMttrInfoVo mdcMttrInfoVo);
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
index c9c68b1..87eac22 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
@@ -29,10 +29,14 @@
 import javax.annotation.Resource;
 import java.io.File;
 import java.net.InetAddress;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author Lius
@@ -77,7 +81,7 @@
     @Resource
     private IMdcPassLogService mdcPassLogService;
 
-    private static final String TYPE = "01";
+    private static final String TYPE = "18";
 
     @Resource
     private SqlExecutor sqlExecutor;
@@ -107,16 +111,22 @@
 
             // 鏂囦欢璺緞
             String locFilePath = localFilePath + TYPE + today + String.format("%06d", sequenceNumber) + ".xml";
-            FileWriter writer = new FileWriter(locFilePath);
-            writer.writeLines(sqlList);
+//            FileWriter writer = new FileWriter(locFilePath);
+//            writer.writeLines(sqlList);
+            String listSql = String.join("\n", sqlList);
+            try {
+                FileUtils.fileWriterSql(locFilePath, listSql);
+            } catch (Exception e) {
+                throw new JeecgBootException("鏁版嵁鍐欏叆鏂囦欢澶辫触锛�");
+            }
 
             // step.4 鎺ㄩ�佺綉闂�
             // step.4.1 娴嬭瘯鏈嶅姟鍣ㄨ繛閫氭��
-            boolean ping = NetUtil.ping(host + ":" + port);
+          /*  boolean ping = NetUtil.ping(host + ":" + port);
             if (!ping) {
                 FileUtil.del(locFilePath);
                 throw new JeecgBootException("鏈嶅姟鍣ㄨ繛鎺ワ細 " + host + ":" + port + " 寮傚父锛�");
-            }
+            }*/
 
             // step.4.2 鑾峰彇token
             String token = "";
@@ -167,12 +177,19 @@
                             objectName.setDestination(host);
                             objectName.setResult("澶辫触");
                             // 鏈湴鏂囦欢璺緞
-                            String loFilePath = localFilePath + "\\" + file.getName();
+                            String loFilePath = localFilePath + file.getName();
                             // 鐩爣鏂囦欢璺緞
-                            String servicePathName = servicePath + "\\" + file.getName();
+                            String servicePathName = servicePath + file.getName();
                             String result = FileClient.uploadFile(host, port, token, file.getName(), servicePathName, loFilePath, addressUploadFile);
                             if ("鎴愬姛".equals(result)) {
-                                FileUtil.del(loFilePath);
+                                if (sequenceNumber == 1) {
+                                    // 鍒犻櫎鏄ㄦ棩澶囦唤鏂囦欢澶逛腑鍘嗗彶鏂囦欢
+                                    FileUtil.clean(newFilePath);
+                                }
+                                // 鎴愬姛涔嬪悗灏嗘枃浠跺浠借蛋
+                                FileUtil.move(new File(locFilePath), new File(newFilePath + fileName), true);
+//                                FileUtil.copy(locFilePath, newFilePath + fileName, true);
+//                                FileUtil.del(loFilePath);
                                 objectName.setResult("鎴愬姛");
                                 SyslogClient.sendClient(logIp, Integer.valueOf(logPort), objectName.toString());
                             } else {
@@ -203,7 +220,7 @@
         File[] files = FileUtil.ls(localFilePath);
         for (File file : files) {
             if (file.isFile()) {
-                String loFilePath = localFilePath + "\\" + file.getName();
+                String loFilePath = localFilePath + file.getName();
                 FileReader fileReader = new FileReader(loFilePath);
                 String sqlList = fileReader.readString();
                 try {
@@ -211,8 +228,13 @@
                 } catch (Exception e) {
                     throw new JeecgBootException("鎵цsql澶辫触锛�");
                 }
+                if (Integer.parseInt(file.getName().substring(file.getName().length() - 10, file.getName().length() - 4)) == 1) {
+                    // 鍒犻櫎鍘嗗彶鏂囦欢
+                    FileUtil.clean(newFilePath);
+                }
+
                 // 澶囦唤
-                FileUtil.move(new File(loFilePath), new File(newFilePath + "\\" + file.getName()), true);
+                FileUtil.move(new File(loFilePath), new File(newFilePath + file.getName()), true);
             }
         }
     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDownTimeServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDownTimeServiceImpl.java
index ba7b735..c988419 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDownTimeServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDownTimeServiceImpl.java
@@ -8,10 +8,14 @@
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.mdc.entity.MdcDownTime;
+import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
 import org.jeecg.modules.mdc.entity.MdcOeeInfo;
 import org.jeecg.modules.mdc.mapper.MdcDownTimeMapper;
 import org.jeecg.modules.mdc.service.IMdcDownTimeService;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcMttrInfoService;
+import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.vo.MdcDownTimeVo;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -22,6 +26,10 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -36,6 +44,9 @@
 
     @Resource
     private IMdcEquipmentService mdcEquipmentService;
+
+    @Resource
+    private IMdcMttrInfoService mdcMttrInfoService;
 
     @Override
     public IPage<MdcDownTime> pageList(String userId, Page<MdcDownTime> page, MdcDownTimeVo mdcDownTimeVo, HttpServletRequest req) {
@@ -160,6 +171,65 @@
      */
     @Override
     public void computeMtbf(String month) {
+        /*
+        璁惧骞冲潎鏁呴殰闂撮殧鏈�(MTBF) = (鏃ュ巻鏃堕棿 - 鎬绘晠闅滃仠鏈烘椂闂�) / 鎬绘晠闅滄鏁�
+         */
+        // step.1
+        List<MdcMttrInfo> mdcMttrInfos = mdcMttrInfoService.list(new LambdaQueryWrapper<MdcMttrInfo>().eq(MdcMttrInfo::getTheDate, month));
+        DateTimeFormatter df = DateTimeFormatter.ofPattern(DateUtils.STR_DATE);
+        LocalDate parse = LocalDate.parse(month + "-01", df);
+        int calendarLong = parse.lengthOfMonth() * 24;
+        if (mdcMttrInfos != null && !mdcMttrInfos.isEmpty()) {
+            for (MdcMttrInfo mdcMttrInfo : mdcMttrInfos) {
+                // 鏃ュ巻鏃堕棿
+                mdcMttrInfo.setCalendarLong(new BigDecimal(calendarLong));
+                // 鎬绘晠闅滃仠鏈烘椂闂�
+                BigDecimal totalDownLong = this.baseMapper.findTotalDownLong(month);
+                if (totalDownLong != null) {
+                    mdcMttrInfo.setTotalDownLong(totalDownLong);
+                }
+                // 鎬绘晠闅滄鏁�
+                Integer totalDownCount = this.baseMapper.findTotalDownCount(month);
+                if (totalDownLong != null) {
+                    mdcMttrInfo.setTotalDownCount(totalDownCount);
+                }
+                // MTBF
+                if (mdcMttrInfo.getTotalDownCount() != 0) {
+                    BigDecimal mtbf = (mdcMttrInfo.getCalendarLong().subtract(mdcMttrInfo.getTotalDownLong())).divide(new BigDecimal(mdcMttrInfo.getTotalDownCount()), 4, RoundingMode.HALF_UP);
+                    mdcMttrInfo.setMtbf(mtbf);
+                }
+            }
+            mdcMttrInfoService.updateBatchById(mdcMttrInfos);
+        } else {
+            List<MdcEquipment> equipmentList = mdcEquipmentService.list();
+            if (equipmentList != null && !equipmentList.isEmpty()) {
+                List<MdcMttrInfo> mmi = new ArrayList<>();
+                for (MdcEquipment mdcEquipment : equipmentList) {
+                    MdcMttrInfo mdcMttrInfo = new MdcMttrInfo();
+                    mdcMttrInfo.setEquipmentId(mdcEquipment.getEquipmentId());
+                    mdcMttrInfo.setTheDate(month);
+                    // 鏃ュ巻鏃堕棿
+                    mdcMttrInfo.setCalendarLong(new BigDecimal(calendarLong));
+                    // 鎬绘晠闅滃仠鏈烘椂闂�
+                    BigDecimal totalDownLong = this.baseMapper.findTotalDownLong(month);
+                    if (totalDownLong != null) {
+                        mdcMttrInfo.setTotalDownLong(totalDownLong);
+                    }
+                    // 鎬绘晠闅滄鏁�
+                    Integer totalDownCount = this.baseMapper.findTotalDownCount(month);
+                    if (totalDownLong != null) {
+                        mdcMttrInfo.setTotalDownCount(totalDownCount);
+                    }
+                    // MTBF
+                    if (mdcMttrInfo.getTotalDownCount() != 0) {
+                        BigDecimal mtbf = (mdcMttrInfo.getCalendarLong().subtract(mdcMttrInfo.getTotalDownLong())).divide(new BigDecimal(mdcMttrInfo.getTotalDownCount()), 4, RoundingMode.HALF_UP);
+                        mdcMttrInfo.setMtbf(mtbf);
+                    }
+                    mmi.add(mdcMttrInfo);
+                }
+                mdcMttrInfoService.saveBatch(mmi);
+            }
+        }
 
     }
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMttrInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMttrInfoServiceImpl.java
new file mode 100644
index 0000000..883f3d9
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcMttrInfoServiceImpl.java
@@ -0,0 +1,142 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
+import org.jeecg.modules.mdc.entity.MdcOeeInfo;
+import org.jeecg.modules.mdc.mapper.MdcMttrInfoMapper;
+import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcMttrInfoService;
+import org.jeecg.modules.mdc.vo.MdcMttrInfoVo;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Lius
+ * @date 2025/2/18 13:52
+ */
+@Service
+public class MdcMttrInfoServiceImpl extends ServiceImpl<MdcMttrInfoMapper, MdcMttrInfo> implements IMdcMttrInfoService {
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    /**
+     * 鍒嗛〉鍒楄〃
+     *
+     * @param userId
+     * @param page
+     * @param mdcMttrInfoVo
+     * @param req
+     * @return
+     */
+    @Override
+    public IPage<MdcMttrInfo> pageList(String userId, Page<MdcMttrInfo> page, MdcMttrInfoVo mdcMttrInfoVo, HttpServletRequest req) {
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(mdcMttrInfoVo.getParentId()) && StringUtils.isEmpty(mdcMttrInfoVo.getEquipmentId())) {
+            if ("2".equals(mdcMttrInfoVo.getTypeTree())) {
+                //閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcMttrInfoVo.getParentId());
+            } else {
+                //浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcMttrInfoVo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(mdcMttrInfoVo.getEquipmentId())) {
+            //鍗曞彴璁惧淇℃伅
+            mdcMttrInfoVo.setEquipmentIdList(Collections.singletonList(mdcMttrInfoVo.getEquipmentId()));
+        } else {
+            //鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(mdcMttrInfoVo.getTypeTree())) {
+                //閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                //浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+
+        if (mdcMttrInfoVo.getEquipmentIdList() == null || mdcMttrInfoVo.getEquipmentIdList().isEmpty()) {
+            mdcMttrInfoVo.setEquipmentIdList(equipmentIds);
+        }
+
+        if (mdcMttrInfoVo.getEquipmentIdList() == null || mdcMttrInfoVo.getEquipmentIdList().isEmpty()) {
+            return null;
+        }
+        return this.baseMapper.pageList(page, mdcMttrInfoVo);
+    }
+
+    /**
+     * 瀵煎嚭
+     *
+     * @param userId
+     * @param mdcMttrInfoVo
+     * @return
+     */
+    @Override
+    public ModelAndView exportXls(String userId, MdcMttrInfoVo mdcMttrInfoVo) {
+        LambdaQueryWrapper<MdcMttrInfo> queryWrapper = new LambdaQueryWrapper<>();
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(mdcMttrInfoVo.getParentId()) && StringUtils.isEmpty(mdcMttrInfoVo.getEquipmentId())) {
+            if ("2".equals(mdcMttrInfoVo.getTypeTree())) {
+                //閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcMttrInfoVo.getParentId());
+            } else {
+                //浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcMttrInfoVo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(mdcMttrInfoVo.getEquipmentId())) {
+            //鍗曞彴璁惧淇℃伅
+            mdcMttrInfoVo.setEquipmentIdList(Collections.singletonList(mdcMttrInfoVo.getEquipmentId()));
+        } else {
+            //鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(mdcMttrInfoVo.getTypeTree())) {
+                //閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                //浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+
+        if (mdcMttrInfoVo.getEquipmentIdList() == null || mdcMttrInfoVo.getEquipmentIdList().isEmpty()) {
+            mdcMttrInfoVo.setEquipmentIdList(equipmentIds);
+        }
+
+        if (mdcMttrInfoVo.getEquipmentIdList() == null || mdcMttrInfoVo.getEquipmentIdList().isEmpty()) {
+            return null;
+        } else {
+            queryWrapper.in(MdcMttrInfo::getEquipmentId, mdcMttrInfoVo.getEquipmentIdList());
+        }
+        if (StringUtils.isNotEmpty(mdcMttrInfoVo.getEquipmentId())) {
+            queryWrapper.eq(MdcMttrInfo::getEquipmentId, mdcMttrInfoVo.getEquipmentId());
+        }
+        if (StringUtils.isNotEmpty(mdcMttrInfoVo.getStartTime()) && StringUtils.isNotEmpty(mdcMttrInfoVo.getEndTime())) {
+            queryWrapper.between(MdcMttrInfo::getTheDate, mdcMttrInfoVo.getStartTime(), mdcMttrInfoVo.getEndTime());
+        }
+        queryWrapper.orderByDesc(MdcMttrInfo::getTheDate).orderByDesc(MdcMttrInfo::getEquipmentId);
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<MdcMttrInfo> mdcMttrInfos = this.baseMapper.selectList(queryWrapper);
+        // 瀵煎嚭鏂囦欢鍚嶇О
+        mv.addObject(NormalExcelConstants.FILE_NAME,  "璁惧MTTR琛�");
+        mv.addObject(NormalExcelConstants.CLASS, MdcMttrInfo.class);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("璁惧MTTR琛ㄦ暟鎹�", "瀵煎嚭浜�:" + user.getRealname(), "璁惧MTTR"));
+        //update-end---author:wangshuai ---date:20211227  for锛歔JTC-116]瀵煎嚭浜哄啓姝讳簡------------
+        mv.addObject(NormalExcelConstants.DATA_LIST, mdcMttrInfos);
+        return mv;
+    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcRepairInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcRepairInfoServiceImpl.java
index 2b8efde..ddb71d0 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcRepairInfoServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcRepairInfoServiceImpl.java
@@ -7,10 +7,12 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.mdc.entity.MdcDownTime;
+import org.jeecg.modules.mdc.entity.MdcEquipment;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
 import org.jeecg.modules.mdc.entity.MdcRepairInfo;
 import org.jeecg.modules.mdc.mapper.MdcRepairInfoMapper;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
+import org.jeecg.modules.mdc.service.IMdcMttrInfoService;
 import org.jeecg.modules.mdc.service.IMdcRepairInfoService;
 import org.jeecg.modules.mdc.vo.MdcRepairInfoVo;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -22,6 +24,8 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -36,6 +40,9 @@
 
     @Resource
     private IMdcEquipmentService mdcEquipmentService;
+
+    @Resource
+    private IMdcMttrInfoService mdcMttrInfoService;
 
     /**
      * 鍒嗛〉鍒楄〃
@@ -169,6 +176,48 @@
      */
     @Override
     public void computeMttr(String month) {
-
+        /*
+        璁惧骞冲潎淇悊鏃堕棿(MTTR) = 鎬荤淮淇椂闂� / 鎬荤淮淇鏁�
+         */
+        List<MdcMttrInfo> mdcMttrInfos = mdcMttrInfoService.list(new LambdaQueryWrapper<MdcMttrInfo>().eq(MdcMttrInfo::getTheDate, month));
+        if (mdcMttrInfos != null && !mdcMttrInfos.isEmpty()) {
+            for (MdcMttrInfo mdcMttrInfo : mdcMttrInfos) {
+                // 鎬荤淮淇椂闂�
+                BigDecimal totalRepairLong = this.baseMapper.findTotalRepairLong(month);
+                mdcMttrInfo.setTotalRepairLong(totalRepairLong);
+                // 鎬荤淮淇鏁�
+                Integer totalRepairCount = this.baseMapper.findTotalRepairCount(month);
+                mdcMttrInfo.setTotalRepairCount(totalRepairCount);
+                // MTTR
+                if (mdcMttrInfo.getTotalRepairCount() != 0) {
+                    BigDecimal mttr = mdcMttrInfo.getTotalRepairLong().divide(new BigDecimal(mdcMttrInfo.getTotalDownCount()), 4, RoundingMode.HALF_UP);
+                    mdcMttrInfo.setMttr(mttr);
+                }
+            }
+            mdcMttrInfoService.updateBatchById(mdcMttrInfos);
+        } else {
+            List<MdcEquipment> equipmentList = mdcEquipmentService.list();
+            if (equipmentList != null && !equipmentList.isEmpty()) {
+                List<MdcMttrInfo> mmi = new ArrayList<>();
+                for (MdcEquipment mdcEquipment : equipmentList) {
+                    MdcMttrInfo mdcMttrInfo = new MdcMttrInfo();
+                    mdcMttrInfo.setEquipmentId(mdcEquipment.getEquipmentId());
+                    mdcMttrInfo.setTheDate(month);
+                    // 鎬荤淮淇椂闂�
+                    BigDecimal totalRepairLong = this.baseMapper.findTotalRepairLong(month);
+                    mdcMttrInfo.setTotalRepairLong(totalRepairLong);
+                    // 鎬荤淮淇鏁�
+                    Integer totalRepairCount = this.baseMapper.findTotalRepairCount(month);
+                    mdcMttrInfo.setTotalRepairCount(totalRepairCount);
+                    // MTTR
+                    if (mdcMttrInfo.getTotalRepairCount() != 0) {
+                        BigDecimal mttr = mdcMttrInfo.getTotalRepairLong().divide(new BigDecimal(mdcMttrInfo.getTotalDownCount()), 4, RoundingMode.HALF_UP);
+                        mdcMttrInfo.setMttr(mttr);
+                    }
+                    mmi.add(mdcMttrInfo);
+                }
+                mdcMttrInfoService.saveBatch(mmi);
+            }
+        }
     }
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/FileUtils.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/FileUtils.java
new file mode 100644
index 0000000..f71389c
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/FileUtils.java
@@ -0,0 +1,189 @@
+package org.jeecg.modules.mdc.util;
+
+import cn.hutool.core.date.DateUtil;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Created by YangBin on 2017/9/15.
+ */
+public class FileUtils {
+    private static final long MAX_FILE_SIZE = 10*1024*1024;
+    /**
+     * 鑾峰彇鏈嶅姟鍣ㄤ复鏃惰矾寰�
+     *
+     * @param request
+     * @return     */
+    public static String serverTempPath(HttpServletRequest request) {
+        String fsep = System.getProperty("file.separator");
+        String path = request.getSession().getServletContext().getRealPath("");
+        if (path.lastIndexOf(fsep) == path.length() - 1) {
+            path += "upload" + fsep +"voucher"+ fsep ;
+        } else {
+            path += fsep + "upload" + fsep +"voucher"+ fsep ;
+        }
+        return path;
+    }
+
+    public static String serverTempPathIntactReg(HttpServletRequest request) {
+        String fsep = System.getProperty("file.separator");
+        String path = request.getSession().getServletContext().getRealPath("");
+        if (path.lastIndexOf(fsep) == path.length() - 1) {
+            path += "upload" + fsep +"log"+ fsep +"error"+ fsep ;
+        } else {
+            path += fsep + "upload" + fsep +"log"+ fsep  +"error"+ fsep;
+        }
+        return path;
+    }
+
+    public static String serverTempPathProcess(HttpServletRequest request) {
+        String fsep = System.getProperty("file.separator");
+        String path = request.getSession().getServletContext().getRealPath("");
+        if (path.lastIndexOf(fsep) == path.length() - 1) {
+            path += "upload" + fsep +"process"+ fsep ;
+        } else {
+            path += fsep + "upload" + fsep +"process"+ fsep ;
+        }
+        return path;
+    }
+
+    public static String changeFileFormatKb(String flow) {
+        BigDecimal flows = new BigDecimal(flow);
+        if (flows.compareTo(new BigDecimal(0)) > 0 && flows.compareTo(new BigDecimal(1024)) < 0) {//灏忎簬1M
+            return flows.toString() + "B";
+        } else if(flows.compareTo(new BigDecimal(1024)) >= 0){
+            BigDecimal result = flows.divide(new BigDecimal(1024),2,BigDecimal.ROUND_HALF_UP);
+            return  result.toString() + "KB";
+        } else {
+            return "0";
+        }
+    }
+
+
+    /**
+     * 寰楀埌椤圭洰鏍圭洰褰曚笅鐨勭粷瀵硅矾寰勶紙纾佺洏鐨勭墿鐞嗚矾寰勶級
+     * @param request
+     * @param newPath
+     * @return
+     */
+    public static String getFilePath(HttpServletRequest request, String newPath) {
+        String fsep = System.getProperty("file.separator");
+        String path = request.getSession().getServletContext().getRealPath("/upload");
+        path += fsep + newPath;
+        return path;
+    }
+
+    /**
+     * 寰楀埌椤圭洰鏍圭洰褰曚笅鐨勭浉瀵硅矾寰� 锛堢浉瀵逛簬椤圭洰涓烘牴璺緞锛�
+     * @param newPath
+     * @return
+     */
+    public static String getRelativePath(String newPath) {
+        return "/upload/" + newPath;
+    }
+
+
+    /**
+     * 鏂规硶涓�:浣跨敤 FileWriter 鍐欐枃浠�
+     * @param filepath 鏂囦欢鐩綍
+     * @param content  寰呭啓鍏ュ唴瀹�
+     * @throws IOException
+     */
+    public static void fileWriterSql(String filepath, String content) throws IOException {
+        OutputStreamWriter outputStreamWriter = null;
+        try {
+            File file = new File(filepath);
+            if (!file.exists()){
+                file.createNewFile();
+            }
+            FileOutputStream outputStream = new FileOutputStream(file);
+            if (outputStream != null){
+                outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8");
+                outputStreamWriter.write(content);
+                outputStreamWriter.flush();
+            }
+        }
+        catch (IOException e) {
+            e.getMessage();
+        }
+        finally {
+            try {
+                if (outputStreamWriter != null){
+                    outputStreamWriter.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        /*
+        File file=new File(filepath);
+        Writer writer = new OutputStreamWriter(new FileOutputStream(file.getAbsoluteFile()), "UTF-8");
+        writer.append(content);
+         */
+    }
+
+    /**
+     * 鏂囦欢澶у皬鏅鸿兘杞崲
+     * 浼氬皢鏂囦欢澶у皬杞崲涓烘渶澶ф弧瓒冲崟浣�
+     * @param size锛堟枃浠跺ぇ灏忥紝鍗曚綅涓築锛�
+     * @return 鏂囦欢澶у皬
+     */
+    public static String formatFileSize(Long size) {
+        String sizeName = null;
+        if(1024*1024 > size && size >= 1024 ) {
+            sizeName = String.format("%.2f",size.doubleValue()/1024) + "KB";
+        }else if(1024*1024*1024 > size && size >= 1024*1024 ) {
+            sizeName = String.format("%.2f",size.doubleValue()/(1024*1024)) + "MB";
+        }else if(size >= 1024*1024*1024 ) {
+            sizeName = String.format("%.2f",size.doubleValue()/(1024*1024*1024)) + "GB";
+        }else {
+            sizeName = size.toString() + "B";
+        }
+        return sizeName;
+    }
+
+    /**
+     * 涓婁紶鏂囦欢宸ュ叿绫�
+     * @param userPic
+     * @param path
+     * @param fileName
+     * @return
+     */
+    public static boolean uploadFile(MultipartFile userPic, String path, String fileName) {
+        Long fileSize = userPic.getSize();
+        if(fileSize > MAX_FILE_SIZE) {
+            return false;
+        }
+        File targetFile = new File(path, fileName);
+        if(!targetFile.exists()){
+            targetFile.mkdirs();
+        }
+        try {
+            userPic.transferTo(targetFile);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+//    /**
+//     * 閲嶅懡鍚嶆枃浠跺悕 鍔犲叆鏃堕棿鎴�
+//     * @param fileName
+//     * @return
+//     */
+//    public static String newFileName(String fileName) {
+//        String suffix = fileName.substring(fileName.lastIndexOf('.'));
+//        String dateStr = "_"+ DateUtil.format(new Date(), DateUtil.STR_DATE_TIME_FULL);
+//        String nameFile = fileName.substring(0, fileName.indexOf("."));
+//        //鏂版枃浠跺悕
+//        return nameFile +  dateStr + suffix;
+//    }
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
index 7f495ba..57bb625 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
@@ -22,7 +22,7 @@
             SqlRunner runner = new SqlRunner(sqlSession.getConnection());
             runner.run(sql);
         } catch (Exception e) {
-            e.printStackTrace();
+//            e.printStackTrace();
             throw new RuntimeException("Error executing SQL: " + sql, e);
         }
     }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcMttrInfoVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcMttrInfoVo.java
new file mode 100644
index 0000000..8fd0ab0
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcMttrInfoVo.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.mdc.vo;
+
+import lombok.Data;
+import org.jeecg.modules.mdc.entity.MdcMttrInfo;
+
+import java.util.List;
+
+/**
+ * @author Lius
+ * @date 2025/2/18 13:50
+ */
+@Data
+public class MdcMttrInfoVo extends MdcMttrInfo {
+    private String startTime;
+    private String endTime;
+    private String parentId;
+    private String typeTree;
+    private List<String> equipmentIdList;
+    private String equipmentIds;
+}
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
index 3e078e8..538f2c5 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
@@ -867,16 +867,16 @@
                 String token = JwTUtil.sign(appId, pwd);
                 return new TokenResp("200", "璁よ瘉鎴愬姛", token);
             } else {
-                return new TokenResp("", "瀵嗙爜閿欒", null);
+                return new TokenResp("101", "瀵嗙爜閿欒", null);
             }
         } else {
-            return new TokenResp("", "璐﹀彿閿欒", null);
+            return new TokenResp("101", "璐﹀彿閿欒", null);
         }
     }
 
     @PostMapping(value = "/fileUpload")
     public RespData uploadFiles(HttpServletRequest request) {
-
+        log.info("涓婁紶鎺ュ彛璋冪敤寮�濮�");
         FileDetail fileDetail = new FileDetail();
         try {
             request.setCharacterEncoding("UTF-8");
@@ -940,6 +940,7 @@
                 e.printStackTrace();
             }
         }
+        log.info("涓婁紶鎺ュ彛璋冪敤缁撴潫");
         return new RespData("200", "鏂囦欢涓婁紶鎴愬姛");
     }
 
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
index 40e5d7e..7f58a96 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
@@ -73,13 +73,13 @@
         and del_flag='0'
     </select>
 
-    <select id="getDepartTreeByParentId" parameterType="String" resultType="org.jeecg.common.system.vo.SelectTreeModel">
-        select
-            id as "key",
-            depart_name as "title",
-            parent_id as parentId
-        from sys_depart
-        where parent_id = #{parentId}
-          and del_flag='0'
-    </select>
+<!--    <select id="getDepartTreeByParentId" parameterType="String" resultType="org.jeecg.common.system.vo.SelectTreeModel">-->
+<!--        select-->
+<!--            id as "key",-->
+<!--            depart_name as "title",-->
+<!--            parent_id as parentId-->
+<!--        from sys_depart-->
+<!--        where parent_id = #{parentId}-->
+<!--          and del_flag='0'-->
+<!--    </select>-->
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/util/FileUtils.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/util/FileUtils.java
index e15701c..3a9b2e2 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/util/FileUtils.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/util/FileUtils.java
@@ -110,7 +110,7 @@
             }
             FileOutputStream outputStream = new FileOutputStream(file);
             if (outputStream != null) {
-                outputStreamWriter = new OutputStreamWriter(outputStream, "utf-8");
+                outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
                 outputStreamWriter.write(content);
                 outputStreamWriter.flush();
             }

--
Gitblit v1.9.3