dcs 9 місяців тому
батько
коміт
43bd24b9fe
26 змінених файлів з 2099 додано та 0 видалено
  1. 72 0
      virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceController.java
  2. 47 0
      virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceEventController.java
  3. 78 0
      virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceLevelController.java
  4. 53 0
      virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceLevelModelController.java
  5. 66 0
      virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateFlowDataController.java
  6. 26 0
      virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceDao.java
  7. 20 0
      virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceEventDao.java
  8. 25 0
      virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceLevelDao.java
  9. 21 0
      virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceLevelModelDao.java
  10. 30 0
      virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateFlowDataDao.java
  11. 227 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDevice.java
  12. 35 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceCountState.java
  13. 93 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceEvent.java
  14. 110 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceLevel.java
  15. 79 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceLevelModel.java
  16. 232 0
      virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateFlowData.java
  17. 32 0
      virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceEventService.java
  18. 76 0
      virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceLevelModelService.java
  19. 115 0
      virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceLevelService.java
  20. 131 0
      virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceService.java
  21. 53 0
      virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateFlowDataService.java
  22. 63 0
      virgo.api/src/main/resources/mapper/OperateDeviceEventMapper.xml
  23. 84 0
      virgo.api/src/main/resources/mapper/OperateDeviceLevelMapper.xml
  24. 43 0
      virgo.api/src/main/resources/mapper/OperateDeviceLevelModelMapper.xml
  25. 134 0
      virgo.api/src/main/resources/mapper/OperateDeviceMapper.xml
  26. 154 0
      virgo.api/src/main/resources/mapper/OperateFlowDataMapper.xml

+ 72 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceController.java

@@ -0,0 +1,72 @@
+package com.bosshand.virgo.api.controller;
+
+import com.bosshand.virgo.api.model.OperateDevice;
+import com.bosshand.virgo.api.service.OperateDeviceService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("operateDevice")
+@Api(tags = {"运营设备"})
+public class OperateDeviceController {
+
+    @Autowired
+    OperateDeviceService operateDeviceService;
+
+    @ApiOperation(value = "获取", notes = "获取")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public Response get(@PathVariable long id){
+        return Response.ok(operateDeviceService.get(id));
+    }
+
+    @ApiOperation(value = "统计设备状态", notes = "统计设备状态")
+    @RequestMapping(value = "/countState", method = RequestMethod.POST)
+    public Response countState(@RequestBody OperateDevice operateDevice){
+        return Response.ok(operateDeviceService.countState(operateDevice));
+    }
+
+    @ApiOperation(value = "筛选", notes = "筛选")
+    @RequestMapping(value = "/list/{currPage}/{pageSize}", method = RequestMethod.POST)
+    public Response list(@RequestBody OperateDevice operateDevice, @PathVariable int currPage, @PathVariable int pageSize) {
+        int totalCount = operateDeviceService.getTotalCount(operateDevice);
+        List<OperateDevice> dataList = operateDeviceService.limit(operateDevice, currPage, pageSize);
+        Map<String, Integer> map = operateDeviceService.getCount(operateDevice);
+        Map<String, Object> result = new HashMap<>();
+        result.put("dataList", dataList);
+        result.put("totalCount", totalCount);
+        result.put("changeCount", map.get("changeCount"));
+        result.put("depreciationCount", map.get("depreciationCount"));
+        result.put("inventoryCount", map.get("inventoryCount"));
+        return Response.ok(result);
+    }
+
+    @ApiOperation(value = "新增", notes = "新增")
+    @RequestMapping(value = "", method = RequestMethod.POST)
+    public Response save(@RequestBody OperateDevice operateDevice) {
+        operateDeviceService.save(operateDevice);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "修改", notes = "修改")
+    @RequestMapping(value = "", method = RequestMethod.PUT)
+    public Response update(@RequestBody OperateDevice operateDevice) {
+        operateDeviceService.update(operateDevice);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "删除", notes = "删除")
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public Response delete(@PathVariable long id) {
+        operateDeviceService.delete(id);
+        return Response.ok();
+    }
+
+
+}

+ 47 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceEventController.java

@@ -0,0 +1,47 @@
+package com.bosshand.virgo.api.controller;
+
+import com.bosshand.virgo.api.model.OperateDeviceEvent;
+import com.bosshand.virgo.api.service.OperateDeviceEventService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("operateDeviceEvent")
+@Api(tags = {"运营设备事件"})
+public class OperateDeviceEventController {
+
+    @Autowired
+    OperateDeviceEventService operateDeviceEventService;
+
+    @ApiOperation(value = "获取", notes = "获取")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Response getList(@RequestBody OperateDeviceEvent operateDeviceEvent){
+        return Response.ok(operateDeviceEventService.getList(operateDeviceEvent));
+    }
+
+    @ApiOperation(value = "新增", notes = "新增")
+    @RequestMapping(value = "", method = RequestMethod.POST)
+    public Response save(@RequestBody OperateDeviceEvent operateDeviceEvent) {
+        operateDeviceEventService.save(operateDeviceEvent);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "修改", notes = "修改")
+    @RequestMapping(value = "", method = RequestMethod.PUT)
+    public Response update(@RequestBody OperateDeviceEvent operateDeviceEvent) {
+        operateDeviceEventService.update(operateDeviceEvent);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "删除", notes = "删除")
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public Response delete(@PathVariable long id) {
+        operateDeviceEventService.delete(id);
+        return Response.ok();
+    }
+
+
+}

+ 78 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceLevelController.java

@@ -0,0 +1,78 @@
+package com.bosshand.virgo.api.controller;
+
+import com.bosshand.virgo.api.model.OperateDeviceLevel;
+import com.bosshand.virgo.api.model.OperateDeviceLevelModel;
+import com.bosshand.virgo.api.service.OperateDeviceLevelModelService;
+import com.bosshand.virgo.api.service.OperateDeviceLevelService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("operateDeviceLevel")
+@Api(tags = {"运营设备目录"})
+public class OperateDeviceLevelController {
+
+    @Autowired
+    OperateDeviceLevelService operateDeviceLevelService;
+
+    @Autowired
+    OperateDeviceLevelModelService operateDeviceLevelModelService;
+
+    @ApiOperation(value = "获取", notes = "获取")
+    @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
+    public Response get(@PathVariable long id) {
+        return Response.ok(operateDeviceLevelService.get(id));
+    }
+
+    @ApiOperation(value = "获取", notes = "获取")
+    @RequestMapping(value = "/get", method = RequestMethod.POST)
+    public Response get(@RequestBody OperateDeviceLevel operateDeviceLevel) {
+        return Response.ok(operateDeviceLevelService.query(operateDeviceLevel));
+    }
+
+    @ApiOperation(value = "初始化生成", notes = "初始化生成")
+    @RequestMapping(value = "/init/{operateOrganizationId}/{projectId}", method = RequestMethod.GET)
+    public Response init(@PathVariable long operateOrganizationId, @PathVariable long projectId) {
+        List<OperateDeviceLevel> ll = operateDeviceLevelService.getList(operateOrganizationId, projectId);
+        if (ll.size() > 0) {
+            return Response.fail(20000, "已经生初始化过了!!!");
+        }
+        List<OperateDeviceLevelModel> list = operateDeviceLevelModelService.getRoot();
+        operateDeviceLevelService.init(operateOrganizationId, projectId, list);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "运营设备", notes = "运营设备")
+    @RequestMapping(value = "/getOperateOrganizationId/{operateOrganizationId}/{projectId}", method = RequestMethod.GET)
+    public Response getOperateOrganizationId(@PathVariable long operateOrganizationId, @PathVariable long projectId) {
+        return Response.ok(operateDeviceLevelService.getList(operateOrganizationId, projectId));
+    }
+
+    @ApiOperation(value = "新增", notes = "新增")
+    @RequestMapping(value = "", method = RequestMethod.POST)
+    public Response save(@RequestBody OperateDeviceLevel operateDeviceLevel) {
+        operateDeviceLevelService.save(operateDeviceLevel);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "修改", notes = "修改")
+    @RequestMapping(value = "", method = RequestMethod.PUT)
+    public Response update(@RequestBody OperateDeviceLevel operateDeviceLevel) {
+        operateDeviceLevelService.update(operateDeviceLevel);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "删除", notes = "删除")
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public Response delete(@PathVariable long id) {
+        operateDeviceLevelService.delete(id);
+        return Response.ok();
+    }
+
+
+}

+ 53 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateDeviceLevelModelController.java

@@ -0,0 +1,53 @@
+package com.bosshand.virgo.api.controller;
+
+import com.bosshand.virgo.api.model.OperateDeviceLevelModel;
+import com.bosshand.virgo.api.service.OperateDeviceLevelModelService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("operateDeviceLevelModel")
+@Api(tags = {"运营设备模版目录"})
+public class OperateDeviceLevelModelController {
+
+    @Autowired
+    OperateDeviceLevelModelService operateDeviceLevelModelService;
+
+    @ApiOperation(value = "获取", notes = "获取")
+    @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
+    public Response get(@PathVariable long id) {
+        return Response.ok(operateDeviceLevelModelService.get(id));
+    }
+
+    @ApiOperation(value = "获取列表", notes = "获取列表")
+    @RequestMapping(value = "", method = RequestMethod.GET)
+    public Response getList() {
+        return Response.ok(operateDeviceLevelModelService.getRoot());
+    }
+
+    @ApiOperation(value = "新增", notes = "新增")
+    @RequestMapping(value = "", method = RequestMethod.POST)
+    public Response save(@RequestBody OperateDeviceLevelModel operateDeviceLevelModel) {
+        operateDeviceLevelModelService.save(operateDeviceLevelModel);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "修改", notes = "修改")
+    @RequestMapping(value = "", method = RequestMethod.PUT)
+    public Response update(@RequestBody OperateDeviceLevelModel operateDeviceLevelModel) {
+        operateDeviceLevelModelService.update(operateDeviceLevelModel);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "删除", notes = "删除")
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public Response delete(@PathVariable long id) {
+        operateDeviceLevelModelService.delete(id);
+        return Response.ok();
+    }
+
+
+}

+ 66 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/controller/OperateFlowDataController.java

@@ -0,0 +1,66 @@
+package com.bosshand.virgo.api.controller;
+
+import com.bosshand.virgo.api.model.OperateFlowData;
+import com.bosshand.virgo.api.service.OperateFlowDataService;
+import com.bosshand.virgo.core.response.Response;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("operateFlowData")
+@Api(tags = {"审核流程管理"})
+public class OperateFlowDataController {
+
+    @Autowired
+    OperateFlowDataService operateFlowDataService;
+
+    @ApiOperation(value = "详情", notes = "详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    public Response get(@PathVariable long id) {
+        return Response.ok(operateFlowDataService.get(id));
+    }
+
+    @ApiOperation(value = "查询", notes = "查询")
+    @RequestMapping(value = "/query/{projectId}/{startDate}/{endDate}", method = RequestMethod.POST)
+    public String census(@PathVariable long projectId, @PathVariable String startDate, @PathVariable String endDate){
+        return operateFlowDataService.census(projectId,startDate,endDate);
+    }
+
+    @ApiOperation(value = "分页查询", notes = "分页查询")
+    @RequestMapping(value = "/{currPage}/{pageSize}", method = RequestMethod.POST)
+    public Response getList(@RequestBody OperateFlowData operateFlowData, @PathVariable int currPage, @PathVariable int pageSize) {
+        List<OperateFlowData> list = operateFlowDataService.getListLimit(operateFlowData, currPage, pageSize);
+        int totalCount = operateFlowDataService.count(operateFlowData);
+        Map<String, Object> result = new HashMap<String, Object>();
+        result.put("dataList", list);
+        result.put("totalCount", totalCount);
+        return Response.ok(result);
+    }
+
+    @ApiOperation(value = "新增", notes = "新增")
+    @RequestMapping(value = "", method = RequestMethod.POST)
+    public Response save(@RequestBody OperateFlowData operateFlowData) {
+        operateFlowDataService.save(operateFlowData);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "修改", notes = "修改")
+    @RequestMapping(value = "", method = RequestMethod.PUT)
+    public Response update(@RequestBody OperateFlowData operateFlowData) {
+        operateFlowDataService.update(operateFlowData);
+        return Response.ok();
+    }
+
+    @ApiOperation(value = "删除", notes = "删除")
+    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+    public Response delete(@PathVariable long id) {
+        operateFlowDataService.delete(id);
+        return Response.ok();
+    }
+}

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

@@ -0,0 +1,26 @@
+package com.bosshand.virgo.api.dao;
+
+import com.bosshand.virgo.api.model.OperateDevice;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface OperateDeviceDao {
+
+    public int save(OperateDevice operateDevice);
+
+    public int update(OperateDevice operateDevice);
+
+    public int delete(long id);
+
+    public OperateDevice get(long id);
+
+    public int getTotalCount(OperateDevice operateDevice);
+
+    public List<OperateDevice> getList(OperateDevice operateDevice);
+
+    public List<OperateDevice> limit(@Param("od") OperateDevice od, @Param("currIndex") int currIndex, @Param("pageSize") int pageSize);
+
+}

+ 20 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceEventDao.java

@@ -0,0 +1,20 @@
+package com.bosshand.virgo.api.dao;
+
+import com.bosshand.virgo.api.model.OperateDeviceEvent;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface OperateDeviceEventDao {
+
+    public List<OperateDeviceEvent> getList(OperateDeviceEvent operateDeviceEvent);
+
+    public int save(OperateDeviceEvent operateDeviceEvent);
+
+    public int update(OperateDeviceEvent operateDeviceEvent);
+
+    public int delete(long id);
+
+    public List<OperateDeviceEvent> getDeviceIds(List<Long> ids);
+}

+ 25 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceLevelDao.java

@@ -0,0 +1,25 @@
+package com.bosshand.virgo.api.dao;
+
+import com.bosshand.virgo.api.model.OperateDeviceLevel;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface OperateDeviceLevelDao {
+
+    public List<OperateDeviceLevel> getList(long operateOrganizationId, long projectId);
+
+    public List<OperateDeviceLevel> getRoot(long operateOrganizationId, long projectId);
+
+    public int save(OperateDeviceLevel operateDeviceLevel);
+
+    public int update(OperateDeviceLevel operateDeviceLevel);
+
+    public int delete(long id);
+
+    public OperateDeviceLevel get(long id);
+
+    public OperateDeviceLevel query(OperateDeviceLevel operateDeviceLevel);
+
+}

+ 21 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateDeviceLevelModelDao.java

@@ -0,0 +1,21 @@
+package com.bosshand.virgo.api.dao;
+
+import com.bosshand.virgo.api.model.OperateDeviceLevelModel;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface OperateDeviceLevelModelDao {
+
+    public List<OperateDeviceLevelModel> getList();
+
+    public List<OperateDeviceLevelModel> getRoot();
+
+    public int save(OperateDeviceLevelModel operateDeviceLevelModel);
+
+    public int update(OperateDeviceLevelModel operateDeviceLevelModel);
+
+    public int delete(long id);
+
+}

+ 30 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/dao/OperateFlowDataDao.java

@@ -0,0 +1,30 @@
+package com.bosshand.virgo.api.dao;
+
+import com.bosshand.virgo.api.model.OperateFlowData;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface OperateFlowDataDao {
+
+    OperateFlowData get(long id);
+
+    int delete(long id);
+
+    int save(OperateFlowData operateFlowData);
+
+    int update(OperateFlowData operateFlowData);
+
+    int count(@Param(value = "ofd") OperateFlowData ofd);
+
+    List<OperateFlowData> getListLimit(@Param(value = "ofd") OperateFlowData ofd,
+                                       @Param(value = "currIndex") int currIndex,
+                                       @Param(value = "pageSize") int pageSize);
+
+    List<OperateFlowData> census(@Param(value = "projectId") long projectId,
+                                 @Param(value = "startDate") String startDate,
+                                 @Param(value = "endDate") String endDate);
+
+}

+ 227 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDevice.java

@@ -0,0 +1,227 @@
+package com.bosshand.virgo.api.model;
+
+/**
+ *  设备信息
+ */
+public class OperateDevice {
+
+    private long id;
+
+    private long operateDeviceLevelId;
+
+    private String operateDeviceLevelIds;
+
+    private long projectId;
+
+    private long projectItemId;
+
+    private long projectItemTargetId;
+
+    private long projectItemTargetRoomId;
+
+    private String name;
+
+    private int type;
+
+    private String designNumber;
+
+    private String assetNumber;
+
+    private String deviceNumber;
+
+    private String deviceBrand;
+
+    private String deviceModel;
+
+    private String deviceSerialNumber;
+
+    private String attachment;
+
+    private String remark;
+
+    private int changeCount;
+
+    private int depreciationCount;
+
+    private int inventoryCount;
+
+    private String document;
+
+    private int state;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getOperateDeviceLevelId() {
+        return operateDeviceLevelId;
+    }
+
+    public void setOperateDeviceLevelId(long operateDeviceLevelId) {
+        this.operateDeviceLevelId = operateDeviceLevelId;
+    }
+
+    public String getOperateDeviceLevelIds() {
+        return operateDeviceLevelIds;
+    }
+
+    public void setOperateDeviceLevelIds(String operateDeviceLevelIds) {
+        this.operateDeviceLevelIds = operateDeviceLevelIds;
+    }
+
+    public long getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(long projectId) {
+        this.projectId = projectId;
+    }
+
+    public long getProjectItemId() {
+        return projectItemId;
+    }
+
+    public void setProjectItemId(long projectItemId) {
+        this.projectItemId = projectItemId;
+    }
+
+    public long getProjectItemTargetId() {
+        return projectItemTargetId;
+    }
+
+    public void setProjectItemTargetId(long projectItemTargetId) {
+        this.projectItemTargetId = projectItemTargetId;
+    }
+
+    public long getProjectItemTargetRoomId() {
+        return projectItemTargetRoomId;
+    }
+
+    public void setProjectItemTargetRoomId(long projectItemTargetRoomId) {
+        this.projectItemTargetRoomId = projectItemTargetRoomId;
+    }
+
+    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 getAttachment() {
+        return attachment;
+    }
+
+    public void setAttachment(String attachment) {
+        this.attachment = attachment;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public int getChangeCount() {
+        return changeCount;
+    }
+
+    public void setChangeCount(int changeCount) {
+        this.changeCount = changeCount;
+    }
+
+    public int getDepreciationCount() {
+        return depreciationCount;
+    }
+
+    public void setDepreciationCount(int depreciationCount) {
+        this.depreciationCount = depreciationCount;
+    }
+
+    public int getInventoryCount() {
+        return inventoryCount;
+    }
+
+    public void setInventoryCount(int inventoryCount) {
+        this.inventoryCount = inventoryCount;
+    }
+
+    public String getDocument() {
+        return document;
+    }
+
+    public void setDocument(String document) {
+        this.document = document;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+}

+ 35 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceCountState.java

@@ -0,0 +1,35 @@
+package com.bosshand.virgo.api.model;
+
+/**
+ * 设备统计
+ */
+public class OperateDeviceCountState {
+
+    private int deviceTotal;
+    private int deviceOnLineTotal;
+    private int deviceOffLineTotal;
+
+    public int getDeviceTotal() {
+        return deviceTotal;
+    }
+
+    public void setDeviceTotal(int deviceTotal) {
+        this.deviceTotal = deviceTotal;
+    }
+
+    public int getDeviceOnLineTotal() {
+        return deviceOnLineTotal;
+    }
+
+    public void setDeviceOnLineTotal(int deviceOnLineTotal) {
+        this.deviceOnLineTotal = deviceOnLineTotal;
+    }
+
+    public int getDeviceOffLineTotal() {
+        return deviceOffLineTotal;
+    }
+
+    public void setDeviceOffLineTotal(int deviceOffLineTotal) {
+        this.deviceOffLineTotal = deviceOffLineTotal;
+    }
+}

+ 93 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceEvent.java

@@ -0,0 +1,93 @@
+package com.bosshand.virgo.api.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+/**
+ * 设备事件
+ */
+public class OperateDeviceEvent {
+
+    private long id;
+
+    private long deviceId;
+
+    private String title;
+
+    private String content;
+
+    private String remark;
+
+    private String attachment;
+
+    private int type;
+
+    @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date date;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(long deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getAttachment() {
+        return attachment;
+    }
+
+    public void setAttachment(String attachment) {
+        this.attachment = attachment;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+}

+ 110 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceLevel.java

@@ -0,0 +1,110 @@
+package com.bosshand.virgo.api.model;
+
+import java.util.List;
+
+/**
+ * 设备目录
+ */
+public class OperateDeviceLevel {
+
+    private long id;
+
+    private String name;
+
+    private long operateOrganizationId;
+
+    private long projectId;
+
+    private long parentId;
+
+    private String remark;
+
+    private String sign;
+
+    private int isp;
+
+    private List<OperateDeviceLevel> children;
+
+    private List<OperateDevice> deviceList;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getOperateOrganizationId() {
+        return operateOrganizationId;
+    }
+
+    public void setOperateOrganizationId(long operateOrganizationId) {
+        this.operateOrganizationId = operateOrganizationId;
+    }
+
+    public long getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(long projectId) {
+        this.projectId = projectId;
+    }
+
+    public long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public int getIsp() {
+        return isp;
+    }
+
+    public void setIsp(int isp) {
+        this.isp = isp;
+    }
+
+    public List<OperateDeviceLevel> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<OperateDeviceLevel> children) {
+        this.children = children;
+    }
+
+    public List<OperateDevice> getDeviceList() {
+        return deviceList;
+    }
+
+    public void setDeviceList(List<OperateDevice> deviceList) {
+        this.deviceList = deviceList;
+    }
+
+}

+ 79 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateDeviceLevelModel.java

@@ -0,0 +1,79 @@
+package com.bosshand.virgo.api.model;
+
+import java.util.List;
+
+/**
+ * 设备模板目录
+ */
+public class OperateDeviceLevelModel {
+
+    private long id;
+
+    private String name;
+
+    private long parentId;
+
+    private String remark;
+
+    private String sign;
+
+    private int isp;
+
+    private List<OperateDeviceLevelModel> children;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public int getIsp() {
+        return isp;
+    }
+
+    public void setIsp(int isp) {
+        this.isp = isp;
+    }
+
+    public List<OperateDeviceLevelModel> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<OperateDeviceLevelModel> children) {
+        this.children = children;
+    }
+}

+ 232 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/model/OperateFlowData.java

@@ -0,0 +1,232 @@
+package com.bosshand.virgo.api.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+/**
+ * 审核流程数据
+ */
+public class OperateFlowData {
+
+    private long id;
+
+    private long projectId;
+
+    private String projectName;
+
+    private long projectItemId;
+
+    private String projectItemName;
+
+    private long projectItemTargetId;
+
+    private String projectItemTargetName;
+
+    private long projectItemTargetRoomId;
+
+    private String projectItemTargetRoomName;
+
+    private long deviceId;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date date;
+
+    private long projectFlowId;
+
+    private String flowUserList;
+
+    private Integer state;
+
+    private String flowData;
+
+    private long createdByUserId;
+
+    private String createdByUserName;
+
+    private String document;
+
+    private String receiver;
+
+    private String attachment;
+
+    private Integer flowType;
+
+    private Integer type;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(long projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public long getProjectItemId() {
+        return projectItemId;
+    }
+
+    public void setProjectItemId(long projectItemId) {
+        this.projectItemId = projectItemId;
+    }
+
+    public String getProjectItemName() {
+        return projectItemName;
+    }
+
+    public void setProjectItemName(String projectItemName) {
+        this.projectItemName = projectItemName;
+    }
+
+    public long getProjectItemTargetId() {
+        return projectItemTargetId;
+    }
+
+    public void setProjectItemTargetId(long projectItemTargetId) {
+        this.projectItemTargetId = projectItemTargetId;
+    }
+
+    public String getProjectItemTargetName() {
+        return projectItemTargetName;
+    }
+
+    public void setProjectItemTargetName(String projectItemTargetName) {
+        this.projectItemTargetName = projectItemTargetName;
+    }
+
+    public long getProjectItemTargetRoomId() {
+        return projectItemTargetRoomId;
+    }
+
+    public void setProjectItemTargetRoomId(long projectItemTargetRoomId) {
+        this.projectItemTargetRoomId = projectItemTargetRoomId;
+    }
+
+    public String getProjectItemTargetRoomName() {
+        return projectItemTargetRoomName;
+    }
+
+    public void setProjectItemTargetRoomName(String projectItemTargetRoomName) {
+        this.projectItemTargetRoomName = projectItemTargetRoomName;
+    }
+
+    public long getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(long deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public long getProjectFlowId() {
+        return projectFlowId;
+    }
+
+    public void setProjectFlowId(long projectFlowId) {
+        this.projectFlowId = projectFlowId;
+    }
+
+    public String getFlowUserList() {
+        return flowUserList;
+    }
+
+    public void setFlowUserList(String flowUserList) {
+        this.flowUserList = flowUserList;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getFlowData() {
+        return flowData;
+    }
+
+    public void setFlowData(String flowData) {
+        this.flowData = flowData;
+    }
+
+    public long getCreatedByUserId() {
+        return createdByUserId;
+    }
+
+    public void setCreatedByUserId(long createdByUserId) {
+        this.createdByUserId = createdByUserId;
+    }
+
+    public String getCreatedByUserName() {
+        return createdByUserName;
+    }
+
+    public void setCreatedByUserName(String createdByUserName) {
+        this.createdByUserName = createdByUserName;
+    }
+
+    public String getDocument() {
+        return document;
+    }
+
+    public void setDocument(String document) {
+        this.document = document;
+    }
+
+    public String getReceiver() {
+        return receiver;
+    }
+
+    public void setReceiver(String receiver) {
+        this.receiver = receiver;
+    }
+
+    public String getAttachment() {
+        return attachment;
+    }
+
+    public void setAttachment(String attachment) {
+        this.attachment = attachment;
+    }
+
+    public Integer getFlowType() {
+        return flowType;
+    }
+
+    public void setFlowType(Integer flowType) {
+        this.flowType = flowType;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+}

+ 32 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceEventService.java

@@ -0,0 +1,32 @@
+package com.bosshand.virgo.api.service;
+
+import com.bosshand.virgo.api.dao.OperateDeviceEventDao;
+import com.bosshand.virgo.api.model.OperateDeviceEvent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class OperateDeviceEventService {
+
+    @Autowired
+    OperateDeviceEventDao operateDeviceEventDao;
+
+    public List<OperateDeviceEvent> getList(OperateDeviceEvent operateDeviceEvent) {
+        return operateDeviceEventDao.getList(operateDeviceEvent);
+    }
+
+    public int save(OperateDeviceEvent operateDeviceEvent) {
+        return operateDeviceEventDao.save(operateDeviceEvent);
+    }
+
+    public int update(OperateDeviceEvent operateDeviceEvent) {
+        return operateDeviceEventDao.update(operateDeviceEvent);
+    }
+
+    public int delete(long id) {
+        return operateDeviceEventDao.delete(id);
+    }
+
+}

+ 76 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceLevelModelService.java

@@ -0,0 +1,76 @@
+package com.bosshand.virgo.api.service;
+
+import com.bosshand.virgo.api.dao.OperateDeviceLevelModelDao;
+import com.bosshand.virgo.api.model.OperateDeviceLevelModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class OperateDeviceLevelModelService {
+
+    @Autowired
+    OperateDeviceLevelModelDao operateDeviceLevelModelDao;
+
+    public OperateDeviceLevelModel get(long id) {
+        List<OperateDeviceLevelModel> ls = operateDeviceLevelModelDao.getList();
+        return this.getNodeTreeById(id, ls);
+    }
+
+    public List<OperateDeviceLevelModel> getRoot() {
+        List<OperateDeviceLevelModel> list = new ArrayList<>();
+        List<OperateDeviceLevelModel> roots = operateDeviceLevelModelDao.getRoot();
+        List<OperateDeviceLevelModel> ls = operateDeviceLevelModelDao.getList();
+        for (OperateDeviceLevelModel model : roots) {
+            list.add(this.getNodeTreeById(model.getId(), ls));
+        }
+        return list;
+    }
+
+    public int save(OperateDeviceLevelModel operateDeviceLevelModel) {
+        return operateDeviceLevelModelDao.save(operateDeviceLevelModel);
+    }
+
+    public int update(OperateDeviceLevelModel operateDeviceLevelModel) {
+        return operateDeviceLevelModelDao.update(operateDeviceLevelModel);
+    }
+
+    public int delete(long id) {
+        return operateDeviceLevelModelDao.delete(id);
+    }
+
+    private OperateDeviceLevelModel getNodeTreeById(long id, List<OperateDeviceLevelModel> list) {
+        OperateDeviceLevelModel node = null;
+        List<OperateDeviceLevelModel> operateDeviceLevelModelList = list;
+        for (OperateDeviceLevelModel data : operateDeviceLevelModelList) {
+            if (data.getId() == id) {
+                node = data;
+                break;
+            }
+        }
+        if (node != null) {
+            node.setChildren(getChildNode(node.getId(), operateDeviceLevelModelList));
+        }
+        return node;
+    }
+
+    private List<OperateDeviceLevelModel> getChildNode(long parentId, List<OperateDeviceLevelModel> list) {
+        List<OperateDeviceLevelModel> nodeList = new ArrayList<OperateDeviceLevelModel>();
+        nodeList.clear();
+        for (OperateDeviceLevelModel data : list) {
+            if (data.getParentId() == parentId) {
+                nodeList.add(data);
+            }
+        }
+        if (nodeList.size() > 0) {
+            for (OperateDeviceLevelModel data : nodeList) {
+                List<OperateDeviceLevelModel> childList = getChildNode(data.getId(), list);
+                data.setChildren(childList);
+            }
+        }
+        return nodeList;
+    }
+
+}

+ 115 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateDeviceLevelService.java

@@ -0,0 +1,115 @@
+package com.bosshand.virgo.api.service;
+
+import com.bosshand.virgo.api.dao.OperateDeviceLevelDao;
+import com.bosshand.virgo.api.model.OperateDeviceLevel;
+import com.bosshand.virgo.api.model.OperateDeviceLevelModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class OperateDeviceLevelService {
+
+
+    @Autowired
+    OperateDeviceLevelDao operateDeviceLevelDao;
+
+    public OperateDeviceLevel get(long id) {
+        OperateDeviceLevel operateDeviceLevel = operateDeviceLevelDao.get(id);
+        List<OperateDeviceLevel> ls = operateDeviceLevelDao.getList(operateDeviceLevel.getOperateOrganizationId(), operateDeviceLevel.getProjectId());
+        return this.getNodeTreeById(id, ls);
+    }
+
+    public int save(OperateDeviceLevel operateDeviceLevel) {
+        return operateDeviceLevelDao.save(operateDeviceLevel);
+    }
+
+    public int update(OperateDeviceLevel operateDeviceLevel) {
+        return operateDeviceLevelDao.update(operateDeviceLevel);
+    }
+
+    public int delete(long id) {
+        return operateDeviceLevelDao.delete(id);
+    }
+
+    public List<OperateDeviceLevel> getList(long operateOrganizationId, long projectId) {
+        List<OperateDeviceLevel> list = new ArrayList<>();
+        List<OperateDeviceLevel> operateOrganizationRoot = operateDeviceLevelDao.getRoot(operateOrganizationId, projectId);
+        if (operateOrganizationRoot.size() > 0) {
+            List<OperateDeviceLevel> ls = operateDeviceLevelDao.getList(operateOrganizationId, projectId);
+            operateOrganizationRoot.forEach(l -> list.add(getNodeTreeById(l.getId(), ls)));
+        }
+        return list;
+    }
+
+    private OperateDeviceLevel getNodeTreeById(long id, List<OperateDeviceLevel> list) {
+        OperateDeviceLevel node = null;
+        List<OperateDeviceLevel> operateDeviceLevelList = list;
+        for (OperateDeviceLevel data : operateDeviceLevelList) {
+            if (data.getId() == id) {
+                node = data;
+                break;
+            }
+        }
+        if (node != null) {
+            node.setChildren(getChildNode(node.getId(), operateDeviceLevelList));
+        }
+        return node;
+    }
+
+    private List<OperateDeviceLevel> getChildNode(long parentId, List<OperateDeviceLevel> list) {
+        List<OperateDeviceLevel> nodeList = new ArrayList<OperateDeviceLevel>();
+        nodeList.clear();
+        for (OperateDeviceLevel data : list) {
+            if (data.getParentId() == parentId) {
+                nodeList.add(data);
+            }
+        }
+        if (nodeList.size() > 0) {
+            for (OperateDeviceLevel data : nodeList) {
+                List<OperateDeviceLevel> childList = getChildNode(data.getId(), list);
+                data.setChildren(childList);
+            }
+        }
+        return nodeList;
+    }
+
+
+    public void create(long operateOrganizationId, long projectId, OperateDeviceLevelModel operateDeviceLevelModel, OperateDeviceLevel operateDeviceLevel) {
+        OperateDeviceLevel level = new OperateDeviceLevel();
+        level.setName(operateDeviceLevelModel.getName());
+        level.setRemark(operateDeviceLevelModel.getRemark());
+        if (operateDeviceLevel != null) {
+            level.setParentId(operateDeviceLevel.getId());
+        } else {
+            level.setParentId(operateDeviceLevelModel.getParentId());
+        }
+        level.setOperateOrganizationId(operateOrganizationId);
+        level.setProjectId(projectId);
+        level.setSign(operateDeviceLevelModel.getSign());
+        level.setIsp(operateDeviceLevelModel.getIsp());
+        operateDeviceLevelDao.save(level);
+        List<OperateDeviceLevelModel> children = operateDeviceLevelModel.getChildren();
+        if (children.size() > 0) {
+            for (OperateDeviceLevelModel m : children) {
+                create(operateOrganizationId, projectId, m, level);
+            }
+        }
+    }
+
+    public void init(long operateOrganizationId, long projectId, List<OperateDeviceLevelModel> list) {
+        if (list != null && list.size() > 0) {
+            for (OperateDeviceLevelModel model : list) {
+                create(operateOrganizationId, projectId, model, null);
+            }
+        }
+    }
+
+    public OperateDeviceLevel query(OperateDeviceLevel operateDeviceLevel) {
+        OperateDeviceLevel level = operateDeviceLevelDao.query(operateDeviceLevel);
+        return this.get(level.getId());
+    }
+
+}

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

@@ -0,0 +1,131 @@
+package com.bosshand.virgo.api.service;
+
+import com.bosshand.virgo.api.dao.OperateDeviceDao;
+import com.bosshand.virgo.api.dao.OperateDeviceEventDao;
+import com.bosshand.virgo.api.model.OperateDevice;
+import com.bosshand.virgo.api.model.OperateDeviceCountState;
+import com.bosshand.virgo.api.model.OperateDeviceEvent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class OperateDeviceService {
+
+    @Autowired
+    OperateDeviceDao operateDeviceDao;
+
+    @Autowired
+    OperateDeviceEventDao operateDeviceEventDao;
+
+    public int save(OperateDevice operateDevice) {
+        return operateDeviceDao.save(operateDevice);
+    }
+
+    public int update(OperateDevice operateDevice) {
+        return operateDeviceDao.update(operateDevice);
+    }
+
+    public int delete(long id) {
+        return operateDeviceDao.delete(id);
+    }
+
+    public OperateDevice get(long id) {
+        return operateDeviceDao.get(id);
+    }
+
+    public OperateDeviceCountState countState(OperateDevice operateDevice) {
+        List<OperateDevice> list = operateDeviceDao.getList(operateDevice);
+        int deviceOnLineTotal = 0;
+        int deviceOffLineTotal = 0;
+        for (OperateDevice d : list) {
+            if (d.getState() == 0) {
+                deviceOffLineTotal += 1;
+            }
+            if (d.getState() == 1) {
+                deviceOnLineTotal += 1;
+            }
+        }
+        OperateDeviceCountState countState = new OperateDeviceCountState();
+        countState.setDeviceTotal(list.size());
+        countState.setDeviceOffLineTotal(deviceOffLineTotal);
+        countState.setDeviceOnLineTotal(deviceOnLineTotal);
+        return countState;
+    }
+
+    public int getTotalCount(OperateDevice operateDevice) {
+        return operateDeviceDao.getTotalCount(operateDevice);
+    }
+
+    public List<OperateDevice> limit(OperateDevice operateDevice, int currPage, int pageSize) {
+        int currIndex = (currPage - 1) * pageSize;
+
+        List<Long> ids = new ArrayList<>();
+        List<OperateDevice> list = operateDeviceDao.limit(operateDevice, currIndex, pageSize);
+        list.forEach(ls -> ids.add(ls.getId()));
+
+        List<OperateDeviceEvent> ode = operateDeviceEventDao.getDeviceIds(ids);
+
+        for (OperateDevice od : list) {
+            int changeCount = 0, depreciationCount = 0, inventoryCount = 0;
+            for (OperateDeviceEvent o : ode) {
+                if (od.getId() == o.getDeviceId()) {
+                    if (o.getType() == 1) {
+                        changeCount++;
+                    }
+                    if (o.getType() == 2) {
+                        depreciationCount++;
+                    }
+                    if (o.getType() == 3) {
+                        inventoryCount++;
+                    }
+                }
+            }
+            od.setChangeCount(changeCount);
+            od.setDepreciationCount(depreciationCount);
+            od.setInventoryCount(inventoryCount);
+        }
+
+        return list;
+    }
+
+    public Map<String, Integer> getCount(OperateDevice operateDevice) {
+        Map<String, Integer> map = new HashMap<>();
+
+        int changeCount = 0, depreciationCount = 0, inventoryCount = 0;
+
+        List<Long> ids = new ArrayList<>();
+        List<OperateDevice> list = operateDeviceDao.getList(operateDevice);
+        list.forEach(ls -> ids.add(ls.getId()));
+
+        List<OperateDeviceEvent> ode = operateDeviceEventDao.getDeviceIds(ids);
+        for (OperateDevice od : list) {
+            int changeCount1 = 0, depreciationCount1 = 0, inventoryCount1 = 0;
+            for (OperateDeviceEvent o : ode) {
+                if (od.getId() == o.getDeviceId()) {
+                    if (o.getType() == 1) {
+                        changeCount1++;
+                    }
+                    if (o.getType() == 2) {
+                        depreciationCount1++;
+                    }
+                    if (o.getType() == 3) {
+                        inventoryCount1++;
+                    }
+                }
+            }
+            changeCount += changeCount1;
+            depreciationCount += depreciationCount1;
+            inventoryCount += inventoryCount1;
+        }
+        map.put("changeCount", changeCount);
+        map.put("depreciationCount", depreciationCount);
+        map.put("inventoryCount", inventoryCount);
+        return map;
+    }
+
+}

+ 53 - 0
virgo.api/src/main/java/com/bosshand/virgo/api/service/OperateFlowDataService.java

@@ -0,0 +1,53 @@
+package com.bosshand.virgo.api.service;
+
+import com.alibaba.fastjson.JSON;
+import com.bosshand.virgo.api.dao.OperateFlowDataDao;
+import com.bosshand.virgo.api.model.OperateFlowData;
+import com.bosshand.virgo.core.model.MgrUser;
+import com.bosshand.virgo.core.utils.ContextUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class OperateFlowDataService {
+
+    @Autowired
+    OperateFlowDataDao operateFlowDataDao;
+
+    public OperateFlowData get(long id){
+        return operateFlowDataDao.get(id);
+    }
+
+    public int delete(long id){
+        return operateFlowDataDao.delete(id);
+    }
+
+    public int save(OperateFlowData operateFlowData){
+        MgrUser currentUser = ContextUtils.getCurrentUser();
+        operateFlowData.setCreatedByUserId(currentUser.getId());
+        operateFlowData.setCreatedByUserName(currentUser.getName());
+        return operateFlowDataDao.save(operateFlowData);
+    }
+
+    public int update(OperateFlowData operateFlowData){
+        MgrUser currentUser = ContextUtils.getCurrentUser();
+        operateFlowData.setCreatedByUserId(currentUser.getId());
+        operateFlowData.setCreatedByUserName(currentUser.getName());
+        return operateFlowDataDao.update(operateFlowData);
+    }
+
+    public int count(OperateFlowData operateFlowData){
+        return operateFlowDataDao.count(operateFlowData);
+    }
+
+    public List<OperateFlowData> getListLimit(OperateFlowData operateFlowData,int currPage,int pageSize){
+        return operateFlowDataDao.getListLimit(operateFlowData,(currPage - 1) * pageSize,pageSize);
+    }
+
+    public String census(long projectId, String startDate, String endDate) {
+        return JSON.toJSONString(operateFlowDataDao.census(projectId, startDate, endDate));
+    }
+
+}

+ 63 - 0
virgo.api/src/main/resources/mapper/OperateDeviceEventMapper.xml

@@ -0,0 +1,63 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.dao.OperateDeviceEventDao">
+
+    <resultMap type="com.bosshand.virgo.api.model.OperateDeviceEvent" id="OperateDeviceEventResult" >
+        <id column="id" property="id"/>
+        <result column="deviceId" property="deviceId"/>
+        <result column="title" property="title"/>
+        <result column="content" property="content"/>
+        <result column="remark" property="remark"/>
+        <result column="attachment" property="attachment"/>
+        <result column="type" property="type"/>
+        <result column="date" property="date"/>
+    </resultMap>
+
+    <select id="getDeviceIds" resultMap="OperateDeviceEventResult">
+        SELECT deviceId, type FROM operate_device_event where deviceId in (
+        <choose>
+            <when test="list.size > 0">
+                <foreach collection="list" item="item" index="index" separator=",">
+                    #{item}
+                </foreach>
+            </when>
+            <otherwise>
+                -1
+            </otherwise>
+        </choose>
+        )
+    </select>
+
+    <select id="getList" resultMap="OperateDeviceEventResult">
+        SELECT * FROM operate_device_event
+        <where>
+            <if test="deviceId!=0">and deviceId=#{deviceId}</if>
+            <if test="type!=0">and type=#{type}</if>
+            <if test="date!=null">and date=#{date}</if>
+        </where>
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.model.OperateDeviceEvent" useGeneratedKeys="true" keyProperty="id">
+        INSERT into operate_device_event(deviceId, title, content, remark, attachment, type, date) values(#{deviceId}, #{title}, #{content}, #{remark}, #{attachment}, #{type}, now())
+    </insert>
+
+    <update id="update" parameterType="com.bosshand.virgo.api.model.OperateDeviceEvent">
+        UPDATE operate_device_event
+        <trim prefix="set" suffixOverrides=",">
+            <if test="deviceId!=0">deviceId=#{deviceId},</if>
+            <if test="title!=null">title=#{title},</if>
+            <if test="content!=null">content=#{content},</if>
+            <if test="remark!=null">remark=#{remark},</if>
+            <if test="attachment!=null">attachment=#{attachment},</if>
+            <if test="date == null">date=now(),</if>
+        </trim>
+        WHERE id=#{id}
+    </update>
+
+    <delete id="delete">
+        DELETE FROM operate_device_event where id = #{id}
+    </delete>
+
+</mapper>

+ 84 - 0
virgo.api/src/main/resources/mapper/OperateDeviceLevelMapper.xml

@@ -0,0 +1,84 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.dao.OperateDeviceLevelDao">
+
+    <resultMap type="com.bosshand.virgo.api.model.OperateDeviceLevel" id="OperateDeviceLevelResult" >
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="operateOrganizationId" property="operateOrganizationId"/>
+        <result column="projectId" property="projectId"/>
+        <result column="parentId" property="parentId"/>
+        <result column="remark" property="remark"/>
+        <result column="sign" property="sign"/>
+        <result column="isp" property="isp"/>
+        <collection property="deviceList" ofType="com.bosshand.virgo.api.model.OperateDevice" resultMap="com.bosshand.virgo.api.dao.OperateDeviceDao.OperateDeviceResult" columnPrefix="operateDevice_"/>
+    </resultMap>
+
+    <sql id="query">
+        SELECT
+            odl.*,
+            od.id as operateDevice_id,
+            od.operateDeviceLevelId as operateDevice_operateDeviceLevelId,
+            od.projectId as operateDevice_projectId,
+            od.projectItemId as operateDevice_projectItemId,
+            od.projectItemTargetId as operateDevice_projectItemTargetId,
+            od.name as operateDevice_name,
+            od.type as operateDevice_type,
+            od.designNumber as operateDevice_designNumber,
+            od.assetNumber as operateDevice_assetNumber,
+            od.deviceNumber as operateDevice_deviceNumber,
+            od.deviceBrand as operateDevice_deviceBrand,
+            od.deviceModel as operateDevice_deviceModel,
+            od.deviceSerialNumber as operateDevice_deviceSerialNumber,
+            od.attachment as operateDevice_attachment,
+            od.remark as operateDevice_remark
+        FROM operate_device_level odl left join operate_device od on odl.id = od.operateDeviceLevelId
+    </sql>
+
+    <select id="get" resultMap="OperateDeviceLevelResult">
+        <include refid="query"/>
+        where odl.id = #{id}
+    </select>
+
+    <select id="query" resultMap="OperateDeviceLevelResult">
+        <include refid="query"/>
+        <where>
+            <if test="operateOrganizationId!=0">and odl.operateOrganizationId=#{operateOrganizationId}</if>
+            <if test="projectId!=0">and odl.projectId=#{projectId}</if>
+            <if test="sign!=null">and odl.sign=#{sign}</if>
+        </where>
+    </select>
+
+    <select id="getList" resultMap="OperateDeviceLevelResult">
+        <include refid="query"/>
+        where odl.operateOrganizationId = #{operateOrganizationId} and odl.projectId = #{projectId}
+    </select>
+
+    <select id="getRoot" resultMap="OperateDeviceLevelResult">
+        <include refid="query"/>
+        where odl.operateOrganizationId = #{operateOrganizationId} and odl.projectId = #{projectId} and odl.parentId = -1
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.model.OperateDeviceLevel" useGeneratedKeys="true" keyProperty="id">
+        INSERT into operate_device_level(name, operateOrganizationId, projectId, parentId, remark, sign, isp)
+        values(#{name}, #{operateOrganizationId}, #{projectId}, #{parentId}, #{remark}, #{sign}, #{isp})
+    </insert>
+
+    <update id="update" parameterType="com.bosshand.virgo.api.model.OperateDeviceLevel">
+        UPDATE operate_device_level
+        <trim prefix="set" suffixOverrides=",">
+            <if test="name!=null">name=#{name},</if>
+            <if test="remark!=null">remark=#{remark},</if>
+            <if test="sign!=null">sign=#{sign},</if>
+            <if test="isp!=0">isp=#{isp},</if>
+        </trim>
+        WHERE id=#{id}
+    </update>
+
+    <delete id="delete">
+        DELETE FROM operate_device_level where id = #{id}
+    </delete>
+
+</mapper>

+ 43 - 0
virgo.api/src/main/resources/mapper/OperateDeviceLevelModelMapper.xml

@@ -0,0 +1,43 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.dao.OperateDeviceLevelModelDao">
+
+    <resultMap type="com.bosshand.virgo.api.model.OperateDeviceLevelModel" id="OperateDeviceLevelModelResult" >
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="parentId" property="parentId"/>
+        <result column="remark" property="remark"/>
+        <result column="sign" property="sign"/>
+        <result column="isp" property="isp"/>
+    </resultMap>
+
+    <select id="getList" resultMap="OperateDeviceLevelModelResult">
+        select * from operate_device_level_model
+    </select>
+
+    <select id="getRoot" resultMap="OperateDeviceLevelModelResult">
+        select * from operate_device_level_model where parentId = -1
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.model.OperateDeviceLevelModel" useGeneratedKeys="true" keyProperty="id">
+        INSERT into operate_device_level_model(name, parentId, remark, sign, isp) values(#{name}, #{parentId}, #{remark}, #{sign}, #{isp})
+    </insert>
+
+    <update id="update" parameterType="com.bosshand.virgo.api.model.OperateDeviceLevelModel">
+        UPDATE operate_device_level_model
+        <trim prefix="set" suffixOverrides=",">
+            <if test="name!=null">name=#{name},</if>
+            <if test="remark!=null">remark=#{remark},</if>
+            <if test="sign!=null">sign=#{sign},</if>
+            <if test="isp!=0">isp=#{isp},</if>
+        </trim>
+        WHERE id=#{id}
+    </update>
+
+    <delete id="delete">
+        DELETE FROM operate_device_level_model where id = #{id}
+    </delete>
+
+</mapper>

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

@@ -0,0 +1,134 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.dao.OperateDeviceDao">
+
+    <resultMap type="com.bosshand.virgo.api.model.OperateDevice" id="OperateDeviceResult" >
+        <id column="id" property="id"/>
+        <result column="operateDeviceLevelId" property="operateDeviceLevelId"/>
+        <result column="projectId" property="projectId"/>
+        <result column="projectItemId" property="projectItemId"/>
+        <result column="projectItemTargetId" property="projectItemTargetId"/>
+        <result column="projectItemTargetRoomId" property="projectItemTargetRoomId"/>
+        <result column="name" property="name"/>
+        <result column="type" property="type"/>
+        <result column="designNumber" property="designNumber"/>
+        <result column="assetNumber" property="assetNumber"/>
+        <result column="deviceNumber" property="deviceNumber"/>
+        <result column="deviceBrand" property="deviceBrand"/>
+        <result column="deviceModel" property="deviceModel"/>
+        <result column="deviceSerialNumber" property="deviceSerialNumber"/>
+        <result column="attachment" property="attachment"/>
+        <result column="remark" property="remark"/>
+        <result column="document" property="document"/>
+        <result column="state" property="state"/>
+    </resultMap>
+
+    <select id="get" resultMap="OperateDeviceResult">
+        SELECT * FROM operate_device where id = #{id}
+    </select>
+
+    <select id="getList" resultMap="OperateDeviceResult">
+        SELECT id FROM operate_device
+        <where>
+            <if test="id!=0">and id=#{id}</if>
+            <if test="operateDeviceLevelId!=0">and operateDeviceLevelId=#{operateDeviceLevelId}</if>
+            <if test="operateDeviceLevelIds!=null">and operateDeviceLevelId in (${operateDeviceLevelIds})</if>
+            <if test="projectId!=0">and projectId=#{projectId}</if>
+            <if test="projectItemId!=0">and projectItemId=#{projectItemId}</if>
+            <if test="projectItemTargetId!=0">and projectItemTargetId=#{projectItemTargetId}</if>
+            <if test="projectItemTargetRoomId!=0">and projectItemTargetRoomId=#{projectItemTargetRoomId}</if>
+            <if test="name!=null">and name=#{name}</if>
+            <if test="type!=0">and type=#{type}</if>
+            <if test="designNumber!=null">and designNumber=#{designNumber}</if>
+            <if test="assetNumber!=null">and assetNumber=#{assetNumber}</if>
+            <if test="deviceNumber!=null">and deviceNumber=#{deviceNumber}</if>
+            <if test="deviceBrand!=null">and deviceBrand=#{deviceBrand}</if>
+            <if test="deviceModel!=null">and deviceModel=#{deviceModel}</if>
+            <if test="deviceSerialNumber!=null">and deviceSerialNumber=#{deviceSerialNumber}</if>
+            <if test="state!=0">and state=#{state}</if>
+        </where>
+    </select>
+
+    <select id="getTotalCount" parameterType="com.bosshand.virgo.api.model.OperateDevice" resultType="Integer">
+        SELECT count(*) FROM operate_device
+        <where>
+            <if test="id!=0">and id=#{id}</if>
+            <if test="operateDeviceLevelId!=0">and operateDeviceLevelId=#{operateDeviceLevelId}</if>
+            <if test="operateDeviceLevelIds!=null">and operateDeviceLevelId in (${operateDeviceLevelIds})</if>
+            <if test="projectId!=0">and projectId=#{projectId}</if>
+            <if test="projectItemId!=0">and projectItemId=#{projectItemId}</if>
+            <if test="projectItemTargetId!=0">and projectItemTargetId=#{projectItemTargetId}</if>
+            <if test="projectItemTargetRoomId!=0">and projectItemTargetRoomId=#{projectItemTargetRoomId}</if>
+            <if test="name!=null">and name=#{name}</if>
+            <if test="type!=0">and type=#{type}</if>
+            <if test="designNumber!=null">and designNumber=#{designNumber}</if>
+            <if test="assetNumber!=null">and assetNumber=#{assetNumber}</if>
+            <if test="deviceNumber!=null">and deviceNumber=#{deviceNumber}</if>
+            <if test="deviceBrand!=null">and deviceBrand=#{deviceBrand}</if>
+            <if test="deviceModel!=null">and deviceModel=#{deviceModel}</if>
+            <if test="deviceSerialNumber!=null">and deviceSerialNumber=#{deviceSerialNumber}</if>
+            <if test="state!=0">and state=#{state}</if>
+        </where>
+    </select>
+
+    <select id="limit" resultMap="OperateDeviceResult">
+        SELECT * FROM operate_device
+        <where>
+            <if test="od.id!=0">and id=#{od.id}</if>
+            <if test="od.operateDeviceLevelId!=0">and operateDeviceLevelId=#{od.operateDeviceLevelId}</if>
+            <if test="od.operateDeviceLevelIds!=null">and operateDeviceLevelId in (${od.operateDeviceLevelIds})</if>
+            <if test="od.projectId!=0">and projectId=#{od.projectId}</if>
+            <if test="od.projectItemId!=0">and projectItemId=#{od.projectItemId}</if>
+            <if test="od.projectItemTargetId!=0">and projectItemTargetId=#{od.projectItemTargetId}</if>
+            <if test="od.projectItemTargetRoomId!=0">and projectItemTargetRoomId=#{od.projectItemTargetRoomId}</if>
+            <if test="od.name!=null">and name=#{od.name}</if>
+            <if test="od.type!=0">and type=#{od.type}</if>
+            <if test="od.designNumber!=null">and designNumber=#{od.designNumber}</if>
+            <if test="od.assetNumber!=null">and assetNumber=#{od.assetNumber}</if>
+            <if test="od.deviceNumber!=null">and deviceNumber=#{od.deviceNumber}</if>
+            <if test="od.deviceBrand!=null">and deviceBrand=#{od.deviceBrand}</if>
+            <if test="od.deviceModel!=null">and deviceModel=#{od.deviceModel}</if>
+            <if test="od.deviceSerialNumber!=null">and deviceSerialNumber=#{od.deviceSerialNumber}</if>
+            <if test="od.state!=0">and state=#{od.state}</if>
+        </where>
+        limit #{currIndex} , #{pageSize}
+    </select>
+
+    <insert id="save" parameterType="com.bosshand.virgo.api.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, state)
+        values(#{operateDeviceLevelId}, #{projectId}, #{projectItemId}, #{projectItemTargetId}, #{projectItemTargetRoomId}, #{name}, #{type}, #{designNumber},
+               #{assetNumber}, #{deviceNumber}, #{deviceBrand}, #{deviceModel}, #{deviceSerialNumber}, #{attachment}, #{remark}, #{document}, #{state})
+    </insert>
+
+    <update id="update" parameterType="com.bosshand.virgo.api.model.OperateDevice">
+        UPDATE operate_device
+        <trim prefix="set" suffixOverrides=",">
+            <if test="operateDeviceLevelId!=0">operateDeviceLevelId=#{operateDeviceLevelId},</if>
+            <if test="projectId!=0">projectId=#{projectId},</if>
+            <if test="projectItemId!=0">projectItemId=#{projectItemId},</if>
+            <if test="projectItemTargetId!=0">projectItemTargetId=#{projectItemTargetId},</if>
+            <if test="projectItemTargetRoomId!=0">projectItemTargetRoomId=#{projectItemTargetRoomId},</if>
+            <if test="name!=null">name=#{name},</if>
+            <if test="type!=0">type=#{type},</if>
+            <if test="designNumber!=null">designNumber=#{designNumber},</if>
+            <if test="assetNumber!=null">assetNumber=#{assetNumber},</if>
+            <if test="deviceNumber!=null">deviceNumber=#{deviceNumber},</if>
+            <if test="deviceBrand!=null">deviceBrand=#{deviceBrand},</if>
+            <if test="deviceModel!=null">deviceModel=#{deviceModel},</if>
+            <if test="deviceSerialNumber!=null">deviceSerialNumber=#{deviceSerialNumber},</if>
+            <if test="attachment!=null">attachment=#{attachment},</if>
+            <if test="remark!=null">remark=#{remark},</if>
+            <if test="document!=null">document=#{document},</if>
+            <if test="state!=0">state=#{state},</if>
+        </trim>
+        WHERE id=#{id}
+    </update>
+
+    <delete id="delete">
+        DELETE FROM operate_device where id = #{id}
+    </delete>
+
+</mapper>

+ 154 - 0
virgo.api/src/main/resources/mapper/OperateFlowDataMapper.xml

@@ -0,0 +1,154 @@
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.bosshand.virgo.api.dao.OperateFlowDataDao">
+
+    <resultMap type="com.bosshand.virgo.api.model.OperateFlowData" id="operateFlowDataResult">
+        <id column="id" property="id" />
+        <result column="projectId" property="projectId" />
+        <result column="projectItemId" property="projectItemId" />
+        <result column="projectItemTargetId" property="projectItemTargetId" />
+        <result column="projectItemTargetRoomId" property="projectItemTargetRoomId" />
+        <result column="createdByUserId" property="createdByUserId" />
+        <result column="deviceId" property="deviceId" />
+        <result column="date" property="date" />
+        <result column="projectFlowId" property="projectFlowId" />
+        <result column="flowUserList" property="flowUserList" />
+        <result column="state" property="state" />
+        <result column="flowData" property="flowData" />
+        <result column="document" property="document" />
+        <result column="receiver" property="receiver" />
+        <result column="attachment" property="attachment" />
+        <result column="flowType" property="flowType" />
+        <result column="type" property="type" />
+    </resultMap>
+
+    <select id="get" resultMap="operateFlowDataResult">
+        SELECT * FROM operate_flow_data where id = #{id}
+    </select>
+
+    <select id="census" resultMap="operateFlowDataResult">
+        SELECT * FROM operate_flow_data where projectId = #{projectId} and date  <![CDATA[>=]]>  #{startDate} and date <![CDATA[<=]]> #{endDate}
+    </select>
+
+    <select id="getListLimit" resultMap="operateFlowDataResult">
+        SELECT * FROM operate_flow_data
+        <where>
+            <if test="ofd.id != 0">
+                and id = #{ofd.id}
+            </if>
+            <if test="ofd.projectId != 0">
+                and projectId = #{ofd.projectId}
+            </if>
+            <if test="ofd.projectItemId != 0">
+                and projectItemId = #{ofd.projectItemId}
+            </if>
+            <if test="ofd.projectItemTargetId != 0">
+                and projectItemTargetId = #{ofd.projectItemTargetId}
+            </if>
+            <if test="ofd.projectItemTargetRoomId != 0">
+                and projectItemTargetRoomId = #{ofd.projectItemTargetRoomId}
+            </if>
+            <if test="ofd.deviceId != 0">
+                and deviceId = #{ofd.deviceId}
+            </if>
+            <if test="ofd.projectFlowId != 0">
+                and projectFlowId = #{ofd.projectFlowId}
+            </if>
+            <if test="ofd.state != null">
+                and state = #{ofd.state}
+            </if>
+            <if test="ofd.createdByUserId != 0">
+                and createdByUserId = #{ofd.createdByUserId}
+            </if>
+            <if test="ofd.flowType != null">
+                and flowType = #{ofd.flowType}
+            </if>
+            <if test="ofd.type != null">
+                and type = #{ofd.type}
+            </if>
+        </where>
+        order by date desc
+        limit #{currIndex} , #{pageSize}
+    </select>
+
+    <select id="count" parameterType="map" resultType="Integer">
+        SELECT count(*) FROM operate_flow_data
+        <where>
+            <if test="ofd.id != 0">
+                and id = #{ofd.id}
+            </if>
+            <if test="ofd.projectId != 0">
+                and projectId = #{ofd.projectId}
+            </if>
+            <if test="ofd.projectItemId != 0">
+                and projectItemId = #{ofd.projectItemId}
+            </if>
+            <if test="ofd.projectItemTargetId != 0">
+                and projectItemTargetId = #{ofd.projectItemTargetId}
+            </if>
+            <if test="ofd.projectItemTargetRoomId != 0">
+                and projectItemTargetRoomId = #{ofd.projectItemTargetRoomId}
+            </if>
+            <if test="ofd.deviceId != 0">
+                and deviceId = #{ofd.deviceId}
+            </if>
+            <if test="ofd.projectFlowId != 0">
+                and projectFlowId = #{ofd.projectFlowId}
+            </if>
+            <if test="ofd.state != null">
+                and state = #{ofd.state}
+            </if>
+            <if test="ofd.createdByUserId != 0">
+                and createdByUserId = #{ofd.createdByUserId}
+            </if>
+            <if test="ofd.flowType != null">
+                and flowType = #{ofd.flowType}
+            </if>
+            <if test="ofd.type != null">
+                and type = #{ofd.type}
+            </if>
+        </where>
+
+    </select>
+
+    <insert id="save" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO operate_flow_data(
+            projectId, projectItemId,
+            projectItemTargetId, projectItemTargetRoomId,
+            deviceId, date, projectFlowId, flowUserList, state, flowData, createdByUserId, document, receiver, attachment, flowType, type)
+        VALUES
+            (#{projectId}, #{projectItemId},
+             #{projectItemTargetId}, #{projectItemTargetRoomId},
+             #{deviceId}, now(), #{projectFlowId}, #{flowUserList}, #{state}, #{flowData}, #{createdByUserId}, #{document}, #{receiver}, #{attachment}, #{flowType}, #{type})
+    </insert>
+
+    <delete id="delete">
+        DELETE FROM operate_flow_data WHERE id=#{id}
+    </delete>
+
+    <update id="update" parameterType="com.bosshand.virgo.api.model.OperateFlowData">
+        UPDATE operate_flow_data
+        <trim prefix="set" suffixOverrides=",">
+            <if test="projectId!=0">projectId=#{projectId},</if>
+            <if test="projectItemId!=0">projectItemId=#{projectItemId},</if>
+            <if test="projectItemTargetId!=0">projectItemTargetId=#{projectItemTargetId},</if>
+            <if test="projectItemTargetRoomId!=0">projectItemTargetRoomId=#{projectItemTargetRoomId},</if>
+            <if test="deviceId!=0">deviceId=#{deviceId},</if>
+            <if test="projectFlowId!=0">projectFlowId=#{projectFlowId},</if>
+            <if test="flowUserList!=null">flowUserList=#{flowUserList},</if>
+            <if test="state!=null">state=#{state},</if>
+            <if test="flowData!=null">flowData=#{flowData},</if>
+            <if test="date!=null">date=now(),</if>
+            <if test="createdByUserId!=0">createdByUserId=#{createdByUserId},</if>
+            <if test="document!=null">document=#{document},</if>
+            <if test="receiver!=null">receiver=#{receiver},</if>
+            <if test="attachment!=null">attachment=#{attachment},</if>
+            <if test="flowType!=null">flowType=#{flowType},</if>
+            <if test="type!=null">type=#{type},</if>
+        </trim>
+        WHERE id=#{id}
+    </update>
+
+</mapper>