核心平台同步人员状态逻辑修改,车载机入账逻辑增加
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
index e5d0afc..0d31ce1 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
@@ -4,6 +4,10 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface OfflineBusdtlDao extends JpaRepository<TOfflineBusdtl, String> {
+
+    List<TOfflineBusdtl> findAllByTransdateAndStatus(String transdate,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
index 1f38b4d..73bfad1 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
@@ -4,6 +4,9 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface OnlineBusdtlDao extends JpaRepository<TOnlineBusdtl, String> {
+    List<TOnlineBusdtl> findAllByTransdateAndStatus(String transdate,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
index ede535e..0a4990f 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
@@ -25,7 +25,7 @@
   @Column(name = "TRANS_STATUS", nullable = false, length = 20)
   private String transStatus;
 
-  @Column(name = "PAYERID", length = 31)
+  @Column(name = "PAYERID", length = 32)
   private String payerid;
 
   @Column(name = "USERNAME", length = 200)
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
index 7033b6a..725a339 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -1,6 +1,12 @@
 package com.supwisdom.dlpay.bus.service;
 
 import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 public interface BusConsumeService {
     BusDevLoginResp doLogin(BusDevLoginReq req);
@@ -11,7 +17,16 @@
 
     BusHeartBeatResp busHeartBeat(BusHeartBeatReq req);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     BusQuerysalesResp busQuerySales(BusSysparaReq req);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    void saveOfflineBusdtlAndOnlinedtl(TOfflineBusdtl offlineBusdtl, TOnlineBusdtl onlineBusdtl);
+
+    List<TOfflineBusdtl> getUncheckOfflineTransdtl(String transdate);
+
+    List<TOnlineBusdtl> getSubmittingOnlineTransdtl(String transdate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
index 6c71ae7..712677c 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
@@ -7,9 +7,11 @@
 import com.supwisdom.dlpay.bus.dao.CitizenCardDao;
 import com.supwisdom.dlpay.bus.dao.CitizenCardverDao;
 import com.supwisdom.dlpay.bus.dao.OfflineBusdtlDao;
+import com.supwisdom.dlpay.bus.dao.OnlineBusdtlDao;
 import com.supwisdom.dlpay.bus.domain.TCitizenCard;
 import com.supwisdom.dlpay.bus.domain.TCitizenCardver;
 import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
 import com.supwisdom.dlpay.bus.service.BusConsumeService;
 import com.supwisdom.dlpay.bus.service.CitizenCardService;
 import com.supwisdom.dlpay.bus.util.BusConstant;
@@ -52,27 +54,14 @@
     @Autowired
     private SysparaDao sysparaDao;
     @Autowired
-    private MealTypeDao mealTypeDao;
+    private OnlineBusdtlDao onlineBusdtlDao;
     @Autowired
     private DevparaBindDao devparaBindDao;
     @Autowired
     private DeviceParamService deviceParamService;
     @Autowired
     private ShopSettlementService shopSettlementService;
-    @Autowired
-    private BusinessparaDao businessparaDao;
-    @Autowired
-    private DeviceDiscountRuleService deviceDiscountRuleService;
-    @Autowired
-    private CitizenCardPayProxy citizenCardPayProxy;
-    @Autowired
-    private TransactionProxy transactionProxy;
-    @Autowired
-    private CitizenCardService cardService;
-    @Autowired
-    private UserProxy userProxy;
-    @Autowired
-    private CustomerDao customerDao;
+
     @Autowired
     private CitizenCardDao cardDao;
     @Autowired
@@ -340,6 +329,23 @@
         return resp;
     }
 
+    @Override
+    public void saveOfflineBusdtlAndOnlinedtl(TOfflineBusdtl offlineBusdtl, TOnlineBusdtl onlineBusdtl) {
+        offlineBusdtlDao.save(offlineBusdtl);
+        onlineBusdtlDao.save(onlineBusdtl);
+
+    }
+
+    @Override
+    public List<TOfflineBusdtl> getUncheckOfflineTransdtl(String transdate) {
+        return offlineBusdtlDao.findAllByTransdateAndStatus(transdate,BusConstant.STATUS_INIT);
+    }
+
+    @Override
+    public List<TOnlineBusdtl> getSubmittingOnlineTransdtl(String transdate) {
+        return onlineBusdtlDao.findAllByTransdateAndStatus(transdate,BusConstant.STATUS_WAIT);
+    }
+
 
     private BusApiResp checkDevice(BusApiResp resp, TDevice device) {
         if (null == device) {
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
index b3eb1bc..c888a08 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
@@ -151,7 +151,7 @@
 
     SystemDateTime dt = systemUtilService.getSysdatetime();
     TCitizenCard card = citizenCardDao.findByCardno(cardInfo.getCardno());
-    if (null != card) {
+    if (null == card) {
       cardverno = doSwithCardverno(maxcardver.getParaval());
       card = new TCitizenCard(cardInfo, cardverno, dt.getSysdate());
       citizenCardDao.save(card);
@@ -174,7 +174,8 @@
         cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
       }
       cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
-      cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+      String lastsaved=systemUtilService.getSysdatetime().getHostdatetime();
+      cardver.setLastsaved(lastsaved);
       citizenCardverDao.save(cardver);
     } else {
       boolean updFlag = false;
@@ -218,8 +219,6 @@
       if (!card.getStatus().equals(cardInfo.getCardstatus()) || !card.getTransStatus().equals(cardInfo.getTransstatus())) {
         //卡状态有变化
         updFlag = true;
-        card.setStatus(cardInfo.getCardstatus());
-        card.setTransStatus(cardInfo.getTransstatus());
 
         TCitizenCardver cardver = null;
         if (BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getCardstatus()) || BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getTransstatus())) {
@@ -233,8 +232,8 @@
             cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_REGISTER, card.getCardno(), cardverno); //注册记录置为无效
           }
-        } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
-          if (!BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) || !BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus())) {
+        } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(cardInfo.getTransstatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(cardInfo.getCardstatus())) {
+          if (!BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) || !BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
             //卡状态由异常变正常
             cardverno = doSwithCardverno(maxcardver.getParaval());
             card.setCardverno(cardverno);
@@ -271,7 +270,9 @@
       }
 
       if (updFlag) {
-        citizenCardDao.save(card); //更新卡表
+          card.setStatus(cardInfo.getCardstatus());
+          card.setTransStatus(cardInfo.getTransstatus());
+          citizenCardDao.save(card); //更新卡表
       }
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
new file mode 100644
index 0000000..86793f2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
@@ -0,0 +1,166 @@
+package com.supwisdom.dlpay.bus.task;
+
+import com.supwisdom.dlpay.api.bean.*;
+import com.supwisdom.dlpay.bus.dao.OfflineBusdtlDao;
+import com.supwisdom.dlpay.bus.dao.OnlineBusdtlDao;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
+import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy;
+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.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+public class BusPayTask {
+    private static final Logger logger = LoggerFactory.getLogger(BusPayTask.class);
+
+
+    @Autowired
+    private TransDtlService transDtlService;
+    @Autowired
+    private OnlineBusdtlDao onlineBusdtlDao;
+    @Autowired
+    private BusConsumeService busConsumeService;
+    @Autowired
+    private CitizenCardPayProxy citizenCardPayProxy;
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private TransactionProxy transactionProxy;
+
+    @Scheduled(cron = "0 0/1 * * * ?")
+    private void submitOfflineDtlTask() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TOfflineBusdtl> dtls = busConsumeService.getUncheckOfflineTransdtl(date);
+        logger.info("正在上传" + dtls.size() + "笔流水");
+        if (dtls.size() > 0) {
+            for (TOfflineBusdtl dtl : dtls) {
+
+                TOnlineBusdtl tTransDtl = gettTransDtl(dtl);
+
+                CitizenCardPayinitParam param = new CitizenCardPayinitParam();
+                param.setBillno(dtl.getBillno());
+                param.setShopaccno(dtl.getMerchaccno());
+                param.setTransdate(dtl.getTransdate());
+                param.setTranstime(dtl.getTranstime());
+                param.setCardNo(dtl.getCardno());
+                param.setDtltype("bus");
+                Double amt = dtl.getAmount() * 100;
+                param.setAmount(amt.intValue());
+                logger.info(dtl.getBillno() + "开始消费逻辑");
+
+                CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
+                if (response.getRetcode() != 0) {
+                    saveFailTransdtls(dtl, tTransDtl, response);
+                    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) {
+                    saveFailTransdtls(dtl, tTransDtl, finishresp);
+                    logger.info(dtl.getBillno() + "消费确认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
+                    continue;
+                }
+                tTransDtl.setAccdate(date);
+                tTransDtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
+                tTransDtl.setCoreStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                tTransDtl.setRefno(response.getRefno());
+                dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
+            }
+        }
+    }
+
+    private TOnlineBusdtl gettTransDtl(TOfflineBusdtl dtl) {
+        TOnlineBusdtl tTransDtl = new TOnlineBusdtl();
+        tTransDtl.setManagefee(dtl.getManagefee());
+        tTransDtl.setAmount(dtl.getAmount());
+        tTransDtl.setCardno(dtl.getCardno());
+        tTransDtl.setStatus(dtl.getStatus());
+        tTransDtl.setPayerid(dtl.getPayerid());
+        tTransDtl.setBillno(dtl.getBillno());
+        tTransDtl.setTermseqno(dtl.getTermseqno());
+        tTransDtl.setMerchaccno(dtl.getMerchaccno());
+        tTransDtl.setTransdate(dtl.getTransdate());
+        tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+        tTransDtl.setTransmode("card");
+        tTransDtl.setPayername(dtl.getPayername());
+        tTransDtl.setTermid(dtl.getTermid());
+        tTransDtl.setTransdate(dtl.getTransdate());
+        tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setTranstype("none");
+        tTransDtl.setRevflag(0);
+        tTransDtl.setManagefee(dtl.getManagefee());
+        return tTransDtl;
+    }
+
+    private void saveFailTransdtls(TOfflineBusdtl dtl, TOnlineBusdtl tTransDtl, CitizenPayResponse finishresp) {
+        String status;
+        String attr;
+        if(RestaurantConstant.TRANSDTL_STATUS_WIT==finishresp.getRetcode()){
+            status=RestaurantConstant.STATUS_TRANSDTL_WAIT;
+            attr="";
+            tTransDtl.setRefno(finishresp.getRefno());
+        }else{
+            status=RestaurantConstant.STATUS_TRANSDTL_FAIL;
+            attr=finishresp.getRetmsg() + "," + finishresp.getException()+","+finishresp.getRetcode();
+        }
+        dtl.setStatus(status);
+        dtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+        dtl.setErrmsg(attr);
+        busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
+    }
+
+
+    @Scheduled(cron = "0 0/2 * * * ?")
+    private void checkWipDtls() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TOnlineBusdtl> dtls = busConsumeService.getSubmittingOnlineTransdtl(date);
+        logger.info("正在核对" + dtls.size() + "笔未上传流水");
+        if (dtls.size() > 0) {
+            for (TOnlineBusdtl dtl : dtls) {
+                QueryDtlResultParam param = new QueryDtlResultParam();
+                param.setShopaccno(dtl.getMerchaccno());
+                param.setBillno(dtl.getBillno());
+                param.setRefno(dtl.getRefno());
+                QueryTransDtlResponse resp = transactionProxy.queryDtlResult(param);
+                logger.info(dtl.getBillno()+":status==="+resp.getStatus());
+
+                if(RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(resp.getStatus())){
+                    logger.info(dtl.getBillno()+":"+resp.getRetcode()+":"+resp.getRetmsg());
+                }else if (RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(resp.getStatus())){
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                }else{
+                    dtl.setRemark(resp.getRetmsg());
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+                }
+                onlineBusdtlDao.save(dtl);
+
+            }
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
index 6039d60..ea512b7 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -35,7 +35,7 @@
 
   public final static String STATUS_NORMAL="normal";
   public final static String STATUS_INIT="init";
-
+  public final static String STATUS_WAIT="wip";
   public final static String TRANSMODE_BUS="bus";
 
   public final static String BUS_OFFLINE_NODEVICE = "11";