diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 7760e30..22ed8fd 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -26,4 +26,7 @@
 
 payapi.url=https://yy.dlsmk.cn/payapi
 
-payapi.appid=200001
\ No newline at end of file
+payapi.appid=200001
+
+cron.offlinedtl=0/30 * * * * ?
+payapi.logintime=0 0/20 * * * ? 
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
new file mode 100644
index 0000000..a4cc8ed
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
@@ -0,0 +1,52 @@
+package com.supwisdom.dlpay;
+
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+@Configuration      //1.主要用于标记配置类，兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+public class AppLoginRunner implements ApplicationRunner {
+    private static final Logger logger = LoggerFactory.getLogger(AppLoginRunner.class);
+
+    @Autowired
+    private ApiLoginProxy apiLoginProxy;
+    @Autowired
+    private BusinessparaDao businessparaDao;
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        logger.info("登录核心平台");
+        doLogin();
+    }
+
+
+    @Scheduled(cron = "${payapi.logintime}")
+    private void doLogin() {
+        String appid=businessparaDao.findByParakey("payapi.appid").getParaval();
+        String secret=businessparaDao.findByParakey("payapi.secret").getParaval();
+        if(StringUtil.isEmpty(appid)||StringUtil.isEmpty(secret)){
+            logger.info("业务参数appid或secret未配置");
+            return;
+        }
+        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+        helper.login(appid, secret);
+        logger.info("登录成功");
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
index 6e4c958..c443ae8 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
@@ -16,9 +16,9 @@
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.stereotype.Service;
 
-
+/*
 @EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
-@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})*/
 @Service
 public class PayApiServiceImpl implements PayApiService {
 
@@ -39,20 +39,7 @@
 
     @Override
     public CitizenPayResponse citizencardPayinit(CitizenCardPayinitParam param) {
-        CitizenPayResponse resp=new CitizenPayResponse();
-        if(StringUtil.isEmpty(appid)){
-            resp.setRetmsg("请在配置文件中配置appid");
-            resp.setRetcode(99);
-        }
-        ApiLoginHelper helper=new ApiLoginHelper(apiLoginProxy);
-        TApiClient client=apiClientDao.findByAppid(appid);
-        if(null==client){
-            resp.setRetmsg("未找到对应客户号");
-            resp.setRetcode(99);
-        }
-        helper.login(appid, client.getSecret());
-        resp = citizenCardPayProxy.citizencardPayinit(param);
-
+        CitizenPayResponse resp = citizenCardPayProxy.citizencardPayinit(param);
         return resp;
     }
 
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 5a489e1..1e1146a 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
@@ -205,16 +205,7 @@
             tTransdtl.setCustname("");
         }
 
-        TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
-
-/*        CitizenCardPayinitParam param=new CitizenCardPayinitParam();
-        param.setBillno(dtl.getBillno());
-        param.setShopaccno(dtl.getShopid());
-        param.setTransdate(dtl.getTransdate());
-        param.setTranstime(dtl.getTranstime());
-        param.setCardNo(dtl.getCardno());
-        param.setAmount(0);
-        CitizenPayResponse response=payApiService.citizencardPayinit(param);*/
+        transDtlService.saveTransdtl(tTransdtl);
         resp.setBillno(tTransdtl.getBillno());
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setAnonymous(false);
@@ -260,24 +251,47 @@
         tTransdtl.setAmount(req.getAmount() / 100.0);
         tTransdtl.setManagefee(extamount / 100.0);
         tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
-        transDtlService.saveTransdtl(tTransdtl);
+        TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
+        CitizenCardPayinitParam param=new CitizenCardPayinitParam();
+        param.setBillno(dtl.getBillno());
+        param.setShopaccno(dtl.getShopid());
+        param.setTransdate(dtl.getTransdate());
+        param.setTranstime(dtl.getTranstime());
+        param.setCardNo(dtl.getCardno());
+        param.setDtltype("canteen");
+        param.setAmount(0);
+        CitizenPayResponse response=payApiService.citizencardPayinit(param);
 
-        //TODO:调核心平台初始化确认 逻辑缺！！！
+        if(response.getRetcode()!=0){
+            tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+            tTransdtl.setAttr1(response.getRetmsg());
+            transDtlService.saveTransdtl(tTransdtl);
+            resp.setRetcode(response.getRetcode()+"");
+            resp.setRetmsg(response.getRetmsg());
+            return resp;
+        }
+        CitizenCardPayfinishParam finishparam=new CitizenCardPayfinishParam();
+        finishparam.setRefno(response.getRefno());
+        CitizenPayResponse finishresp=payApiService.citizencardPayFinish(finishparam);
+        if(finishresp.getRetcode()!=0){
+            tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+            tTransdtl.setAttr1(finishresp.getRetmsg());
+            transDtlService.saveTransdtl(tTransdtl);
+            resp.setRetcode(finishresp.getRetcode()+"");
+            resp.setRetmsg(finishresp.getRetmsg());
+            return resp;
+        }
+
         tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
         transDtlService.saveTransdtl(tTransdtl);
 
-
         resp.setBillno(req.getBillno());
-        Double retAmount=tTransdtl.getAmount()*100;
+        Double retAmount=finishresp.getAmount()*100;
         resp.setAmount(retAmount.intValue());
         resp.setExtraamt(extamount*100);
         resp.setUserid(cus.getCustid());
         resp.setUsername(cus.getCustname());
-        if(RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(tTransdtl.getStatus())){
-            resp.setRequire_query(true);
-        }else{
-            resp.setRequire_query(false);
-        }
+        resp.setRequire_query(false);
         resp.setBalance(0);
         resp.setRetcode(ErrorCode.ERRIF_OK);
         return resp;
diff --git a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
index 7b88a0b..5267d8e 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -1,15 +1,23 @@
 package com.supwisdom.dlpay.api.task;
 
+import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
+import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
+import com.supwisdom.dlpay.api.bean.CitizenPayResponse;
+import com.supwisdom.dlpay.api.service.PayApiService;
 import com.supwisdom.dlpay.api.service.PosPayService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
 import com.supwisdom.dlpay.restaurant.dao.TransDtlDao;
+import com.supwisdom.dlpay.restaurant.domain.TOfflineTransDtl;
 import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
+import com.supwisdom.dlpay.restaurant.service.OfflineTransDtlService;
 import com.supwisdom.dlpay.restaurant.service.TransDtlService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -25,8 +33,12 @@
 
     @Autowired
     private TransDtlService transDtlService;
+    @Autowired
+    private OfflineTransDtlService offlineTransDtlService;
+    @Autowired
+    private CitizenCardPayProxy citizenCardPayProxy;
 
-    @Scheduled(cron = "0/10 * * * * ?")
+  /*  @Scheduled(cron = "${cron.offlinedtl}")
     private void configureTasks() {
         List<TTransDtl> dtls=transDtlService.getSubmittingTransdtl();
         if(dtls.size()>0){
@@ -37,5 +49,48 @@
             }
         }
 
+    }*/
+
+    @Scheduled(cron = "${cron.offlinedtl}")
+    private void submitOfflineDtlTask(){
+        String date=DateUtil.getNow("yyyyMMdd");
+        List<TOfflineTransDtl> dtls=offlineTransDtlService.getUncheckOfflineTransdtl(date);
+        logger.info("正在上传"+dtls.size()+"笔流水");
+        if(dtls.size()>0){
+            for(TOfflineTransDtl dtl:dtls){
+                CitizenCardPayinitParam param=new CitizenCardPayinitParam();
+                param.setBillno(dtl.getBillno());
+                param.setShopaccno(dtl.getShopid());
+                param.setTransdate(dtl.getTransdate());
+                param.setTranstime(dtl.getTranstime());
+                param.setCardNo(dtl.getCardno());
+                param.setDtltype("canteen");
+                Double amt=dtl.getAmount()*100;
+                param.setAmount(amt.intValue());
+                CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
+                if(response.getRetcode()!=0){
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+                    dtl.setAttr1(response.getRetmsg());
+                    offlineTransDtlService.saveTransdtl(dtl);
+                    logger.info(dtl.getBillno()+"初始化失败,"+response.getRetcode()+","+response.getRetmsg()+","+ response.getException());
+                    continue;
+                }
+                CitizenCardPayfinishParam finishparam=new CitizenCardPayfinishParam();
+                finishparam.setRefno(response.getRefno());
+                CitizenPayResponse finishresp=citizenCardPayProxy.citizencardPayFinish(finishparam);
+                if(finishresp.getRetcode()!=0){
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+                    dtl.setAttr1(response.getRetmsg());
+                    offlineTransDtlService.saveTransdtl(dtl);
+                    logger.info(dtl.getBillno()+"消费缺认失败,"+finishresp.getRetcode()+","+finishresp.getRetmsg()+","+ finishresp.getException());
+                    continue;
+                }
+                dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                offlineTransDtlService.saveTransdtl(dtl);
+            }
+
+        }
+
     }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
index 3c55565..c8fd88e 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
@@ -22,5 +22,5 @@
     @Query(value = "from TOfflineTransDtl where termsqlno=?1 and termid=?2 and accdate=?3 ")
     List<TOfflineTransDtl> findByTermsqlnoAndTermidAndAccdate(Integer termsqlno,Integer termid,String accdate);
 
-    List<TOfflineTransDtl> findAllByAccdateAndStatusIsNull(String accdate);
+    List<TOfflineTransDtl> findAllByAccdateAndStatus(String accdate,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
index 4ba2770..e9dfdfb 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
@@ -113,6 +113,6 @@
 
     @Override
     public List<TOfflineTransDtl> getUncheckOfflineTransdtl(String accdate) {
-        return transDtlDao.findAllByAccdateAndStatusIsNull(accdate);
+        return transDtlDao.findAllByAccdateAndStatus(accdate,"init");
     }
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 94e4bc6..41eb523 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -29,3 +29,5 @@
 
 payapi.url=https://yy.dlsmk.cn/payapi
 
+cron.offlinedtl=0/10 * * * * ?
+
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index c555d6c..b65eed5 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -269,14 +269,14 @@
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f72009a', 90, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f73009b', 88, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb14005f', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150061', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150062', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150063', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150064', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150065', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150066', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbca060016cbca3a983006a', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb14005f', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150061', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150062', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150063', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150064', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150065', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150066', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbca060016cbca3a983006a', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
 
 
@@ -436,11 +436,13 @@
 INSERT INTO "tb_subject" (subjno,balflag,displayflag,endflag,fsubjno,opendate,subjlevel,subjname,subjtype) VALUES ('660102', 2, 'y', 1, '6601', 20190604, 2, '积分抵扣款', 6);
 INSERT INTO "tb_subject" (subjno,balflag,displayflag,endflag,fsubjno,opendate,subjlevel,subjname,subjtype) VALUES ('6602', 2, 'y', 1, NULL, 20190604, 1, '管理费收入', 6);
 
-INSERT INTO "tb_custtype"(custtypeid,custtypename,feetype) VALUES (2, '外部人员', NULL);
-INSERT INTO "tb_custtype"(custtypeid,custtypename,feetype) VALUES (1, '内部人员', NULL);
+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.');
+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.');
+INSERT INTO "tb_businesspara" (parakey,paravalue) VALUES ('payapi.appid', '200001');
+INSERT INTO "tb_businesspara" (parakey,paravalue) VALUES ('payapi.secret', 'dc1d26c0d43e442588092c8d45c21bce');
 
 
 CREATE SEQUENCE SEQ_REFNO
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
new file mode 100644
index 0000000..43bc906
--- /dev/null
+++ b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
@@ -0,0 +1,83 @@
+package com.supwisdom.dlpay.controller;
+
+
+import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
+import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
+import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
+import com.supwisdom.dlpay.api.bean.CitizenPayResponse;
+import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.FeignAutoConfiguration;
+import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.notNullValue;
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(properties = {
+        "payapi.url=https://yy.dlsmk.cn/payapi"},
+        classes = PosPayServiceTest.class)
+@ImportAutoConfiguration({RibbonAutoConfiguration.class,
+        FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
+        HttpMessageConvertersAutoConfiguration.class})
+@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+public class PosPayServiceTest {
+
+    @Autowired
+    private CitizenCardPayProxy citizenCardPayProxy;
+
+    @Autowired
+    private ApiLoginProxy apiLoginProxy;
+
+    private String appid="200001";
+
+    private String secret="dc1d26c0d43e442588092c8d45c21bce";
+
+    @org.junit.Test
+    public void citizencardPayinit() {
+        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+        helper.login(appid, secret);
+
+
+        CitizenCardPayinitParam initParam = new CitizenCardPayinitParam();
+        initParam.setBillno("20190708172756000003");
+        initParam.setCardNo("25002885");
+        initParam.setAmount(1);
+        initParam.setTransdate("20190708");
+        initParam.setTranstime("172713");
+        initParam.setShopaccno("2000000012");
+        initParam.setDtltype("canteen");
+        CitizenPayResponse payInit = citizenCardPayProxy.citizencardPayinit(initParam);
+        assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
+                payInit.getRetcode(), equalTo(0));
+
+        System.out.println(payInit.getRefno());
+    }
+
+    @org.junit.Test
+    public void citizencardPayFinish() {
+        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+        helper.login(appid, secret);
+        CitizenCardPayfinishParam param=new CitizenCardPayfinishParam();
+        param.setRefno("20190826111707000139");
+        CitizenPayResponse payInit = citizenCardPayProxy.citizencardPayFinish(param);
+        assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
+                payInit.getRetcode(), equalTo(0));
+
+
+    }
+
+}
