dcs 3 месяцев назад
Родитель
Сommit
0e909d78b5

+ 13 - 0
virgo.api/pom.xml

@@ -42,6 +42,19 @@
 			<version>4.1.2</version>
 		</dependency>
 
+		<!-- 文件上传 -->
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpmime</artifactId>
+			<version>4.5.7</version>
+		</dependency>
+		<!-- POI -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>3.16</version>
+		</dependency>
+
 
 	</dependencies>
 		

+ 97 - 5
virgo.api/src/main/java/com/bosshand/virgo/api/operate/controller/OperateDeviceController.java

@@ -1,18 +1,25 @@
 package com.bosshand.virgo.api.operate.controller;
 
-import com.bosshand.virgo.api.operate.model.Godown;
-import com.bosshand.virgo.api.operate.model.OperateDevice;
+import com.bosshand.virgo.api.model.Project;
+import com.bosshand.virgo.api.model.ProjectItemTarget;
+import com.bosshand.virgo.api.operate.model.*;
 import com.bosshand.virgo.api.operate.service.GodownService;
 import com.bosshand.virgo.api.operate.service.OperateDeviceService;
+import com.bosshand.virgo.api.service.ProjectItemTargetService;
+import com.bosshand.virgo.api.service.ProjectService;
+import com.bosshand.virgo.api.util.excel.ExcelUtils;
 import com.bosshand.virgo.core.response.Response;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 
 @RestController
 @RequestMapping("operateDevice")
@@ -25,6 +32,12 @@ public class OperateDeviceController {
     @Autowired
     GodownService godownService;
 
+    @Autowired
+    ProjectService projectService;
+
+    @Autowired
+    ProjectItemTargetService projectItemTargetService;
+
     @ApiOperation(value = "获取", notes = "获取")
     @RequestMapping(value = "/{id}", method = RequestMethod.GET)
     public Response get(@PathVariable long id) {
@@ -88,5 +101,84 @@ public class OperateDeviceController {
         return Response.ok(operateDeviceService.projectCount(projectId));
     }
 
+    /**
+     *  导入
+     */
+    @ApiOperation(value = "资产导入", notes = "资产导入")
+    @RequestMapping(value = "/import/{projectItemTargetId}/{operateDeviceLevelId}/{godownId}", method = RequestMethod.POST)
+    public Response importData(@ApiParam(name = "uploadFile", required = true) MultipartFile uploadFile, @PathVariable long projectItemTargetId, @PathVariable long operateDeviceLevelId, @PathVariable long godownId) throws Exception {
+        List<OperateDeviceImportDto> list = ExcelUtils.readMultipartFile(uploadFile, OperateDeviceImportDto.class);
+        if (list.size() > 0) {
+            String date = DateFormatUtils.format(new Date(), "yyyy-MM-dd");
+            ProjectItemTarget target = projectItemTargetService.get(projectItemTargetId);
+            List<OperateDevice> operateDeviceList = new ArrayList<>();
+            for (OperateDeviceImportDto dto : list) {
+                OperateDevice operateDevice = new OperateDevice();
+                operateDevice.setProjectId(target.getProjectId());
+                operateDevice.setProjectItemId(target.getProjectItemId());
+                operateDevice.setProjectItemTargetId(operateDeviceLevelId);
+                operateDevice.setOperateDeviceLevelId(operateDeviceLevelId);
+                operateDevice.setGodownId(godownId);
+                operateDevice.setEntryTime(date);
+                BeanUtils.copyProperties(dto, operateDevice);
+                operateDeviceList.add(operateDevice);
+            }
+            operateDeviceService.batchSave(operateDeviceList);
+        }
+        return Response.ok();
+    }
+
+    /**
+     *  导出模板
+     */
+    @ApiOperation(value = "资产导出模板表", notes = "资产导出模板表")
+    @RequestMapping(value = "/exportTemplate", method = RequestMethod.GET)
+    public void exportTemplate(HttpServletResponse response) {
+        ExcelUtils.exportTemplate(response, "资产模板表", OperateDeviceExportDto.class);
+    }
+
+    /**
+     * 导出数据
+     */
+    @ApiOperation(value = "资产导出数据", notes = "资产导出数据")
+    @GetMapping("/export/{projectId}/{godownId}")
+    public void export(HttpServletResponse response, @PathVariable long projectId, @PathVariable long godownId) {
+        Project project = projectService.getProject(projectId);
+        Godown godown = godownService.getGodown(godownId);
+        List<OperateDeviceExportDto> list = new ArrayList<>();
+        OperateDevice operateDevice = new OperateDevice();
+        operateDevice.setProjectId(projectId);
+        operateDevice.setGodownId(godownId);
+        List<OperateDevice> dataList = operateDeviceService.getExport(operateDevice);
+        for(OperateDevice o : dataList){
+            OperateDeviceExportDto dto = new OperateDeviceExportDto();
+            BeanUtils.copyProperties(o, dto);
+            list.add(dto);
+        }
+        ExcelUtils.export(response, project.getName()+"-"+godown.getName()+"-"+"资产表", list, OperateDeviceExportDto.class);
+    }
+
+    /**
+     *  导出盘点数据
+     */
+    @ApiOperation(value = "资产导出盘点表", notes = "资产导出盘点表")
+    @RequestMapping(value = "/exportStocktaking/{projectId}/{godownId}", method = RequestMethod.GET)
+    public void exportStocktaking(HttpServletResponse response, @PathVariable long projectId, @PathVariable long godownId) {
+        Project project = projectService.getProject(projectId);
+        Godown godown = godownService.getGodown(godownId);
+        List<OperateDeviceStocktakingDto> list = new ArrayList<>();
+        OperateDevice operateDevice = new OperateDevice();
+        operateDevice.setProjectId(projectId);
+        operateDevice.setGodownId(godownId);
+        List<OperateDevice> dataList = operateDeviceService.getExport(operateDevice);
+        for(OperateDevice o : dataList){
+            OperateDeviceStocktakingDto dto = new OperateDeviceStocktakingDto();
+            BeanUtils.copyProperties(o, dto);
+            list.add(dto);
+        }
+        ExcelUtils.export(response, project.getName()+"-"+godown.getName()+"-"+"资产盘点表", list, OperateDeviceStocktakingDto.class);
+    }
+
+
 
 }

+ 4 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/operate/dao/OperateDeviceDao.java

@@ -12,12 +12,16 @@ public interface OperateDeviceDao {
 
     public int save(OperateDevice operateDevice);
 
+    public int batchSave(List<OperateDevice> list);
+
     public int update(OperateDevice operateDevice);
 
     public int delete(long id);
 
     public OperateDevice get(long id);
 
+    public List<OperateDevice> getExport(OperateDevice operateDevice);
+
     public int getTotalCount(OperateDevice operateDevice);
 
     public List<OperateDevice> getList(OperateDevice operateDevice);

+ 245 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/operate/model/OperateDeviceExportDto.java

@@ -0,0 +1,245 @@
+package com.bosshand.virgo.api.operate.model;
+
+import com.bosshand.virgo.api.util.excel.ExcelExport;
+
+public class OperateDeviceExportDto {
+
+    /**
+     * 资产名称
+     */
+    @ExcelExport("资产名称")
+    private String name;
+
+    /**
+     * 资产类型
+     */
+    @ExcelExport(value ="资产类型", kv="0-普通设备;1-物联网设备")
+    private int type;
+
+    /**
+     * 设计编码
+     */
+    @ExcelExport("设计编码")
+    private String designNumber;
+
+    /**
+     * 资产编号
+     */
+    @ExcelExport("资产编号")
+    private String assetNumber;
+
+    /**
+     * 设备编码
+     */
+    @ExcelExport("设备编码")
+    private String deviceNumber;
+
+    /**
+     * 品牌
+     */
+    @ExcelExport("品牌")
+    private String deviceBrand;
+
+    /**
+     * 型号
+     */
+    @ExcelExport("型号")
+    private String deviceModel;
+
+    /**
+     * 序列号
+     */
+    @ExcelExport("序列号")
+    private String deviceSerialNumber;
+
+    /**
+     * 备注
+     */
+    @ExcelExport("备注")
+    private String remark;
+
+    /**
+     * 绑定类型 1.绑定已存在模型,直接存构件ID,2.绑定模型库模型,3.自己上传
+     */
+    @ExcelExport("绑定类型")
+    private int modelBindType;
+
+    /**
+     * 绑定内容
+     */
+    @ExcelExport("绑定内容")
+    private String modelBindContent;
+
+    /**
+     * 绑定位置
+     */
+    @ExcelExport("绑定位置")
+    private String modelBindPosition;
+
+    /**
+     * 厂家
+     */
+    @ExcelExport("厂家")
+    private String manufacturer;
+
+    /**
+     * 联系人
+     */
+    @ExcelExport("联系人")
+    private String liaison;
+
+    /**
+     * 联系方式
+     */
+    @ExcelExport("联系方式")
+    private String liaisonPhone;
+
+    /**
+     * 进场时间
+     */
+    @ExcelExport("进场时间")
+    private String entryTime;
+
+    /**
+     * 维保记录
+     */
+    @ExcelExport("维保记录")
+    private String maintenanceRecord;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public String getDesignNumber() {
+        return designNumber;
+    }
+
+    public void setDesignNumber(String designNumber) {
+        this.designNumber = designNumber;
+    }
+
+    public String getAssetNumber() {
+        return assetNumber;
+    }
+
+    public void setAssetNumber(String assetNumber) {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getDeviceNumber() {
+        return deviceNumber;
+    }
+
+    public void setDeviceNumber(String deviceNumber) {
+        this.deviceNumber = deviceNumber;
+    }
+
+    public String getDeviceBrand() {
+        return deviceBrand;
+    }
+
+    public void setDeviceBrand(String deviceBrand) {
+        this.deviceBrand = deviceBrand;
+    }
+
+    public String getDeviceModel() {
+        return deviceModel;
+    }
+
+    public void setDeviceModel(String deviceModel) {
+        this.deviceModel = deviceModel;
+    }
+
+    public String getDeviceSerialNumber() {
+        return deviceSerialNumber;
+    }
+
+    public void setDeviceSerialNumber(String deviceSerialNumber) {
+        this.deviceSerialNumber = deviceSerialNumber;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public int getModelBindType() {
+        return modelBindType;
+    }
+
+    public void setModelBindType(int modelBindType) {
+        this.modelBindType = modelBindType;
+    }
+
+    public String getModelBindContent() {
+        return modelBindContent;
+    }
+
+    public void setModelBindContent(String modelBindContent) {
+        this.modelBindContent = modelBindContent;
+    }
+
+    public String getModelBindPosition() {
+        return modelBindPosition;
+    }
+
+    public void setModelBindPosition(String modelBindPosition) {
+        this.modelBindPosition = modelBindPosition;
+    }
+
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getLiaison() {
+        return liaison;
+    }
+
+    public void setLiaison(String liaison) {
+        this.liaison = liaison;
+    }
+
+    public String getLiaisonPhone() {
+        return liaisonPhone;
+    }
+
+    public void setLiaisonPhone(String liaisonPhone) {
+        this.liaisonPhone = liaisonPhone;
+    }
+
+    public String getEntryTime() {
+        return entryTime;
+    }
+
+    public void setEntryTime(String entryTime) {
+        this.entryTime = entryTime;
+    }
+
+    public String getMaintenanceRecord() {
+        return maintenanceRecord;
+    }
+
+    public void setMaintenanceRecord(String maintenanceRecord) {
+        this.maintenanceRecord = maintenanceRecord;
+    }
+
+}

+ 231 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/operate/model/OperateDeviceImportDto.java

@@ -0,0 +1,231 @@
+package com.bosshand.virgo.api.operate.model;
+
+import com.bosshand.virgo.api.util.excel.ExcelImport;
+
+public class OperateDeviceImportDto {
+
+    /**
+     * 资产名称
+     */
+    @ExcelImport("资产名称")
+    private String name;
+
+    /**
+     * 资产类型
+     */
+    @ExcelImport("资产类型")
+    private int type;
+
+    /**
+     * 设计编码
+     */
+    @ExcelImport("设计编码")
+    private String designNumber;
+
+    /**
+     * 资产编号
+     */
+    @ExcelImport("资产编号")
+    private String assetNumber;
+
+    /**
+     * 设备编码
+     */
+    @ExcelImport("设备编码")
+    private String deviceNumber;
+
+    /**
+     * 品牌
+     */
+    @ExcelImport("品牌")
+    private String deviceBrand;
+
+    /**
+     * 型号
+     */
+    @ExcelImport("型号")
+    private String deviceModel;
+
+    /**
+     * 序列号
+     */
+    @ExcelImport("序列号")
+    private String deviceSerialNumber;
+
+    /**
+     * 备注
+     */
+    @ExcelImport("备注")
+    private String remark;
+
+    /**
+     * 绑定类型 1.绑定已存在模型,直接存构件ID,2.绑定模型库模型,3.自己上传
+     */
+    @ExcelImport("绑定类型")
+    private int modelBindType;
+
+    /**
+     * 绑定内容
+     */
+    @ExcelImport("绑定内容")
+    private String modelBindContent;
+
+    /**
+     * 绑定位置
+     */
+    @ExcelImport("绑定位置")
+    private String modelBindPosition;
+
+    /**
+     * 厂家
+     */
+    @ExcelImport("厂家")
+    private String manufacturer;
+
+    /**
+     * 联系人
+     */
+    @ExcelImport("联系人")
+    private String liaison;
+
+    /**
+     * 联系方式
+     */
+    @ExcelImport("联系方式")
+    private String liaisonPhone;
+
+    /**
+     * 维保记录
+     */
+    @ExcelImport("维保记录")
+    private String maintenanceRecord;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public String getDesignNumber() {
+        return designNumber;
+    }
+
+    public void setDesignNumber(String designNumber) {
+        this.designNumber = designNumber;
+    }
+
+    public String getAssetNumber() {
+        return assetNumber;
+    }
+
+    public void setAssetNumber(String assetNumber) {
+        this.assetNumber = assetNumber;
+    }
+
+    public String getDeviceNumber() {
+        return deviceNumber;
+    }
+
+    public void setDeviceNumber(String deviceNumber) {
+        this.deviceNumber = deviceNumber;
+    }
+
+    public String getDeviceBrand() {
+        return deviceBrand;
+    }
+
+    public void setDeviceBrand(String deviceBrand) {
+        this.deviceBrand = deviceBrand;
+    }
+
+    public String getDeviceModel() {
+        return deviceModel;
+    }
+
+    public void setDeviceModel(String deviceModel) {
+        this.deviceModel = deviceModel;
+    }
+
+    public String getDeviceSerialNumber() {
+        return deviceSerialNumber;
+    }
+
+    public void setDeviceSerialNumber(String deviceSerialNumber) {
+        this.deviceSerialNumber = deviceSerialNumber;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public int getModelBindType() {
+        return modelBindType;
+    }
+
+    public void setModelBindType(int modelBindType) {
+        this.modelBindType = modelBindType;
+    }
+
+    public String getModelBindContent() {
+        return modelBindContent;
+    }
+
+    public void setModelBindContent(String modelBindContent) {
+        this.modelBindContent = modelBindContent;
+    }
+
+    public String getModelBindPosition() {
+        return modelBindPosition;
+    }
+
+    public void setModelBindPosition(String modelBindPosition) {
+        this.modelBindPosition = modelBindPosition;
+    }
+
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getLiaison() {
+        return liaison;
+    }
+
+    public void setLiaison(String liaison) {
+        this.liaison = liaison;
+    }
+
+    public String getLiaisonPhone() {
+        return liaisonPhone;
+    }
+
+    public void setLiaisonPhone(String liaisonPhone) {
+        this.liaisonPhone = liaisonPhone;
+    }
+
+    public String getMaintenanceRecord() {
+        return maintenanceRecord;
+    }
+
+    public void setMaintenanceRecord(String maintenanceRecord) {
+        this.maintenanceRecord = maintenanceRecord;
+    }
+
+}

+ 48 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/operate/model/OperateDeviceStocktakingDto.java

@@ -0,0 +1,48 @@
+package com.bosshand.virgo.api.operate.model;
+
+import com.bosshand.virgo.api.util.excel.ExcelExport;
+
+public class OperateDeviceStocktakingDto {
+
+    /**
+     * 资产类型
+     */
+    @ExcelExport(value ="资产类型", kv="0-普通设备;1-物联网设备")
+    private int type;
+
+    /**
+     * 资产名称
+     */
+    @ExcelExport("资产名称")
+    private String name;
+
+    /**
+     * 资产名称
+     */
+    @ExcelExport("是否存在")
+    private String exist;
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getExist() {
+        return exist;
+    }
+
+    public void setExist(String exist) {
+        this.exist = exist;
+    }
+}

+ 12 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/operate/service/OperateDeviceService.java

@@ -30,6 +30,10 @@ public class OperateDeviceService {
         return operateDeviceDao.save(operateDevice);
     }
 
+    public int batchSave(List<OperateDevice> list) {
+        return operateDeviceDao.batchSave(list);
+    }
+
     public int update(OperateDevice operateDevice) {
         return operateDeviceDao.update(operateDevice);
     }
@@ -42,6 +46,14 @@ public class OperateDeviceService {
         return operateDeviceDao.get(id);
     }
 
+    public List<OperateDevice> getExport(OperateDevice operateDevice){
+        return operateDeviceDao.getExport(operateDevice);
+    }
+
+    public List<OperateDevice> getList(OperateDevice operateDevice) {
+        return operateDeviceDao.getList(operateDevice);
+    }
+
     public OperateDeviceCountState countState(OperateDevice operateDevice) {
         List<OperateDevice> list = operateDeviceDao.getList(operateDevice);
         int deviceOnLineTotal = 0;

+ 73 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/util/excel/ExcelClassField.java

@@ -0,0 +1,73 @@
+package com.bosshand.virgo.api.util.excel;
+
+import java.util.LinkedHashMap;
+
+public class ExcelClassField {
+
+    /** 字段名称 */
+    private String fieldName;
+
+    /** 表头名称 */
+    private String name;
+
+    /** 映射关系 */
+    private LinkedHashMap<String, String> kvMap;
+
+    /** 示例值 */
+    private Object example;
+
+    /** 排序 */
+    private int sort;
+
+    /** 是否为注解字段:0-否,1-是 */
+    private int hasAnnotation;
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public LinkedHashMap<String, String> getKvMap() {
+        return kvMap;
+    }
+
+    public void setKvMap(LinkedHashMap<String, String> kvMap) {
+        this.kvMap = kvMap;
+    }
+
+    public Object getExample() {
+        return example;
+    }
+
+    public void setExample(Object example) {
+        this.example = example;
+    }
+
+    public int getSort() {
+        return sort;
+    }
+
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    public int getHasAnnotation() {
+        return hasAnnotation;
+    }
+
+    public void setHasAnnotation(int hasAnnotation) {
+        this.hasAnnotation = hasAnnotation;
+    }
+
+}

+ 24 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/util/excel/ExcelExport.java

@@ -0,0 +1,24 @@
+package com.bosshand.virgo.api.util.excel;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelExport {
+
+    /** 字段名称 */
+    String value();
+
+    /** 导出排序先后: 数字越小越靠前(默认按Java类字段顺序导出) */
+    int sort() default 0;
+
+    /** 导出映射,格式如:0-未知;1-男;2-女 */
+    String kv() default "";
+
+    /** 导出模板示例值(有值的话,直接取该值,不做映射) */
+    String example() default "";
+
+}

+ 27 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/util/excel/ExcelImport.java

@@ -0,0 +1,27 @@
+package com.bosshand.virgo.api.util.excel;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelImport {
+
+    /** 字段名称 */
+    String value();
+
+    /** 导出映射,格式如:0-未知;1-男;2-女 */
+    String kv() default "";
+
+    /** 是否为必填字段(默认为非必填) */
+    boolean required() default false;
+
+    /** 最大长度(默认255) */
+    int maxLength() default 255;
+
+    /** 导入唯一性验证(多个字段则取联合验证) */
+    boolean unique() default false;
+
+}

Разница между файлами не показана из-за своего большого размера
+ 1008 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/util/excel/ExcelUtils.java


+ 19 - 0
virgo.api/src/main/resources/mapper/OperateDeviceMapper.xml

@@ -40,6 +40,14 @@
         SELECT * FROM operate_device where id = #{id}
     </select>
 
+    <select id="getExport" resultMap="OperateDeviceResult">
+        SELECT * FROM operate_device
+        <where>
+            <if test="projectId!=0">and projectId=#{projectId}</if>
+            <if test="godownId!=0">and godownId=#{godownId}</if>
+        </where>
+    </select>
+
     <select id="getList" resultMap="OperateDeviceResult">
         SELECT id FROM operate_device
         <where>
@@ -149,6 +157,17 @@
                #{code}, #{godownId}, #{modelBindType}, #{modelBindContent}, #{manufacturer}, #{liaison}, #{liaisonPhone}, #{entryTime}, #{maintenanceRecord}, #{modelBindPosition})
     </insert>
 
+    <insert id="batchSave" parameterType="com.bosshand.virgo.api.operate.model.OperateDevice" useGeneratedKeys="true" keyProperty="id">
+        INSERT into operate_device(operateDeviceLevelId, projectId, projectItemId, projectItemTargetId, projectItemTargetRoomId, name, type, designNumber, assetNumber, deviceNumber,
+        deviceBrand, deviceModel, deviceSerialNumber, attachment, remark, document,
+        code, godownId, modelBindType, modelBindContent, manufacturer, liaison, liaisonPhone, entryTime, maintenanceRecord, modelBindPosition)
+        <foreach collection ="list" item="item" separator =",">
+            (#{item.operateDeviceLevelId}, #{item.projectId}, #{item.projectItemId}, #{item.projectItemTargetId}, #{item.projectItemTargetRoomId}, #{item.name}, #{item.type}, #{item.designNumber},
+            #{item.assetNumber}, #{item.deviceNumber}, #{item.deviceBrand}, #{item.deviceModel}, #{item.deviceSerialNumber}, #{item.attachment}, #{item.remark}, #{item.document},
+            #{item.code}, #{item.godownId}, #{item.modelBindType}, #{item.modelBindContent}, #{item.manufacturer}, #{item.liaison}, #{item.liaisonPhone}, #{item.entryTime}, #{item.maintenanceRecord}, #{item.modelBindPosition})
+        </foreach>
+    </insert>
+
     <update id="update" parameterType="com.bosshand.virgo.api.operate.model.OperateDevice">
         UPDATE operate_device
         <trim prefix="set" suffixOverrides=",">

+ 1 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/config/ShiroConfig.java

@@ -114,6 +114,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/excel/export/**","anon");
         filterChainDefinitionMap.put("/operateUserRole/userId/**","anon");
         filterChainDefinitionMap.put("/operateFlowData/query/**","anon");
+        filterChainDefinitionMap.put("/operateDevice/**","anon");
 
 		//resource bundle
         filterChainDefinitionMap.put("/resoucebundle/**", "anon");