数据向核心平台推送
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));
+
+
+    }
+
+}