qushaowei
2025-06-17 68b6b248be403bfd684472a4a4876e5d35101e71
mtbf提交
已添加12个文件
985 ■■■■■ 文件已修改
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/MtbfController.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/MtbfLogController.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/Mtbf.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MtbfLog.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/MtbfLogMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/MtbfMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/MtbfLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/MtbfMapper.xml 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IMtbfLogService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IMtbfService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/MtbfLogServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/MtbfServiceImpl.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/MtbfController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
package org.jeecg.modules.eam.controller;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.entity.Mtbf;
import org.jeecg.modules.eam.service.IMtbfService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
 /**
 * @Description: mom_eam_mtbf
 * @Author: jeecg-boot
 * @Date:   2025-06-12
 * @Version: V1.0
 */
@Api(tags="mom_eam_mtbf")
@RestController
@RequestMapping("/eam/mtbf")
@Slf4j
public class MtbfController extends JeecgController<Mtbf, IMtbfService> {
    @Autowired
    private IMtbfService mtbfService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mtbf
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "mom_eam_mtbf-分页列表查询")
    @ApiOperation(value="mom_eam_mtbf-分页列表查询", notes="mom_eam_mtbf-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<Mtbf>> queryPageList(Mtbf mtbf,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<Mtbf> queryWrapper = QueryGenerator.initQueryWrapper(mtbf, req.getParameterMap());
        Page<Mtbf> page = new Page<Mtbf>(pageNo, pageSize);
        IPage<Mtbf> pageList = mtbfService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
     @GetMapping("/getMTBF")
     public Result<?> getMTBF(@RequestParam("pageNo") Integer pageNo,
                              @RequestParam("pageSize") Integer pageSize,
                              @RequestParam Map<String, Object> params) {
         String faultStartTime = (String)params.get("faultStartTime");
         String faultEndTime = (String)params.get("faultEndTime");
         if(org.apache.commons.lang3.StringUtils.isBlank(faultStartTime) && StringUtils.isBlank(faultEndTime)){
             Date dayAfter = DateUtils.getDayAfter(new Date(), -6);
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
             dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));// è®¾ç½®åŒ—京时区
             params.put("faultStartTime",dateFormat.format(dayAfter));
             String currentDateStr = DateUtils.getCurrentDateStr();
             params.put("faultEndTime",currentDateStr);
         }
         IPage<Map<String, Object>> mtbf = mtbfService.getMTBF(pageNo, pageSize, params);
         return Result.ok(mtbf);
     }
    /**
     *   æ·»åŠ 
     *
     * @param mtbf
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf-添加")
    @ApiOperation(value="mom_eam_mtbf-添加", notes="mom_eam_mtbf-添加")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody Mtbf mtbf) {
        mtbfService.save(mtbf);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param mtbf
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf-编辑")
    @ApiOperation(value="mom_eam_mtbf-编辑", notes="mom_eam_mtbf-编辑")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody Mtbf mtbf) {
        mtbfService.updateById(mtbf);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf-通过id删除")
    @ApiOperation(value="mom_eam_mtbf-通过id删除", notes="mom_eam_mtbf-通过id删除")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        mtbfService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf-批量删除")
    @ApiOperation(value="mom_eam_mtbf-批量删除", notes="mom_eam_mtbf-批量删除")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.mtbfService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "mom_eam_mtbf-通过id查询")
    @ApiOperation(value="mom_eam_mtbf-通过id查询", notes="mom_eam_mtbf-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<Mtbf> queryById(@RequestParam(name="id",required=true) String id) {
        Mtbf mtbf = mtbfService.getById(id);
        if(mtbf==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(mtbf);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param mtbf
    */
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, Mtbf mtbf) {
        return super.exportXls(request, mtbf, Mtbf.class, "mom_eam_mtbf");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    //@RequiresPermissions("mom_eam_mtbf:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, Mtbf.class);
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/MtbfLogController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
package org.jeecg.modules.eam.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.entity.MtbfLog;
import org.jeecg.modules.eam.service.IMtbfLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
 /**
 * @Description: mom_eam_mtbf_log
 * @Author: jeecg-boot
 * @Date:   2025-06-17
 * @Version: V1.0
 */
@Api(tags="mom_eam_mtbf_log")
@RestController
@RequestMapping("/eam/mtbfLog")
@Slf4j
public class MtbfLogController extends JeecgController<MtbfLog, IMtbfLogService> {
    @Autowired
    private IMtbfLogService mtbfLogService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mtbfLog
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "mom_eam_mtbf_log-分页列表查询")
    @ApiOperation(value="mom_eam_mtbf_log-分页列表查询", notes="mom_eam_mtbf_log-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<MtbfLog>> queryPageList(MtbfLog mtbfLog,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<MtbfLog> queryWrapper = QueryGenerator.initQueryWrapper(mtbfLog, req.getParameterMap());
        Page<MtbfLog> page = new Page<MtbfLog>(pageNo, pageSize);
        IPage<MtbfLog> pageList = mtbfLogService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param mtbfLog
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf_log-添加")
    @ApiOperation(value="mom_eam_mtbf_log-添加", notes="mom_eam_mtbf_log-添加")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf_log:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody MtbfLog mtbfLog) {
        mtbfLogService.save(mtbfLog);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param mtbfLog
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf_log-编辑")
    @ApiOperation(value="mom_eam_mtbf_log-编辑", notes="mom_eam_mtbf_log-编辑")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf_log:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody MtbfLog mtbfLog) {
        mtbfLogService.updateById(mtbfLog);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf_log-通过id删除")
    @ApiOperation(value="mom_eam_mtbf_log-通过id删除", notes="mom_eam_mtbf_log-通过id删除")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf_log:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        mtbfLogService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "mom_eam_mtbf_log-批量删除")
    @ApiOperation(value="mom_eam_mtbf_log-批量删除", notes="mom_eam_mtbf_log-批量删除")
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf_log:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.mtbfLogService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "mom_eam_mtbf_log-通过id查询")
    @ApiOperation(value="mom_eam_mtbf_log-通过id查询", notes="mom_eam_mtbf_log-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<MtbfLog> queryById(@RequestParam(name="id",required=true) String id) {
        MtbfLog mtbfLog = mtbfLogService.getById(id);
        if(mtbfLog==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(mtbfLog);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param mtbfLog
    */
    //@RequiresPermissions("org.jeecg.modules.mdc:mom_eam_mtbf_log:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MtbfLog mtbfLog) {
        return super.exportXls(request, mtbfLog, MtbfLog.class, "mom_eam_mtbf_log");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    //@RequiresPermissions("mom_eam_mtbf_log:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MtbfLog.class);
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/Mtbf.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package org.jeecg.modules.eam.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: mom_eam_mtbf
 * @Author: jeecg-boot
 * @Date:   2025-06-12
 * @Version: V1.0
 */
@Data
@TableName("mom_eam_mtbf")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="mom_eam_mtbf对象", description="mom_eam_mtbf")
public class Mtbf implements Serializable {
    private static final long serialVersionUID = 1L;
    /**id*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "id")
    private java.lang.String id;
    /**故障时间*/
    @Excel(name = "统计时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "统计时间")
    private java.util.Date faultData;
    @ApiModelProperty(value = "创建时间")
    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date createTime;
    /**故障报修单编号*/
    @Excel(name = "故障报修单编号", width = 15)
    @ApiModelProperty(value = "故障报修单编号")
    private java.lang.String reportRepairNum;
    /**设备id*/
    @Excel(name = "设备id", width = 15)
    @ApiModelProperty(value = "设备id")
    private java.lang.String equipmentId;
    /**总可利用时间*/
    @Excel(name = "总可利用时间", width = 15)
    @ApiModelProperty(value = "总可利用时间")
    private java.math.BigDecimal totalAvailableTime;
    /**故障时长*/
    @Excel(name = "故障时长", width = 15)
    @ApiModelProperty(value = "故障时长")
    private java.math.BigDecimal faultTime;
    /**维修时长*/
    @Excel(name = "维修时长", width = 15)
    @ApiModelProperty(value = "维修时长")
    private java.math.BigDecimal repairTime;
    /**无故障时长*/
    @Excel(name = "无故障时长", width = 15)
    @ApiModelProperty(value = "无故障时长")
    private java.math.BigDecimal noFaultTime;
    @TableField(exist = false)
    private String faultNumber;
    @TableField(exist = false)
    private String mtbf;
    @TableField(exist = false)
    private String mttr;
    @TableField(exist = false)
    private String serviceabilityRate;//完好率
    @TableField(exist = false)
    private String startRate;//故障率
    /**状态 1报修  2ç»´ä¿® 4 å®Œæˆ */
    @TableField(exist = false)
    private String Status;
    /**故障开始时间*/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(exist = false)
    private Date faultStartTime;
    /**维修开始时间*/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(exist = false)
    private Date repairStartTime;
    /**维修完成时间*/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(exist = false)
    private Date repairEndTime;
    @TableField(exist = false)
    private String equipmentNum;
    @TableField(exist = false)
    private String equipmentName;
    @TableField(exist = false)
    private String equipmentModel;
    @TableField(exist = false)
    private String workCenterName;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MtbfLog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package org.jeecg.modules.eam.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: mom_eam_mtbf_log
 * @Author: jeecg-boot
 * @Date:   2025-06-17
 * @Version: V1.0
 */
@Data
@TableName("mom_eam_mtbf_log")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="mom_eam_mtbf_log对象", description="mom_eam_mtbf_log")
public class MtbfLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**id*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "id")
    private java.lang.String id;
    /**报修单*/
    @Excel(name = "报修单", width = 15)
    @ApiModelProperty(value = "报修单")
    private java.lang.String reportRepairNum;
    /**设备id*/
    @Excel(name = "设备id", width = 15)
    @ApiModelProperty(value = "设备id")
    private java.lang.String equipmentId;
    /**保修时间*/
    @Excel(name = "保修时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "保修时间")
    private java.util.Date reportTime;
    /**维修接单时间*/
    @Excel(name = "维修接单时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "维修接单时间")
    private java.util.Date repairStartTime;
    /**维修完成时间*/
    @Excel(name = "维修完成时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "维修完成时间")
    private java.util.Date repairFinishTime;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "创建时间")
    private java.util.Date createTime;
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/MtbfLogMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.eam.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.eam.entity.MtbfLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: mom_eam_mtbf_log
 * @Author: jeecg-boot
 * @Date:   2025-06-17
 * @Version: V1.0
 */
public interface MtbfLogMapper extends BaseMapper<MtbfLog> {
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/MtbfMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package org.jeecg.modules.eam.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.eam.entity.Mtbf;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.eam.model.MaintenanceCycleVo;
import org.jeecg.modules.eam.vo.MtbfVo;
/**
 * @Description: mom_eam_mtbf
 * @Author: jeecg-boot
 * @Date:   2025-06-12
 * @Version: V1.0
 */
public interface MtbfMapper extends BaseMapper<Mtbf> {
    List<MtbfVo> getReportRepairTimeList(@Param("yesterday")String yesterday);
    IPage<Map<String, Object>> getMTBF(IPage<Map> pageData, @Param("params") Map<String,Object> params);
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/MtbfLogMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?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.eam.mapper.MtbfLogMapper">
</mapper>
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/MtbfMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
<?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.eam.mapper.MtbfMapper">
    <select id="getMTBF"  parameterType="Map" resultType="Map">
        select
        isnull(qqq.equipmentId,ttt.id) as equipmentId,
        isnull(qqq.equipmentNum,ttt.num) as equipmentNum,
        isnull(qqq.equipmentName,ttt.name) as equipmentName,
        isnull(qqq.equipmentModel,ttt.model) as equipmentModel,
        isnull(qqq.workCenterName,ttt1.name) as workCenterName,
        isnull(qqq.faultNumber,0) as faultNumber,
        isnull(qqq.totalAvailableTime,(datediff( HOUR, #{params.faultStartTime}, #{params.faultEndTime} ) + 24)) as totalAvailableTime,
        isnull(qqq.faultTime,0) as faultTime,
        isnull(qqq.repairTime,0) as repairTime,
        isnull(qqq.noFaultTime,(datediff( HOUR, #{params.faultStartTime}, #{params.faultEndTime} ) + 24)) as noFaultTime,
        isnull(qqq.mtbf,0) as mtbf,
        isnull(qqq.mttr,0) as mttr,
        isnull(qqq.serviceabilityRate,STR( ( 1 * 100 ), 10, 2 ) + '%') as serviceabilityRate,
        isnull(qqq.startRate,STR( ( 0 * 100 ), 10, 2 ) + '%') as startRate
        from mom_eam_equipment ttt
        left join mom_base_area ttt1 ON ttt.work_center_id = ttt1.id
        left join (
        SELECT
        tt.equipmentId,
        tt.equipmentNum,
        tt.equipmentName,
        tt.equipmentModel,
        tt.workCenterName,
        COUNT ( tt.equipmentId ) AS faultNumber,
        SUM ( totalAvailableTime ) AS totalAvailableTime,
        SUM ( faultTime ) AS faultTime,
        SUM ( repairTime ) AS repairTime,
        SUM ( noFaultTime ) AS noFaultTime,
        SUM ( noFaultTime ) / COUNT ( tt.equipmentId ) AS mtbf,
        SUM ( repairTime ) / COUNT ( tt.equipmentId ) AS mttr,
        STR((SUM ( noFaultTime ) / SUM ( totalAvailableTime ) * 100), 10, 2) + '%' AS serviceabilityRate,
        STR((SUM ( faultTime ) / SUM ( totalAvailableTime ) * 100), 10, 2)+ '%' AS startRate
        FROM
        (
        SELECT
        t1.report_repair_num AS reportRepairNum,
        t1.equipment_id AS equipmentId,
        t2.num AS equipmentNum,
        t2.name AS equipmentName,
        t2.model AS equipmentModel,
        t3.name AS workCenterName,
        SUM ( t1.total_available_time ) AS totalAvailableTime,
        SUM ( t1.fault_time ) AS faultTime,
        SUM ( t1.repair_time ) AS repairTime,
        SUM ( t1.no_fault_time ) AS noFaultTime
        FROM
        mom_eam_mtbf t1
        LEFT JOIN mom_eam_equipment t2 ON t1.equipment_id = t2.id
        LEFT JOIN mom_base_area t3 ON t2.work_center_id = t3.id
        where 1=1
        <if test="params.equipmentNum != null and params.equipmentNum != ''">
            and t2.num like concat('%',#{params.equipmentNum},'%')
        </if>
        <if test="params.workCenterId != null and params.workCenterId != ''">
            and t3.id = #{params.workCenterId}
        </if>
        <if test="params.equipmentImportanceId != null and params.equipmentImportanceId != ''">
            and t2.equipment_importance_id = #{params.equipmentImportanceId}
        </if>
        <if test="params.specificEquipment != null and params.specificEquipment != ''">
            and t2.specific_equipment = #{params.specificEquipment}
        </if>
        AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t1.fault_data, 120 ), 1, 10 ) &gt;= #{params.faultStartTime}
        AND SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t1.fault_data, 120 ), 1, 10 ) &lt;= #{params.faultEndTime}
        GROUP BY
        t1.report_repair_num,
        t1.equipment_id,
        t2.num,
        t2.name,
        t2.model,
        t3.name
        ) tt
        GROUP BY
        tt.equipmentId,
        tt.equipmentNum,
        tt.equipmentName,
        tt.equipmentModel,
        tt.workCenterName) qqq on ttt.id = qqq.equipmentId
        where 1= 1 and ttt.work_center_id is not null
        <if test="params.equipmentNum != null and params.equipmentNum != ''">
            and ttt.num like concat('%',#{params.equipmentNum},'%')
        </if>
        <if test="params.workCenterId != null and params.workCenterId != ''">
            and ttt1.id = #{params.workCenterId}
        </if>
        <if test="params.equipmentImportanceId != null and params.equipmentImportanceId != ''">
            and ttt.equipment_importance_id = #{params.equipmentImportanceId}
        </if>
        <if test="params.specificEquipment != null and params.specificEquipment != ''">
            and ttt.specific_equipment = #{params.specificEquipment}
        </if>
    </select>
    <select id="getReportRepairTimeList" resultType="org.jeecg.modules.eam.vo.MtbfVo">
        SELECT
            t1.num AS reportRepairNum,
            t1.status,
            t1.equipment_id AS equipmentId,
            t1.fault_time AS faultStartTime,
            t2.create_time AS repairStartTime,
            t2.actual_end_time AS repairEndTime
        FROM
            mom_eam_equipment_report_repair t1
        LEFT JOIN mom_eam_repair_order t2 ON t2.report_repair_id = t1.id
        WHERE t1.status IN ( '1', '2', '4' )
        AND ( SUBSTRING ( CONVERT ( VARCHAR ( 10 ), t2.actual_end_time, 120 ), 1, 10 ) = #{yesterday} OR t1.status != '4' )
    </select>
</mapper>
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IMtbfLogService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.eam.service;
import org.jeecg.modules.eam.entity.MtbfLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: mom_eam_mtbf_log
 * @Author: jeecg-boot
 * @Date:   2025-06-17
 * @Version: V1.0
 */
public interface IMtbfLogService extends IService<MtbfLog> {
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IMtbfService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package org.jeecg.modules.eam.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.eam.entity.EquipmentMaintenancePlanDetail;
import org.jeecg.modules.eam.entity.Mtbf;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.eam.vo.MtbfVo;
import java.util.List;
import java.util.Map;
/**
 * @Description: mom_eam_mtbf
 * @Author: jeecg-boot
 * @Date:   2025-06-12
 * @Version: V1.0
 */
public interface IMtbfService extends IService<Mtbf> {
    List<MtbfVo> getReportRepairTimeList(String yesterday);
    IPage<Map<String, Object>> getMTBF(Integer pageNo, Integer pageSize, Map<String, Object> params);
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/MtbfLogServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.eam.service.impl;
import org.jeecg.modules.eam.entity.MtbfLog;
import org.jeecg.modules.eam.mapper.MtbfLogMapper;
import org.jeecg.modules.eam.service.IMtbfLogService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: mom_eam_mtbf_log
 * @Author: jeecg-boot
 * @Date:   2025-06-17
 * @Version: V1.0
 */
@Service
public class MtbfLogServiceImpl extends ServiceImpl<MtbfLogMapper, MtbfLog> implements IMtbfLogService {
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/MtbfServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,204 @@
package org.jeecg.modules.eam.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ctc.wstx.util.DataUtil;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.eam.entity.Mtbf;
import org.jeecg.modules.eam.entity.MtbfLog;
import org.jeecg.modules.eam.mapper.MtbfMapper;
import org.jeecg.modules.eam.service.IMtbfLogService;
import org.jeecg.modules.eam.service.IMtbfService;
import org.jeecg.modules.eam.vo.MtbfVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @Description: mom_eam_mtbf
 * @Author: jeecg-boot
 * @Date:   2025-06-12
 * @Version: V1.0
 */
@Service
public class MtbfServiceImpl extends ServiceImpl<MtbfMapper, Mtbf> implements IMtbfService {
    @Autowired
    @Lazy
    private IMtbfLogService mtbfLogService;
    @Override
    public IPage<Map<String, Object>> getMTBF(Integer pageNo, Integer pageSize, Map<String, Object> params) {
        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
        return super.getBaseMapper().getMTBF(pageData, params) ;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public List<MtbfVo> getReportRepairTimeList(String yesterday) {
        List<MtbfVo> reportRepairTimeList = this.baseMapper.getReportRepairTimeList(yesterday);
        for (MtbfVo mtbf : reportRepairTimeList) {
            List<MtbfLog> list = mtbfLogService.lambdaQuery().eq(MtbfLog::getReportRepairNum, mtbf.getReportRepairNum()).list();
            if(list.size()>0){
                MtbfLog mtbfLog = list.get(0);
                mtbfLog.setReportRepairNum(mtbf.getReportRepairNum());
                mtbfLog.setEquipmentId(mtbf.getEquipmentId());
                mtbfLog.setReportTime(mtbf.getFaultStartTime());
                mtbfLog.setRepairStartTime(mtbf.getRepairStartTime());
                mtbfLog.setRepairFinishTime(mtbf.getRepairEndTime());
                mtbfLogService.updateById(mtbfLog);
            }else{
                MtbfLog mtbfLog = new MtbfLog();
                mtbfLog.setReportRepairNum(mtbf.getReportRepairNum());
                mtbfLog.setEquipmentId(mtbf.getEquipmentId());
                mtbfLog.setReportTime(mtbf.getFaultStartTime());
                mtbfLog.setRepairStartTime(mtbf.getRepairStartTime());
                mtbfLog.setRepairFinishTime(mtbf.getRepairEndTime());
                mtbfLog.setCreateTime(new Date());
                mtbfLogService.save(mtbfLog);
            }
            Date faultStartTime = mtbf.getFaultStartTime();//故障开始时间
            Date yesterdayData = DateUtils.getDayAfter(new Date(), -1);//昨天日期
            //故障时间是不是昨天发生的
            boolean f = isSameDate(faultStartTime, yesterdayData);
            //计算故障时长
            Date todayMidnightAsDate = getTodayMidnightAsDate();//今日凌晨
            String status = mtbf.getStatus();
            Mtbf mtbf1 = new Mtbf();
            mtbf1.setReportRepairNum(mtbf.getReportRepairNum());
            mtbf1.setEquipmentId(mtbf.getEquipmentId());
            mtbf1.setFaultData(new Date());
            mtbf1.setCreateTime(new Date());
            mtbf1.setTotalAvailableTime(new BigDecimal(24));
            if("1".equals(status)){//状态1:报修
                //故障报修时间是昨天 æ•…障时间 = 24 - æ•…障开始时间
                if(f){
                    //今日凌晨 - æ˜¨æ—¥æ•…障发生时间 = æ•…障时间
                    double faultTime = getPreciseHoursDifference(faultStartTime, todayMidnightAsDate);
//                    double faultTime = getHoursFromYesterdayMidnightToDate(faultStartTime);
                    mtbf1.setFaultTime(new BigDecimal(faultTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setNoFaultTime((new BigDecimal(24).subtract(new BigDecimal(faultTime))).setScale(2, RoundingMode.HALF_UP));
                }else{
                    //故障报修时间不是昨天 æ•…障时间 = 24
                    //double faultTime = 24;
                    mtbf1.setFaultTime(new BigDecimal(24));
                    mtbf1.setNoFaultTime(new BigDecimal(0));
                }
                mtbf1.setRepairTime(new BigDecimal(0));
                this.save(mtbf1);
            }else if("2".equals(status)){//状态2:维修
                Date repairStartTime = mtbf.getRepairStartTime();
                //维修时间是不是昨天发生的
                boolean rr = isSameDate(repairStartTime, yesterdayData);
                //故障报修时间是昨天 æ•…障时间 = 24 - æ•…障开始时间
                if(f){
                    double faultTime = getPreciseHoursDifference(faultStartTime,todayMidnightAsDate);
                    mtbf1.setFaultTime(new BigDecimal(faultTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setNoFaultTime((new BigDecimal(24).subtract(new BigDecimal(faultTime))).setScale(2, RoundingMode.HALF_UP));
                    if(repairStartTime == null){
                        mtbf1.setRepairTime(new BigDecimal(0));
                    }else if(rr){
                        double repairTime = getPreciseHoursDifference(repairStartTime, todayMidnightAsDate);
                        mtbf1.setRepairTime(new BigDecimal(repairTime).setScale(2, RoundingMode.HALF_UP));
                    }
                    //不存在维修时间是当天的,因为定时任务是今天执行,算昨天的结果
//                    else{
//                        mtbf1.setRepairTime(new BigDecimal(24));
//                    }
                }else{
                    //故障报修时间不是昨天 æ•…障时间 = 24
                    mtbf1.setFaultTime(new BigDecimal(24));
                    mtbf1.setNoFaultTime(new BigDecimal(0));
                    if(rr){
//                        double repairTime = getPreciseHoursDifference(todayMidnightAsDate, repairStartTime);
                        double repairTime = getHoursFromYesterdayMidnightToDate(repairStartTime);
                        mtbf1.setRepairTime(new BigDecimal(repairTime).setScale(2, RoundingMode.HALF_UP));
                    }else{
                        mtbf1.setRepairTime(new BigDecimal(24));
                    }
                }
//                mtbf1.setNoFaultTime(new BigDecimal(0));
                this.save(mtbf1);
            }else{//状态4:修完
                Date repairStartTime = mtbf.getRepairStartTime();
                Date repairEndTime = mtbf.getRepairEndTime();
                if(f){
                    double faultTime = getPreciseHoursDifference(faultStartTime,repairEndTime);
                    double repairTime = getPreciseHoursDifference(repairStartTime,repairEndTime);
                    mtbf1.setFaultTime(new BigDecimal(faultTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setRepairTime(new BigDecimal(repairTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setNoFaultTime((new BigDecimal(24).subtract(new BigDecimal(faultTime))).setScale(2, RoundingMode.HALF_UP));
                }else{
                    double repairTime = getHoursFromYesterdayMidnightToDate(repairEndTime);
                    mtbf1.setFaultTime(new BigDecimal(repairTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setRepairTime(new BigDecimal(repairTime).setScale(2, RoundingMode.HALF_UP));
                    mtbf1.setNoFaultTime((new BigDecimal(24).subtract(new BigDecimal(repairTime))).setScale(2, RoundingMode.HALF_UP));
                }
                this.save(mtbf1);
            }
        }
        return reportRepairTimeList;
    }
    // æ–¹æ³•1:计算昨天凌晨到指定Date的精确小时数(包括小数部分)
    public static double getHoursFromYesterdayMidnightToDate(Date targetDate) {
        if (targetDate == null) {
            return 0.0;
        }
        // èŽ·å–æ˜¨å¤©å‡Œæ™¨çš„æ—¶é—´å¹¶è½¬æ¢ä¸ºDate
        LocalDateTime yesterdayMidnight = LocalDate.now().minusDays(1).atStartOfDay();
        Date yesterdayMidnightDate = Date.from(
                yesterdayMidnight.atZone(ZoneId.systemDefault()).toInstant()
        );
        // è®¡ç®—毫秒差
        long diffInMillis = targetDate.getTime() - yesterdayMidnightDate.getTime();
        // è½¬æ¢ä¸ºå°æ—¶ï¼ˆåŒ…括小数部分)
        return diffInMillis / (1000.0 * 60 * 60);
    }
    // è®¡ç®—包含小数部分的小时差
    public static double getPreciseHoursDifference(Date startDate, Date endDate) {
        long diffInMillis = endDate.getTime() - startDate.getTime();
        return (double) diffInMillis / (1000 * 60 * 60);
    }
    // èŽ·å–ä»Šå¤©å‡Œæ™¨çš„Date对象
    public static Date getTodayMidnightAsDate() {
        LocalDateTime midnight = LocalDate.now().atStartOfDay();
        return Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant());
    }
    public static boolean isSameDate(Date date1, Date date2) {
        // å°†Date转换为LocalDate(只包含年月日)
        LocalDate localDate1 = date1.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
        LocalDate localDate2 = date2.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
        // ç›´æŽ¥æ¯”较两个LocalDate对象
        return localDate1.isEqual(localDate2);
    }
}