Quellcode durchsuchen

添加导入导出

hfy vor 4 Monaten
Ursprung
Commit
890aae0c2d
36 geänderte Dateien mit 1753 neuen und 174 gelöschten Zeilen
  1. 19 12
      src/main/java/com/jeesite/modules/mes/entity/MesDevice.java
  2. 11 3
      src/main/java/com/jeesite/modules/mes/entity/MesDeviceAlarm.java
  3. 12 4
      src/main/java/com/jeesite/modules/mes/entity/MesDeviceCate.java
  4. 4 4
      src/main/java/com/jeesite/modules/mes/entity/MesDeviceConsumable.java
  5. 14 5
      src/main/java/com/jeesite/modules/mes/entity/MesDevicePrevent.java
  6. 20 10
      src/main/java/com/jeesite/modules/mes/entity/MesDevicePreventTask.java
  7. 23 12
      src/main/java/com/jeesite/modules/mes/entity/MesDeviceUrgency.java
  8. 10 3
      src/main/java/com/jeesite/modules/mes/entity/MesMaterialCk.java
  9. 8 2
      src/main/java/com/jeesite/modules/mes/entity/MesMaterialKw.java
  10. 12 0
      src/main/java/com/jeesite/modules/mes/entity/MesRepairItems.java
  11. 25 0
      src/main/java/com/jeesite/modules/mes/entity/excel/ExcelMesDevicePreventTask.java
  12. 28 0
      src/main/java/com/jeesite/modules/mes/entity/excel/ExcelMesDeviceUrgency.java
  13. 101 10
      src/main/java/com/jeesite/modules/mes/web/MesDeviceAlarmController.java
  14. 101 10
      src/main/java/com/jeesite/modules/mes/web/MesDeviceCateController.java
  15. 28 17
      src/main/java/com/jeesite/modules/mes/web/MesDeviceConsumableController.java
  16. 101 12
      src/main/java/com/jeesite/modules/mes/web/MesDevicePreventController.java
  17. 115 11
      src/main/java/com/jeesite/modules/mes/web/MesDevicePreventTaskController.java
  18. 185 13
      src/main/java/com/jeesite/modules/mes/web/MesDeviceUrgencyController.java
  19. 100 8
      src/main/java/com/jeesite/modules/mes/web/MesMaterialCkController.java
  20. 89 12
      src/main/java/com/jeesite/modules/mes/web/MesMaterialController.java
  21. 100 10
      src/main/java/com/jeesite/modules/mes/web/MesMaterialKwController.java
  22. 92 0
      src/main/java/com/jeesite/modules/mes/web/MesRepairItemsController.java
  23. 55 1
      src/main/resources/views/modules/mes/mesDeviceAlarmList.html
  24. 55 1
      src/main/resources/views/modules/mes/mesDeviceCateList.html
  25. 3 3
      src/main/resources/views/modules/mes/mesDeviceClientList.html
  26. 2 2
      src/main/resources/views/modules/mes/mesDeviceConsumableRecordList.html
  27. 2 2
      src/main/resources/views/modules/mes/mesDeviceList.html
  28. 55 1
      src/main/resources/views/modules/mes/mesDevicePreventList.html
  29. 55 1
      src/main/resources/views/modules/mes/mesDevicePreventTaskList.html
  30. 7 0
      src/main/resources/views/modules/mes/mesDevicePreventTaskMyList.html
  31. 55 1
      src/main/resources/views/modules/mes/mesDeviceUrgencyList.html
  32. 55 1
      src/main/resources/views/modules/mes/mesDeviceUrgencyMyList.html
  33. 54 0
      src/main/resources/views/modules/mes/mesMaterialCkList.html
  34. 54 0
      src/main/resources/views/modules/mes/mesMaterialKwList.html
  35. 48 2
      src/main/resources/views/modules/mes/mesMaterialList.html
  36. 55 1
      src/main/resources/views/modules/mes/mesRepairItemsList.html

+ 19 - 12
src/main/java/com/jeesite/modules/mes/entity/MesDevice.java

@@ -1,21 +1,17 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.util.Date;
-import com.jeesite.common.mybatis.annotation.JoinTable;
-import com.jeesite.common.mybatis.annotation.JoinTable.Type;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.entity.TreeEntity;
 import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
 import com.jeesite.common.utils.excel.annotation.ExcelField;
-import com.jeesite.common.utils.excel.annotation.ExcelField.Align;
 import com.jeesite.common.utils.excel.annotation.ExcelFields;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
 /**
  * 设备Entity
  * @author mes
@@ -79,7 +75,18 @@ public class MesDevice extends TreeEntity<MesDevice> {
 
 	private String lineSn;
 	private String deviceCode;
-
+	@ExcelFields({
+			@ExcelField(title="设备名称", attrName="treeName", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="唯一编号", attrName="sn", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="设备识别码", attrName="sn", align= ExcelField.Align.CENTER, sort=40),
+			@ExcelField(title="分类", attrName="cateName", align= ExcelField.Align.CENTER, sort=50),
+			@ExcelField(title="IP地址", attrName="ip", align= ExcelField.Align.CENTER, sort=60),
+			@ExcelField(title="产线编号", attrName="lineSn", align= ExcelField.Align.CENTER, sort=70),
+			@ExcelField(title="工位", attrName="gw", align= ExcelField.Align.CENTER, sort=80),
+			@ExcelField(title="设备工作状态", attrName="workStatus",dictType="mes_device_work_status", align= ExcelField.Align.CENTER, sort=90),
+			@ExcelField(title="状态", attrName="workStatus",dictType="mes_device_work_status", align= ExcelField.Align.CENTER, sort=100),
+			@ExcelField(title="备注", attrName="remark", align= ExcelField.Align.CENTER, sort=110),
+	})
 	public String getPostion() {
 		return postion;
 	}
@@ -153,11 +160,11 @@ public class MesDevice extends TreeEntity<MesDevice> {
 	}
 
 
-	@ExcelFields({
+/*	@ExcelFields({
 		@ExcelField(title="规格型号", attrName="spec", align=Align.CENTER, sort=30),
 		@ExcelField(title="制造商", attrName="company", align=Align.CENTER, sort=40),
 		@ExcelField(title="出场日期", attrName="outdate", align=Align.CENTER, sort=50, dataFormat="yyyy-MM-dd"),
-	})
+	})*/
 	public MesDevice() {
 		this(null);
 	}

+ 11 - 3
src/main/java/com/jeesite/modules/mes/entity/MesDeviceAlarm.java

@@ -1,13 +1,14 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
 import java.util.Date;
 
 /**
@@ -36,6 +37,13 @@ public class MesDeviceAlarm extends DataEntity<MesDeviceAlarm> {
 	private String content;		// 报警额外参数
 	private String state;		// 状态
 	private String remark;		// 备注
+	@ExcelFields({
+			@ExcelField(title="设备编号", attrName="deviceSn", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="报警类型", attrName="type", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="报警额外参数", attrName="content",align= ExcelField.Align.CENTER, sort=40),
+			@ExcelField(title="状态", attrName="state",dictType = "mes_device_alarm_state",align= ExcelField.Align.CENTER, sort=40),
+			@ExcelField(title="备注", attrName="remark",align= ExcelField.Align.CENTER, sort=40),
+	})
 
 	public MesDeviceAlarm() {
 		this(null);

+ 12 - 4
src/main/java/com/jeesite/modules/mes/entity/MesDeviceCate.java

@@ -1,12 +1,14 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
 
 /**
  * 设备分类Entity
@@ -29,7 +31,13 @@ public class MesDeviceCate extends DataEntity<MesDeviceCate> {
 	private static final long serialVersionUID = 1L;
 	private String title;		// 名称
 	private String remark;		// 备注
-
+	@ExcelFields({
+			@ExcelField(title="名称", attrName="title", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="创建时间", attrName="createDate", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="更新时间", attrName="updateDate", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="备注", attrName="remark", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="状态", attrName="status", dictType="mes_device_sort",align= ExcelField.Align.CENTER, sort=40),
+	})
 	public MesDeviceCate() {
 		this(null);
 	}

+ 4 - 4
src/main/java/com/jeesite/modules/mes/entity/MesDeviceConsumable.java

@@ -1,8 +1,5 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.Table;
@@ -11,6 +8,9 @@ import com.jeesite.common.utils.excel.annotation.ExcelField;
 import com.jeesite.common.utils.excel.annotation.ExcelField.Align;
 import com.jeesite.common.utils.excel.annotation.ExcelFields;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
 /**
  * 易耗品Entity
  * @author mes
@@ -33,7 +33,7 @@ public class MesDeviceConsumable extends DataEntity<MesDeviceConsumable> {
 	private String remark;		// 备注
 
 	@ExcelFields({
-		@ExcelField(title="名称", attrName="title", align=Align.CENTER, sort=20),
+		@ExcelField(title="易耗品", attrName="title", align=Align.CENTER, sort=20),
 		@ExcelField(title="备注", attrName="remark", align=Align.CENTER, sort=30),
 	})
 	public MesDeviceConsumable() {

+ 14 - 5
src/main/java/com/jeesite/modules/mes/entity/MesDevicePrevent.java

@@ -1,15 +1,17 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.util.List;
 import com.jeesite.common.collect.ListUtils;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.List;
 
 /**
  * 预防性维修任务清单Entity
@@ -37,6 +39,13 @@ public class MesDevicePrevent extends DataEntity<MesDevicePrevent> {
 	private String cycle;		// 周期
 	private String laborHour;		// 工时
 	private List<MesDevicePreventForm> mesDevicePreventFormList = ListUtils.newArrayList();		// 子表列表
+	@ExcelFields({
+			@ExcelField(title="名称", attrName="title", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="技术类型", attrName="cate", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="周期", attrName="cycle", align= ExcelField.Align.CENTER, sort=40),
+			@ExcelField(title="工时", attrName="laborHour", align= ExcelField.Align.CENTER, sort=50),
+			@ExcelField(title="状态", attrName="status", dictType="mes_device_sort",align= ExcelField.Align.CENTER, sort=60),
+	})
 
 	public MesDevicePrevent() {
 		this(null);

+ 20 - 10
src/main/java/com/jeesite/modules/mes/entity/MesDevicePreventTask.java

@@ -1,22 +1,23 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.util.Date;
-import java.util.List;
-
-import com.jeesite.common.collect.ListUtils;
-import com.jeesite.common.mybatis.annotation.JoinTable;
-import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import javax.validation.constraints.NotNull;
-
+import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
 import com.jeesite.modules.sys.entity.User;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 预防性维修计划Entity
  * @author hzd
@@ -69,6 +70,15 @@ public class MesDevicePreventTask extends DataEntity<MesDevicePreventTask> {
 	private String preventTitle;
 	private String deviceName;
 	private String userName;
+	@ExcelFields({
+			@ExcelField(title="任务清单", attrName="preventTitle", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="执行人员", attrName="userName", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="设备", attrName="deviceName", align= ExcelField.Align.CENTER, sort=40),
+			@ExcelField(title="任务开始时间", attrName="startDate", align= ExcelField.Align.CENTER, sort=50),
+			@ExcelField(title="任务结束时间", attrName="endDate", align= ExcelField.Align.CENTER, sort=60),
+			@ExcelField(title="提交内容", attrName="content", align= ExcelField.Align.CENTER, sort=70),
+			@ExcelField(title="状态", attrName="state", dictType="mes_device_prevent_task_status",align= ExcelField.Align.CENTER, sort=80),
+	})
 
 	private List<MesDeviceConsumableRecord> mesDeviceConsumableRecordList = ListUtils.newArrayList();
 

+ 23 - 12
src/main/java/com/jeesite/modules/mes/entity/MesDeviceUrgency.java

@@ -1,23 +1,22 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
-import java.util.Date;
-import java.util.List;
-
-import com.jeesite.common.collect.ListUtils;
-import com.jeesite.common.lang.StringUtils;
-import com.jeesite.common.mybatis.annotation.JoinTable;
-import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import javax.validation.constraints.NotNull;
-
+import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
+import com.jeesite.common.mybatis.annotation.JoinTable;
+import com.jeesite.common.mybatis.annotation.JoinTable.Type;
 import com.jeesite.common.mybatis.annotation.Table;
-import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
 import com.jeesite.modules.sys.entity.User;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 紧急性维修记录Entity
  * @author hzd
@@ -83,6 +82,18 @@ public class MesDeviceUrgency extends DataEntity<MesDeviceUrgency> {
 	private String cateName;
 	private String userName;
 	private String alarmType;
+	@ExcelFields({
+			@ExcelField(title="设备名称", attrName="deviceName", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="工位号", attrName="oprno", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="设备类型", attrName="cateName", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="维修人员", attrName="userName", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="维修内容", attrName="content", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="开始时间", attrName="startDate", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="结束时间", attrName="endDate", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="状态", attrName="state", align= ExcelField.Align.CENTER, dictType ="mes_device_urgency_status",sort=20),
+			@ExcelField(title="备注", attrName="remark", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="维修时间", attrName="interval", align= ExcelField.Align.CENTER, sort=20),
+	})
 
 	private List<MesDeviceConsumableRecord> mesDeviceConsumableRecordList = ListUtils.newArrayList();
 

+ 10 - 3
src/main/java/com/jeesite/modules/mes/entity/MesMaterialCk.java

@@ -1,11 +1,13 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.Size;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+
+import javax.validation.constraints.Size;
 
 @Table(name="mes_material_ck", alias="a", label="仓库管理", columns={
 		@Column(name="id", attrName="id", label="id", isPK=true),
@@ -20,7 +22,12 @@ public class MesMaterialCk extends DataEntity<MesMaterialCk> {
 	
 	private static final long serialVersionUID = 1L;
 	private String ckName;
-
+	@ExcelFields({
+			@ExcelField(title="仓库名称", attrName="ckName", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="创建人", attrName="createBy", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="创建时间", attrName="createDate", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="更新人", attrName="updateBy", align= ExcelField.Align.CENTER, sort=30),
+	})
 	public MesMaterialCk() {
 		this(null);
 	}

+ 8 - 2
src/main/java/com/jeesite/modules/mes/entity/MesMaterialKw.java

@@ -1,12 +1,14 @@
 package com.jeesite.modules.mes.entity;
 
-import javax.validation.constraints.Size;
-
 import com.jeesite.common.entity.DataEntity;
 import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.JoinTable;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+
+import javax.validation.constraints.Size;
 
 @Table(name="mes_material_kw", alias="a", label="来料检查物料库位表信息", columns={
 		@Column(name="id", attrName="id", label="id", isPK=true),
@@ -30,6 +32,10 @@ public class MesMaterialKw extends DataEntity<MesMaterialKw> {
 	private String title;
 	private String ckId;
 	private String ckName;
+	@ExcelFields({
+			@ExcelField(title="库位名称", attrName="title", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="所属仓库", attrName="ckName", align= ExcelField.Align.CENTER, sort=30),
+	})
 
 	public MesMaterialKw() {
 		this(null);

+ 12 - 0
src/main/java/com/jeesite/modules/mes/entity/MesRepairItems.java

@@ -5,6 +5,8 @@ import com.jeesite.common.mybatis.annotation.Column;
 import com.jeesite.common.mybatis.annotation.JoinTable;
 import com.jeesite.common.mybatis.annotation.Table;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
@@ -57,6 +59,16 @@ public class MesRepairItems extends DataEntity<MesRepairItems> {
 	private String oprnoName;
 	private String isCp;
 	private String isYl;
+	@ExcelFields({
+			@ExcelField(title="产线编号", attrName="lineSn", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="返修原因", attrName="title", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="返工动作介绍", attrName="introduction", align= ExcelField.Align.CENTER, sort=20),
+			@ExcelField(title="检验要点", attrName="inspectionPoints", align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="返工类型", attrName="type", dictType = "mes_repair_type",align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="是否重做气密", attrName="isCp",dictType = "sys_yes_no",align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="是否重做液冷气密", attrName="isYl", dictType = "sys_yes_no",align= ExcelField.Align.CENTER, sort=30),
+			@ExcelField(title="状态", attrName="status", dictType="mes_device_sort",align= ExcelField.Align.CENTER, sort=40),
+	})
 
 	public String getOprnoName() {
 		return oprnoName;

+ 25 - 0
src/main/java/com/jeesite/modules/mes/entity/excel/ExcelMesDevicePreventTask.java

@@ -0,0 +1,25 @@
+package com.jeesite.modules.mes.entity.excel;
+
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+import com.jeesite.modules.mes.entity.MesDevicePreventTask;
+
+/**
+ *
+ *
+ * @Author huang
+ * @Date 2026/6/4 2026/6/4
+ */
+public class ExcelMesDevicePreventTask extends MesDevicePreventTask {
+    @ExcelFields({
+            @ExcelField(title="任务清单", attrName="preventTitle", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="设备", attrName="deviceName", align= ExcelField.Align.CENTER, sort=30),
+            @ExcelField(title="任务开始时间", attrName="startDate", align= ExcelField.Align.CENTER, sort=40),
+            @ExcelField(title="任务结束时间", attrName="endDate", align= ExcelField.Align.CENTER, sort=50),
+            @ExcelField(title="提交内容", attrName="提交内容", align= ExcelField.Align.CENTER, sort=60),
+            @ExcelField(title="状态", attrName="state", dictType="mes_device_prevent_task_status",align= ExcelField.Align.CENTER, sort=80),
+    })
+    public ExcelMesDevicePreventTask() {
+        super();
+    }
+}

+ 28 - 0
src/main/java/com/jeesite/modules/mes/entity/excel/ExcelMesDeviceUrgency.java

@@ -0,0 +1,28 @@
+package com.jeesite.modules.mes.entity.excel;
+
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.utils.excel.annotation.ExcelFields;
+import com.jeesite.modules.mes.entity.MesDeviceUrgency;
+
+/**
+ *
+ *
+ * @Author huang
+ * @Date 2026/6/4 2026/6/4
+ */
+public class ExcelMesDeviceUrgency extends MesDeviceUrgency {
+    @ExcelFields({
+            @ExcelField(title="设备名称", attrName="deviceName", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="工位号", attrName="oprno", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="设备类型", attrName="cateName", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="维修内容", attrName="content", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="开始时间", attrName="startDate", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="结束时间", attrName="endDate", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="状态", attrName="state", align= ExcelField.Align.CENTER, dictType ="mes_device_urgency_status",sort=20),
+            @ExcelField(title="备注", attrName="remark", align= ExcelField.Align.CENTER, sort=20),
+            @ExcelField(title="维修时间", attrName="interval", align= ExcelField.Align.CENTER, sort=20),
+    })
+    public ExcelMesDeviceUrgency() {
+        super();
+    }
+}

+ 101 - 10
src/main/java/com/jeesite/modules/mes/web/MesDeviceAlarmController.java

@@ -1,17 +1,25 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.alibaba.fastjson.JSONValidator;
 import com.jeesite.common.codec.EncodeUtils;
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesDevice;
-import com.jeesite.modules.mes.entity.MesWarehouse;
+import com.jeesite.modules.mes.entity.MesDeviceAlarm;
+import com.jeesite.modules.mes.service.MesDeviceAlarmService;
 import com.jeesite.modules.mes.service.MesDeviceService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.util.ObjectUtils;
 import org.springframework.validation.annotation.Validated;
@@ -19,12 +27,13 @@ import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesDeviceAlarm;
-import com.jeesite.modules.mes.service.MesDeviceAlarmService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 /**
  * 设备报警记录Controller
@@ -134,4 +143,86 @@ public class MesDeviceAlarmController extends BaseController {
 		model.addAttribute("mesDeviceAlarm", mesDeviceAlarm);
 		return "modules/mes/mesDeviceAlarmSelect";
 	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesDeviceAlarm mesDeviceCate, HttpServletResponse response) {
+		List<MesDeviceAlarm> list = mesDeviceAlarmService.findList(mesDeviceCate);
+		String fileName = "设备报警记录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("设备报警记录", MesDeviceAlarm.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesDeviceAlarm mesDeviceCate = new MesDeviceAlarm();
+		List<MesDeviceAlarm> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "设备报警记录.xlsx";
+		try(ExcelExport ee = new ExcelExport("设备报警记录", MesDeviceAlarm.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDeviceAlarm> list = ei.getDataList(MesDeviceAlarm.class);
+			for (MesDeviceAlarm mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
+
 }

+ 101 - 10
src/main/java/com/jeesite/modules/mes/web/MesDeviceCateController.java

@@ -1,24 +1,34 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesDeviceCate;
+import com.jeesite.modules.mes.service.MesDeviceCateService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesDeviceCate;
-import com.jeesite.modules.mes.service.MesDeviceCateService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 /**
  * 设备分类Controller
@@ -117,5 +127,86 @@ public class MesDeviceCateController extends BaseController {
 		mesDeviceCateService.delete(mesDeviceCate);
 		return renderResult(Global.TRUE, text("删除设备分类成功!"));
 	}
-	
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesDeviceCate mesDeviceCate, HttpServletResponse response) {
+		List<MesDeviceCate> list = mesDeviceCateService.findList(mesDeviceCate);
+		String fileName = "设备分类" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("设备分类", MesDeviceCate.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesDeviceCate mesDeviceCate = new MesDeviceCate();
+		List<MesDeviceCate> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "设备分类.xlsx";
+		try(ExcelExport ee = new ExcelExport("设备分类", MesDeviceCate.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDeviceCate> list = ei.getDataList(MesDeviceCate.class);
+			for (MesDeviceCate mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
+
 }

+ 28 - 17
src/main/java/com/jeesite/modules/mes/web/MesDeviceConsumableController.java

@@ -1,14 +1,19 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.alibaba.fastjson.JSONValidator;
 import com.jeesite.common.codec.EncodeUtils;
-import com.jeesite.modules.mes.entity.MesDevice;
-import com.jeesite.modules.mes.entity.MesWarehouse;
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.annotation.ExcelField.Type;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesDeviceConsumable;
+import com.jeesite.modules.mes.entity.MesDeviceConsumableRecord;
 import com.jeesite.modules.mes.resp.CommonResp;
+import com.jeesite.modules.mes.service.MesDeviceConsumableRecordService;
+import com.jeesite.modules.mes.service.MesDeviceConsumableService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -18,17 +23,11 @@ import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-
-import com.jeesite.common.config.Global;
-import com.jeesite.common.collect.ListUtils;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.lang.DateUtils;
-import com.jeesite.common.utils.excel.ExcelExport;
-import com.jeesite.common.utils.excel.annotation.ExcelField.Type;
 import org.springframework.web.multipart.MultipartFile;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesDeviceConsumable;
-import com.jeesite.modules.mes.service.MesDeviceConsumableService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 易耗品Controller
@@ -105,7 +104,19 @@ public class MesDeviceConsumableController extends BaseController {
 			ee.setDataList(list).write(response, fileName);
 		}
 	}
-
+	/**
+	 * 使用记录导出数据
+	 */
+	@Autowired
+	private MesDeviceConsumableRecordService mesDeviceConsumableRecordService;
+	@RequestMapping(value = "exportDatajilu")
+	public void exportData(MesDeviceConsumableRecord mesDeviceConsumableRecord, HttpServletResponse response) {
+		List<MesDeviceConsumableRecord> list = mesDeviceConsumableRecordService.findList(mesDeviceConsumableRecord);
+		String fileName = "易耗品记录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("易耗品记录", MesDeviceConsumableRecord.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
 	/**
 	 * 下载模板
 	 */

+ 101 - 12
src/main/java/com/jeesite/modules/mes/web/MesDevicePreventController.java

@@ -1,28 +1,37 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.alibaba.fastjson.JSONValidator;
 import com.jeesite.common.codec.EncodeUtils;
-import com.jeesite.modules.mes.entity.MesWarehouse;
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesDevicePrevent;
+import com.jeesite.modules.mes.entity.MesDevicePreventForm;
+import com.jeesite.modules.mes.service.MesDevicePreventService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesDevicePrevent;
-import com.jeesite.modules.mes.entity.MesDevicePreventForm;
-import com.jeesite.modules.mes.service.MesDevicePreventService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 /**
  * 预防性维修任务清单Controller
@@ -144,5 +153,85 @@ public class MesDevicePreventController extends BaseController {
 		model.addAttribute("warehouse", mesDevicePrevent);
 		return "modules/mes/mesDevicePreventSelect";
 	}
-	
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesDevicePrevent mesDevicePrevent, HttpServletResponse response) {
+		List<MesDevicePrevent> list = mesDevicePreventService.findList(mesDevicePrevent);
+		String fileName = "预防性维修任务清单" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("预防性维修任务清单", MesDevicePrevent.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesDevicePrevent mesDeviceCate = new MesDevicePrevent();
+		List<MesDevicePrevent> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "预防性维修任务清单.xlsx";
+		try(ExcelExport ee = new ExcelExport("预防性维修任务清单", MesDevicePrevent.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDevicePrevent> list = ei.getDataList(MesDevicePrevent.class);
+			for (MesDevicePrevent mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 115 - 11
src/main/java/com/jeesite/modules/mes/web/MesDevicePreventTaskController.java

@@ -1,21 +1,25 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
 import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.collect.MapUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.ObjectUtils;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.mybatis.mapper.query.QueryType;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.file.entity.FileUpload;
 import com.jeesite.modules.file.service.FileUploadService;
 import com.jeesite.modules.mes.entity.*;
+import com.jeesite.modules.mes.entity.excel.ExcelMesDevicePreventTask;
 import com.jeesite.modules.mes.resp.CommonResp;
 import com.jeesite.modules.mes.service.*;
 import com.jeesite.modules.sys.entity.User;
@@ -24,16 +28,23 @@ import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 预防性维修计划Controller
@@ -305,5 +316,98 @@ public class MesDevicePreventTaskController extends BaseController {
 		resp.setResult(Global.TRUE);
 		return resp;
 	}
-	
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesDevicePreventTask mesDevicePreventTask, HttpServletResponse response) {
+		List<MesDevicePreventTask> list = mesDevicePreventTaskService.findList(mesDevicePreventTask);
+		String fileName = "预防性维修计划" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("预防性维修计划", MesDevicePreventTask.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData2")
+	public void exportData2(MesDevicePreventTask mesDevicePreventTask, HttpServletResponse response) {
+		List<MesDevicePreventTask> list = mesDevicePreventTaskService.findList(mesDevicePreventTask);
+		List<ExcelMesDevicePreventTask> list1 = BeanUtil.copyToList(list, ExcelMesDevicePreventTask.class);
+		String fileName = "我的维修计划" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("我的维修计划", ExcelMesDevicePreventTask.class)){
+			ee.setDataList(list1).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesDevicePreventTask mesDeviceCate = new MesDevicePreventTask();
+		List<MesDevicePreventTask> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "预防性维修计划.xlsx";
+		try(ExcelExport ee = new ExcelExport("预防性维修计划", MesDevicePreventTask.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDevicePreventTask> list = ei.getDataList(MesDevicePreventTask.class);
+			for (MesDevicePreventTask mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 185 - 13
src/main/java/com/jeesite/modules/mes/web/MesDeviceUrgencyController.java

@@ -1,42 +1,51 @@
 package com.jeesite.modules.mes.web;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.collect.MapUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
 import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.ObjectUtils;
 import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.file.entity.FileUpload;
 import com.jeesite.modules.file.service.FileUploadService;
-import com.jeesite.modules.mes.entity.*;
+import com.jeesite.modules.mes.entity.MesDevice;
+import com.jeesite.modules.mes.entity.MesDeviceConsumableRecord;
+import com.jeesite.modules.mes.entity.MesDeviceState;
+import com.jeesite.modules.mes.entity.MesDeviceUrgency;
+import com.jeesite.modules.mes.entity.excel.ExcelMesDeviceUrgency;
 import com.jeesite.modules.mes.resp.CommonResp;
-import com.jeesite.modules.mes.service.MesDeviceAlarmService;
 import com.jeesite.modules.mes.service.MesDeviceService;
 import com.jeesite.modules.mes.service.MesDeviceStateService;
+import com.jeesite.modules.mes.service.MesDeviceUrgencyService;
 import com.jeesite.modules.sys.entity.User;
-import com.jeesite.modules.sys.utils.DictUtils;
 import com.jeesite.modules.sys.utils.UserUtils;
 import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.service.MesDeviceUrgencyService;
-
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
 import java.util.List;
 import java.util.Map;
 
@@ -347,4 +356,167 @@ public class MesDeviceUrgencyController extends BaseController {
 		mesDeviceUrgencyService.pdasave(mesDeviceUrgency);
 		return renderResult(Global.TRUE, text("保存紧急性维修记录成功!"));
 	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesDeviceUrgency mesDeviceCate, HttpServletResponse response) {
+		List<MesDeviceUrgency> list = mesDeviceUrgencyService.findList(mesDeviceCate);
+		String fileName = " 紧急性维修记录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport(" 紧急性维修记录", MesDeviceUrgency.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesDeviceUrgency mesDeviceCate = new MesDeviceUrgency();
+		List<MesDeviceUrgency> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = " 紧急性维修记录.xlsx";
+		try(ExcelExport ee = new ExcelExport(" 紧急性维修记录", MesDeviceUrgency.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file,HttpServletRequest request) {
+		try {
+			String message = importData1(file,request);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file,HttpServletRequest request) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDeviceUrgency> list = ei.getDataList(MesDeviceUrgency.class);
+			for (MesDeviceUrgency mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck,request);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData1")
+	public void exportData1(MesDeviceUrgency mesDeviceCate, HttpServletResponse response) {
+		List<MesDeviceUrgency> list = mesDeviceUrgencyService.findList(mesDeviceCate);
+		List<ExcelMesDeviceUrgency> list1= BeanUtil.copyToList(list, ExcelMesDeviceUrgency.class);
+		String fileName = "我的维修记录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport(" 我的维修记录", ExcelMesDeviceUrgency.class)){
+			ee.setDataList(list1).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate1")
+	public void importTemplate1(HttpServletResponse response) {
+		ExcelMesDeviceUrgency mesDeviceCate = new ExcelMesDeviceUrgency();
+		List<ExcelMesDeviceUrgency> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = " 紧急性维修记录.xlsx";
+		try(ExcelExport ee = new ExcelExport(" 紧急性维修记录", ExcelMesDeviceUrgency.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData2")
+	public String importData2(MultipartFile file,HttpServletRequest request) {
+		try {
+			String message = importData3(file,request);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData3(MultipartFile file,HttpServletRequest request) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesDeviceUrgency> list = ei.getDataList(MesDeviceUrgency.class);
+			for (MesDeviceUrgency mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck,request);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 100 - 8
src/main/java/com/jeesite/modules/mes/web/MesMaterialCkController.java

@@ -1,23 +1,34 @@
 package com.jeesite.modules.mes.web;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesMaterialCk;
+import com.jeesite.modules.mes.service.MesMaterialCkService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesMaterialCk;
-import com.jeesite.modules.mes.service.MesMaterialCkService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 @Controller
 @RequestMapping(value = "${adminPath}/mes/mesMaterialCk")
@@ -69,4 +80,85 @@ public class MesMaterialCkController extends BaseController {
 		mesMaterialCkService.delete(mesMaterialCk);
 		return renderResult(Global.TRUE, text("删除仓库成功!"));
 	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesMaterialCk mesDeviceCate, HttpServletResponse response) {
+		List<MesMaterialCk> list = mesMaterialCkService.findList(mesDeviceCate);
+		String fileName = "仓库管理" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("仓库管理", MesMaterialCk.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesMaterialCk mesDeviceCate = new MesMaterialCk();
+		List<MesMaterialCk> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "仓库管理.xlsx";
+		try(ExcelExport ee = new ExcelExport("仓库管理", MesMaterialCk.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesMaterialCk> list = ei.getDataList(MesMaterialCk.class);
+			for (MesMaterialCk mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 89 - 12
src/main/java/com/jeesite/modules/mes/web/MesMaterialController.java

@@ -1,30 +1,36 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.alibaba.fastjson.JSONValidator;
 import com.jeesite.common.codec.EncodeUtils;
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
 import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
 import com.jeesite.common.utils.excel.ExcelExport;
-import com.jeesite.modules.mes.entity.MesDevicePrevent;
-import com.jeesite.modules.mes.entity.MesNg;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
+import com.jeesite.modules.mes.entity.MesMaterial;
+import com.jeesite.modules.mes.service.MesMaterialService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesMaterial;
-import com.jeesite.modules.mes.service.MesMaterialService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 /**
  * 物料表Controller
@@ -132,7 +138,7 @@ public class MesMaterialController extends BaseController {
 	public void exportData(MesMaterial mesMaterial, HttpServletResponse response) {
 		List<MesMaterial> list = mesMaterialService.findList(mesMaterial);
 		String fileName = "物料表" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
-		try(ExcelExport ee = new ExcelExport("物料表", MesNg.class)){
+		try(ExcelExport ee = new ExcelExport("物料表", MesMaterial.class)){
 			ee.setDataList(list).write(response, fileName);
 		}
 	}
@@ -147,4 +153,75 @@ public class MesMaterialController extends BaseController {
 		model.addAttribute("warehouse", mesMaterial);
 		return "modules/mes/mesMaterialSelect";
 	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesMaterial mesDeviceCate = new MesMaterial();
+		List<MesMaterial> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "物料表.xlsx";
+		try(ExcelExport ee = new ExcelExport("物料表", MesMaterial.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesMaterial> list = ei.getDataList(MesMaterial.class);
+			for (MesMaterial mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
+
 }

+ 100 - 10
src/main/java/com/jeesite/modules/mes/web/MesMaterialKwController.java

@@ -1,28 +1,37 @@
 package com.jeesite.modules.mes.web;
 
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.jeesite.common.collect.ListUtils;
+import com.jeesite.common.config.Global;
+import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
+import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesMaterialCk;
-import com.jeesite.modules.mes.entity.MesMaterialRkRecord;
+import com.jeesite.modules.mes.entity.MesMaterialKw;
 import com.jeesite.modules.mes.resp.CommonResp;
 import com.jeesite.modules.mes.service.MesMaterialCkService;
+import com.jeesite.modules.mes.service.MesMaterialKwService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
-import com.jeesite.common.config.Global;
-import com.jeesite.common.entity.Page;
-import com.jeesite.common.web.BaseController;
-import com.jeesite.modules.mes.entity.MesMaterialKw;
-import com.jeesite.modules.mes.service.MesMaterialKwService;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.util.List;
 
 @Controller
 @RequestMapping(value = "${adminPath}/mes/mesMaterialKw")
@@ -92,4 +101,85 @@ public class MesMaterialKwController extends BaseController {
 		resp.setResult(Global.TRUE);
 		return resp;
 	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesMaterialKw mesDeviceCate, HttpServletResponse response) {
+		List<MesMaterialKw> list = mesMaterialKwService.findList(mesDeviceCate);
+		String fileName = "物料库位" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport("物料库位", MesMaterialKw.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesMaterialKw mesDeviceCate = new MesMaterialKw();
+		List<MesMaterialKw> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = "物料库位.xlsx";
+		try(ExcelExport ee = new ExcelExport("物料库位", MesMaterialKw.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file) {
+		try {
+			String message = importData1(file);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesMaterialKw> list = ei.getDataList(MesMaterialKw.class);
+			for (MesMaterialKw mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 92 - 0
src/main/java/com/jeesite/modules/mes/web/MesRepairItemsController.java

@@ -1,8 +1,15 @@
 package com.jeesite.modules.mes.web;
 
+import com.jeesite.common.collect.ListUtils;
 import com.jeesite.common.config.Global;
 import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.StringUtils;
+import com.jeesite.common.service.ServiceException;
+import com.jeesite.common.utils.excel.ExcelExport;
+import com.jeesite.common.utils.excel.ExcelImport;
+import com.jeesite.common.utils.excel.annotation.ExcelField;
+import com.jeesite.common.validator.ValidatorUtils;
 import com.jeesite.common.web.BaseController;
 import com.jeesite.modules.mes.entity.MesRepairItems;
 import com.jeesite.modules.mes.resp.CommonResp;
@@ -11,15 +18,19 @@ import com.jeesite.modules.mes.util.CommonUitl;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
 import java.util.List;
 import java.util.Map;
 
@@ -187,4 +198,85 @@ public class MesRepairItemsController extends BaseController {
 		resp.setResult(Global.TRUE);
 		return resp;
 	}
+	/**
+	 * 导出数据
+	 */
+	@RequestMapping(value = "exportData")
+	public void exportData(MesRepairItems mesDeviceCate, HttpServletResponse response) {
+		List<MesRepairItems> list = mesRepairItemsService.findList(mesDeviceCate);
+		String fileName = " 返修问题清单" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+		try(ExcelExport ee = new ExcelExport(" 返修问题清单", MesRepairItems.class)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+	/**
+	 * 下载模板
+	 */
+	@RequestMapping(value = "importTemplate")
+	public void importTemplate(HttpServletResponse response) {
+		MesRepairItems mesDeviceCate = new MesRepairItems();
+		List<MesRepairItems> list = ListUtils.newArrayList(mesDeviceCate);
+		String fileName = " 返修问题清单.xlsx";
+		try(ExcelExport ee = new ExcelExport(" 返修问题清单", MesRepairItems.class, ExcelField.Type.IMPORT)){
+			ee.setDataList(list).write(response, fileName);
+		}
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@ResponseBody
+	@PostMapping(value = "importData")
+	public String importData(MultipartFile file, HttpServletRequest request) {
+		try {
+			String message = importData1(file,request);
+			return renderResult(Global.TRUE, "posfull:"+message);
+		} catch (Exception ex) {
+			return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
+		}
+	}
+	@Transactional
+	public String importData1(MultipartFile file,HttpServletRequest request) {
+		if (file == null){
+			throw new ServiceException(text("请选择导入的数据文件!"));
+		}
+		int successNum = 0; int failureNum = 0;
+		StringBuilder successMsg = new StringBuilder();
+		StringBuilder failureMsg = new StringBuilder();
+		try(ExcelImport ei = new ExcelImport(file, 2, 0)){
+			List<MesRepairItems> list = ei.getDataList(MesRepairItems.class);
+			for (MesRepairItems mesDeviceCheck : list) {
+				try{
+					ValidatorUtils.validateWithException(mesDeviceCheck);
+					this.save(mesDeviceCheck);
+					successNum++;
+					successMsg.append("<br/>" + successNum + "、编号 " + mesDeviceCheck.getId() + " 导入成功");
+				} catch (Exception e) {
+					failureNum++;
+					String msg = "<br/>" + failureNum + "、编号 " + mesDeviceCheck.getId() + " 导入失败:";
+					if (e instanceof ConstraintViolationException){
+						ConstraintViolationException cve = (ConstraintViolationException)e;
+						for (ConstraintViolation<?> violation : cve.getConstraintViolations()) {
+							msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")";
+						}
+					}else{
+						msg += e.getMessage();
+					}
+					failureMsg.append(msg);
+					logger.error(msg, e);
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			failureMsg.append(e.getMessage());
+			return failureMsg.toString();
+		}
+		if (failureNum > 0) {
+			failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+			throw new ServiceException(failureMsg.toString());
+		}else{
+			successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+		}
+		return successMsg.toString();
+	}
 }

+ 55 - 1
src/main/resources/views/modules/mes/mesDeviceAlarmList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDeviceAlarm:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesDeviceAlarm/form" class="btn btn-default btnTool" title="${text('新增设备报警记录')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -97,4 +99,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDeviceAlarm/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDeviceAlarm/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDeviceAlarm/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 55 - 1
src/main/resources/views/modules/mes/mesDeviceCateList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDeviceCate:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesDeviceCate/form" class="btn btn-default btnTool" title="${text('新增设备分类')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -78,4 +80,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDeviceCate/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDeviceCate/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDeviceCate/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 3 - 3
src/main/resources/views/modules/mes/mesDeviceClientList.html

@@ -7,9 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
-<!--				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>-->
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDeviceClient:edit')){ %>
-<!--						<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
+						<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesDeviceClient/form" class="btn btn-default btnTool" title="${text('新增工位设备信息记录')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -82,7 +82,7 @@ $('#dataGrid').dataGrid({
 	columnModel: [
 		{header:'${text("设备名称")}', name:'treeName', index:'a.tree_name', width:150, align:"center"},
 		{header:'${text("唯一编号")}', name:'sn', index:'a.sn', width:150, align:"center"},
-		{header:'${text("设备识别码")}', name:'deviceCode', index:'a.device_code', width:150, align:"center"},
+		/*{header:'${text("设备识别码")}', name:'deviceCode', index:'a.device_code', width:150, align:"center"},*/
 		{header:'${text("分类")}', name:'cateName', index:'b.title', width:150, align:"center"},
 		{header:'${text("产线编号")}', name:'lineSn', index:'a.line_sn', width:150, align:"center"},
 		{header:'${text("工位")}', name:'oprno', index:'a.oprno', width:150, align:"center"},

+ 2 - 2
src/main/resources/views/modules/mes/mesDeviceConsumableRecordList.html

@@ -7,7 +7,7 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
-
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
 			</div>
 		</div>
@@ -73,7 +73,7 @@ $('#dataGrid').dataGrid({
 </script><script>
 $('#btnExport').click(function(){
 	js.ajaxSubmitForm($('#searchForm'), {
-		url:'${ctx}/mes/mesDeviceConsumable/exportData',
+		url:'${ctx}/mes/mesDeviceConsumable/exportDatajilu',
 		downloadFile:true
 	});
 });

+ 2 - 2
src/main/resources/views/modules/mes/mesDeviceList.html

@@ -10,9 +10,9 @@
 				<a href="#" class="btn btn-default" id="btnRefreshTree" title="${text('刷新')}"><i class="fa fa-refresh"></i> ${text('刷新')}</a>
 <!--				<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="${text('展开一级')}"><i class="fa fa-angle-double-down"></i> ${text('展开')}</a>-->
 <!--				<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="${text('折叠全部')}"><i class="fa fa-angle-double-up"></i> ${text('折叠')}</a>-->
-<!--				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>-->
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDevice:edit')){ %>
-<!--						<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
+						<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesDevice/form" class="btn btn-default btnTool" title="${text('新增设备')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>

+ 55 - 1
src/main/resources/views/modules/mes/mesDevicePreventList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDevicePrevent:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesDevicePrevent/form" class="btn btn-default btnTool" title="${text('新增预防性维修任务清单')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -91,4 +93,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDevicePrevent/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDevicePrevent/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDevicePrevent/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 55 - 1
src/main/resources/views/modules/mes/mesDevicePreventTaskList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDevicePreventTask:edit')){ %>
+			<!--	<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
 					<a href="${ctx}/mes/mesDevicePreventTask/form" class="btn btn-default btnTool" title="${text('新增预防性维修计划')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -106,4 +108,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDevicePreventTask/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDevicePreventTask/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDevicePreventTask/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 7 - 0
src/main/resources/views/modules/mes/mesDevicePreventTaskMyList.html

@@ -7,6 +7,7 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDevicePreventTask:edit')){ %>
 <!--					<a href="${ctx}/mes/mesDevicePreventTask/myform" class="btn btn-default btnTool" title="${text('新增预防性维修计划')}"><i class="fa fa-plus"></i> ${text('新增')}</a>-->
 <!--				-->
@@ -104,4 +105,10 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDevicePreventTask/exportData2',
+		downloadFile:true
+	});
+});
 </script>

+ 55 - 1
src/main/resources/views/modules/mes/mesDeviceUrgencyList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDeviceUrgency:edit')){ %>
+				<!--<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
 					<a href="${ctx}/mes/mesDeviceUrgency/form" class="btn btn-default btnTool" title="${text('新增紧急性维修记录')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -113,4 +115,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDeviceUrgency/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDeviceUrgency/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDeviceUrgency/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 55 - 1
src/main/resources/views/modules/mes/mesDeviceUrgencyMyList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesDeviceUrgency:edit')){ %>
+				<!--<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
 					<a href="${ctx}/mes/mesDeviceUrgency/myform" class="btn btn-default btnTool" title="${text('新增紧急性维修记录')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -91,4 +93,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesDeviceUrgency/exportData1',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesDeviceUrgency/importData2" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesDeviceUrgency/importTemplate1" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 54 - 0
src/main/resources/views/modules/mes/mesMaterialCkList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesMaterialCk:edit')){ %>
+				<!--<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>-->
 					<a href="${ctx}/mes/mesMaterialCk/form" class="btn btn-default btnTool" title="${text('新增仓库')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -57,4 +59,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesMaterialCk/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
 </script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesMaterialCk/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesMaterialCk/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 54 - 0
src/main/resources/views/modules/mes/mesMaterialKwList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesMaterialKw:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesMaterialKw/form" class="btn btn-default btnTool" title="${text('新增库位')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -61,4 +63,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesMaterialKw/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
 </script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesMaterialKw/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesMaterialKw/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 48 - 2
src/main/resources/views/modules/mes/mesMaterialList.html

@@ -8,8 +8,8 @@
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
 				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
-
 				<% if(hasPermi('mes:mesMaterial:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesMaterial/form" class="btn btn-default btnTool" title="${text('新增物料表')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -132,4 +132,50 @@ $('#btnExport').click(function(){
 		downloadFile:true
 	});
 });
-</script>
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesMaterial/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesMaterial/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>

+ 55 - 1
src/main/resources/views/modules/mes/mesRepairItemsList.html

@@ -7,7 +7,9 @@
 			</div>
 			<div class="box-tools pull-right">
 				<a href="#" class="btn btn-default" id="btnSearch" title="${text('查询')}"><i class="fa fa-filter"></i> ${text('查询')}</a>
+				<a href="#" class="btn btn-default" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a>
 				<% if(hasPermi('mes:mesRepairItems:edit')){ %>
+				<a href="#" class="btn btn-default" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a>
 					<a href="${ctx}/mes/mesRepairItems/form" class="btn btn-default btnTool" title="${text('新增返修问题清单')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
 				<% } %>
 				<a href="#" class="btn btn-default" id="btnSetting" title="${text('设置')}"><i class="fa fa-navicon"></i></a>
@@ -106,4 +108,56 @@ $('#dataGrid').dataGrid({
 		
 	}
 });
-</script>
+$('#btnExport').click(function(){
+	js.ajaxSubmitForm($('#searchForm'), {
+		url:'${ctx}/mes/mesRepairItems/exportData',
+		downloadFile:true
+	});
+});
+$('#btnImport').click(function(){
+	js.layer.open({
+		type: 1,
+		area: ['400px'],
+		title: '${text("导入分类设备")}',
+		resize: false,
+		scrollbar: true,
+		content: js.template('importTpl'),
+		btn: ['<i class="fa fa-check"></i> ${text("导入")}',
+			'<i class="fa fa-remove"></i> ${text("关闭")}'],
+		btn1: function(index, layero){
+			var form = {
+				inputForm: layero.find('#inputForm'),
+				file: layero.find('#file').val()
+			};
+			if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
+				js.showMessage("${text('文件不正确,请选择后缀为“xls”或“xlsx”的文件。')}", null, 'warning');
+				return false;
+			}
+			js.ajaxSubmitForm(form.inputForm, function(data){
+				js.showMessage(data.message);
+				if(data.result == Global.TRUE){
+					js.layer.closeAll();
+				}
+				page();
+			}, "json");
+			return true;
+		}
+	});
+});
+</script>
+<script id="importTpl" type="text/template">//<!--
+<form id="inputForm" action="${ctx}/mes/mesRepairItems/importData" method="post" enctype="multipart/form-data"
+	class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
+	<div class="row">
+		<div class="col-xs-12 col-xs-offset-1">
+			<input type="file" id="file" name="file" class="form-file"/>
+			<div class="mt10 pt5" style="color:red">
+				${text('提示:仅允许导入“xls”或“xlsx”格式文件!')}
+			</div>
+			<div class="mt10 pt5">
+				<a href="${ctx}/mes/mesRepairItems/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> ${text('下载模板')}</a>
+			</div>
+		</div>
+	</div>
+</form>
+//--></script>