diff --git a/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceAlarmPdu.java b/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceAlarmPdu.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4c695726bda13fb3e2b4b664311450361b0d186
--- /dev/null
+++ b/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceAlarmPdu.java
@@ -0,0 +1,231 @@
+package com.mortals.xhx.common.pdu.device;
+
+import com.mortals.framework.model.BaseEntityLong;
+
+import java.util.Date;
+
+public class DeviceAlarmPdu extends BaseEntityLong {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鍛婅鏃堕棿
+     */
+    private Date alarmTime;
+    /**
+     * 鍛婅璁惧Id
+     */
+    private Long alarmDevice;
+    /**
+     * 绔欑偣Id锛屾潵婧愬熀纭€鏈嶅姟骞冲彴
+     */
+    private Long siteId;
+    /**
+     * 鍛婅绫诲瀷,(0.绂荤嚎)
+     */
+    private Integer alarmType;
+    /**
+     * 鍛婅绾у埆(0.鍗遍櫓锛�1.娆¤锛�2.涓€鑸�)
+     */
+    private Integer alarmLevel;
+    /**
+     * 鎺ユ敹浜哄憳[璁惧绠$悊鐨勮矗浠讳汉]
+     */
+    private String alarmReceivePersonnel;
+    /**
+     * 鎺ユ敹浜哄憳鐢佃瘽
+     */
+    private String receivePersonnelTelephone;
+    /**
+     * 鍛婅鐘舵€�,鏉ヨ嚜宸ュ崟绯荤粺(0.鏈竻闄わ紝1.娓呴櫎鏈‘璁わ紝2.娓呴櫎宸茬‘璁�)
+     */
+    private Integer alarmStatus;
+    /**
+     * 鍛婅璇︾粏鍐呭
+     */
+    private String alarmContent;
+
+
+
+    public DeviceAlarmPdu(){}
+    /**
+     * 鑾峰彇 鍛婅鏃堕棿
+     * @return Date
+     */
+    public Date getAlarmTime(){
+        return alarmTime;
+    }
+    /**
+     * 璁剧疆 鍛婅鏃堕棿
+     * @param alarmTime
+     */
+    public void setAlarmTime(Date alarmTime){
+        this.alarmTime = alarmTime;
+    }
+    /**
+     * 鑾峰彇 鍛婅璁惧Id
+     * @return Long
+     */
+    public Long getAlarmDevice(){
+        return alarmDevice;
+    }
+    /**
+     * 璁剧疆 鍛婅璁惧Id
+     * @param alarmDevice
+     */
+    public void setAlarmDevice(Long alarmDevice){
+        this.alarmDevice = alarmDevice;
+    }
+    /**
+     * 鑾峰彇 绔欑偣Id锛屾潵婧愬熀纭€鏈嶅姟骞冲彴
+     * @return Long
+     */
+    public Long getSiteId(){
+        return siteId;
+    }
+    /**
+     * 璁剧疆 绔欑偣Id锛屾潵婧愬熀纭€鏈嶅姟骞冲彴
+     * @param siteId
+     */
+    public void setSiteId(Long siteId){
+        this.siteId = siteId;
+    }
+    /**
+     * 鑾峰彇 鍛婅绫诲瀷,(0.绂荤嚎)
+     * @return Integer
+     */
+    public Integer getAlarmType(){
+        return alarmType;
+    }
+    /**
+     * 璁剧疆 鍛婅绫诲瀷,(0.绂荤嚎)
+     * @param alarmType
+     */
+    public void setAlarmType(Integer alarmType){
+        this.alarmType = alarmType;
+    }
+    /**
+     * 鑾峰彇 鍛婅绾у埆(0.鍗遍櫓锛�1.娆¤锛�2.涓€鑸�)
+     * @return Integer
+     */
+    public Integer getAlarmLevel(){
+        return alarmLevel;
+    }
+    /**
+     * 璁剧疆 鍛婅绾у埆(0.鍗遍櫓锛�1.娆¤锛�2.涓€鑸�)
+     * @param alarmLevel
+     */
+    public void setAlarmLevel(Integer alarmLevel){
+        this.alarmLevel = alarmLevel;
+    }
+    /**
+     * 鑾峰彇 鎺ユ敹浜哄憳[璁惧绠$悊鐨勮矗浠讳汉]
+     * @return String
+     */
+    public String getAlarmReceivePersonnel(){
+        return alarmReceivePersonnel;
+    }
+    /**
+     * 璁剧疆 鎺ユ敹浜哄憳[璁惧绠$悊鐨勮矗浠讳汉]
+     * @param alarmReceivePersonnel
+     */
+    public void setAlarmReceivePersonnel(String alarmReceivePersonnel){
+        this.alarmReceivePersonnel = alarmReceivePersonnel;
+    }
+    /**
+     * 鑾峰彇 鎺ユ敹浜哄憳鐢佃瘽
+     * @return String
+     */
+    public String getReceivePersonnelTelephone(){
+        return receivePersonnelTelephone;
+    }
+    /**
+     * 璁剧疆 鎺ユ敹浜哄憳鐢佃瘽
+     * @param receivePersonnelTelephone
+     */
+    public void setReceivePersonnelTelephone(String receivePersonnelTelephone){
+        this.receivePersonnelTelephone = receivePersonnelTelephone;
+    }
+    /**
+     * 鑾峰彇 鍛婅鐘舵€�,鏉ヨ嚜宸ュ崟绯荤粺(0.鏈竻闄わ紝1.娓呴櫎鏈‘璁わ紝2.娓呴櫎宸茬‘璁�)
+     * @return Integer
+     */
+    public Integer getAlarmStatus(){
+        return alarmStatus;
+    }
+    /**
+     * 璁剧疆 鍛婅鐘舵€�,鏉ヨ嚜宸ュ崟绯荤粺(0.鏈竻闄わ紝1.娓呴櫎鏈‘璁わ紝2.娓呴櫎宸茬‘璁�)
+     * @param alarmStatus
+     */
+    public void setAlarmStatus(Integer alarmStatus){
+        this.alarmStatus = alarmStatus;
+    }
+    /**
+     * 鑾峰彇 鍛婅璇︾粏鍐呭
+     * @return String
+     */
+    public String getAlarmContent(){
+        return alarmContent;
+    }
+    /**
+     * 璁剧疆 鍛婅璇︾粏鍐呭
+     * @param alarmContent
+     */
+    public void setAlarmContent(String alarmContent){
+        this.alarmContent = alarmContent;
+    }
+
+
+
+
+    @Override
+    public int hashCode() {
+        return this.getId().hashCode();
+    }
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (obj instanceof DeviceAlarmPdu) {
+            DeviceAlarmPdu tmp = (DeviceAlarmPdu) obj;
+            if (this.getId() == tmp.getId()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder("");
+        sb.append(",alarmTime:").append(getAlarmTime());
+        sb.append(",alarmDevice:").append(getAlarmDevice());
+        sb.append(",siteId:").append(getSiteId());
+        sb.append(",alarmType:").append(getAlarmType());
+        sb.append(",alarmLevel:").append(getAlarmLevel());
+        sb.append(",alarmReceivePersonnel:").append(getAlarmReceivePersonnel());
+        sb.append(",receivePersonnelTelephone:").append(getReceivePersonnelTelephone());
+        sb.append(",alarmStatus:").append(getAlarmStatus());
+        sb.append(",alarmContent:").append(getAlarmContent());
+        return sb.toString();
+    }
+
+    public void initAttrValue(){
+
+        this.alarmTime = null;
+
+        this.alarmDevice = null;
+
+        this.siteId = null;
+
+        this.alarmType = null;
+
+        this.alarmLevel = null;
+
+        this.alarmReceivePersonnel = "";
+
+        this.receivePersonnelTelephone = "";
+
+        this.alarmStatus = 0;
+
+        this.alarmContent = "";
+    }
+
+}
diff --git a/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceModuleUsePdu.java b/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceModuleUsePdu.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d9dc50d65e08897bb16b582937d4e63ae5581ca
--- /dev/null
+++ b/common-lib/src/main/java/com/mortals/xhx/common/pdu/device/DeviceModuleUsePdu.java
@@ -0,0 +1,124 @@
+package com.mortals.xhx.common.pdu.device;
+
+import com.mortals.framework.model.BaseEntityLong;
+
+public class DeviceModuleUsePdu extends BaseEntityLong {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 妯″潡鍚嶇О
+     */
+    private String moduleName;
+    /**
+     * 妯″潡娑堟伅缂栫爜
+     */
+    private String moduleMsgCode;
+    /**
+     * 鎵€灞炶澶�
+     */
+    private Long deviceId;
+    /**
+     * 璋冪敤娆℃暟
+     */
+    private Long useNum;
+
+
+
+    public DeviceModuleUsePdu(){}
+    /**
+     * 鑾峰彇 妯″潡鍚嶇О
+     * @return String
+     */
+    public String getModuleName(){
+        return moduleName;
+    }
+    /**
+     * 璁剧疆 妯″潡鍚嶇О
+     * @param moduleName
+     */
+    public void setModuleName(String moduleName){
+        this.moduleName = moduleName;
+    }
+    /**
+     * 鑾峰彇 妯″潡娑堟伅缂栫爜
+     * @return String
+     */
+    public String getModuleMsgCode(){
+        return moduleMsgCode;
+    }
+    /**
+     * 璁剧疆 妯″潡娑堟伅缂栫爜
+     * @param moduleMsgCode
+     */
+    public void setModuleMsgCode(String moduleMsgCode){
+        this.moduleMsgCode = moduleMsgCode;
+    }
+    /**
+     * 鑾峰彇 鎵€灞炶澶�
+     * @return Long
+     */
+    public Long getDeviceId(){
+        return deviceId;
+    }
+    /**
+     * 璁剧疆 鎵€灞炶澶�
+     * @param deviceId
+     */
+    public void setDeviceId(Long deviceId){
+        this.deviceId = deviceId;
+    }
+    /**
+     * 鑾峰彇 璋冪敤娆℃暟
+     * @return Long
+     */
+    public Long getUseNum(){
+        return useNum;
+    }
+    /**
+     * 璁剧疆 璋冪敤娆℃暟
+     * @param useNum
+     */
+    public void setUseNum(Long useNum){
+        this.useNum = useNum;
+    }
+
+
+
+
+    @Override
+    public int hashCode() {
+        return this.getId().hashCode();
+    }
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (obj instanceof DeviceModuleUsePdu) {
+            DeviceModuleUsePdu tmp = (DeviceModuleUsePdu) obj;
+            if (this.getId() == tmp.getId()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public String toString(){
+        StringBuilder sb = new StringBuilder("");
+        sb.append(",moduleName:").append(getModuleName());
+        sb.append(",moduleMsgCode:").append(getModuleMsgCode());
+        sb.append(",deviceId:").append(getDeviceId());
+        sb.append(",useNum:").append(getUseNum());
+        return sb.toString();
+    }
+
+    public void initAttrValue(){
+
+        this.moduleName = "";
+
+        this.moduleMsgCode = "";
+
+        this.deviceId = null;
+
+        this.useNum = null;
+    }
+
+}
diff --git a/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceAlarmFeign.java b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceAlarmFeign.java
new file mode 100644
index 0000000000000000000000000000000000000000..88814e679c45d1ed6ea8246d6f61316d0cad50e9
--- /dev/null
+++ b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceAlarmFeign.java
@@ -0,0 +1,63 @@
+package com.mortals.xhx.feign.device;
+
+import com.mortals.framework.common.Rest;
+import com.mortals.xhx.common.pdu.RespData;
+import com.mortals.xhx.common.pdu.device.DeviceAlarmPdu;
+import com.mortals.xhx.common.pdu.device.DevicePdu;
+import com.mortals.xhx.feign.IFeign;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 璁惧鍛婅淇℃伅
+ */
+@FeignClient(name = "device-manager", path = "/m", fallbackFactory = DeviceAlarmFeignFallbackFactory.class)
+public interface IDeviceAlarmFeign extends IFeign {
+    /**
+     * 鏌ョ湅璁惧鍛婅淇℃伅鍒楄〃
+     *
+     * @param devicePdu
+     * @return
+     */
+    @PostMapping(value = "/device/alarm/info/list")
+    Rest<RespData<List<DeviceAlarmPdu>>> list(@RequestBody DeviceAlarmPdu devicePdu);
+
+
+    /**
+     * 鏌ョ湅璁惧鍛婅淇℃伅
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/device/alarm/info")
+    Rest<DeviceAlarmPdu> info(@RequestParam(value = "id") Long id);
+}
+
+@Slf4j
+@Component
+class DeviceAlarmFeignFallbackFactory implements FallbackFactory<IDeviceAlarmFeign> {
+
+    @Override
+    public IDeviceAlarmFeign create(Throwable throwable) {
+        return new IDeviceAlarmFeign() {
+
+            @Override
+            public Rest<RespData<List<DeviceAlarmPdu>>> list(DeviceAlarmPdu devicePdu) {
+                return Rest.fail("鏆傛椂鏃犳硶鑾峰彇璁惧鍛婅淇℃伅鍒楄〃锛岃绋嶅悗鍐嶈瘯!");
+            }
+
+            @Override
+            public Rest<DeviceAlarmPdu> info(Long id) {
+                return Rest.fail("鏆傛椂鏃犳硶鑾峰彇璁惧鍛婅淇℃伅锛岃绋嶅悗鍐嶈瘯!");
+            }
+        };
+    }
+}
diff --git a/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceModuleUseFeign.java b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceModuleUseFeign.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c91b3d7c67a49e4f9107ed93f94fb658e3cd869
--- /dev/null
+++ b/common-lib/src/main/java/com/mortals/xhx/feign/device/IDeviceModuleUseFeign.java
@@ -0,0 +1,46 @@
+package com.mortals.xhx.feign.device;
+
+import com.mortals.framework.common.Rest;
+import com.mortals.xhx.common.pdu.RespData;
+import com.mortals.xhx.common.pdu.device.DeviceAlarmPdu;
+import com.mortals.xhx.common.pdu.device.DeviceModuleUsePdu;
+import com.mortals.xhx.feign.IFeign;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * 璁惧妯″潡浣跨敤棰戠巼
+ */
+@FeignClient(name = "device-manager", path = "/m", fallbackFactory = DeviceModuleUseFeignFallbackFactory.class)
+public interface IDeviceModuleUseFeign extends IFeign {
+    /**
+     * 鏌ョ湅璁惧妯″潡浣跨敤棰戠巼
+     *
+     * @param devicePdu
+     * @return
+     */
+    @PostMapping(value = "/device/module/use/list")
+    Rest<RespData<List<DeviceModuleUsePdu>>> list(@RequestBody DeviceModuleUsePdu devicePdu);
+}
+
+@Slf4j
+@Component
+class DeviceModuleUseFeignFallbackFactory implements FallbackFactory<IDeviceModuleUseFeign> {
+
+    @Override
+    public IDeviceModuleUseFeign create(Throwable throwable) {
+        return new IDeviceModuleUseFeign(){
+
+            @Override
+            public Rest<RespData<List<DeviceModuleUsePdu>>> list(DeviceModuleUsePdu devicePdu) {
+                return Rest.fail("鏆傛椂鏃犳硶鑾峰彇璁惧妯″潡浣跨敤棰戠巼鍒楄〃锛岃绋嶅悗鍐嶈瘯!");
+            }
+        };
+    }
+}
diff --git a/sst-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceController.java b/sst-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceController.java
index 2aa6887142908a98566b2cd3b48860a1ff1941fd..84d04abb56951afd2c07025ba5ae2b8ba281b133 100644
--- a/sst-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceController.java
+++ b/sst-manager/src/main/java/com/mortals/xhx/module/device/web/DeviceController.java
@@ -8,18 +8,26 @@ import com.mortals.framework.model.PageInfo;
 import com.mortals.framework.model.Result;
 import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
 import com.mortals.xhx.common.code.YesNoEnum;
+import com.mortals.xhx.common.pdu.RespData;
+import com.mortals.xhx.common.pdu.device.DeviceAlarmPdu;
+import com.mortals.xhx.common.pdu.device.DeviceModuleUsePdu;
 import com.mortals.xhx.common.pdu.device.DevicePdu;
 import com.mortals.xhx.common.utils.BeanUtil;
+import com.mortals.xhx.feign.device.IDeviceAlarmFeign;
 import com.mortals.xhx.feign.device.IDeviceFeign;
+import com.mortals.xhx.feign.device.IDeviceModuleUseFeign;
 import com.mortals.xhx.module.device.model.DeviceEntity;
 import com.mortals.xhx.module.device.service.DeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 璁惧
@@ -35,6 +43,12 @@ public class DeviceController extends BaseCRUDJsonBodyMappingController<DeviceSe
     @Autowired
     private IDeviceFeign deviceFeign;
 
+    @Autowired
+    private IDeviceAlarmFeign deviceAlarmFeign;
+
+    @Autowired
+    private IDeviceModuleUseFeign deviceModuleUseFeign;
+
     @Override
     @PostMapping({"list"})
     @UnAuth
@@ -129,4 +143,96 @@ public class DeviceController extends BaseCRUDJsonBodyMappingController<DeviceSe
             return ret.toJSONString();
         }
     }
+
+    @PostMapping({"alarm/list"})
+    @UnAuth
+    public Rest<Object> alarmList(@RequestBody DeviceAlarmPdu query) {
+        Rest<Object> ret = new Rest();
+        Map<String, Object> model = new HashMap();
+        Context context = this.getContext();
+        String busiDesc = "鏌ヨ璁惧鍛婅淇℃伅鍒楄〃";
+
+        int code=1;
+        try {
+            PageInfo pageInfo = new PageInfo();
+            if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getPage())) {
+                pageInfo.setCurrPage(query.getPage());
+            }
+
+            if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getSize())) {
+                pageInfo.setPrePageResult(query.getSize());
+            }
+            Result<DeviceAlarmPdu> result = new Result();
+            Rest<RespData<List<DeviceAlarmPdu>>> rest = deviceAlarmFeign.list(query);
+            if (rest.getCode().equals(YesNoEnum.YES.getValue())) {
+                List<DeviceAlarmPdu> collect = rest.getData().getData();
+                result.setList(collect);
+                pageInfo.setTotalResult(collect.size());
+                result.setPageInfo(pageInfo);
+                result.setDict(rest.getDict());
+            }
+            model.put("data", result.getList());
+            model.put("pageInfo", result.getPageInfo());
+            model.put("dict", result.getDict());
+            this.parsePageInfo(model, result.getPageInfo());
+            model.put("message_info", busiDesc + "鎴愬姛");
+            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+        } catch (Exception var9) {
+            code = -1;
+            this.doException(this.request, busiDesc, model, var9);
+        }
+
+        this.init(model, context);
+        ret.setCode(code);
+        ret.setData(model);
+        ret.setDict(model.get("dict"));
+        ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
+        return ret;
+    }
+
+    @PostMapping({"module/use/list"})
+    @UnAuth
+    public Rest<Object> moduleUseList(@RequestBody DeviceModuleUsePdu query) {
+        Rest<Object> ret = new Rest();
+        Map<String, Object> model = new HashMap();
+        Context context = this.getContext();
+        String busiDesc = "鏌ヨ璁惧妯″潡浣跨敤棰戠巼淇℃伅鍒楄〃";
+
+        int code=1;
+        try {
+            PageInfo pageInfo = new PageInfo();
+            if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getPage())) {
+                pageInfo.setCurrPage(query.getPage());
+            }
+
+            if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getSize())) {
+                pageInfo.setPrePageResult(query.getSize());
+            }
+            Result<DeviceModuleUsePdu> result = new Result();
+            Rest<RespData<List<DeviceModuleUsePdu>>> rest = deviceModuleUseFeign.list(query);
+            if (rest.getCode().equals(YesNoEnum.YES.getValue())) {
+                List<DeviceModuleUsePdu> collect = rest.getData().getData();
+                result.setList(collect);
+                pageInfo.setTotalResult(collect.size());
+                result.setPageInfo(pageInfo);
+                result.setDict(rest.getDict());
+            }
+            model.put("data", result.getList());
+            model.put("pageInfo", result.getPageInfo());
+            model.put("dict", result.getDict());
+            this.parsePageInfo(model, result.getPageInfo());
+            model.put("message_info", busiDesc + "鎴愬姛");
+            this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
+        } catch (Exception var9) {
+            code = -1;
+            this.doException(this.request, busiDesc, model, var9);
+        }
+
+        this.init(model, context);
+        ret.setCode(code);
+        ret.setData(model);
+        ret.setDict(model.get("dict"));
+        ret.setMsg(model.get("message_info") == null ? "" : model.remove("message_info").toString());
+        return ret;
+    }
 }
\ No newline at end of file