diff --git a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
index c4d83a6..6de832e 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -40,7 +40,7 @@
         return "apph5/remoteMintUIH5";
     }
 
-    //加载用户有权限开门的设备
+    //根据用户使用次数加载用户有权限开门的设备---常使用设备优先的排序原则
     @ResponseBody
     @RequestMapping("/loadAppDevList")
     public Map loadAppDevList(@RequestParam(value = "userId",required = true,defaultValue = "")String userId){
@@ -104,13 +104,19 @@
                 }
             }
 
-                String tmpVal = rmtDev.substring(0, devNo - 1) + ctrlcode + rmtDev.substring(devNo);
-                RedisUtil.set("remote_" + ncDevice.getDevphyid(), tmpVal);
-                boolean b = appService.saveAppTDoorDtlByUserIdAndDevId(devId, userId);
-                if (b=false){
-                    message="开门未成功!";
-                }
+            String tmpVal = rmtDev.substring(0, devNo - 1) + ctrlcode + rmtDev.substring(devNo);
+            RedisUtil.set("remote_" + ncDevice.getDevphyid(), tmpVal);
+            //每次开门成功记录 此用户开门设备 次数  以便查询时根据经常使用设备进行 查询
+            boolean a = appService.recordFre(userId, Integer.parseInt(devId));
+            if (a=false){
+                message="记录开门次数失败!";
+            }
 
+            //存储流水
+            boolean b = appService.saveAppTDoorDtlByUserIdAndDevId(devId, userId);
+            if (b=false){
+                message=message+"流水存储失败!";
+            }
 
         }catch (Exception e){
             e.printStackTrace();
diff --git a/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java b/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
index 0b956b5..1322745 100644
--- a/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
+++ b/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.app.dao;
 
 
+import com.supwisdom.dlpay.app.domain.TAppDevFre;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 
 import java.util.List;
@@ -10,4 +11,13 @@
 
     //获取app远程开门最大流水号
     public String getMaxAppRmtSeqNo();
+
+    //获取用户对指定设备的开门次数
+    public int getDevAppFreByUserId(String userId,int devId);
+
+    //修改设备开门次数
+    public int updateFreByUserIdAndDevId(String userId,int devId,int frequency);
+
+    //保存AppDevFre对象
+    public boolean saveAppDevFre(TAppDevFre bean);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java b/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
index 150e0bb..1df919d 100644
--- a/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.app.dao.impl;
 
 import com.supwisdom.dlpay.app.dao.AppDao;
+import com.supwisdom.dlpay.app.domain.TAppDevFre;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
@@ -20,9 +21,11 @@
     @Transactional
     @Override
     public List<TNcDevice> findAllDevByUserId(String userId) {
-        String sql = "select a.* from t_nc_device a where a.devtype='R' and a.deviceid in " +
-                " (select b.deviceid from t_nc_cardlist b where b.operflag='A' and b.syncflag='Y' and b.custid=?1 ) " +
-                " order by a.deviceid ";
+        String sql = "select a.* from t_nc_device a  " +
+                " left join tb_app_devfre c on a.deviceid=c.deviceid " +
+                " where a.devtype='R' and a.deviceid in  " +
+                "    (select b.deviceid from t_nc_cardlist b where b.operflag='A' and b.syncflag='Y' and b.custid=?1 )  " +
+                " order by c.frequency desc ";
         Query query = entityManager.createNativeQuery(sql, TNcDevice.class);
         query.setParameter(1, userId);
         List<TNcDevice> list = query.getResultList();
@@ -43,4 +46,43 @@
         }
         return null;
     }
+
+    @Transactional
+    @Override
+    public int getDevAppFreByUserId(String userId, int devId) {
+        String sql = " select frequency from tb_app_devfre where custid=?1 and deviceid=?2 ";
+        Query query = entityManager.createNativeQuery(sql);
+        query.setParameter(1, userId);
+        query.setParameter(2, devId);
+        List list = query.getResultList();
+        if (list!=null && list.size()>0 && list.get(0)!=null){
+            return (int)list.get(0);
+        }
+        return 0;
+    }
+
+    @Transactional
+    @Override
+    public int updateFreByUserIdAndDevId(String userId, int devId,int frequency) {
+        String sql = "update tb_app_devfre set frequency=?1 where custid=?2 and deviceid=?3 ";
+        Query query = entityManager.createNativeQuery(sql);
+        query.setParameter(1, frequency);
+        query.setParameter(2, userId);
+        query.setParameter( 3, devId);
+        int i = query.executeUpdate();
+        return i;
+    }
+
+    @Transactional
+    @Override
+    public boolean saveAppDevFre(TAppDevFre bean) {
+        boolean flag=false;
+        try {
+            entityManager.persist(bean);
+            flag=true;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return flag;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFre.java b/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFre.java
new file mode 100644
index 0000000..d7a1c9d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFre.java
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.app.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_APP_DEVFRE")
+public class TAppDevFre {
+    private TAppDevFreId Id;
+
+    private Integer frequency;
+
+    public TAppDevFre() {
+    }
+
+    public TAppDevFre(TAppDevFreId id, Integer frequency) {
+        Id = id;
+        this.frequency = frequency;
+    }
+
+    @EmbeddedId
+    @AttributeOverrides({
+            @AttributeOverride(name = "custId", column = @Column(name = "CUSTID", nullable = false, length = 32)),
+            @AttributeOverride(name = "deviceId", column = @Column(name = "DEVICEID", nullable = false, length = 32)) })
+    public TAppDevFreId getId() {
+        return Id;
+    }
+
+    public void setId(TAppDevFreId id) {
+        Id = id;
+    }
+
+    @Column(name = "FREQUENCY", nullable = false,length = 32)
+    public Integer getFrequency() {
+        return frequency;
+    }
+
+    public void setFrequency(Integer frequency) {
+        this.frequency = frequency;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFreId.java b/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFreId.java
new file mode 100644
index 0000000..9b87cb7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/app/domain/TAppDevFreId.java
@@ -0,0 +1,37 @@
+package com.supwisdom.dlpay.app.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+@Embeddable
+public class TAppDevFreId implements Serializable {
+    private String custId;
+    private int deviceId;
+
+    public TAppDevFreId() {
+    }
+
+    public TAppDevFreId(String custId, int deviceId) {
+        this.custId = custId;
+        this.deviceId = deviceId;
+    }
+
+    @Column(name = "CUSTID", nullable = false, length = 32)
+    public String getCustId() {
+        return custId;
+    }
+
+    public void setCustId(String custId) {
+        this.custId = custId;
+    }
+
+    @Column(name = "DEVICEID", nullable = false, length = 32)
+    public int getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(int deviceId) {
+        this.deviceId = deviceId;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/app/service/AppService.java b/src/main/java/com/supwisdom/dlpay/app/service/AppService.java
index 4a958f7..defa67b 100644
--- a/src/main/java/com/supwisdom/dlpay/app/service/AppService.java
+++ b/src/main/java/com/supwisdom/dlpay/app/service/AppService.java
@@ -8,11 +8,16 @@
 
 public interface AppService {
 
-    //根据userId获取此用户所有有权限的开门的设备--读头
+    //根据userId获取此用户所有有权限的开门的设备--读头  并根据用户常用设备进行排序,如果为新用户则默认排序
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> findAllDevByUserId(String userId);
 
     //根据设备编号和userId存储手机远程开门流水
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveAppTDoorDtlByUserIdAndDevId(String devId,String userId);
+
+    //根据用户和开门设备 记录开门次数
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean recordFre(String userId,int devId);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
index b7a759d..e74bcf3 100644
--- a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
@@ -3,6 +3,8 @@
 import com.google.gson.Gson;
 import com.supwisdom.dlpay.app.bean.CustomerInfo;
 import com.supwisdom.dlpay.app.dao.AppDao;
+import com.supwisdom.dlpay.app.domain.TAppDevFre;
+import com.supwisdom.dlpay.app.domain.TAppDevFreId;
 import com.supwisdom.dlpay.app.service.AppService;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.util.DateUtil;
@@ -143,4 +145,41 @@
 
     }
 
+    @Override
+    public boolean recordFre(String userId, int devId) {
+        boolean flag = false;
+        try {
+            int fre = 0;
+            String freTmp = RedisUtil.get("userId_" + userId + "_devId_" + devId + "_fre");
+            if (freTmp==null || "0".equals(freTmp) || "-5".equals(freTmp)){
+                fre = appDao.getDevAppFreByUserId(userId, devId);
+            }else {
+                fre = Integer.parseInt(freTmp);
+            }
+
+            if (fre!=0){
+                appDao.updateFreByUserIdAndDevId(userId, devId, fre+1);
+                RedisUtil.set("userId_" + userId + "_devId_" + devId + "_fre",fre+1+"");
+            }else {
+                TAppDevFreId tAppDevFreId = new TAppDevFreId();
+                tAppDevFreId.setCustId(userId);
+                tAppDevFreId.setDeviceId(devId);
+                TAppDevFre tAppDevFre = new TAppDevFre();
+                tAppDevFre.setId(tAppDevFreId);
+                tAppDevFre.setFrequency(1);
+
+                appDao.saveAppDevFre(tAppDevFre);
+
+                RedisUtil.set("userId_" + userId + "_devId_" + devId + "_fre",1+"");
+            }
+            flag=true;
+
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        return flag;
+    }
+
 }
