核心平台同步人员状态逻辑修改,车载机入账逻辑增加
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";