diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamReq.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamReq.java
new file mode 100644
index 0000000..0c83a6a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamReq.java
@@ -0,0 +1,32 @@
+package com.supwisdom.dlpay.api.bean;
+
+
+public class PosPayGolbalParamReq extends APIRequest {
+    private String devphyid;
+    private String upgrade_url;
+    private String upgrade_version;
+
+    public String getDevphyid() {
+        return devphyid;
+    }
+
+    public void setDevphyid(String devphyid) {
+        this.devphyid = devphyid;
+    }
+
+    public String getUpgrade_url() {
+        return upgrade_url;
+    }
+
+    public void setUpgrade_url(String upgrade_url) {
+        this.upgrade_url = upgrade_url;
+    }
+
+    public String getUpgrade_version() {
+        return upgrade_version;
+    }
+
+    public void setUpgrade_version(String upgrade_version) {
+        this.upgrade_version = upgrade_version;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java
new file mode 100644
index 0000000..8b2b6ba
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.api.bean;
+
+public class PosPayGolbalParamResp extends APIResponse {
+    private String upgrade_version;
+    private String upgrade_url;
+
+    public String getUpgrade_version() {
+        return upgrade_version;
+    }
+
+    public void setUpgrade_version(String upgrade_version) {
+        this.upgrade_version = upgrade_version;
+    }
+
+    public String getUpgrade_url() {
+        return upgrade_url;
+    }
+
+    public void setUpgrade_url(String upgrade_url) {
+        this.upgrade_url = upgrade_url;
+    }
+}
+
+
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
index e8329ae..e35d45c 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
@@ -5,9 +5,9 @@
 
 public class PosPayQuerysalesResp extends APIResponse {
   private String salesdate;
-  private Double salesamt;
+  private Integer salesamt;
   private BigInteger salescnt;
-  private Double managefeeamt;
+  private Integer managefeeamt;
   private BigInteger managefeecnt;
 
   public String getSalesdate() {
@@ -18,11 +18,11 @@
     this.salesdate = salesdate;
   }
 
-  public Double getSalesamt() {
+  public Integer getSalesamt() {
     return salesamt;
   }
 
-  public void setSalesamt(Double salesamt) {
+  public void setSalesamt(Integer salesamt) {
     this.salesamt = salesamt;
   }
 
@@ -34,11 +34,11 @@
     this.salescnt = salescnt;
   }
 
-  public Double getManagefeeamt() {
+  public Integer getManagefeeamt() {
     return managefeeamt;
   }
 
-  public void setManagefeeamt(Double managefeeamt) {
+  public void setManagefeeamt(Integer managefeeamt) {
     this.managefeeamt = managefeeamt;
   }
 
diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java b/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
index 19d8a51..1c75722 100644
--- a/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
@@ -17,12 +17,12 @@
     private PosPayService posPayService;
 
     //设备签到
-  @RequestMapping(value = "/login", method = RequestMethod.POST)
-  @ResponseBody
-  public PosPayLoginResp cardreaderlogin(@ModelAttribute PosPayLoginReq req) {
-      PosPayLoginResp resp = posPayService.doLogin(req);
-    return resp;
-  }
+    @RequestMapping(value = "/login", method = RequestMethod.POST)
+    @ResponseBody
+    public PosPayLoginResp cardreaderlogin(@ModelAttribute PosPayLoginReq req) {
+        PosPayLoginResp resp = posPayService.doLogin(req);
+        return resp;
+    }
 
     //支付初始化
     @RequestMapping(value = "/payinit", method = RequestMethod.POST)
@@ -103,4 +103,12 @@
     }
 
 
+    @RequestMapping(value = "/globalparam", method = RequestMethod.POST)
+    @ResponseBody
+    public PosPayGolbalParamResp querysales(@ModelAttribute PosPayGolbalParamReq req) {
+        PosPayGolbalParamResp resp = posPayService.getBusinessParam(req);
+        return resp;
+    }
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/PosPayService.java b/src/main/java/com/supwisdom/dlpay/api/service/PosPayService.java
index ea60192..d59cbef 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/PosPayService.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/PosPayService.java
@@ -28,5 +28,8 @@
 
     PosPayOfflineDtlResp saveOfflineDtl(PosPayOfflineDtlReq req);
 
+    PosPayGolbalParamResp getBusinessParam(PosPayGolbalParamReq req);
+
+
     //void checkOfflineDtl();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
index f5a235f..69c19cb 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
@@ -2,6 +2,8 @@
 
 import com.supwisdom.dlpay.api.bean.*;
 import com.supwisdom.dlpay.api.service.PosPayService;
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
 import com.supwisdom.dlpay.framework.domain.TShopSettlement;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.api.util.ErrorCode;
@@ -45,6 +47,8 @@
     private DeviceParamService deviceParamService;
     @Autowired
     private ShopSettlementService shopSettlementService;
+    @Autowired
+    private BusinessparaDao businessparaDao;
 
 
 
@@ -162,7 +166,7 @@
         }
 
         TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
-        if(null==tCard){
+        if(null==customer){
             resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
             resp.setRetmsg("卡对应客户不存在");
             return resp;
@@ -210,6 +214,8 @@
         tTransdtl.setBillno(systemUtilService.getRefno());
         tTransdtl.setShopid(tDevice.getShopid());
         tTransdtl.setAcctime(req.getTermtime());
+
+        tTransdtl.setCusttype(customer.getCusttype());
         tTransdtl.setTransdate(DateUtil.getNow("yyyyMMdd"));
         tTransdtl.setTranstime(DateUtil.getNow("HHmmss"));
         tTransdtl.setCardno(req.getCardno());
@@ -666,19 +672,36 @@
         return resp;
     }
 
-  /*  @Override
-    public void checkOfflineDtl() {
-        List<TOfflineTransDtl> transDtls=offlineTransDtlService.getUncheckOfflineTransdtl(DateUtil.getNow("yyyyMMdd"));
-        if(transDtls.size()<1){
-            return;
-        }
-        for(TOfflineTransDtl dtl:transDtls){
-
-
-
+    @Override
+    public PosPayGolbalParamResp getBusinessParam(PosPayGolbalParamReq req) {
+        PosPayGolbalParamResp resp=new PosPayGolbalParamResp();
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        if (null == device) {
+            resp.setRetcode(ErrorCode.E_DB_QRY);
+            resp.setRetmsg("设备物理ID不存在");
+            return resp;
 
         }
+        if (device.getState() != 1) {
+            resp.setRetcode(ErrorCode.ERRIF_OTHER);
+            resp.setRetmsg("设备状态错误");
+            return resp;
+        }
+        TBusinesspara url=businessparaDao.findByParakey(req.getUpgrade_url());
+        TBusinesspara version=businessparaDao.findByParakey((req.getUpgrade_version()));
+        if(null==url||null==version){
+            resp.setRetcode(ErrorCode.E_EMPTY_PARAM);
+            resp.setRetmsg("请求参数未配置");
+            return resp;
+        }
+        resp.setUpgrade_url(url.getParaval());
+        resp.setUpgrade_version(version.getParaval());
 
-    }*/
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("获取成功");
+
+        return resp;
+    }
+
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/util/ErrorCode.java b/src/main/java/com/supwisdom/dlpay/api/util/ErrorCode.java
index 57a7905..13e367f 100644
--- a/src/main/java/com/supwisdom/dlpay/api/util/ErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/api/util/ErrorCode.java
@@ -87,8 +87,8 @@
   public final static String E_DB_CONSTRAINTVIOLATIONEXCEPTION = "111";//唯一性冲突
   public final static String E_DB_SEQ_REFNO_R = "1000";// 获取交易参考号序列错误
 
-  public final static String E_EMPTY_PARAM = "231"; //请求参数为空
-  public final static String E_EMPTY_AREA = "232"; //设备、用户不存在或没有配置校区
+  public final static String E_EMPTY_AREA = "232"; //设备、用户不存在
+  public final static String E_EMPTY_PARAM = "231"; //请求参数为空或没有配置校区
   public final static String E_CHECK_AREA = "233"; //设备、用户校区不匹配
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
index e4e6294..6882462 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
@@ -4,15 +4,15 @@
 import java.math.BigInteger;
 
 public class ManageFeeAmtBean {
-    private Double managefeeamt;
+    private Integer managefeeamt;
 
     private BigInteger managefeecnt;
 
-    public Double getManagefeeamt() {
+    public Integer getManagefeeamt() {
         return managefeeamt;
     }
 
-    public void setManagefeeamt(Double managefeeamt) {
+    public void setManagefeeamt(Integer managefeeamt) {
         this.managefeeamt = managefeeamt;
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
index 7f30ca0..b036507 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
@@ -4,15 +4,15 @@
 import java.math.BigInteger;
 
 public class SalesAmtBean{
-    private Double salesamt;
+    private Integer salesamt;
 
     private BigInteger salescnt;
 
-    public Double getSalesamt() {
+    public Integer getSalesamt() {
         return salesamt;
     }
 
-    public void setSalesamt(Double salesamt) {
+    public void setSalesamt(Integer salesamt) {
         this.salesamt = salesamt;
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
index b0f0442..6e2d20c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
@@ -208,7 +208,7 @@
         List<ManageFeeAmtBean> list = query.getResultList();
         ManageFeeAmtBean bean=list.get(0);
         if(bean.getManagefeeamt()==null){
-            bean.setManagefeeamt(0.0);
+            bean.setManagefeeamt(0);
         }
         return bean;
     }
@@ -226,7 +226,7 @@
         List<SalesAmtBean> list = query.getResultList();
         SalesAmtBean bean=list.get(0);
         if(bean.getSalesamt()==null){
-            bean.setSalesamt(0.0);
+            bean.setSalesamt(0);
         }
         return bean;
     }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 6f33be3..9e49b9f 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -105,8 +105,8 @@
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (1, NULL, 1, NULL, '', '/custtype/index', '客户类型维护', 1, 22);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (23, NULL, 1, NULL, 'layui-icon-home', '/customer/index', '就餐对象管理', 3, 22);
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
-INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '全局参数配置', 1, 10);
-INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
+INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '系统参数配置', 1, 10);
+INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '全局参数配置', 2, 10);
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
 
 INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('dinner', '200000', '20190709102922', '晚餐');
@@ -136,6 +136,7 @@
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0017', 10, NULL, '402890866be40f77016be4c848b9002f');
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0018', 11, NULL, '402890866be40f77016be4c848b9002f');
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0019', 12, NULL, '402890866be40f77016be4c848b9002f');
+
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001a', 13, NULL, '402890866be40f77016be4c848b9002f');
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001b', 14, NULL, '402890866be40f77016be4c848b9002f');
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001c', 15, NULL, '402890866be40f77016be4c848b9002f');
@@ -427,17 +428,20 @@
 INSERT INTO "tb_custtype"(custtypeid,custtypename,feetype) VALUES (2, '外部人员', NULL);
 INSERT INTO "tb_custtype"(custtypeid,custtypename,feetype) VALUES (1, '内部人员', NULL);
 
+insert into "tb_businesspara"(parakey,paravalue) values('upgrade_url','http://172.28.43.252:9977/file/download');
+insert into "tb_businesspara"(parakey,paravalue) values('upgrade_version','posa711dali-1.');
+
 
 CREATE SEQUENCE SEQ_REFNO
 INCREMENT BY 1
 START WITH 1
 MAXVALUE 99999999
 CYCLE
-CACHE 10;
+CACHE 1;
 
 CREATE SEQUENCE SEQ_CARDVERNO
 INCREMENT BY 1
 START WITH 1
 MAXVALUE 99999999
 CYCLE
-CACHE 10;
\ No newline at end of file
+CACHE 1;
\ No newline at end of file
