diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
index bcbf64e..f7ed535 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
@@ -1,11 +1,12 @@
-package com.supwisdom.activities.consume.bean
-
-/**
- ** create by zzq on 2019/11/5
- ** @desc 屏保参数
- **/
-class ScreenSaverBean {
-    var operationTime = 0L //ms
-    var operationFlag = false //是否操作
-    var flag = false //是否屏保
+package com.supwisdom.activities.consume.bean
+
+/**
+ ** create by zzq on 2019/11/5
+ ** @desc 屏保参数
+ **/
+class ScreenSaverBean {
+    var operationTime = 0L //ms
+    var operationFlag = false //是否操作
+    var flag = false //是否屏保
+    var gcTime = 0L //ms
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index 6ebab3c..f89263d 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -20,32 +20,42 @@
  ** create by zzq on 2019/7/25
  ** @desc 刷卡消费
  **/
-class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {
+class CardPayService constructor(
+    private val iConsumeView: IConsumeView,
+    private val handler: Handler
+) {
     private val TAG = "CardPayService"
     private val pos = SPApplication.getInstance().getPos()
     private val runnable = CardPayRunnable()
     private val consumeApi = ConsumeApi()
+
     @Volatile
     private var isExist = false
+
     @Volatile
     private var clickStat = ClickStat.INIT
+
     @Volatile
     private var amount: Int = 0
+
     @Volatile
     private var payQueryConfirm = false
     var isFixMode = false
     private var thread: Thread? = null
     private var cardBean: CardBean? = null
+
     /**
      * 防止定额连续消费
      */
     private val lastPayBean = LastPayBean()
+
     @Volatile
     private var operation = false
     private val screenSaverBean = ScreenSaverBean()
 
     init {
         screenSaverBean.operationTime = System.currentTimeMillis()
+        screenSaverBean.gcTime = screenSaverBean.operationTime
     }
 
     fun start() {
@@ -137,7 +147,10 @@
                             try {
                                 doReverse()
                             } catch (ex: CardPayCancelFailError) {
-                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))
+                                sendMsg(
+                                    PublicDef.MSG_CARD_REVERSE_FAIL,
+                                    getRvsErrorInfo(ex.message)
+                                )
                             } catch (ex: Exception) {
                                 ex.printStackTrace()
                                 LogUtil.d(
@@ -180,7 +193,8 @@
             )
             if (resp != null && resp.retcode == HttpStatus.SC_OK) {
                 try {
-                    val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
+                    val retBean =
+                        GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
                     if (retBean.retcode == PublicDef.SUCCESS) {
                         cardBean!!.username = retBean.username
                         cardBean!!.userid = retBean.userid
@@ -207,22 +221,63 @@
                 screenSaverBean.operationTime = tt
                 screenSaverBean.operationFlag = true
             }
-            if (tt > screenSaverBean.operationTime &&
+            if (tt < screenSaverBean.operationTime ||
                 tt - screenSaverBean.operationTime > PublicDef.SCREEN_SAVER_GAP
             ) {
                 /**
                  * 连续半小时无操作屏保
                  */
                 screenSaverBean.operationTime = tt
-                screenSaverBean.flag = true
                 screenSaverBean.operationFlag = false
-                sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")
+                val screenCtl = pos.getControlPara(PublicDef.CONTROL_SCREEN_PROTECT)
+                if (screenCtl?.paraval != null && "1" == screenCtl.paraval) {
+                    screenSaverBean.flag = true
+                    sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")
+                }
+                val rebootCtl = pos.getControlPara(PublicDef.CONTROL_REBOOT_ENABLE)
+                if (rebootCtl?.paraval != null && "1" == rebootCtl.paraval) {
+                    val nowtime = DateUtil.getNowTimeNoFormat()
+                    /**
+                     * 凌晨1点-3点判断做设备重启
+                     */
+                    if (nowtime > "010000" && nowtime < "030000") {
+                        val ctlRecord = pos.getControlPara(PublicDef.CONTROL_REBOOT_DATE)
+                        val nowdate = DateUtil.getNowDateNoFormat()
+                        if (ctlRecord?.paraval == null || ctlRecord.paraval != nowdate) {
+                            LogUtil.i(TAG, "设备已自动重启")
+                            pos.replaceControlPara(ControlParaRecord().apply {
+                                this.paraname = PublicDef.CONTROL_REBOOT_DATE
+                                this.paraval = nowdate
+                            })
+                            CommonUtil.restartDevice(iConsumeView.getActivity())
+                        }
+                    }
+                }
             } else {
                 if (screenSaverBean.operationFlag && screenSaverBean.flag) {
                     screenSaverBean.flag = false
                     sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")
                 }
             }
+            if (SPApplication.getInstance().isSynoCodeActive()) {
+                if (tt < screenSaverBean.gcTime ||
+                    tt - screenSaverBean.gcTime > PublicDef.APP_GC_SYNO_PERIOD
+                ) {
+//                LogUtil.d(TAG, "app auto do gc!!!!!!!!!!!!")
+//                Log.e(TAG, "app auto do gc!!!!!!!!!!!!")
+                    screenSaverBean.gcTime = tt
+                    CommonUtil.GC()
+                }
+            } else {
+                if (tt < screenSaverBean.gcTime ||
+                    tt - screenSaverBean.gcTime > PublicDef.APP_GC_PERIOD
+                ) {
+//                LogUtil.d(TAG, "app auto do gc!!!!!!!!!!!!")
+//                Log.e(TAG, "app auto do gc!!!!!!!!!!!!")
+                    screenSaverBean.gcTime = tt
+                    CommonUtil.GC()
+                }
+            }
         }
 
         private fun showCardUserInfo() {
@@ -327,7 +382,10 @@
             }
         }
 
-        private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
+        private fun checkOnlineReverseVaild(
+            unionRecord: TransdtlUnionRecord,
+            record: TransdtlOnlineRecord
+        ) {
             if (record.cardphyid != cardBean!!.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
@@ -353,7 +411,10 @@
             }
         }
 
-        private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
+        private fun checkOfflineReverseVaild(
+            unionRecord: TransdtlUnionRecord,
+            record: TransdtlOfflineRecord
+        ) {
             if (record.cardphyid != cardBean!!.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
@@ -418,7 +479,10 @@
             /**
              * 手动取消交易
              */
-            LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")
+            LogUtil.e(
+                TAG,
+                "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]"
+            )
             throw CardPayInterruptError("交易取消")
         }
 
@@ -526,7 +590,8 @@
             }
 
             val whiteRecord =
-                pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")
+                pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!)
+                    ?: throw CardPayFailError("卡无权限")
             when (whiteRecord.status) {
                 "normal" -> {
 
@@ -539,7 +604,11 @@
                 else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
             }
 
-            val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)
+            val payamt = pos.getTransdtlOfflineAmt(
+                offRecord.transdate!!,
+                offRecord.cardno!!,
+                offRecord.cardphyid!!
+            )
             if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {
                 throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))
             }
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index c3a16c7..fc78d1c 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -68,6 +68,18 @@
         } else {
             kvMap[index++] = ControlParaRecord("晟元扫码>>", "关闭")
         }
+        var ctl = pos.getControlPara(PublicDef.CONTROL_REBOOT_ENABLE)
+        if (ctl?.paraval == "1") {
+            kvMap[index++] = ControlParaRecord("凌晨重启>>", "开启")
+        } else {
+            kvMap[index++] = ControlParaRecord("凌晨重启>>", "关闭")
+        }
+        ctl = pos.getControlPara(PublicDef.CONTROL_SCREEN_PROTECT)
+        if (ctl?.paraval == "1") {
+            kvMap[index++] = ControlParaRecord("设备屏保>>", "开启")
+        } else {
+            kvMap[index++] = ControlParaRecord("设备屏保>>", "关闭")
+        }
         kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
         kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
         kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index dec3a26..da6eee5 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -115,6 +115,28 @@
                 "max_day_offline_amt" -> record.maxDayOfflineAmt = it.paraval!!.toInt()
                 "communicate_time" -> record.commTime = it.paraval!!.toInt()
                 "syno_code" -> record.synoCode = it.paraval == "1"
+                "reboot_enable" -> {
+                    /**
+                     * 设备凌晨自重启 1--开启
+                     */
+                    pos.replaceControlPara(
+                        ControlParaRecord(
+                            PublicDef.CONTROL_REBOOT_ENABLE,
+                            it.paraval ?: "0"
+                        )
+                    )
+                }
+                "screen_protect" -> {
+                    /**
+                     * 设备长时间待机时屏保 1--开启
+                     */
+                    pos.replaceControlPara(
+                        ControlParaRecord(
+                            PublicDef.CONTROL_SCREEN_PROTECT,
+                            it.paraval ?: "0"
+                        )
+                    )
+                }
             }
         }
         if (record.heatBeat == 0) {
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 119217b..d46891b 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -12,10 +12,12 @@
 import android.net.Uri
 import android.os.Build
 import android.os.PowerManager
+import android.os.Process
 import android.provider.Settings
 import android.view.WindowManager
 import android.widget.EditText
 import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.splash.SplashActivity
 import okhttp3.internal.and
 import java.io.File
 import java.io.FileOutputStream
@@ -311,4 +313,33 @@
         }
         return ""
     }
+
+    /**
+     * 手动GC
+     */
+    fun GC() {
+        Runtime.getRuntime().gc()
+    }
+
+    /**
+     * 重启整个APP
+     *
+     * @param context
+     */
+    fun restartAPP(context: Context) {
+        val intent = Intent(context, SplashActivity::class.java)
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+        context.startActivity(intent)
+        Process.killProcess(Process.myPid())
+    }
+
+    /**
+     * 重启设备
+     *
+     * @param context
+     */
+    fun restartDevice(context: Context) {
+        val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+        pm.reboot(null)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 2ddbf96..f0d22d9 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -82,6 +82,8 @@
 
     const val CODE_SAME_FORBID_TIME: Long = 10 * 1000
     const val CAMERA_FIX_PAY_PERIOD: Long = 30 * 60 * 1000
+    const val APP_GC_PERIOD: Long = 10 * 60 * 1000
+    const val APP_GC_SYNO_PERIOD: Long = 6 * 60 * 60 * 1000
 
     /**
      * 本地全局控制参数
@@ -90,7 +92,9 @@
     const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
     const val CONTROL_DEBUG_ENABLE = "debugenable"
     const val CONTROL_SYNOCODE_ACTIVE = "synocodeactive"
-
+    const val CONTROL_REBOOT_ENABLE = "rebootenable"
+    const val CONTROL_REBOOT_DATE = "rebootdate"
+    const val CONTROL_SCREEN_PROTECT = "screenprotect"
     /**
      * 消费冲正时限
      */
