From a6d8cfbf89fae62167c99dab7ffddaeb6f2b7de5 Mon Sep 17 00:00:00 2001
From: yangkang <yangkang@xalxzn.com>
Date: 星期二, 12 九月 2023 09:25:41 +0800
Subject: [PATCH] 预测性维护

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanController.java                    |  423 +++++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkOrderMapper.java                           |   23 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/RepairOrderDetailMapper.java                             |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlan.java                                  |   65 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanWarnMapper.xml                     |   84 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnServiceImpl.java             |  148 +++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameterHistory.java                  |   63 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderDetailServiceImpl.java                  |   10 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnHistoryMapper.java                 |    9 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterService.java                |   18 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterHistoryService.java         |    8 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanSparePartMapper.java                   |   24 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MaintenanceStandardPlanningMaterial.java                 |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentAlarmVo.java                                  |   18 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanServiceImpl.java                 |   31 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanSparePartServiceImpl.java        |  112 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanMapper.xml                         |   36 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanSparePartController.java           |   65 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkOrder.java                                 |  138 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkOrderServiceImpl.java                |  171 +++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanParameterController.java           |   70 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java                           |    8 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/ParameterVo.java                                          |   30 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderDetailService.java                          |    4 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterServiceImpl.java        |  140 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanSparePart.java                         |   60 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkOrderService.java                        |   29 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnHistoryServiceImpl.java      |   13 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameter.java                         |   67 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterHistoryMapper.java            |    8 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanSparePartMapper.xml                |   79 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/RepairOrderDetailMapper.xml                          |    8 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnService.java                     |   20 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanSparePartService.java                |   16 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterHistoryServiceImpl.java |   14 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanWarnController.java                |   66 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanParameterMapper.xml                |   78 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterMapper.java                   |   23 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanService.java                         |   16 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanMapper.java                            |   16 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarnHistory.java                       |   51 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnMapper.java                        |   23 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkOrderMapper.xml                        |   48 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentRunningSectionVo.java                         |   74 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkOrderController.java                   |  270 +++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarn.java                              |   63 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/PredictiveWorkPlanSparePartJob.java                         |   32 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnHistoryService.java              |   13 
 48 files changed, 2,791 insertions(+), 2 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkOrderController.java
new file mode 100644
index 0000000..5d8456a
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkOrderController.java
@@ -0,0 +1,270 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.eam.entity.MaintenanceOrderActualWorkingHour;
+import org.jeecg.modules.eam.entity.SpecialtyMaintenanceOrder;
+import org.jeecg.modules.eam.service.IMaintenanceOrderActualWorkingHourService;
+import org.jeecg.modules.eam.service.IPredictiveWorkOrderService;
+import org.jeecg.modules.eam.service.ISpecialtyMaintenanceOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/eam/predictiveworkorder")
+@Slf4j
+public class PredictiveWorkOrderController extends JeecgController<SpecialtyMaintenanceOrder, ISpecialtyMaintenanceOrderService> {
+
+    @Autowired
+    private IPredictiveWorkOrderService predictiveWorkOrderService;
+
+    @Autowired
+    private IMaintenanceOrderActualWorkingHourService maintenanceOrderActualWorkingHourService;
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param specialtyMaintenanceOrder
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "mom_eam_specialty_maintenance_order-鍒嗛〉鍒楄〃鏌ヨ")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-鍒嗛〉鍒楄〃鏌ヨ", notes = "mom_eam_specialty_maintenance_order-鍒嗛〉鍒楄〃鏌ヨ")
+//    @GetMapping(value = "/list")
+//    public Result<IPage<SpecialtyMaintenanceOrder>> queryPageList(SpecialtyMaintenanceOrder specialtyMaintenanceOrder,
+//                                                                  @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+//                                                                  @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+//                                                                  HttpServletRequest req) {
+//        QueryWrapper<SpecialtyMaintenanceOrder> queryWrapper = QueryGenerator.initQueryWrapper(specialtyMaintenanceOrder, req.getParameterMap());
+//        Page<SpecialtyMaintenanceOrder> page = new Page<SpecialtyMaintenanceOrder>(pageNo, pageSize);
+//        IPage<SpecialtyMaintenanceOrder> pageList = specialtyMaintenanceOrderService.page(page, queryWrapper);
+//        return Result.OK(pageList);
+//    }
+
+    /**
+     * 鑾峰彇涓撲笟淇濆吇宸ュ崟
+     * 2023-4-25 qsw
+     */
+    @GetMapping(value = "/pageOrderList")
+    public Result<?> pageOrderList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+        IPage<Map<String, Object>> specialtyMaintenanceOrderList = predictiveWorkOrderService.pageOrderList(pageNo, pageSize, params);
+//        for (Map<String, Object> record : specialtyMaintenanceOrderList.getRecords()) {
+//            String id = (String) record.get("id");
+//
+//            QueryWrapper<MaintenanceOrderActualWorkingHour> actualWorkingHourWrapper = new QueryWrapper<>();
+//            actualWorkingHourWrapper.eq("maintenance_order_id", id)
+//                    .eq("del_flag", 0);
+//            actualWorkingHourWrapper.select("sum(actual_working_hour_quota) as actualQuantity");
+//            Map<String, Object> map = maintenanceOrderActualWorkingHourService.getMap(actualWorkingHourWrapper);
+//            BigDecimal actualQuantity = new BigDecimal(0);
+//            if (map != null) {
+//                actualQuantity = (BigDecimal) map.get("actualQuantity");
+//            }
+//            record.put("actualWorkingHourQuota", actualQuantity);
+//
+//            String status = (String) record.get("status");
+//            if ("2".equals(status)) {
+//                record.put("distable", false);
+//            } else {
+//                record.put("distable", true);
+//            }
+//        }
+        return Result.ok(specialtyMaintenanceOrderList);
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param specialtyMaintenanceOrder
+     * @return
+     */
+//    @AutoLog(value = "mom_eam_specialty_maintenance_order-娣诲姞")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-娣诲姞", notes = "mom_eam_specialty_maintenance_order-娣诲姞")
+//    //@RequiresPermissions("org.jeecg.modules:mom_eam_specialty_maintenance_order:add")
+//    @PostMapping(value = "/add")
+//    public Result<String> add(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        boolean b = specialtyMaintenanceOrderService.add(specialtyMaintenanceOrder);
+//        if (b) {
+//            return Result.OK("娣诲姞鎴愬姛锛�");
+//        }
+//        return Result.error("娣诲姞澶辫触锛�");
+//    }
+//
+//    /**
+//     * 缂栬緫
+//     *
+//     * @param specialtyMaintenanceOrder
+//     * @return
+//     */
+//    @AutoLog(value = "mom_eam_specialty_maintenance_order-缂栬緫")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-缂栬緫", notes = "mom_eam_specialty_maintenance_order-缂栬緫")
+//    //@RequiresPermissions("org.jeecg.modules:mom_eam_specialty_maintenance_order:edit")
+//    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> edit(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        boolean b = specialtyMaintenanceOrderService.edit(specialtyMaintenanceOrder);
+//        if (b) {
+//            return Result.OK("缂栬緫鎴愬姛锛�");
+//        }
+//        return Result.error("缂栬緫澶辫触锛�");
+//    }
+//
+//
+//    @RequestMapping(value = "/editStatus", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> editStatus(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        specialtyMaintenanceOrder.setActualStartTime(new Date());
+//        boolean b = specialtyMaintenanceOrderService.updateById(specialtyMaintenanceOrder);
+//        if (b) {
+//            return Result.OK("涓嬪彂鎴愬姛!");
+//        } else {
+//            return Result.error("涓嬪彂澶辫触!");
+//        }
+//    }
+//
+//    @RequestMapping(value = "/report", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> report(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        specialtyMaintenanceOrder.setActualEndTime(new Date());
+//        boolean b = specialtyMaintenanceOrderService.updateById(specialtyMaintenanceOrder);
+//        if (!b) {
+//            return Result.error("鎶ュ伐澶辫触!");
+//        } else {
+//            return Result.ok("鎶ュ伐鎴愬姛!");
+//        }
+//    }
+//
+//    @RequestMapping(value = "/revocation", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> revocation(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        String id = specialtyMaintenanceOrder.getId();
+//        SpecialtyMaintenanceOrder maintenanceOrder = specialtyMaintenanceOrderService.getById(id);
+//        String status = maintenanceOrder.getStatus();
+//        if ("5".equals(status)) {
+//            maintenanceOrder.setActualEndTime(null);
+//            boolean b = specialtyMaintenanceOrderService.updateById(specialtyMaintenanceOrder);
+//            if (b) {
+//                return Result.OK("鎾ら攢鎴愬姛!");
+//            } else {
+//                return Result.error("鎾ら攢澶辫触!");
+//            }
+//        } else {
+//            return Result.error("浠呴檺宸插畬宸ョ姸鎬佹挙閿�瀹屾垚鎿嶄綔!");
+//        }
+//    }
+//
+//    @RequestMapping(value = "/orderGet", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> orderGet(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = sysUser.getId();
+//        specialtyMaintenanceOrder.setRecipientUserId(userId);
+//        specialtyMaintenanceOrder.setMaintenanceUserId(userId);
+//        specialtyMaintenanceOrder.setStatus("3");
+//        boolean b = specialtyMaintenanceOrderService.updateById(specialtyMaintenanceOrder);
+//        if (b) {
+//            return Result.OK("棰嗗彇鎴愬姛!");
+//        } else {
+//            return Result.error("棰嗗彇澶辫触!");
+//        }
+//    }
+//
+//    /**
+//     * 閫氳繃id鍒犻櫎
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @AutoLog(value = "mom_eam_specialty_maintenance_order-閫氳繃id鍒犻櫎")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-閫氳繃id鍒犻櫎", notes = "mom_eam_specialty_maintenance_order-閫氳繃id鍒犻櫎")
+//    //@RequiresPermissions("org.jeecg.modules:mom_eam_specialty_maintenance_order:delete")
+//    @DeleteMapping(value = "/delete")
+//    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+//        specialtyMaintenanceOrderService.removeById(id);
+//        return Result.OK("鍒犻櫎鎴愬姛!");
+//    }
+//
+//    /**
+//     * 鎵归噺鍒犻櫎
+//     *
+//     * @param ids
+//     * @return
+//     */
+//    @AutoLog(value = "mom_eam_specialty_maintenance_order-鎵归噺鍒犻櫎")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-鎵归噺鍒犻櫎", notes = "mom_eam_specialty_maintenance_order-鎵归噺鍒犻櫎")
+//    //@RequiresPermissions("org.jeecg.modules:mom_eam_specialty_maintenance_order:deleteBatch")
+//    @DeleteMapping(value = "/deleteBatch")
+//    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+//        this.specialtyMaintenanceOrderService.removeByIds(Arrays.asList(ids.split(",")));
+//        return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+//    }
+//
+//    /**
+//     * 閫氳繃id鏌ヨ
+//     *
+//     * @param id
+//     * @return
+//     */
+//    //@AutoLog(value = "mom_eam_specialty_maintenance_order-閫氳繃id鏌ヨ")
+//    @ApiOperation(value = "mom_eam_specialty_maintenance_order-閫氳繃id鏌ヨ", notes = "mom_eam_specialty_maintenance_order-閫氳繃id鏌ヨ")
+//    @GetMapping(value = "/queryById")
+//    public Result<SpecialtyMaintenanceOrder> queryById(@RequestParam(name = "id", required = true) String id) {
+//        SpecialtyMaintenanceOrder specialtyMaintenanceOrder = specialtyMaintenanceOrderService.getById(id);
+//        if (specialtyMaintenanceOrder == null) {
+//            return Result.error("鏈壘鍒板搴旀暟鎹�");
+//        }
+//        return Result.OK(specialtyMaintenanceOrder);
+//    }
+//
+//    /**
+//     * 瀵煎嚭excel
+//     *
+//     * @param request
+//     * @param specialtyMaintenanceOrder
+//     */
+//    //@RequiresPermissions("org.jeecg.modules:mom_eam_specialty_maintenance_order:exportXls")
+//    @RequestMapping(value = "/exportXls")
+//    public ModelAndView exportXls(HttpServletRequest request, SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        return super.exportXls(request, specialtyMaintenanceOrder, SpecialtyMaintenanceOrder.class, "mom_eam_specialty_maintenance_order");
+//    }
+//
+//    /**
+//     * 閫氳繃excel瀵煎叆鏁版嵁
+//     *
+//     * @param request
+//     * @param response
+//     * @return
+//     */
+//    //@RequiresPermissions("mom_eam_specialty_maintenance_order:importExcel")
+//    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+//    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+//        return super.importExcel(request, response, SpecialtyMaintenanceOrder.class);
+//    }
+//
+//    @RequestMapping(value = "/assign", method = {RequestMethod.PUT, RequestMethod.POST})
+//    public Result<String> assign(@RequestBody SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//        boolean b = specialtyMaintenanceOrderService.assign(specialtyMaintenanceOrder);
+//        if (b) {
+//            return Result.OK("鏀规淳鎴愬姛!");
+//        } else {
+//            return Result.error("鏀规淳澶辫触!");
+//        }
+//    }
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanController.java
new file mode 100644
index 0000000..a3b32f6
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanController.java
@@ -0,0 +1,423 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.dto.message.MessageDTO;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.base.entity.SysUpload;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.model.DepartVo;
+import org.jeecg.modules.eam.service.*;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.transaction.annotation.Transactional;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/eam/predictiveworkplan")
+@Slf4j
+public class PredictiveWorkPlanController extends JeecgController<PredictiveWorkPlan, IPredictiveWorkPlanService> {
+
+    @Autowired
+    private IPredictiveWorkPlanService predictiveWorkPlanService;
+
+
+    /**
+     * 棰勬祴鎬х淮鎶ゆ柟妗� 鍒楄〃
+     */
+    @GetMapping(value = "/pagePredictiveWorkPlan")
+    public Result<IPage<Map<String, Object>>> pagePredictiveWorkPlan(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+        IPage<Map<String, Object>> maintenanceStandardList = predictiveWorkPlanService.pagePredictiveWorkPlan(pageNo, pageSize, params);
+        return Result.OK(maintenanceStandardList);
+
+    }
+
+    /**
+     * 娣诲姞
+     */
+    @AutoLog(value = "predictive_work_plan-娣诲姞")
+    @ApiOperation(value = "predictive_work_plan-娣诲姞", notes = "predictive_work_plan-娣诲姞")
+    @PostMapping(value = "/add")
+    @Transactional(rollbackFor = {Exception.class})
+    public Result<String> add(@RequestBody PredictiveWorkPlan predictiveWorkPlan) {
+        predictiveWorkPlanService.save(predictiveWorkPlan);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+
+    /**
+     * 缂栬緫
+     */
+    @AutoLog(value = "predictive_work_plan-缂栬緫")
+    @ApiOperation(value = "predictive_work_plan-缂栬緫", notes = "predictive_work_plan-缂栬緫")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    @Transactional(rollbackFor = {Exception.class})
+    public Result<String> edit(@RequestBody PredictiveWorkPlan predictiveWorkPlan) {
+        predictiveWorkPlanService.updateById(predictiveWorkPlan);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+//   /**
+//    *   閫氳繃id鍒犻櫎
+//    *
+//    * @param id
+//    * @return
+//    */
+//   @AutoLog(value = "mom_eam_equipment-閫氳繃id鍒犻櫎")
+//   @ApiOperation(value="mom_eam_equipment-閫氳繃id鍒犻櫎", notes="mom_eam_equipment-閫氳繃id鍒犻櫎")
+//   //@RequiresPermissions("org.jeecg.modules.demo:mom_eam_equipment:delete")
+//   @DeleteMapping(value = "/delete")
+//   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+//       Equipment equipment = equipmentService.getById(id);
+//       equipment.setDelFlag(1);
+//       equipmentService.updateById(equipment);
+//       return Result.OK("鍒犻櫎鎴愬姛!");
+//   }
+//
+//   /**
+//    *  鎵归噺鍒犻櫎
+//    *
+//    * @param ids
+//    * @return
+//    */
+//   @AutoLog(value = "mom_eam_equipment-鎵归噺鍒犻櫎")
+//   @ApiOperation(value="mom_eam_equipment-鎵归噺鍒犻櫎", notes="mom_eam_equipment-鎵归噺鍒犻櫎")
+//   //@RequiresPermissions("org.jeecg.modules.demo:mom_eam_equipment:deleteBatch")
+//   @DeleteMapping(value = "/deleteBatch")
+//   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+//       List<String> stringList = Arrays.asList(ids.split(","));
+//       for (String id : stringList) {
+//           Equipment equipment = equipmentService.getById(id);
+//           equipment.setDelFlag(1);
+//           equipmentService.updateById(equipment);
+//       }
+////		this.equipmentService.removeByIds(Arrays.asList(ids.split(",")));
+//       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+//   }
+//
+//   /**
+//    * 閫氳繃id鏌ヨ
+//    *
+//    * @param id
+//    * @return
+//    */
+//   //@AutoLog(value = "mom_eam_equipment-閫氳繃id鏌ヨ")
+//   @ApiOperation(value="mom_eam_equipment-閫氳繃id鏌ヨ", notes="mom_eam_equipment-閫氳繃id鏌ヨ")
+//   @GetMapping(value = "/queryById")
+//   public Result<Equipment> queryById(@RequestParam(name="id",required=true) String id) {
+//       Equipment equipment = equipmentService.getById(id);
+//       if(equipment==null) {
+//           return Result.error("鏈壘鍒板搴旀暟鎹�");
+//       }
+//       return Result.OK(equipment);
+//   }
+//
+//   /**
+//   * 瀵煎嚭excel
+//   *
+//   * @param request
+//   * @param equipment
+//   */
+//   //@RequiresPermissions("org.jeecg.modules.demo:mom_eam_equipment:exportXls")
+//   @RequestMapping(value = "/exportXls")
+//   public ModelAndView exportXls(HttpServletRequest request, Equipment equipment) {
+//       return super.exportXls(request, equipment, Equipment.class, "mom_eam_equipment");
+//   }
+//
+////    /**
+////      * 閫氳繃excel瀵煎叆鏁版嵁
+////    *
+////    * @param request
+////    * @param response
+////    * @return
+////    */
+////    //@RequiresPermissions("mom_eam_equipment:importExcel")
+////    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+////    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+////        return super.importExcel(request, response, Equipment.class);
+////    }
+//
+//
+//    /**
+//     * 璁惧寤鸿处  鑾峰彇缁勭粐閮ㄩ棬
+//     * qsw 2023-4-28
+//     */
+//    @GetMapping("getSysDeparts")
+//    public Result<?> getSysDeparts() {
+//        List<DepartVo> sysDeparts = equipmentService.getSysDeparts();
+//        return Result.ok(sysDeparts);
+//    }
+//
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧浣跨敤璁板綍
+//     * qsw 2023-7-28
+//     */
+//    @GetMapping(value = "/getResumeUseRecordList")
+//    public Result<?> getResumeUseRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeUseRecordList = equipmentService.getResumeUseRecordList(pageNo, pageSize, params);
+//        return Result.ok(resumeUseRecordList);
+//    }
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧鐐规璁板綍
+//     * qsw 2023-7-28
+//     */
+//    @GetMapping(value = "/getResumeInspectionRecordList")
+//    public Result<?> getResumeInspectionRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeInspectionRecordList = equipmentService.getResumeInspectionRecordList(pageNo, pageSize, params);
+//        LoginUser user= (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        for (Map<String, Object> record : resumeInspectionRecordList.getRecords()) {
+//            String id = (String)record.get("id");
+//            String inspectionType = (String)record.get("inspectionType");
+//            if("鏃ュ父鐐规".equals(inspectionType)){
+//                List<InspectionOrderDetail> failCount = inspectionOrderDetailService.lambdaQuery()
+//                        .eq(InspectionOrderDetail::getInspectionOrderId, id)
+//                        .eq(InspectionOrderDetail::getJudgmentResult, "fail")
+//                        .eq(InspectionOrderDetail::getDelFlag, 0).list();
+//
+//                List<InspectionOrderDetail> passCount = inspectionOrderDetailService.lambdaQuery()
+//                        .eq(InspectionOrderDetail::getInspectionOrderId, id)
+//                        .eq(InspectionOrderDetail::getJudgmentResult,"pass")
+//                        .eq(InspectionOrderDetail::getDelFlag, 0).list();
+//                record.put("result","姝e父:"+passCount.size()+"锛�"+"寮傚父:"+failCount.size());
+//            }else{
+//                List<SpecialtyInspectionOrderDetail> failCount = specialtyInspectionOrderDetailService.lambdaQuery()
+//                        .eq(SpecialtyInspectionOrderDetail::getSpecialtyInspectionOrderId, id)
+//                        .eq(SpecialtyInspectionOrderDetail::getJudgmentResult,"fail")
+//                        .eq(SpecialtyInspectionOrderDetail::getDelFlag, 0).list();
+//
+//                List<SpecialtyInspectionOrderDetail> passCount = specialtyInspectionOrderDetailService.lambdaQuery()
+//                        .eq(SpecialtyInspectionOrderDetail::getSpecialtyInspectionOrderId, id)
+//                        .eq(SpecialtyInspectionOrderDetail::getJudgmentResult,"pass")
+//                        .eq(SpecialtyInspectionOrderDetail::getDelFlag, 0).list();
+//                record.put("result","姝e父:"+passCount.size()+"锛�"+"寮傚父:"+failCount.size());
+//            }
+//        }
+//        return Result.ok(resumeInspectionRecordList);
+//    }
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧淇濆吇璁板綍
+//     * qsw 2023-7-31
+//     */
+//    @GetMapping(value = "/getResumeMaintenanceRecordList")
+//    public Result<?> getResumeMaintenanceRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeMaintenanceRecordList = equipmentService.getResumeMaintenanceRecordList(pageNo, pageSize, params);
+//        return Result.ok(resumeMaintenanceRecordList);
+//    }
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧缁翠慨璁板綍
+//     * qsw 2023-7-31
+//     */
+//    @GetMapping(value = "/getResumeRepairRecordList")
+//    public Result<?> getResumeRepairRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeRepairRecordList = equipmentService.getResumeRepairRecordList(pageNo, pageSize, params);
+//        return Result.ok(resumeRepairRecordList);
+//    }
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧妫�瀹氳褰�
+//     * qsw 2023-7-31
+//     */
+//    @GetMapping(value = "/getResumeCalibrationRecordList")
+//    public Result<?> getResumeCalibrationRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeCalibrationRecordList = equipmentService.getResumeCalibrationRecordList(pageNo, pageSize, params);
+//        for (Map<String, Object> record : resumeCalibrationRecordList.getRecords()) {
+//            String id = (String)record.get("id");
+//            String status = (String)record.get("status");
+//            String managementMode = (String)record.get("managementMode");
+//            if("4".equals(status)){
+//                if("data".equals(managementMode)){
+//                    List<CalibrationOrderDetail> calibrationOrderDetails = calibrationOrderDetailService.lambdaQuery()
+//                            .eq(CalibrationOrderDetail::getCalibrationOrderId, id)
+//                            .eq(CalibrationOrderDetail::getJudgmentResult, "fail")
+//                            .eq(CalibrationOrderDetail::getDelFlag,"0").list();
+//                    if(calibrationOrderDetails.size()>0){
+//                        record.put("calibrationResult","寮傚父");
+//                    }else{
+//                        record.put("calibrationResult","姝e父甯�");
+//                    }
+//                }else{
+//                    List<CalibrationOrderReport> calibrationOrderReports = calibrationOrderReportService.lambdaQuery()
+//                            .eq(CalibrationOrderReport::getCalibrationOrderId, id)
+//                            .eq(CalibrationOrderReport::getJudgmentResult, "fail")
+//                            .eq(CalibrationOrderReport::getDelFlag, "0").list();
+//                    if(calibrationOrderReports.size()>0){
+//                        record.put("calibrationResult","寮傚父");
+//                    }else{
+//                        record.put("calibrationResult","姝e父甯�");
+//                    }
+//                }
+//            }
+//        }
+//        return Result.ok(resumeCalibrationRecordList);
+//    }
+//
+//    /**
+//     *璁惧灞ュ巻 鑾峰彇璁惧澶勭疆璁板綍
+//     * qsw 2023-7-31
+//     */
+//    @GetMapping(value = "/getResumeChangeRecordList")
+//    public Result<?> getResumeChangeRecordList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestParam Map<String, Object> params) {
+//        IPage<Map<String, Object>> resumeChangeRecordList = equipmentService.getResumeChangeRecordList(pageNo, pageSize, params);
+//        return Result.ok(resumeChangeRecordList);
+//    }
+//
+//    /**
+//     * 鏍规嵁鐘舵�佹煡璇㈣澶囧垪琛�
+//     */
+//    @GetMapping(value = "/getEquipmentListByStatus")
+//    public Result<IPage<Equipment>> getEquipmentList(Equipment equipment,String status,
+//                                                     @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+//                                                     @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+//                                                     HttpServletRequest req) {
+//        QueryWrapper<Equipment> queryWrapper = QueryGenerator.initQueryWrapper(equipment, req.getParameterMap());
+//        List<String> statusList = Arrays.asList(status.split(","));
+//        Page<Equipment> page = new Page<Equipment>(pageNo, pageSize);
+//        queryWrapper.in("equipment_status",statusList);
+//        IPage<Equipment> pageList = equipmentService.page(page, queryWrapper);
+//        return Result.OK(pageList);
+//    }/**
+//     * 瀵煎叆
+//     * @return
+//     */
+//    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+//    @Transactional(rollbackFor = Exception.class)
+//    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+//        LoginUser user= (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+//        String exceptionInfo = "";
+//        int exceptionNum = 0;
+//        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+//            MultipartFile file = entity.getValue();
+//            ImportParams params = new ImportParams();
+//            params.setNeedSave(true);
+//            try {
+//                List<EquipmentImportVo> list = ExcelImportUtil.importExcel(file.getInputStream(), EquipmentImportVo.class, params);
+//                for(int i = 0;i<list.size();i++){
+//                    EquipmentImportVo equipmentImportVo = list.get(i);
+//                    EquipmentCategory equipmentCategory = equipmentCategoryService.getOne(new QueryWrapper<EquipmentCategory>().eq("name",equipmentImportVo.getEquipmentCategoryName()),false);
+//                    if(
+//                            StringUtils.isBlank(equipmentImportVo.getNum())
+//                                   || StringUtils.isBlank(equipmentImportVo.getName())
+//                                   || StringUtils.isBlank(equipmentImportVo.getUseId())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentUda1())
+//                                   || StringUtils.isBlank(equipmentImportVo.getManageId())
+//                                   || StringUtils.isBlank(equipmentImportVo.getTeamId())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentImportanceId())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentCategoryName())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentStatus())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentUda3())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentUda5())
+//                                   || StringUtils.isBlank(equipmentImportVo.getEquipmentUda2())
+//                                   || StringUtils.isBlank(equipmentImportVo.getLeaveFactoryDate())
+//                                   || StringUtils.isBlank(equipmentImportVo.getProjectApprovalNo())
+//                                   || StringUtils.isBlank(equipmentImportVo.getFundSource())
+//                                   || StringUtils.isBlank(equipmentImportVo.getAcceptanceCheckDate())
+//                                   || StringUtils.isBlank(equipmentImportVo.getLeaveFactoryDate())
+//                                   || StringUtils.isBlank(equipmentImportVo.getFactoryNo())
+//                                   || StringUtils.isBlank(equipmentImportVo.getConstructorId())
+//                                   || StringUtils.isBlank(equipmentImportVo.getSourceCountry())
+//                                   || StringUtils.isBlank(equipmentImportVo.getModel())
+//                                   || StringUtils.isBlank(equipmentImportVo.getSpecification())
+//                                   || StringUtils.isBlank(equipmentImportVo.getGpo())
+//                    ){
+//                        exceptionInfo = exceptionInfo+"绗�"+(i+2)+"琛屽鍏ュけ璐�,鍘熷洜:鏁版嵁鏈夋湭濉」,璇峰~鍐欏繀濉」鍚庡啀瀵煎叆;";
+//                        exceptionNum++;
+//                    }else if(ObjectUtils.isNull(equipmentCategory))
+//                          {
+//                             exceptionInfo = exceptionInfo+"绗�"+(i+2)+"琛屽鍏ュけ璐�,鍘熷洜:璇ヨ澶囨墍灞炵被鍒笉瀛樺湪锛岃鍏堢淮鎶よ澶囩被鍒�;";
+//                             exceptionNum++;
+//                          }
+//                     else{
+//                        Equipment oriEquipment = equipmentService.getOne(new QueryWrapper<Equipment>().eq("num",equipmentImportVo.getNum()),false);
+//                        if(ObjectUtils.isNull(oriEquipment)){
+//                            Equipment equipment = new Equipment();
+//                            equipment.setNum(equipmentImportVo.getNum())
+//                                    .setName(equipmentImportVo.getName())
+//                                    .setUseId(equipmentImportVo.getUseId())
+//                                    .setEquipmentUda1(equipmentImportVo.getEquipmentUda1())
+//                                    .setManageId(equipmentImportVo.getManageId())
+//                                    .setTeamId(equipmentImportVo.getTeamId())
+//                                    .setEquipmentImportanceId(equipmentImportVo.getEquipmentImportanceId())
+//                                    .setEquipmentCategoryId(equipmentCategory.getId())
+//                                    .setSpecificEquipment(equipmentImportVo.getKeyEquipmentIdentification())
+//                                    .setSecurityConfiguration(equipmentImportVo.getSecurityConfiguration())
+//                                    .setCoolingSystem(equipmentImportVo.getCoolingSystem())
+//                                    .setFireExtinguisher(equipmentImportVo.getFireExtinguisher())
+//                                    .setFireExtinguisherValidityPeriod(equipmentImportVo.getFireExtinguisherValidityPeriod())
+//                                    .setOperatingSystem(equipmentImportVo.getOperatingSystem())
+//                                    .setSystem(equipmentImportVo.getSystem())
+//                                    .setPort(equipmentImportVo.getPort())
+//                                    .setCoordinateNum(equipmentImportVo.getCoordinateNum())
+//                                    .setEquipmentStatus(equipmentImportVo.getEquipmentStatus())
+//                                    .setEquipmentUda3(equipmentImportVo.getEquipmentUda3())
+//                                    .setEquipmentUda4(equipmentImportVo.getEquipmentUda4())
+//                                    .setEquipmentUda5(equipmentImportVo.getEquipmentUda5())
+//                                    .setLocation(equipmentImportVo.getEquipmentUda2())
+//                                    .setLastVerificationDate(equipmentImportVo.getLeaveFactoryDate())
+//                                    .setProjectApprovalNo(equipmentImportVo.getProjectApprovalNo())
+//                                    .setFundSource(equipmentImportVo.getFundSource())
+//                                    .setAcceptanceCheckDate(equipmentImportVo.getAcceptanceCheckDate())
+//                                    .setFactoryNumber(equipmentImportVo.getFactoryNo())
+//                                    .setConstructorId(equipmentImportVo.getConstructorId())
+//                                    .setSourceCountry(equipmentImportVo.getSourceCountry())
+//                                    .setModel(equipmentImportVo.getModel())
+//                                    .setSpecification(equipmentImportVo.getSpecification())
+//                                    .setGpo(equipmentImportVo.getGpo());
+//                            equipmentService.save(equipment);
+//                        }else {
+//                            exceptionInfo = exceptionInfo+"绗�"+(i+2)+"琛屽鍏ュけ璐ワ紝鍘熷洜锛氱粺涓�缂栫爜宸插瓨鍦紝鏁版嵁閲嶅瀵煎叆;";
+//                            exceptionNum++;
+//                        }
+//                    }
+//                }
+//                if(exceptionNum!=0){
+//                    String headInfo = "灏忓鎻愰啋鎮�!璁惧鍙拌处锛氬鍏ユ垚鍔�"+(list.size()-exceptionNum)+"鏉�,澶辫触"+exceptionNum+"鏉�";
+//                    MessageDTO messageDTO = new MessageDTO();
+//                    messageDTO.setTitle(headInfo);
+//                    messageDTO.setFromUser("鏁版嵁瀵煎叆灏忓姪鎵�-灏忓");
+//                    messageDTO.setCategory("瀵煎叆鎿嶄綔闄勫姞淇℃伅");
+//                    messageDTO.setContent(exceptionInfo);
+//                    messageDTO.setToUser(user.getUsername());
+//                    sysBaseApi.sendSysAnnouncement(messageDTO);
+//                    return Result.OK(headInfo+",鍙湪-绯荤粺娑堟伅-鏌ョ湅瀵煎叆璇︽儏");
+//                }
+//                return Result.OK("瀵煎叆鎴愬姛锛屽凡瀵煎叆鍏ㄩ儴鏁版嵁銆�");
+//            } catch (Exception e) {
+//                log.error(e.getMessage(), e);
+//                return Result.error("鏂囦欢瀵煎叆澶辫触:" + e.getMessage());
+//            }
+//        }
+//        return Result.error("鏂囦欢瀵煎叆澶辫触锛�");
+//    }
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanParameterController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanParameterController.java
new file mode 100644
index 0000000..69ecd0c
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanParameterController.java
@@ -0,0 +1,70 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanParameterService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanSparePartService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/eam/predictiveworkplanparameter")
+@Slf4j
+public class PredictiveWorkPlanParameterController extends JeecgController<PredictiveWorkPlanParameter, IPredictiveWorkPlanParameterService> {
+
+    @Autowired
+    private IPredictiveWorkPlanParameterService predictiveWorkPlanParameterService;
+
+    /**
+     * 鍙傛暟鍒楄〃
+     */
+    @GetMapping("listPredictiveWorkPlanParameter")
+    public Result<?> listPredictiveWorkPlanParameter(@RequestParam Map<String, Object> params) {
+        List<PredictiveWorkPlanParameter> materials = predictiveWorkPlanParameterService.listPredictiveWorkPlanParameter(params);
+        return Result.ok(materials);
+    }
+
+    /**
+     * 鍙傛暟鎺у埗鍒楄〃
+     */
+    @GetMapping("pagePredictiveWorkPlanParameter")
+    public Result<?> pagePredictiveWorkPlanParameter(@RequestParam("pageNo") Integer pageNo,
+                                                     @RequestParam("pageSize") Integer pageSize,
+                                                     @RequestParam Map<String, Object> params) {
+        IPage<Map<String, Object>> materials = predictiveWorkPlanParameterService.pagePredictiveWorkPlanParameter(pageNo, pageSize, params);
+        return Result.ok(materials);
+    }
+
+    /**
+     * 娣诲姞
+     */
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody PredictiveWorkPlanParameter predictiveWorkPlanParameter) {
+        predictiveWorkPlanParameterService.save(predictiveWorkPlanParameter);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+
+    /**
+     * 缂栬緫
+     */
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody PredictiveWorkPlanParameter predictiveWorkPlanParameter) {
+        predictiveWorkPlanParameterService.updateById(predictiveWorkPlanParameter);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        predictiveWorkPlanParameterService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanSparePartController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanSparePartController.java
new file mode 100644
index 0000000..9b69a22
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanSparePartController.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.modules.eam.entity.MaintenanceStandardPlanningMaterial;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanSparePartService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/eam/predictiveworkplansparepart")
+@Slf4j
+public class PredictiveWorkPlanSparePartController extends JeecgController<PredictiveWorkPlanSparePart, IPredictiveWorkPlanSparePartService> {
+
+    @Autowired
+    private IPredictiveWorkPlanSparePartService predictiveWorkPlanSparePartService;
+
+    /**
+     * 澶囦欢鎺у埗鍒楄〃
+     */
+    @GetMapping("pagePredictiveWorkPlanSparePart")
+    public Result<?> pagePredictiveWorkPlanSparePart(@RequestParam("pageNo") Integer pageNo,
+                                                     @RequestParam("pageSize") Integer pageSize,
+                                                     @RequestParam Map<String, Object> params) {
+        IPage<Map<String, Object>> materials = predictiveWorkPlanSparePartService.pagePredictiveWorkPlanSparePart(pageNo, pageSize, params);
+        return Result.ok(materials);
+    }
+
+
+    /**
+     * 娣诲姞
+     */
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody PredictiveWorkPlanSparePart predictiveWorkPlanSparePart) {
+        predictiveWorkPlanSparePartService.save(predictiveWorkPlanSparePart);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+
+    /**
+     * 缂栬緫
+     */
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody PredictiveWorkPlanSparePart predictiveWorkPlanSparePart) {
+        predictiveWorkPlanSparePartService.updateById(predictiveWorkPlanSparePart);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        predictiveWorkPlanSparePartService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanWarnController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanWarnController.java
new file mode 100644
index 0000000..e4a18d4
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/PredictiveWorkPlanWarnController.java
@@ -0,0 +1,66 @@
+package org.jeecg.modules.eam.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanWarnService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/eam/predictiveworkplanwarn")
+@Slf4j
+public class PredictiveWorkPlanWarnController extends JeecgController<PredictiveWorkPlanWarn, IPredictiveWorkPlanWarnService> {
+
+    @Autowired
+    private IPredictiveWorkPlanWarnService predictiveWorkPlanWarnService;
+
+    /**
+     * 鎶ヨ鍒楄〃
+     */
+    @GetMapping("listPredictiveWorkPlanWarn")
+    public Result<?> listPredictiveWorkPlanWarn(@RequestParam Map<String, Object> params) {
+        List<PredictiveWorkPlanWarn> materials = predictiveWorkPlanWarnService.listPredictiveWorkPlanWarn(params);
+        return Result.ok(materials);
+    }
+
+    @GetMapping("pagePredictiveWorkPlanWarn")
+    public Result<?> pagePredictiveWorkPlanParameter(@RequestParam("pageNo") Integer pageNo,
+                                                     @RequestParam("pageSize") Integer pageSize,
+                                                     @RequestParam Map<String, Object> params) {
+        IPage<Map<String, Object>> materials = predictiveWorkPlanWarnService.pagePredictiveWorkPlanWarn(pageNo, pageSize, params);
+        return Result.ok(materials);
+    }
+
+
+    /**
+     * 娣诲姞
+     */
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody PredictiveWorkPlanWarn predictiveWorkPlanWarn) {
+        predictiveWorkPlanWarnService.save(predictiveWorkPlanWarn);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
+
+    /**
+     * 缂栬緫
+     */
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody PredictiveWorkPlanWarn predictiveWorkPlanWarn) {
+        predictiveWorkPlanWarnService.updateById(predictiveWorkPlanWarn);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        predictiveWorkPlanWarnService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java
index 3f80c10..cfa62f0 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/RepairOrderController.java
@@ -351,6 +351,14 @@
         return Result.OK(pageList);
     }
 
+	 @GetMapping(value = "/pageRepairOrderDetailByMainId")
+	 public Result<IPage<RepairOrderDetail>> pageRepairOrderDetailByMainId(@RequestParam("pageNo") Integer pageNo,
+																		   @RequestParam("pageSize") Integer pageSize,
+																		   @RequestParam Map<String, Object> params) {
+		 IPage<RepairOrderDetail> pageList = repairOrderDetailService.pageRepairOrderDetailByMainId(pageNo, pageSize, params);
+		 return Result.OK(pageList);
+	 }
+
 	/**
 	 * 娣诲姞
 	 * @param repairOrderDetail
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MaintenanceStandardPlanningMaterial.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MaintenanceStandardPlanningMaterial.java
index 9546894..6162ed0 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MaintenanceStandardPlanningMaterial.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/MaintenanceStandardPlanningMaterial.java
@@ -34,8 +34,8 @@
     private static final long serialVersionUID = 1L;
 
 	/**淇濆吇鏍囧噯id*/
-	@Excel(name = "淇濆吇鏍囧噯id", width = 15)
-    @ApiModelProperty(value = "淇濆吇鏍囧噯id")
+	@Excel(name = "淇濆吇鏍囧噯id/涓氬姟琛ㄤ富閿甀D", width = 15)
+    @ApiModelProperty(value = "淇濆吇鏍囧噯id/涓氬姟琛ㄤ富閿甀D")
     private String maintenanceStandardId;
 	/**鐗╂枡id*/
 	@Excel(name = "鐗╂枡id", width = 15)
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkOrder.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkOrder.java
new file mode 100644
index 0000000..9fcef22
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkOrder.java
@@ -0,0 +1,138 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("mom_eam_predictive_work_order")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkOrder extends JeecgEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓撲笟淇濆吇宸ュ崟鍙�
+     */
+    @Excel(name = "棰勬祴鎬х淮鎶ゅ伐鍗曞彿", width = 15)
+    @ApiModelProperty(value = "棰勬祴鎬х淮鎶ゅ伐鍗曞彿")
+    private String num;
+
+    /**
+     * 瀹為檯寮�濮嬫椂闂�
+     */
+    @Excel(name = "瀹為檯寮�濮嬫椂闂�", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
+    private Date actualStartTime;
+    /**
+     * 瀹為檯缁撴潫鏃堕棿
+     */
+    @Excel(name = "瀹為檯缁撴潫鏃堕棿", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
+    private Date actualEndTime;
+    /**
+     * 淇濆吇浜�
+     */
+    @Excel(name = "淇濆吇浜�", width = 15)
+    @ApiModelProperty(value = "淇濆吇浜�")
+    private String maintenanceUserId;
+    /**
+     * 璁″垝寮�濮嬫椂闂�
+     */
+    @Excel(name = "璁″垝寮�濮嬫椂闂�", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
+    private Date planStartTime;
+    /**
+     * 璁″垝缁撴潫鏃堕棿
+     */
+    @Excel(name = "璁″垝缁撴潫鏃堕棿", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
+    private Date planEndTime;
+    /**
+     * 棰嗗彇浜篿d
+     */
+    @Excel(name = "棰嗗彇浜篿d", width = 15)
+    @ApiModelProperty(value = "棰嗗彇浜篿d")
+    private String recipientUserId;
+
+    /**
+     * 鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)
+     */
+    @Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+    /**
+     * 鐘舵��
+     */
+    @Excel(name = "鐘舵��", width = 15)
+    @ApiModelProperty(value = "鐘舵��")
+    private String status = CommonConstant.STATUS_1;
+    /**
+     * 澶囩敤瀛楁1
+     */
+    @Excel(name = "澶囩敤瀛楁1", width = 15)
+    @ApiModelProperty(value = "澶囩敤瀛楁1")
+    private String maintenanceOrderUda1;
+    /**
+     * 澶囩敤瀛楁2
+     */
+    @Excel(name = "澶囩敤瀛楁2", width = 15)
+    @ApiModelProperty(value = "澶囩敤瀛楁2")
+    private String maintenanceOrderUda2;
+    /**
+     * 澶囩敤瀛楁3
+     */
+    @Excel(name = "澶囩敤瀛楁3", width = 15)
+    @ApiModelProperty(value = "澶囩敤瀛楁3")
+    private String maintenanceOrderUda3;
+    /**
+     * 澶囩敤瀛楁4
+     */
+    @Excel(name = "澶囩敤瀛楁4", width = 15)
+    @ApiModelProperty(value = "澶囩敤瀛楁4")
+    private String maintenanceOrderUda4;
+    /**
+     * 澶囩敤瀛楁5
+     */
+    @Excel(name = "澶囩敤瀛楁5", width = 15)
+    @ApiModelProperty(value = "澶囩敤瀛楁5")
+    private String maintenanceOrderUda5;
+    /**
+     * 鍒涘缓绫诲瀷锛�1鎵嬪姩鍒涘缓锛�2鑷姩鍒涘缓锛�
+     */
+    @Excel(name = "鍒涘缓绫诲瀷锛�1鎵嬪姩鍒涘缓锛�2鑷姩鍒涘缓锛�", width = 15)
+    @ApiModelProperty(value = "鍒涘缓绫诲瀷锛�1鎵嬪姩鍒涘缓锛�2鑷姩鍒涘缓锛�")
+    private String createType;
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+    @Excel(name = "璁惧ID", width = 36)
+    @ApiModelProperty(value = "璁惧ID")
+    private String equipmentId;
+
+    private String itemId;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlan.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlan.java
new file mode 100644
index 0000000..d4e6f5b
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlan.java
@@ -0,0 +1,65 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+//棰勬祴鎬х淮鎶ゆ柟妗�
+@Data
+@TableName("mom_eam_predictive_work_plan")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlan extends JeecgEntity implements Serializable {
+
+	@Excel(name = "鏂规缂栫爜", width = 30)
+    @ApiModelProperty(value = "鏂规缂栫爜")
+    private String num;
+
+	@Excel(name = "鏂规鍚嶇О", width = 30)
+    @ApiModelProperty(value = "鏂规鍚嶇О")
+    private String name;
+
+	@Excel(name = "璁惧ID", width = 36)
+    @ApiModelProperty(value = "璁惧ID")
+    private String  equipmentId;
+
+    @Excel(name = "鐗堟湰", width = 30)
+    @ApiModelProperty(value = "鐗堟湰")
+    private String planVersion;
+
+    @Excel(name = "缁翠繚鏂瑰紡", width = 15)
+    @ApiModelProperty(value = "缁翠繚鏂瑰紡")
+    private String maintenanceMethod;
+
+    @Excel(name = "鐩戞帶绫诲瀷", width = 15)
+    @ApiModelProperty(value = "鐩戞帶绫诲瀷")
+    private String monitorType;
+
+    @Excel(name = "娲惧伐鏂瑰紡", width = 15)
+    @ApiModelProperty(value = "娲惧伐鏂瑰紡")
+    private String assignMode;
+
+    @Excel(name = "璐d换鐝粍", width = 15)
+    @ApiModelProperty(value = "璐d换鐝粍")
+    @Dict(dicCode = "id",dictTable="mom_base_team",dicText="name")
+    private String teamId;
+
+	@Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+	@Excel(name = "鐘舵�侊紙1鏈敓鏁堬紝2宸茬敓鏁堬紝3宸插け鏁堬級", width = 15)
+    @ApiModelProperty(value = "鐘舵�侊紙1鏈敓鏁堬紝2宸茬敓鏁堬紝3宸插け鏁堬級")
+    private String status;
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameter.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameter.java
new file mode 100644
index 0000000..db59847
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameter.java
@@ -0,0 +1,67 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鍙傛暟
+@Data
+@TableName("mom_eam_predictive_work_plan_parameter")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlanParameter extends JeecgEntity implements Serializable {
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+	@Excel(name = "鍙傛暟ID", width = 30)
+    @ApiModelProperty(value = "鍙傛暟ID")
+    private String parameterId;
+
+	@Excel(name = "鍙傛暟浠g爜", width = 36)
+    @ApiModelProperty(value = "鍙傛暟浠g爜")
+    private String parameterCode;
+
+    @Excel(name = "鍙傛暟鍚嶇О", width = 30)
+    @ApiModelProperty(value = "鍙傛暟鍚嶇О")
+    private String parameterName;
+
+    @Excel(name = "鍗曚綅", width = 15)
+    @ApiModelProperty(value = "鍗曚綅")
+    private String parameterUnit;
+
+    @Excel(name = "鏉′欢", width = 15)
+    @ApiModelProperty(value = "鏉′欢")
+    private String parameterCondition;
+
+    @Excel(name = "涓婇檺鍊�", width = 15)
+    @ApiModelProperty(value = "涓婇檺鍊�")
+    private float upperLimitValue;
+
+    @Excel(name = "涓嬮檺鍊�", width = 15)
+    @ApiModelProperty(value = "涓嬮檺鍊�")
+    private float lowerLimitValue;
+
+    private String saveTableName;
+
+	@Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+    @TableField(exist = false)
+    private float actualValue;
+    @TableField(exist = false)
+    private Date collectTime;
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameterHistory.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameterHistory.java
new file mode 100644
index 0000000..fc8544d
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanParameterHistory.java
@@ -0,0 +1,63 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("mom_eam_predictive_work_plan_parameter_history")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlanParameterHistory extends JeecgEntity implements Serializable {
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+    @Excel(name = "鍙傛暟ID", width = 30)
+    @ApiModelProperty(value = "鍙傛暟ID")
+    private String parameterId;
+
+    @Excel(name = "鍙傛暟浠g爜", width = 30)
+    @ApiModelProperty(value = "鍙傛暟浠g爜")
+    private String parameterCode;
+
+    @Excel(name = "鍙傛暟鍚嶇О", width = 30)
+    @ApiModelProperty(value = "鍙傛暟鍚嶇О")
+    private String parameterName;
+
+    @Excel(name = "涓婇檺鍊�", width = 15)
+    @ApiModelProperty(value = "涓婇檺鍊�")
+    private float upperLimitValue;
+
+    @Excel(name = "涓嬮檺鍊�", width = 15)
+    @ApiModelProperty(value = "涓嬮檺鍊�")
+    private float lowerLimitValue;
+
+    @Excel(name = "瀹為檯鍊�", width = 15)
+    @ApiModelProperty(value = "瀹為檯鍊�")
+    private float actualValue;
+
+    @Excel(name = "鏉′欢", width = 15)
+    @ApiModelProperty(value = "鏉′欢")
+    private String parameterCondition;
+
+    @Excel(name = "鐩戞祴鏃堕棿", width = 15)
+    @ApiModelProperty(value = "鐩戞祴鏃堕棿")
+    private Date collectTime;
+
+    @Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanSparePart.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanSparePart.java
new file mode 100644
index 0000000..0e519c2
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanSparePart.java
@@ -0,0 +1,60 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢瀵垮懡
+@Data
+@TableName("mom_eam_predictive_work_plan_spare_part")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlanSparePart extends JeecgEntity implements Serializable {
+
+	@Excel(name = "澶囦欢ID", width = 30)
+    @ApiModelProperty(value = "澶囦欢ID")
+    private String sparePartId;
+
+	@Excel(name = "閰嶅鏁伴噺", width = 30)
+    @ApiModelProperty(value = "閰嶅鏁伴噺")
+    private float supportingQuantity;
+
+	@Excel(name = "棰濆畾瀵垮懡/灏忔椂", width = 36)
+    @ApiModelProperty(value = "棰濆畾瀵垮懡/灏忔椂")
+    private float ratedLife;
+
+    @Excel(name = "瀵垮懡鎺у埗闄�", width = 30)
+    @ApiModelProperty(value = "瀵垮懡鎺у埗闄�")
+    private float lifeWarning;
+
+    @Excel(name = "瀹為檯瀵垮懡", width = 15)
+    @ApiModelProperty(value = "瀹為檯瀵垮懡")
+    private float actualLife;
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+	@Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+    @TableField(exist = false)
+    private String equipmentId;
+    @TableField(exist = false)
+    private String mdcEquipmentId;
+    @TableField(exist = false)
+    private Date replacementTime;
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarn.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarn.java
new file mode 100644
index 0000000..000c61d
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarn.java
@@ -0,0 +1,63 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鍛婅
+@Data
+@TableName("mom_eam_predictive_work_plan_warn")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlanWarn extends JeecgEntity implements Serializable {
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+    @Excel(name = "mdc璁惧ID", width = 15)
+    @ApiModelProperty(value = "mdc璁惧ID")
+    private String mdcEquipmentId;
+
+    @Excel(name = "鏉′欢", width = 15)
+    @ApiModelProperty(value = "鏉′欢")
+    private String parameterCondition;
+
+	@Excel(name = "鎶ヨID", width = 30)
+    @ApiModelProperty(value = "鎶ヨID")
+    private String warnId;
+
+	@Excel(name = "鎶ヨ浠g爜", width = 36)
+    @ApiModelProperty(value = "鎶ヨ浠g爜")
+    private String warnCode;
+
+    @Excel(name = "鎶ヨ鍚嶇О", width = 30)
+    @ApiModelProperty(value = "鎶ヨ鍚嶇О")
+    private String warnName;
+
+    @Excel(name = "鎶ヨ鍛ㄦ湡", width = 15)
+    @ApiModelProperty(value = "鎶ヨ鍛ㄦ湡")
+    private int warnCycle;
+
+    @Excel(name = "鎶ヨ鍛ㄦ湡鍗曚綅", width = 15)
+    @ApiModelProperty(value = "鎶ヨ鍛ㄦ湡鍗曚綅")
+    private String cycleUnit;
+
+    @Excel(name = "鎶ヨ娆℃暟", width = 15)
+    @ApiModelProperty(value = "鎶ヨ娆℃暟")
+    private int times;
+
+	@Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarnHistory.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarnHistory.java
new file mode 100644
index 0000000..10c92d6
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/PredictiveWorkPlanWarnHistory.java
@@ -0,0 +1,51 @@
+package org.jeecg.modules.eam.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("mom_eam_predictive_work_plan_warn_history")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class PredictiveWorkPlanWarnHistory extends JeecgEntity implements Serializable {
+
+    @Excel(name = "缁存姢鏂规ID", width = 15)
+    @ApiModelProperty(value = "缁存姢鏂规ID")
+    private String workPlanId;
+
+    @Excel(name = "鏉′欢", width = 15)
+    @ApiModelProperty(value = "鏉′欢")
+    private String parameterCondition;
+
+	@Excel(name = "鎶ヨID", width = 30)
+    @ApiModelProperty(value = "鎶ヨID")
+    private String warnId;
+
+	@Excel(name = "鎶ヨ浠g爜", width = 36)
+    @ApiModelProperty(value = "鎶ヨ浠g爜")
+    private String warnCode;
+
+    @Excel(name = "鎶ヨ鍚嶇О", width = 30)
+    @ApiModelProperty(value = "鎶ヨ鍚嶇О")
+    private String warnName;
+
+	@Excel(name = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵��(0-姝e父,1-宸插垹闄�)")
+    @TableLogic
+    private Integer delFlag = CommonConstant.DEL_FLAG_0;
+
+    @Excel(name = "鐩戞祴鏃堕棿", width = 15)
+    @ApiModelProperty(value = "鐩戞祴鏃堕棿")
+    private Date collectTime;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/PredictiveWorkPlanSparePartJob.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/PredictiveWorkPlanSparePartJob.java
new file mode 100644
index 0000000..2b15969
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/PredictiveWorkPlanSparePartJob.java
@@ -0,0 +1,32 @@
+package org.jeecg.modules.eam.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanSparePartService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import javax.annotation.Resource;
+
+/**
+ * 澶囦欢瀵垮懡妫�鏌ワ紝鐢熸垚棰勬祴宸ュ崟
+ */
+@Slf4j
+public class PredictiveWorkPlanSparePartJob implements Job {
+
+    @Resource
+    private IPredictiveWorkPlanSparePartService predictiveWorkPlanSparePartService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        log.info("澶囦欢瀵垮懡妫�鏌ワ紝鐢熸垚棰勬祴宸ュ崟浠诲姟 PredictiveWorkPlanSparePartJob start!  鏃堕棿:" + DateUtils.now());
+        try {
+            predictiveWorkPlanSparePartService.createSparePartWorkPlan();
+            log.info("澶囦欢瀵垮懡妫�鏌ワ紝鐢熸垚棰勬祴宸ュ崟浠诲姟 PredictiveWorkPlanSparePartJob 鎵ц鎴愬姛!");
+        } catch (Exception e) {
+            log.error("澶囦欢瀵垮懡妫�鏌ワ紝鐢熸垚棰勬祴宸ュ崟浠诲姟 PredictiveWorkPlanSparePartJob 鎵ц澶辫触!");
+            log.error(e.getMessage(), e);
+        }
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkOrderMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkOrderMapper.java
new file mode 100644
index 0000000..45327c7
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkOrderMapper.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.eam.entity.PredictiveWorkOrder;
+import org.jeecg.modules.eam.entity.SpecialtyMaintenanceOrder;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PredictiveWorkOrderMapper extends BaseMapper<PredictiveWorkOrder> {
+
+    public IPage<Map<String, Object>> pageOrderList(IPage<Map> pageData,@Param("params")  Map<String, Object> params);
+
+    @Select("<script> select dbo.F_GET_SEQ_ID('${predictiveWorkOrder}') </script>")
+    public String getOrderNum(@Param("predictiveWorkOrder")String predictiveWorkOrder);
+
+//    List<Map<String,Object>> getMaintenanceProjectList(@Param("maintenanceCycleId") String maintenanceCycleId, @Param("maintenanceMode") String maintenanceMode, @Param("maintenanceStandardId") String maintenanceStandardId);
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanMapper.java
new file mode 100644
index 0000000..1e594ea
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanMapper.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗�
+public interface PredictiveWorkPlanMapper extends BaseMapper<PredictiveWorkPlan> {
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlan(IPage<Map> pageData, @Param("params") Map<String, Object> params);
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterHistoryMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterHistoryMapper.java
new file mode 100644
index 0000000..8cd5594
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterHistoryMapper.java
@@ -0,0 +1,8 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameterHistory;
+
+public interface PredictiveWorkPlanParameterHistoryMapper extends BaseMapper<PredictiveWorkPlanParameterHistory> {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterMapper.java
new file mode 100644
index 0000000..6115202
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanParameterMapper.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter;
+import org.jeecg.modules.eam.model.ParameterVo;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鍙傛暟
+public interface PredictiveWorkPlanParameterMapper extends BaseMapper<PredictiveWorkPlanParameter> {
+
+    public List<PredictiveWorkPlanParameter> listPredictiveWorkPlanParameter(@Param("params") Map<String, Object> params);
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanParameter(IPage<Map> pageData, @Param("params") Map<String, Object> params);
+
+    public List<PredictiveWorkPlanParameter> listParameter(@Param("predictiveWorkPlanId") String predictiveWorkPlanId);
+
+    public ParameterVo findParameterInfo(@Param("saveTableName") String saveTableName, @Param("lowerLimitValue") float lowerLimitValue,
+                                         @Param("upperLimitValue") float upperLimitValue, @Param("parameterCode") String parameterCode);
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanSparePartMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanSparePartMapper.java
new file mode 100644
index 0000000..5b620c8
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanSparePartMapper.java
@@ -0,0 +1,24 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.MaintenanceOrderActualMaterial;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.model.MdcEquipmentRunningSectionVo;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢瀵垮懡
+public interface PredictiveWorkPlanSparePartMapper extends BaseMapper<PredictiveWorkPlanSparePart> {
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanSparePart(IPage<Map> pageData, @Param("params") Map<String, Object> params);
+
+
+    public List<PredictiveWorkPlanSparePart> listPredictiveWorkPlanSparePart(@Param("predictiveWorkPlanId") String predictiveWorkPlanId);
+
+    public List<MaintenanceOrderActualMaterial> listMaintenanceOrderActualMaterial( @Param("equipmentId") String equipmentId, @Param("sparePartId") String sparePartId);
+
+    public List<MdcEquipmentRunningSectionVo> listMdcEquipmentRunningSectionVo( @Param("mdcEquipmentId") String mdcEquipmentId);
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnHistoryMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnHistoryMapper.java
new file mode 100644
index 0000000..a75b6c5
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnHistoryMapper.java
@@ -0,0 +1,9 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarnHistory;
+
+public interface PredictiveWorkPlanWarnHistoryMapper extends BaseMapper<PredictiveWorkPlanWarnHistory> {
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnMapper.java
new file mode 100644
index 0000000..a478eac
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/PredictiveWorkPlanWarnMapper.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.eam.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn;
+import org.jeecg.modules.eam.model.MdcEquipmentAlarmVo;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鎶ヨ
+public interface PredictiveWorkPlanWarnMapper extends BaseMapper<PredictiveWorkPlanWarn> {
+
+    public List<PredictiveWorkPlanWarn> listPredictiveWorkPlanWarn(@Param("params") Map<String, Object> params);
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanWarn(IPage<Map> pageData, @Param("params") Map<String, Object> params);
+
+    public List<PredictiveWorkPlanWarn> listWarn(@Param("predictiveWorkPlanId") String predictiveWorkPlanId);
+
+    public List<MdcEquipmentAlarmVo> findWarnInfo(@Param("mdcEquipmentId") String mdcEquipmentId, @Param("times") int times, @Param("warnCode") String warnCode);
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/RepairOrderDetailMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/RepairOrderDetailMapper.java
index d0ba5b2..1e8ce57 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/RepairOrderDetailMapper.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/RepairOrderDetailMapper.java
@@ -1,6 +1,9 @@
 package org.jeecg.modules.eam.mapper;
 
 import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.jeecg.modules.eam.entity.RepairOrderDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -29,4 +32,5 @@
     */
 	public List<RepairOrderDetail> selectByMainId(@Param("mainId") String mainId);
 
+    public IPage<RepairOrderDetail> pageRepairOrderDetailByMainId(IPage<Map> pageData, @Param("params") Map<String, Object> params);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkOrderMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkOrderMapper.xml
new file mode 100644
index 0000000..b5e8b95
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkOrderMapper.xml
@@ -0,0 +1,48 @@
+<?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.PredictiveWorkOrderMapper">
+
+    <select id="getSpecialtyMaintenanceOrderList"  parameterType="Map" resultType="Map">
+        SELECT DISTINCT
+        t1.id,
+        t1.num,
+        t1.status,
+        t1.maintenance_user_id maintenanceUserId,
+        t12.realname maintenanceUserName,
+        t2.id as specialtyMaintenancePlanId,
+        t2.num AS specialtyMaintenancePlanNum,
+        t2.assign_mode assignMode,
+        t11.item_text assignModeName,
+        t7.item_text AS statusName,
+        t5.item_text AS maintenanceMode,
+        t4.depart_name AS departName,
+        t2.team_id teamId,
+        t6.name AS teamName,
+        concat(t8.code, '/', t8.name) AS maintenanceCycleName,
+        t9.NAME AS maintenanceTypeName,
+        t1.plan_start_time as planStartTime,
+        t1.plan_end_time as planEndTime,
+        t1.actual_start_time as actualStartTime,
+        t1.actual_end_time as actualEndTime,
+        t10.realname,
+        t1.create_time as createTime,
+        t1.create_by as createBy
+        FROM
+        mom_eam_specialty_maintenance_order t1
+        LEFT JOIN mom_eam_specialty_maintenance_plan t2 ON t1.specialty_maintenance_plan_id = t2.id
+        LEFT JOIN sys_depart t4 ON t2.depart_id = t4.id
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'maintenance_method' ) t5 ON t5.item_value = t2.maintenance_mode
+        LEFT JOIN mom_base_team t6 ON t2.team_id = t6.id
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'maintenance_order_status' ) t7 ON t7.item_value = t1.STATUS
+        left join (select * from v_sys_dict where dict_code = 'assign_mode') t11 on t2.assign_mode = t11.item_value
+        LEFT JOIN mom_eam_maintenance_cycle t8 ON t8.id = t2.maintenance_cycle_id
+        LEFT JOIN mom_eam_maintenance_type t9 ON t9.id = t2.maintenance_type_id
+        left join sys_user t10 on t1.recipient_user_id = t10.id
+        left join sys_user t12 on t1.maintenance_user_id = t12.id
+        WHERE t1.del_flag = 0 and t2.del_flag = 0 and t8.del_flag = 0 and t9.del_flag = 0
+        <if test="params.num != null and params.num != ''">
+            and t1.num like concat('%',#{params.num},'%')
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanMapper.xml
new file mode 100644
index 0000000..e5cb96e
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanMapper.xml
@@ -0,0 +1,36 @@
+<?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.PredictiveWorkPlanMapper">
+
+    <select id="pagePredictiveWorkPlan"  parameterType="Map" resultType="Map">
+        SELECT
+            t1.*,
+            t2.num deviceNum,
+            t2.name deviceName,
+            t2.model deviceModel,
+            t3.item_text assignModeName,
+            t4.item_text maintenanceMethodName,
+            t5.name teamName,
+            t6.item_text statusName,
+            t7.item_text monitorTypeName,
+            t1.plan_version planVersion,
+            t1.create_by createBy,
+            t1.create_time createTime
+        FROM
+        mom_eam_predictive_work_plan t1
+        LEFT JOIN mom_eam_equipment t2 on t1.equipment_id = t2.id
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'assign_mode' ) t3 ON t3.item_value = t1.assign_mode
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'maintenance_method' ) t4 ON t4.item_value = t1.maintenance_method
+        LEFT JOIN mom_base_team t5 ON t5.id = t2.team_id
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'version_status' ) t6 ON t6.item_value = t1.status
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'monitor_type' ) t7 ON t7.item_value = t1.monitor_type
+        WHERE t1.del_flag = 0 and t2.del_flag = 0
+        <if test="params.planNum != null and params.planNum != ''">
+            and t1.num = concat('%',#{params.planNum},'%')
+        </if>
+        <if test="params.deviceName != null and params.deviceName != ''">
+            and t2.name = concat('%',#{params.deviceName},'%')
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanParameterMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanParameterMapper.xml
new file mode 100644
index 0000000..88b8fe2
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanParameterMapper.xml
@@ -0,0 +1,78 @@
+<?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.PredictiveWorkPlanParameterMapper">
+
+    <select id="listPredictiveWorkPlanParameter"  parameterType="Map" resultType="org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter">
+        SELECT
+        t1.id parameterId,
+        t1.chinese_name parameterName,
+        t1.english_name parameterCode,
+        t2.saveTableName
+        FROM
+        mdc_drive_type_param_config t1
+        LEFT JOIN Equipment t2 ON t2.controlSystem = t1.control_system_type
+        LEFT JOIN mom_eam_equipment t3 ON t3.num = t2.EquipmentID
+        WHERE t3.id = #{params.equipmentId}
+            <if test="params.parameterCode != null and params.parameterCode != ''">
+                and t1.english_name = concat('%',#{params.parameterCode},'%')
+            </if>
+            <if test="params.parameterName != null and params.parameterName != ''">
+                and t1.chinese_name = concat('%',#{params.parameterName},'%')
+            </if>
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="pagePredictiveWorkPlanParameter"  parameterType="Map" resultType="Map">
+        SELECT
+        t1.*,
+        t1.parameter_code parameterCode,
+        t1.parameter_name parameterName,
+        t1.upper_limit_value upperLimitValue,
+        t1.lower_limit_value lowerLimitValue,
+        t2.name unitName,
+        t3.item_text conditionalRelationName
+        FROM
+        mom_eam_predictive_work_plan_parameter t1
+        LEFT JOIN mom_base_unit t2 ON t2.id = t1.parameter_unit
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'conditional_relation' ) t3 ON t3.item_value = t1.parameter_condition
+        WHERE
+        t1.del_flag = 0
+        <if test="params.planId != null and params.planId != ''">
+            and t1.work_plan_id = #{params.planId}
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="listParameter"  parameterType="Map" resultType="org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter">
+        SELECT
+            t1.work_plan_id workPlanId,
+            t1.parameter_id parameterId,
+            t1.parameter_code parameterCode,
+            t1.parameter_name parameterName,
+            t1.upper_limit_value upperLimitValue,
+            t1.lower_limit_value lowerLimitValue,
+            t1.parameter_condition parameterCondition,
+            t1.save_table_name saveTableName
+        FROM
+            mom_eam_predictive_work_plan_parameter t1
+        WHERE t1.del_flag = 0
+        <if test="params.planId != null and params.planId != ''">
+            and t1.work_plan_id = #{params.planId}
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="findParameterInfo"  parameterType="Map" resultType="org.jeecg.modules.eam.model.ParameterVo">
+        SELECT TOP 1
+            t1.CollectTime collectTime,
+            t1.${parameterCode} actualValue
+        FROM
+            [${saveTableName}] t1
+        WHERE
+            t1.${parameterCode} <![CDATA[ < ]]>  #{lowerLimitValue}
+            OR t1.${parameterCode} > #{upperLimitValue}
+        ORDER BY
+            t1.CollectTime DESC
+    </select>
+
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanSparePartMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanSparePartMapper.xml
new file mode 100644
index 0000000..f3c3450
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanSparePartMapper.xml
@@ -0,0 +1,79 @@
+<?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.PredictiveWorkPlanSparePartMapper">
+
+    <select id="pagePredictiveWorkPlanSparePart" parameterType="Map" resultType="Map">
+        SELECT
+        t1.*,
+        t1.actual_life actualLife,
+        t1.create_by createBy,
+        t1.life_warning lifeWarning,
+        t1.rated_life ratedLife,
+        t1.work_plan_id workPlanId,
+        t1.supporting_quantity supportingQuantity,
+        t1.spare_part_id sparePartId,
+        t2.num sparePartNum,
+        t2.name sparePartName,
+        t2.model sparePartModel,
+        t2.specification sparePartSpecification,
+        t3.name mainUnitName,
+        t2.constructor_id constructorId,
+        t4.name constructorName
+        FROM mom_eam_predictive_work_plan_spare_part t1
+        LEFT JOIN mom_eam_spare_part t2 ON t1.spare_part_id = t2.id
+        LEFT JOIN mom_base_unit t3 ON t2.main_unit_id = t3.id
+        LEFT JOIN mom_base_constructor t4 ON t4.id = t2.constructor_id
+        WHERE t1.del_flag = 0 and t2.del_flag = 0
+        <if test="params.planId != null and params.planId != ''">
+            and t1.work_plan_id = #{params.planId}
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="listPredictiveWorkPlanSparePart" resultType="org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart">
+        SELECT
+            t1.id,
+            t1.spare_part_id sparePartId,
+            t1.supporting_quantity supportingQuantity,
+            t1.rated_life ratedLife,
+            t1.life_warning lifeWarning,
+            t1.actual_life actualLife,
+            t1.work_plan_id workPlanId,
+            t2.equipment_id equipmentId,
+	        t3.num mdcEquipmentId
+        FROM
+        mom_eam_predictive_work_plan_spare_part t1
+        LEFT JOIN mom_eam_predictive_work_plan t2 ON t1.work_plan_id = t2.id
+        LEFT JOIN mom_eam_equipment t3 ON t3.id = t2.equipment_id
+        WHERE
+        t1.del_flag = 0 and t1.work_plan_id = #{predictiveWorkPlanId}
+    </select>
+
+    <select id="listMaintenanceOrderActualMaterial"
+            resultType="org.jeecg.modules.eam.entity.MaintenanceOrderActualMaterial">
+       SELECT
+            t1.id,
+            t1.create_time createTime
+        FROM
+            mom_eam_maintenance_order_actual_material t1
+        WHERE
+            t1.equipment_id = #{equipmentId}
+            AND t1.spare_part_id = #{sparePartId}
+            AND t1.del_flag = 0
+        ORDER BY
+            t1.create_time DESC
+    </select>
+
+    <select id="listMdcEquipmentRunningSectionVo" resultType="org.jeecg.modules.eam.model.MdcEquipmentRunningSectionVo">
+          select t1.equipment_id equipmentId,
+            t1.duration,
+            t1.start_time startTime,
+            t1.start_long startLong,
+            t1.start_time startTime,
+            t1.start_long startLong
+--             鐘舵��,0:鍏虫満,1:寮�鏈�,2:寰呮満,3:宸ヤ綔,22:鎶ヨ
+        from mdc_equipment_running_section t1  where t1.status IN (1,2,3,22) t1.equipment_id = #{mdcEquipmentId} order by start_time desc
+    </select>
+
+
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanWarnMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanWarnMapper.xml
new file mode 100644
index 0000000..74a9b7c
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/PredictiveWorkPlanWarnMapper.xml
@@ -0,0 +1,84 @@
+<?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.PredictiveWorkPlanWarnMapper">
+
+    <select id="listPredictiveWorkPlanWarn" parameterType="Map"
+            resultType="org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn">
+        SELECT MAX(t1.AlarmNo) warnCode,
+        MAX (t1.AlarmContent) warnName,
+        max(t1.EquipmentID) mdcEquipmentId
+        FROM
+        EquipmentAlarm t1
+        LEFT JOIN Equipment t2 ON t2.EquipmentID = t1.EquipmentID
+        LEFT JOIN mom_eam_equipment t3 ON t3.num = t2.EquipmentID
+        WHERE t3.id = #{params.equipmentId} AND t1.AlarmNo <![CDATA[ <> ]]>  ''
+        <if test="params.warnCode != null and params.warnCode != ''">
+            and t1.AlarmNo = concat('%',#{params.warnCode},'%')
+        </if>
+        <if test="params.warnName != null and params.warnName != ''">
+            and t1.AlarmContent = concat('%',#{params.warnName},'%')
+        </if>
+        GROUP BY t1.AlarmNo, t1.AlarmContent, t1.EquipmentID
+    </select>
+
+    <select id="pagePredictiveWorkPlanWarn" parameterType="Map" resultType="Map">
+        SELECT
+        t1.id,
+        t1.work_plan_id workPlanId,
+        t1.parameter_condition parameterCondition,
+        t1.warn_id warnId,
+        t1.warn_code warnCode,
+        t1.warn_name warnName,
+        t1.warn_cycle warnCycle,
+        t1.cycle_unit cycleUnit,
+        t1.times,
+        t2.item_text conditionalRelationName,
+        t3.item_text cycleUnitName
+        FROM
+        mom_eam_predictive_work_plan_warn t1
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'conditional_relation' ) t2 ON t2.item_value =
+        t1.parameter_condition
+        LEFT JOIN ( SELECT * FROM v_sys_dict WHERE dict_code = 'warn_cycle_unit' ) t3 ON t3.item_value = t1.cycle_unit
+        WHERE
+        t1.del_flag = 0
+        <if test="params.planId != null and params.planId != ''">
+            and t1.work_plan_id = #{params.planId}
+        </if>
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="listWarn" resultType="org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn">
+        SELECT
+        t1.id,
+        t1.work_plan_id workPlanId,
+        t1.parameter_condition parameterCondition,
+        t1.warn_id warnId,
+        t1.warn_code warnCode,
+        t1.warn_name warnName,
+        t1.warn_cycle warnCycle,
+        t1.cycle_unit cycleUnit,
+        t1.times,
+        t1.mdc_equipment_id mdcEquipmentId
+        FROM
+        mom_eam_predictive_work_plan_warn t1
+        WHERE
+        t1.del_flag = 0 and t1.work_plan_id = #{predictiveWorkPlanId}
+        ORDER BY t1.create_time desc
+    </select>
+
+    <select id="findWarnInfo" resultType="org.jeecg.modules.eam.model.MdcEquipmentAlarmVo">
+        SELECT TOP ${times}
+            t1.EquipmentID equipmentId,
+            t1.collectTime,
+            t1.AlarmNo,
+            t1.AlarmContent
+        FROM
+            EquipmentAlarm t1
+        WHERE
+            t1.EquipmentID = #{mdcEquipmentId}
+            AND t1.AlarmNo = #{warnCode}
+        ORDER BY
+            t1.collectTime DESC
+    </select>
+
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/RepairOrderDetailMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/RepairOrderDetailMapper.xml
index f08dc78..d2bb029 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/RepairOrderDetailMapper.xml
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/RepairOrderDetailMapper.xml
@@ -15,4 +15,12 @@
 		WHERE
 			 repair_order_id = #{mainId}
 	</select>
+
+	<select id="pageRepairOrderDetailByMainId"  resultType="org.jeecg.modules.eam.entity.RepairOrderDetail">
+		SELECT *
+		FROM  mom_eam_repair_order_detail
+		WHERE
+			 repair_order_id = #{params.mainId}
+	</select>
+
 </mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentAlarmVo.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentAlarmVo.java
new file mode 100644
index 0000000..1eb9284
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentAlarmVo.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MdcEquipmentAlarmVo {
+    private String equipmentId;
+    private Date collectTime;
+    private String alarmNo;
+    private String alarmContent;
+    private String isexamine;
+    private String iseffective;
+    private Date examinetime;
+    private String examineperson;
+    private String remark;
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentRunningSectionVo.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentRunningSectionVo.java
new file mode 100644
index 0000000..5a36f47
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/MdcEquipmentRunningSectionVo.java
@@ -0,0 +1,74 @@
+package org.jeecg.modules.eam.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class MdcEquipmentRunningSectionVo {
+
+    /**
+     * 璁惧缂栧彿
+     */
+    @Excel(name = "璁惧缂栧彿", width = 15)
+    @ApiModelProperty(value = "璁惧缂栧彿")
+    private String equipmentId;
+
+    /**
+     * 鏃堕暱
+     */
+    @Excel(name = "鏃堕暱", width = 15)
+    @ApiModelProperty(value = "鏃堕暱")
+    private Long duration;
+    /**
+     * 鐘舵��,0:鍏虫満,1:寮�鏈�,2:寰呮満,3:宸ヤ綔,22:鎶ヨ
+     */
+    @Excel(name = "鐘舵��,0:鍏虫満,1:寮�鏈�,2:寰呮満,3:宸ヤ綔,22:鎶ヨ", width = 15)
+    @ApiModelProperty(value = "鐘舵��,0:鍏虫満,1:寮�鏈�,2:寰呮満,3:宸ヤ綔,22:鎶ヨ")
+    private Integer status;
+    /**
+     * 绋嬪簭鍙�
+     */
+    @Excel(name = "绋嬪簭鍙�", width = 15)
+    @ApiModelProperty(value = "绋嬪簭鍙�")
+    private String sequenceNumber;
+    /**
+     * beltLine
+     */
+    @Excel(name = "beltLine", width = 15)
+    @ApiModelProperty(value = "beltLine")
+    private String beltLine;
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @Excel(name = "寮�濮嬫椂闂�", width = 20, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date startTime;
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @Excel(name = "缁撴潫鏃堕棿", width = 20, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endTime;
+    /**
+     * 寮�濮嬫椂闂存埑
+     */
+    @Excel(name = "寮�濮嬫椂闂存埑", width = 15)
+    @ApiModelProperty(value = "寮�濮嬫椂闂存埑")
+    private Long startLong;
+    /**
+     * 缁撴潫鏃堕棿鎴�
+     */
+    @Excel(name = "缁撴潫鏃堕棿鎴�", width = 15)
+    @ApiModelProperty(value = "缁撴潫鏃堕棿鎴�")
+    private Long endLong;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/ParameterVo.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/ParameterVo.java
new file mode 100644
index 0000000..bda5fcf
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/ParameterVo.java
@@ -0,0 +1,30 @@
+package org.jeecg.modules.eam.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class ParameterVo {
+
+    private String workPlanId;
+
+    private String parameterId;
+
+    private String parameterCode;
+
+    private String parameterName;
+
+    private float upperLimitValue;
+
+    private float lowerLimitValue;
+
+    private float actualValue;
+
+    private String parameterCondition;
+
+    private String saveTableName;
+
+    private Date collectTime;
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkOrderService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkOrderService.java
new file mode 100644
index 0000000..86d6cfa
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkOrderService.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkOrder;
+
+import java.util.Map;
+
+public interface IPredictiveWorkOrderService extends IService<PredictiveWorkOrder> {
+
+    public IPage<Map<String, Object>> pageOrderList(Integer pageNo, Integer pageSize, Map<String, Object> params);
+
+    /**
+     *鏂板 宸ュ崟
+     */
+    public boolean add(PredictiveWorkOrder predictiveWorkOrder);
+
+//    /**
+//     *缂栬緫 涓撲笟淇濆吇宸ュ崟
+//     */
+//    boolean edit(SpecialtyMaintenanceOrder specialtyMaintenanceOrder);
+
+//    /**
+//     *鏀规淳 涓撲笟淇濆伐鍗�
+//     */
+//    boolean assign(SpecialtyMaintenanceOrder specialtyMaintenanceOrder);
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterHistoryService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterHistoryService.java
new file mode 100644
index 0000000..19cda1a
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterHistoryService.java
@@ -0,0 +1,8 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameterHistory;
+
+public interface IPredictiveWorkPlanParameterHistoryService extends IService<PredictiveWorkPlanParameterHistory> {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterService.java
new file mode 100644
index 0000000..e869120
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanParameterService.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鍙傛暟
+public interface IPredictiveWorkPlanParameterService extends IService<PredictiveWorkPlanParameter> {
+
+    public List<PredictiveWorkPlanParameter> listPredictiveWorkPlanParameter(Map<String, Object> params);
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanParameter(Integer pageNo, Integer pageSize, Map<String, Object> params);
+
+    public void createParameterWorkPlan();
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanService.java
new file mode 100644
index 0000000..edb4914
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗�
+public interface IPredictiveWorkPlanService extends IService<PredictiveWorkPlan> {
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlan(Integer pageNo, Integer pageSize, Map<String, Object> params);
+
+    public List<PredictiveWorkPlan> listWorkPlan(String monitorType);
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanSparePartService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanSparePartService.java
new file mode 100644
index 0000000..d207ade
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanSparePartService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢瀵垮懡
+public interface IPredictiveWorkPlanSparePartService extends IService<PredictiveWorkPlanSparePart> {
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanSparePart(Integer pageNo, Integer pageSize, Map<String, Object> params);
+
+    public void createSparePartWorkPlan();
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnHistoryService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnHistoryService.java
new file mode 100644
index 0000000..b581060
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnHistoryService.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarnHistory;
+
+import java.util.Map;
+
+public interface IPredictiveWorkPlanWarnHistoryService extends IService<PredictiveWorkPlanWarnHistory> {
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnService.java
new file mode 100644
index 0000000..4e34f59
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IPredictiveWorkPlanWarnService.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.eam.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn;
+
+import java.util.List;
+import java.util.Map;
+
+//棰勬祴鎬х淮鎶ゆ柟妗� 瑙﹀彂鏉′欢鎶ヨ
+public interface IPredictiveWorkPlanWarnService extends IService<PredictiveWorkPlanWarn> {
+
+    public List<PredictiveWorkPlanWarn> listPredictiveWorkPlanWarn(Map<String, Object> params);
+
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanWarn(Integer pageNo, Integer pageSize, Map<String, Object> params);
+
+    public void createWarnWorkPlan();
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderDetailService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderDetailService.java
index 9a97bb2..9315817 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderDetailService.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IRepairOrderDetailService.java
@@ -1,8 +1,10 @@
 package org.jeecg.modules.eam.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.jeecg.modules.eam.entity.RepairOrderDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 缁翠慨鍐呭
@@ -19,4 +21,6 @@
    * @return List<RepairOrderDetail>
    */
 	public List<RepairOrderDetail> selectByMainId(String mainId);
+
+    public IPage<RepairOrderDetail> pageRepairOrderDetailByMainId(Integer pageNo, Integer pageSize, Map<String, Object> params);
 }
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkOrderServiceImpl.java
new file mode 100644
index 0000000..d2ca4c5
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkOrderServiceImpl.java
@@ -0,0 +1,171 @@
+package org.jeecg.modules.eam.service.impl;
+
+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.ibatis.annotations.Select;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.mapper.InspectionCycleMapper;
+import org.jeecg.modules.eam.mapper.PredictiveWorkOrderMapper;
+import org.jeecg.modules.eam.mapper.SpecialtyMaintenanceOrderMapper;
+import org.jeecg.modules.eam.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PredictiveWorkOrderServiceImpl extends ServiceImpl<PredictiveWorkOrderMapper, PredictiveWorkOrder> implements IPredictiveWorkOrderService {
+
+    @Override
+    public IPage<Map<String, Object>> pageOrderList(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        return super.getBaseMapper().pageOrderList(pageData, params) ;
+    }
+
+//    @Autowired
+//    private ISpecialtyMaintenancePlanService specialtyMaintenancePlanService;
+//
+//    @Autowired
+//    private IMaintenanceCycleService maintenanceCycleService;
+//
+//    @Autowired
+//    private ISpecialtyMaintenancePlanDetailService specialtyMaintenancePlanDetailService;
+//
+//    @Autowired
+//    private ISpecialtyMaintenanceOrderDetailService specialtyMaintenanceOrderDetailService;
+//
+    @Override
+    public boolean add(PredictiveWorkOrder predictiveWorkOrder) {
+        String predictiveWorkOrderStr = super.getBaseMapper().getOrderNum("PredictiveWorkOrder") ;
+        String num = "YCWH" + DateUtils.date2Str(DateUtils.yyyyMMdd.get()) + predictiveWorkOrderStr;
+        predictiveWorkOrder.setNum(num);
+        predictiveWorkOrder.setCreateType("2");
+        return super.save(predictiveWorkOrder);
+//
+//        Date planStartTime = specialtyMaintenanceOrder.getPlanStartTime();
+//        String specialtyMaintenancePlanId = specialtyMaintenanceOrder.getSpecialtyMaintenancePlanId();
+//        SpecialtyMaintenancePlan specialtyMaintenancePlan = specialtyMaintenancePlanService.getById(specialtyMaintenancePlanId);
+////        String departId = specialtyMaintenancePlan.getDepartId();
+//        String maintenanceMode = specialtyMaintenancePlan.getMaintenanceMode();
+//        String maintenanceCycleId = specialtyMaintenancePlan.getMaintenanceCycleId();
+//        MaintenanceCycle maintenanceCycle = maintenanceCycleService.getById(maintenanceCycleId);
+//        String unit = maintenanceCycle.getUnit();
+//        BigDecimal effectiveTime = maintenanceCycle.getEffectiveTime();
+//
+//        Date date = null;
+//        if("min".equals(unit)){
+//            date = DateUtils.getMinAfter(planStartTime, effectiveTime.intValue());
+//        }else if("hour".equals(unit)){
+//            date = DateUtils.getHourAfter(planStartTime, effectiveTime.intValue());
+//        }else if("day".equals(unit)){
+//            date = DateUtils.getDayAfter(planStartTime, effectiveTime.intValue());
+//        }
+//
+//        specialtyMaintenanceOrder.setPlanEndTime(date);
+//        specialtyMaintenanceOrder.setCreateType("1");//鍒涘缓绫诲瀷锛�1鎵嬪姩鍒涘缓锛�2鑷姩鍒涘缓锛�
+//        boolean b = super.save(specialtyMaintenanceOrder);
+//        if(!b){
+//            return false;
+//        }
+
+//        List<SpecialtyMaintenancePlanDetail> specialtyMaintenancePlanDetails = specialtyMaintenancePlanDetailService.lambdaQuery()
+//                .eq(SpecialtyMaintenancePlanDetail::getSpecialtyMaintenancePlanId, specialtyMaintenancePlanId)
+//                .eq(SpecialtyMaintenancePlanDetail::getDelFlag, 0).list();
+//
+//        for (SpecialtyMaintenancePlanDetail specialtyMaintenancePlanDetail : specialtyMaintenancePlanDetails) {
+//            String specialtyMaintenancePlanDetailId = specialtyMaintenancePlanDetail.getId();
+//            String equipmentId = specialtyMaintenancePlanDetail.getEquipmentId();
+//            String maintenanceStandardId = specialtyMaintenancePlanDetail.getMaintenanceStandardId();
+//
+//            SpecialtyMaintenanceOrderDetail specialtyMaintenanceOrderDetail = null;
+//            List<Map<String, Object>> maintenanceProjectList = this.baseMapper.getMaintenanceProjectList(maintenanceCycleId,maintenanceMode,maintenanceStandardId);
+//            for (Map<String, Object> maintenanceProject : maintenanceProjectList) {
+//                specialtyMaintenanceOrderDetail = new SpecialtyMaintenanceOrderDetail();
+//                specialtyMaintenanceOrderDetail.setSpecialtyMaintenanceOrderId(specialtyMaintenanceOrder.getId());
+//                specialtyMaintenanceOrderDetail.setMaintenanceStandardId(maintenanceStandardId);
+//                specialtyMaintenanceOrderDetail.setMaintenanceStandardDetailId((String)maintenanceProject.get("id"));
+//                specialtyMaintenanceOrderDetail.setEquipmentId(equipmentId);
+//                specialtyMaintenanceOrderDetail.setSpecialtyMaintenancePlanDetailId(specialtyMaintenancePlanDetailId);
+//                specialtyMaintenanceOrderDetail.setMaintenanceProjectId((String)maintenanceProject.get("maintenanceProjectId"));
+//                specialtyMaintenanceOrderDetailService.save(specialtyMaintenanceOrderDetail);
+//            }
+//        }
+    }
+
+//    @Override
+//    @Transactional(rollbackFor = { Exception.class })
+//    public boolean edit(SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//
+//        Date planStartTime = specialtyMaintenanceOrder.getPlanStartTime();
+//        String specialtyMaintenancePlanId = specialtyMaintenanceOrder.getSpecialtyMaintenancePlanId();
+//        SpecialtyMaintenancePlan specialtyMaintenancePlan = specialtyMaintenancePlanService.getById(specialtyMaintenancePlanId);
+//        String maintenanceMode = specialtyMaintenancePlan.getMaintenanceMode();
+//        String maintenanceCycleId = specialtyMaintenancePlan.getMaintenanceCycleId();
+//        MaintenanceCycle maintenanceCycle = maintenanceCycleService.getById(maintenanceCycleId);
+//        String unit = maintenanceCycle.getUnit();
+//        BigDecimal effectiveTime = maintenanceCycle.getEffectiveTime();
+//
+//        Date date = null;
+//        if("min".equals(unit)){
+//            date = DateUtils.getMinAfter(planStartTime, effectiveTime.intValue());
+//        }else if("hour".equals(unit)){
+//            date = DateUtils.getHourAfter(planStartTime, effectiveTime.intValue());
+//        }else if("day".equals(unit)){
+//            date = DateUtils.getDayAfter(planStartTime, effectiveTime.intValue());
+//        }
+//
+//        specialtyMaintenanceOrder.setPlanEndTime(date);
+//        specialtyMaintenanceOrder.setCreateType("1");//鍒涘缓绫诲瀷锛�1鎵嬪姩鍒涘缓锛�2鑷姩鍒涘缓锛�
+//        boolean b = super.updateById(specialtyMaintenanceOrder);
+//        if(!b){
+//            return false;
+//        }
+//
+//        List<SpecialtyMaintenanceOrderDetail> specialtyMaintenanceOrderDetails = specialtyMaintenanceOrderDetailService.lambdaQuery().eq(SpecialtyMaintenanceOrderDetail::getSpecialtyMaintenanceOrderId, specialtyMaintenanceOrder.getId()).eq(SpecialtyMaintenanceOrderDetail::getDelFlag, 0).list();
+//        for (SpecialtyMaintenanceOrderDetail specialtyMaintenanceOrderDetail : specialtyMaintenanceOrderDetails) {
+//            specialtyMaintenanceOrderDetailService.removeById(specialtyMaintenanceOrderDetail);
+//        }
+//
+//        List<SpecialtyMaintenancePlanDetail> specialtyMaintenancePlanDetails = specialtyMaintenancePlanDetailService.lambdaQuery()
+//                .eq(SpecialtyMaintenancePlanDetail::getSpecialtyMaintenancePlanId, specialtyMaintenancePlanId)
+//                .eq(SpecialtyMaintenancePlanDetail::getDelFlag, 0).list();
+//
+//        for (SpecialtyMaintenancePlanDetail specialtyMaintenancePlanDetail : specialtyMaintenancePlanDetails) {
+//            String specialtyMaintenancePlanDetailId = specialtyMaintenancePlanDetail.getId();
+//            String equipmentId = specialtyMaintenancePlanDetail.getEquipmentId();
+//            String maintenanceStandardId = specialtyMaintenancePlanDetail.getMaintenanceStandardId();
+//
+//            SpecialtyMaintenanceOrderDetail specialtyMaintenanceOrderDetail = null;
+//            List<Map<String, Object>> maintenanceProjectList = this.baseMapper.getMaintenanceProjectList(maintenanceCycleId,maintenanceMode,maintenanceStandardId);
+//            for (Map<String, Object> maintenanceProject : maintenanceProjectList) {
+//                specialtyMaintenanceOrderDetail = new SpecialtyMaintenanceOrderDetail();
+//                specialtyMaintenanceOrderDetail.setSpecialtyMaintenanceOrderId(specialtyMaintenanceOrder.getId());
+//                specialtyMaintenanceOrderDetail.setMaintenanceStandardId(maintenanceStandardId);
+//                specialtyMaintenanceOrderDetail.setMaintenanceStandardDetailId((String)maintenanceProject.get("id"));
+//                specialtyMaintenanceOrderDetail.setEquipmentId(equipmentId);
+//                specialtyMaintenanceOrderDetail.setSpecialtyMaintenancePlanDetailId(specialtyMaintenancePlanDetailId);
+//                specialtyMaintenanceOrderDetail.setMaintenanceProjectId((String)maintenanceProject.get("maintenanceProjectId"));
+//                specialtyMaintenanceOrderDetailService.save(specialtyMaintenanceOrderDetail);
+//            }
+//        }
+//
+//        return true;
+//    }
+
+//    @Override
+//    public boolean assign(SpecialtyMaintenanceOrder specialtyMaintenanceOrder) {
+//       specialtyMaintenanceOrder.setStatus("3");
+//        boolean b1 = super.updateById(specialtyMaintenanceOrder);
+//        if(!b1){
+//            return false;
+//        }
+//        return true;
+//    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterHistoryServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterHistoryServiceImpl.java
new file mode 100644
index 0000000..c845f30
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterHistoryServiceImpl.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameterHistory;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanParameterHistoryMapper;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanParameterHistoryService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PredictiveWorkPlanParameterHistoryServiceImpl extends ServiceImpl<PredictiveWorkPlanParameterHistoryMapper, PredictiveWorkPlanParameterHistory>
+        implements IPredictiveWorkPlanParameterHistoryService {
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterServiceImpl.java
new file mode 100644
index 0000000..00c9b6a
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanParameterServiceImpl.java
@@ -0,0 +1,140 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.base.entity.JeecgEntity;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.eam.entity.PredictiveWorkOrder;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameter;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanParameterHistory;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanParameterMapper;
+import org.jeecg.modules.eam.model.ParameterVo;
+import org.jeecg.modules.eam.service.IPredictiveWorkOrderService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanParameterHistoryService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanParameterService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanService;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PredictiveWorkPlanParameterServiceImpl extends ServiceImpl<PredictiveWorkPlanParameterMapper, PredictiveWorkPlanParameter> implements IPredictiveWorkPlanParameterService {
+
+    @Autowired
+    private IPredictiveWorkPlanService predictiveWorkPlanService;
+
+    @Autowired
+    private IPredictiveWorkPlanParameterHistoryService predictiveWorkPlanParameterHistoryService;
+
+    @Autowired
+    private IPredictiveWorkOrderService predictiveWorkOrderService;
+
+    @Override
+    public List<PredictiveWorkPlanParameter> listPredictiveWorkPlanParameter(Map<String, Object> params) {
+        return super.baseMapper.listPredictiveWorkPlanParameter(params);
+    }
+
+    @Override
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanParameter(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        return super.baseMapper.pagePredictiveWorkPlanParameter(pageData, params);
+    }
+
+    //    1.鏌ヨ閰嶇疆鐨� 鍙傛暟瑙﹀彂鏉′欢
+    //    2.鏌ヨ璁惧鐨勫弬鏁�
+    //    3.鐢熸垚缁存姢宸ュ崟
+    @Override
+    public void createParameterWorkPlan() {
+        List<PredictiveWorkPlan> PredictiveWorkPlanList = predictiveWorkPlanService.listWorkPlan("cskz");
+        for (PredictiveWorkPlan predictiveWorkPlan : PredictiveWorkPlanList) {
+            //鏂规瀵瑰簲鐨勫弬鏁颁俊鎭�
+            List<PredictiveWorkPlanParameter> predictiveWorkPlanParameterList = listParameter(predictiveWorkPlan.getId());
+            boolean needCreateFlag = false;
+            int needCreateFlagTimes = 0;
+            //澶勭悊姣忎竴涓厤缃�
+            for (PredictiveWorkPlanParameter predictiveWorkPlanParameter : predictiveWorkPlanParameterList) {
+                ParameterVo parameterVo = this.findParameterInfo(predictiveWorkPlanParameter.getSaveTableName(), predictiveWorkPlanParameter.getLowerLimitValue(),
+                        predictiveWorkPlanParameter.getUpperLimitValue(), predictiveWorkPlanParameter.getParameterCode());
+                if (isNewParameter(predictiveWorkPlan.getId(), parameterVo.getCollectTime())) {
+                    predictiveWorkPlanParameter.setActualValue(parameterVo.getActualValue());
+                    predictiveWorkPlanParameter.setCollectTime(parameterVo.getCollectTime());
+                    needCreateFlagTimes++;
+                }
+            }
+            if ("and".equals(predictiveWorkPlanParameterList.get(0).getParameterCondition())) {
+                if (needCreateFlagTimes == predictiveWorkPlanParameterList.size()) {
+                    needCreateFlag = true;
+                }
+            } else if ("or".equals(predictiveWorkPlanParameterList.get(0).getParameterCondition())) {
+                if (needCreateFlagTimes > 0) {
+                    needCreateFlag = true;
+                }
+            }
+            if (needCreateFlag) {
+                //鐢熸垚宸ュ崟 ,灏嗗弬鏁颁俊鎭浠�
+                this.createOrder(predictiveWorkPlan.getId(), predictiveWorkPlan.getEquipmentId());
+                this.backInfo(predictiveWorkPlan.getId(), predictiveWorkPlanParameterList);
+            }
+        }
+    }
+
+    private void createOrder(String workPlanId, String equipmentId) {
+        PredictiveWorkOrder predictiveWorkOrder = new PredictiveWorkOrder();
+        predictiveWorkOrder.setWorkPlanId(workPlanId);
+        predictiveWorkOrder.setEquipmentId(equipmentId);
+        predictiveWorkOrderService.add(predictiveWorkOrder);
+    }
+
+    private void backInfo(String workPlanId, List<PredictiveWorkPlanParameter> predictiveWorkPlanParameterList) {
+        List<PredictiveWorkPlanParameterHistory> list = new ArrayList<>();
+        for (PredictiveWorkPlanParameter predictiveWorkPlanParameter : predictiveWorkPlanParameterList) {
+            PredictiveWorkPlanParameterHistory predictiveWorkPlanParameterHistory = new PredictiveWorkPlanParameterHistory();
+            predictiveWorkPlanParameterHistory.setWorkPlanId(workPlanId);
+            predictiveWorkPlanParameterHistory.setParameterId(predictiveWorkPlanParameter.getParameterId());
+            predictiveWorkPlanParameterHistory.setParameterCode(predictiveWorkPlanParameter.getParameterCode());
+            predictiveWorkPlanParameterHistory.setParameterName(predictiveWorkPlanParameter.getParameterName());
+            predictiveWorkPlanParameterHistory.setUpperLimitValue(predictiveWorkPlanParameter.getUpperLimitValue());
+            predictiveWorkPlanParameterHistory.setLowerLimitValue(predictiveWorkPlanParameter.getLowerLimitValue());
+            predictiveWorkPlanParameterHistory.setActualValue(predictiveWorkPlanParameter.getActualValue());
+            predictiveWorkPlanParameterHistory.setParameterCondition(predictiveWorkPlanParameter.getParameterCondition());
+            predictiveWorkPlanParameterHistory.setCollectTime(predictiveWorkPlanParameter.getCollectTime());
+            list.add(predictiveWorkPlanParameterHistory);
+        }
+        predictiveWorkPlanParameterHistoryService.saveBatch(list);
+    }
+
+
+    private boolean isNewParameter(String workPlanId, Date collectTime) {
+        LambdaQueryChainWrapper<PredictiveWorkPlanParameterHistory> lambdaQuery = predictiveWorkPlanParameterHistoryService.lambdaQuery();
+        lambdaQuery.eq(PredictiveWorkPlanParameterHistory::getWorkPlanId, workPlanId);
+        lambdaQuery.eq(PredictiveWorkPlanParameterHistory::getCollectTime, collectTime);
+        List<PredictiveWorkPlanParameterHistory> list = lambdaQuery.list();
+        if (list != null && list.size() > 0) {
+            return false;
+        }
+        return true;
+    }
+
+    private ParameterVo findParameterInfo(String saveTableName, float lowerLimitValue, float upperLimitValue, String parameterCode) {
+        return this.getBaseMapper().findParameterInfo(saveTableName, lowerLimitValue, upperLimitValue, parameterCode);
+    }
+
+    private List<PredictiveWorkPlanParameter> listParameter(String predictiveWorkPlanId) {
+        return this.getBaseMapper().listParameter(predictiveWorkPlanId);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanServiceImpl.java
new file mode 100644
index 0000000..11e9384
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanServiceImpl.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanMapper;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PredictiveWorkPlanServiceImpl extends ServiceImpl<PredictiveWorkPlanMapper, PredictiveWorkPlan> implements IPredictiveWorkPlanService {
+
+    @Override
+    public IPage<Map<String, Object>> pagePredictiveWorkPlan(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        return super.baseMapper.pagePredictiveWorkPlan(pageData,params);
+    }
+
+    @Override
+    public List<PredictiveWorkPlan> listWorkPlan(String monitorType) {
+        LambdaQueryChainWrapper<PredictiveWorkPlan> lambdaQuery = this.lambdaQuery();
+        lambdaQuery.eq(PredictiveWorkPlan::getDelFlag,0);
+        lambdaQuery.eq(PredictiveWorkPlan::getMonitorType,monitorType);
+        return lambdaQuery.list();
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanSparePartServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanSparePartServiceImpl.java
new file mode 100644
index 0000000..e1ba978
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanSparePartServiceImpl.java
@@ -0,0 +1,112 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.MaintenanceOrderActualMaterial;
+import org.jeecg.modules.eam.entity.PredictiveWorkOrder;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanSparePart;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanSparePartMapper;
+import org.jeecg.modules.eam.model.MdcEquipmentRunningSectionVo;
+import org.jeecg.modules.eam.service.IPredictiveWorkOrderService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanSparePartService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import sun.reflect.generics.tree.ArrayTypeSignature;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PredictiveWorkPlanSparePartServiceImpl extends ServiceImpl<PredictiveWorkPlanSparePartMapper, PredictiveWorkPlanSparePart> implements IPredictiveWorkPlanSparePartService {
+
+    @Autowired
+    private IPredictiveWorkPlanService predictiveWorkPlanService;
+
+    @Autowired
+    private IPredictiveWorkOrderService predictiveWorkOrderService;
+
+    @Override
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanSparePart(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        return super.getBaseMapper().pagePredictiveWorkPlanSparePart(pageData, params);
+    }
+
+    //    1.鏌ヨ閰嶇疆鐨� 澶囦欢瑙﹀彂鏉′欢
+    //    2.鑾峰彇澶囦欢鐨勭殑瀹為檯瀵垮懡    璁惧寮�鏈烘椂闂� - 鎹欢鏃堕棿 锛堣澶囧紑鏈烘椂闂翠俊鎭埅姝㈠埌鏄ㄦ棩锛�
+    //    3.鍒ゆ柇瀹為檯瀵垮懡鏄惁澶т簬鎺у埗瀵垮懡锛屽苟鐢熸垚缁存姢宸ュ崟
+    @Override
+    public void createSparePartWorkPlan() {
+        List<PredictiveWorkPlan> predictiveWorkPlanList = predictiveWorkPlanService.listWorkPlan("bjkz");
+        for (PredictiveWorkPlan predictiveWorkPlan : predictiveWorkPlanList) {
+            List<PredictiveWorkPlanSparePart> predictiveWorkPlanSparePartList = listPredictiveWorkPlanSparePart(predictiveWorkPlan.getId());
+            for (PredictiveWorkPlanSparePart predictiveWorkPlanSparePart : predictiveWorkPlanSparePartList) {
+                Date replacementTime = findReplacementTime(predictiveWorkPlanSparePart.getEquipmentId(), predictiveWorkPlanSparePart.getSparePartId());
+                predictiveWorkPlanSparePart.setReplacementTime(replacementTime);
+                long actualLife = findActualLife(predictiveWorkPlanSparePart.getMdcEquipmentId(), replacementTime);
+                predictiveWorkPlanSparePart.setActualLife(actualLife);
+                if (actualLife > predictiveWorkPlanSparePart.getLifeWarning()) {
+                    //1.鍒ゆ柇鏄惁鐢熸垚缁存姢宸ュ崟锛� 2.鐢熸垚缁存姢宸ュ崟
+                    this.createOrder(predictiveWorkPlan.getId(), predictiveWorkPlan.getEquipmentId(), predictiveWorkPlanSparePart.getId());
+                }
+            }
+        }
+    }
+
+    //娌℃湁瀵瑰簲鐨勭淮鎶ゅ伐鍗曞氨鐢熸垚宸ュ崟
+    private void createOrder(String workPlanId, String equipmentId, String itemId) {
+        LambdaQueryChainWrapper<PredictiveWorkOrder> lambdaQuery = predictiveWorkOrderService.lambdaQuery();
+        lambdaQuery.eq(PredictiveWorkOrder::getEquipmentId, equipmentId).eq(PredictiveWorkOrder::getItemId, itemId).eq(PredictiveWorkOrder::getWorkPlanId, workPlanId);
+        //宸插垱寤� 0     宸蹭笅鍙�	1	 鏈紑濮�	2	 鎵ц涓�	3
+        lambdaQuery.in(PredictiveWorkOrder::getStatus, Arrays.asList(new String[]{"0", "1", "2", "3"}));
+        lambdaQuery.eq(PredictiveWorkOrder::getDelFlag, 0);
+        List<PredictiveWorkOrder> list = lambdaQuery.list();
+        if (list == null || list.size() == 0) {
+            PredictiveWorkOrder predictiveWorkOrder = new PredictiveWorkOrder();
+            predictiveWorkOrder.setItemId(itemId);
+            predictiveWorkOrder.setEquipmentId(equipmentId);
+            predictiveWorkOrder.setWorkPlanId(workPlanId);
+            predictiveWorkOrderService.add(predictiveWorkOrder);
+        }
+    }
+
+    //鏌ヨ閰嶇疆鐨� 澶囦欢瑙﹀彂鏉′欢
+    public List<PredictiveWorkPlanSparePart> listPredictiveWorkPlanSparePart(String predictiveWorkPlanId) {
+        return super.getBaseMapper().listPredictiveWorkPlanSparePart(predictiveWorkPlanId);
+    }
+
+    //鏈�鍚庢崲浠舵椂闂�
+    public Date findReplacementTime(String equipmentId, String sparePartId) {
+        List<MaintenanceOrderActualMaterial> maintenanceOrderActualMaterialList = super.getBaseMapper().listMaintenanceOrderActualMaterial(equipmentId, sparePartId);
+        if (maintenanceOrderActualMaterialList.size() > 0) {
+            return maintenanceOrderActualMaterialList.get(0).getCreateTime();
+        }
+        return new Date();
+    }
+
+    //瀹為檯瀵垮懡
+    //1.鍊掑簭璁惧鐘舵��
+    //2.绱姞璁惧闈炲叧鏈虹殑鏃堕棿 褰撹澶囩姸鎬佺殑寮�濮嬫椂闂村皬浜庢崲浠舵椂闂� 鎴栬�� 鎹欢鏃堕棿浠嬩簬璁惧鐘舵�佺殑寮�濮嬫椂闂村拰缁撴潫鏃堕棿涔嬮棿鐨勬暟鎹悗锛屽仠姝㈢疮鍔�
+    //3.鎹㈢畻鍗曚綅涓哄皬鏃�
+    public long findActualLife(String mdcEquipmentId, Date replacementTime) {
+        long actualLife = 0l;
+        long replacementTimeLong = replacementTime.getTime();
+        List<MdcEquipmentRunningSectionVo> mdcEquipmentRunningSectionVoList = super.getBaseMapper().listMdcEquipmentRunningSectionVo(mdcEquipmentId);
+        for (MdcEquipmentRunningSectionVo temp : mdcEquipmentRunningSectionVoList) {
+            if (replacementTimeLong < temp.getStartLong()) {
+                actualLife = actualLife + temp.getDuration();
+            } else if (replacementTimeLong >= temp.getStartLong() && replacementTimeLong <= temp.getEndLong()) {
+                actualLife = actualLife + (temp.getEndLong() - replacementTimeLong);
+            } else {
+                continue;
+            }
+        }
+        return actualLife / 60 / 60;
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnHistoryServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnHistoryServiceImpl.java
new file mode 100644
index 0000000..24c4892
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnHistoryServiceImpl.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarnHistory;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanWarnHistoryMapper;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanWarnHistoryService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PredictiveWorkPlanWarnHistoryServiceImpl extends ServiceImpl<PredictiveWorkPlanWarnHistoryMapper, PredictiveWorkPlanWarnHistory> implements IPredictiveWorkPlanWarnHistoryService {
+
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnServiceImpl.java
new file mode 100644
index 0000000..c1356f1
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/PredictiveWorkPlanWarnServiceImpl.java
@@ -0,0 +1,148 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.swagger.annotations.ApiModelProperty;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.modules.eam.entity.PredictiveWorkOrder;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlan;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarn;
+import org.jeecg.modules.eam.entity.PredictiveWorkPlanWarnHistory;
+import org.jeecg.modules.eam.mapper.PredictiveWorkPlanWarnMapper;
+import org.jeecg.modules.eam.model.MdcEquipmentAlarmVo;
+import org.jeecg.modules.eam.service.IPredictiveWorkOrderService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanWarnHistoryService;
+import org.jeecg.modules.eam.service.IPredictiveWorkPlanWarnService;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+public class PredictiveWorkPlanWarnServiceImpl extends ServiceImpl<PredictiveWorkPlanWarnMapper, PredictiveWorkPlanWarn> implements IPredictiveWorkPlanWarnService {
+
+    @Autowired
+    private IPredictiveWorkPlanService predictiveWorkPlanService;
+
+    @Autowired
+    private IPredictiveWorkOrderService predictiveWorkOrderService;
+
+    @Autowired
+    private IPredictiveWorkPlanWarnHistoryService predictiveWorkPlanWarnHistoryService;
+
+    @Override
+    public List<PredictiveWorkPlanWarn> listPredictiveWorkPlanWarn(Map<String, Object> params) {
+        return super.baseMapper.listPredictiveWorkPlanWarn(params);
+    }
+
+    @Override
+    public IPage<Map<String, Object>> pagePredictiveWorkPlanWarn(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        return super.baseMapper.pagePredictiveWorkPlanWarn(pageData, params);
+    }
+
+    //    1.閫氳繃棰勬祴鎬ф柟妗� 鏌ヨ閰嶇疆鐨� 鎶ヨ瑙﹀彂鏉′欢
+    //    2.鍊掑簭鍙朜鏉℃暟鎹紝鍒ゆ柇棣栧熬涓ゆ潯鏁版嵁鏄惁鍦ㄦ姤璀︽潯浠跺懆鏈熷唴
+    //    3.鍒ゆ柇鏄惁鐢熶骇缁存姢宸ュ崟锛屽苟鐢熸垚缁存姢宸ュ崟
+    @Override
+    public void createWarnWorkPlan() {
+        List<PredictiveWorkPlan> predictiveWorkPlanList = predictiveWorkPlanService.listWorkPlan("bjkz");
+        for (PredictiveWorkPlan predictiveWorkPlan : predictiveWorkPlanList) {
+            List<PredictiveWorkPlanWarn> predictiveWorkPlanWarnList = listPredictiveWorkPlanWarn(predictiveWorkPlan.getId());
+            //鏂规瀵瑰簲鐨勫憡璀︿俊鎭�
+            boolean needWarnFlag = false;
+            int needWarnFlagTimes = 0;
+            List<MdcEquipmentAlarmVo> insertList = new ArrayList<>();
+            for (PredictiveWorkPlanWarn predictiveWorkPlanWarn : predictiveWorkPlanWarnList) {
+                List<MdcEquipmentAlarmVo> mdcEquipmentAlarmVoList = this.findWarnInfo(predictiveWorkPlanWarn.getMdcEquipmentId(),
+                        predictiveWorkPlanWarn.getTimes(), predictiveWorkPlanWarn.getWarnCode());
+                if (mdcEquipmentAlarmVoList.size() >= predictiveWorkPlanWarn.getTimes() &&
+                        isTimeInWarnCycle(predictiveWorkPlanWarn.getWarnCycle(), predictiveWorkPlanWarn.getCycleUnit(),
+                                mdcEquipmentAlarmVoList.get(0).getCollectTime(), mdcEquipmentAlarmVoList.get(mdcEquipmentAlarmVoList.size() - 1).getCollectTime())) {
+                    insertList.addAll(mdcEquipmentAlarmVoList);
+                    needWarnFlagTimes++;
+                }
+            }
+            if ("and".equals(predictiveWorkPlanWarnList.get(0).getParameterCondition())) {
+                if (needWarnFlagTimes == predictiveWorkPlanWarnList.size()) {
+                    needWarnFlag = true;
+                }
+            } else if ("or".equals(predictiveWorkPlanWarnList.get(0).getParameterCondition())) {
+                if (needWarnFlagTimes > 0) {
+                    needWarnFlag = true;
+                }
+            }
+            if (needWarnFlag) {
+                //鍒ゆ柇鏄惁鐢熸垚宸ュ崟 ,灏嗘姤璀︿俊鎭浠�
+                boolean flag = this.createOrder(predictiveWorkPlan.getId(), predictiveWorkPlan.getEquipmentId());
+                if (flag) {
+                    this.backInfo(predictiveWorkPlan.getId(), insertList);
+                }
+            }
+        }
+    }
+
+    private void backInfo(String workPlanId, List<MdcEquipmentAlarmVo> predictiveWorkPlanWarnList) {
+        List<PredictiveWorkPlanWarnHistory> list = new ArrayList<>();
+        for (MdcEquipmentAlarmVo mdcEquipmentAlarmVo : predictiveWorkPlanWarnList) {
+            PredictiveWorkPlanWarnHistory predictiveWorkPlanWarnHistory = new PredictiveWorkPlanWarnHistory();
+            predictiveWorkPlanWarnHistory.setWorkPlanId(workPlanId);
+            predictiveWorkPlanWarnHistory.setWarnId(mdcEquipmentAlarmVo.getAlarmNo());
+            predictiveWorkPlanWarnHistory.setWarnCode(mdcEquipmentAlarmVo.getAlarmNo());
+            predictiveWorkPlanWarnHistory.setWarnName(mdcEquipmentAlarmVo.getAlarmContent());
+            predictiveWorkPlanWarnHistory.setCollectTime(mdcEquipmentAlarmVo.getCollectTime());
+            list.add(predictiveWorkPlanWarnHistory);
+        }
+        predictiveWorkPlanWarnHistoryService.saveBatch(list);
+    }
+
+    private boolean createOrder(String workPlanId, String equipmentId) {
+        LambdaQueryChainWrapper<PredictiveWorkOrder> lambdaQuery = predictiveWorkOrderService.lambdaQuery();
+        lambdaQuery.eq(PredictiveWorkOrder::getWorkPlanId, workPlanId).eq(PredictiveWorkOrder::getEquipmentId, equipmentId);
+        //宸插垱寤� 0     宸蹭笅鍙�	1	 鏈紑濮�	2	 鎵ц涓�	3
+        lambdaQuery.in(PredictiveWorkOrder::getStatus, Arrays.asList(new String[]{"0", "1", "2", "3"}));
+        lambdaQuery.eq(PredictiveWorkOrder::getDelFlag, 0);
+        List<PredictiveWorkOrder> list = lambdaQuery.list();
+        if (list == null || list.size() == 0) {
+            PredictiveWorkOrder predictiveWorkOrder = new PredictiveWorkOrder();
+            predictiveWorkOrder.setEquipmentId(equipmentId);
+            predictiveWorkOrder.setWorkPlanId(workPlanId);
+            predictiveWorkOrderService.add(predictiveWorkOrder);
+            return true;
+        }
+        return false;
+    }
+
+    //鍗曚綅缁熶竴鎹㈢畻涓虹
+    private boolean isTimeInWarnCycle(int warnCycle, String cycleUnit, Date endCollectTime, Date startCollectTime) {
+        long warnCycleSecond = 0l;
+        if ("minute".equals(cycleUnit)) {
+            warnCycleSecond = warnCycle * 60;
+        } else if ("hour".equals(cycleUnit)) {
+            warnCycleSecond = warnCycle * 60 * 60;
+        } else if ("day".equals(cycleUnit)) {
+            warnCycleSecond = warnCycle * 60 * 60 * 24;
+        }
+        long startCollectTimeLong = startCollectTime.getTime();
+        long endCollectTimeLong = endCollectTime.getTime();
+        if ((endCollectTimeLong - startCollectTimeLong) <= warnCycleSecond) {
+            return true;
+        }
+        return false;
+    }
+
+    private List<MdcEquipmentAlarmVo> findWarnInfo(String mdcEquipmentId, int times, String warnCode) {
+        return this.getBaseMapper().findWarnInfo(mdcEquipmentId, times, warnCode);
+    }
+
+    //鏂规瀵瑰簲鐨勫憡璀︽潯浠堕厤缃�
+    private List<PredictiveWorkPlanWarn> listPredictiveWorkPlanWarn(String predictiveWorkPlanId) {
+        return this.getBaseMapper().listWarn(predictiveWorkPlanId);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderDetailServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderDetailServiceImpl.java
index 0620715..fe4cdde 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderDetailServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/RepairOrderDetailServiceImpl.java
@@ -1,10 +1,14 @@
 package org.jeecg.modules.eam.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.eam.entity.RepairOrderDetail;
 import org.jeecg.modules.eam.mapper.RepairOrderDetailMapper;
 import org.jeecg.modules.eam.service.IRepairOrderDetailService;
 import org.springframework.stereotype.Service;
 import java.util.List;
+import java.util.Map;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -24,4 +28,10 @@
 	public List<RepairOrderDetail> selectByMainId(String mainId) {
 		return repairOrderDetailMapper.selectByMainId(mainId);
 	}
+
+	@Override
+	public IPage<RepairOrderDetail> pageRepairOrderDetailByMainId(Integer pageNo, Integer pageSize, Map<String, Object> params) {
+		IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+		return super.baseMapper.pageRepairOrderDetailByMainId(pageData, params);
+	}
 }

--
Gitblit v1.9.3