车载机签到,心跳接口提交

Conflicts:
	src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
	src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java
index bd65241..f512c0a 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java
@@ -6,9 +6,14 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface CitizenCardverDao extends JpaRepository<TCitizenCardver, String> {
   @Modifying
   @Query(value = "update tb_citizen_cardver set status='closed' where status='normal' and cardvertype=?1 and cardno=?2 and cardverno<?3 ", nativeQuery = true)
   void doClosedHistoryRecords(String cardvertype, String cardno, String cardverno);
+
+  @Query(value = "from TCitizenCardver where cardverno>?1 and adddelflag<>0")
+  List<TCitizenCardver> findAllBlacklist(String cardverno);
 }
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 289ba99..5da2be4 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -1,4 +1,17 @@
 package com.supwisdom.dlpay.bus.service;
 
+import com.supwisdom.dlpay.bus.bean.*;
+
 public interface BusConsumeService {
+    BusDevLoginResp doLogin(BusDevLoginReq req);
+
+    BusSysparaResp doGetDevpara(BusSysparaReq req);
+
+    BusBlacklistResp doGetBlacklist(BusBlacklistReq req);
+
+    BusHeartBeatResp busHeartBeat(BusHeartBeatReq req);
+
+    BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req);
+
+
 }
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 a3541d2..f9104e9 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
@@ -1,9 +1,321 @@
 package com.supwisdom.dlpay.bus.service.impl;
 
+import com.supwisdom.dlpay.api.bean.DevparaBean;
+import com.supwisdom.dlpay.api.service.impl.PosPayServiceImpl;
+import com.supwisdom.dlpay.api.util.ErrorCode;
+import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.dao.CitizenCardDao;
+import com.supwisdom.dlpay.bus.dao.CitizenCardverDao;
+import com.supwisdom.dlpay.bus.domain.TCitizenCard;
+import com.supwisdom.dlpay.bus.domain.TCitizenCardver;
 import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.service.CitizenCardService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
+import com.supwisdom.dlpay.framework.dao.SysparaDao;
+import com.supwisdom.dlpay.framework.domain.TShopSettlement;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
+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.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.restaurant.dao.*;
+import com.supwisdom.dlpay.restaurant.domain.*;
+import com.supwisdom.dlpay.restaurant.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 public class BusConsumeServiceImpl implements BusConsumeService {
 
+    private static final Logger logger = LoggerFactory.getLogger(PosPayServiceImpl.class);
+
+
+    @Autowired
+    private DeviceService deviceService;
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private TransDtlService transDtlService;
+    @Autowired
+    private OfflineTransDtlService offlineTransDtlService;
+    @Autowired
+    private SysparaDao sysparaDao;
+    @Autowired
+    private MealTypeDao mealTypeDao;
+    @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
+    private CitizenCardverDao cardverDao;
+
+
+    @Override
+    public BusDevLoginResp doLogin(BusDevLoginReq req) {
+        BusDevLoginResp resp = new BusDevLoginResp();
+        String sysdt = DateUtil.getNow();
+
+        TDevice tDevice = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        BusApiResp apiResp = checkDevice(resp, tDevice);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
+        List<TShopSettlement> shoplist = shopSettlementService.getShopByShopid(tDevice.getShopid());
+        if (shoplist.size() < 1) {
+            resp.setRetcode(ErrorCode.ERRIF_POS_NOSHOP);
+            resp.setRetmsg("设备未绑定商户");
+            return resp;
+        }
+
+        TDevparaGroup group = null;
+        TDevparaBind bind = deviceParamService.getDevparaBindByDeviceid(tDevice.getId());
+        if (null == bind) {
+            group = deviceParamService.getDefaultDevparaGroup();
+        } else {
+            group = deviceParamService.getDevparaGroupByGroupid(bind.getGroupid());
+        }
+
+        tDevice.setRunstatus(1);
+        tDevice.setLastlogintime(sysdt);
+        deviceService.saveDevice(tDevice);
+        if (group.getGlobalflag() == false) {
+            if (null == bind) {
+                bind = new TDevparaBind();
+                bind.setDeviceid(tDevice.getId());
+            }
+            bind.setGroupid(group.getGroupid());
+            bind.setLastsaved(sysdt);
+            devparaBindDao.save(bind);
+        }
+
+        Integer onlineseqno = transDtlService.getMaxSeqnoToday(tDevice.getId(), req.getTermdate());
+        resp.setCardverno(req.getCardverno());
+        resp.setTermseqno(onlineseqno + 1);
+        resp.setShopname(shoplist.get(0).getShopname());
+        resp.setParagroupid(group.getGroupid());
+        resp.setSystime(sysdt);
+        resp.setParaverno(group.getVerno().intValue());
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        return resp;
+    }
+
+    @Override
+    public BusSysparaResp doGetDevpara(BusSysparaReq req) {
+        BusSysparaResp resp = new BusSysparaResp();
+        TDevparaGroup group = deviceParamService.getDevparaGroupByGroupid(req.getParagroupid());
+        if (null == group) {
+            resp.setRetcode(ErrorCode.ERRIF_POS_NOFUNC);
+            resp.setRetmsg("未找到" + req.getDevphyid() + "参数组");
+            return resp;
+        }
+        List<TDevpara> tDevparas = deviceParamService.getDevparaInfo(req.getParagroupid());
+
+        ArrayList<DevparaBean> sysParas = new ArrayList<DevparaBean>();
+        for (TDevpara t : tDevparas) {
+            DevparaBean sysPara = new DevparaBean();
+            sysPara.setParaname(t.getParaname());
+            sysPara.setParaval(t.getParaval());
+            sysParas.add(sysPara);
+        }
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("下载成功");
+        resp.setParaverno(group.getVerno().intValue());
+        resp.setParagroupid(group.getGroupid());
+        resp.setSyspara(sysParas);
+        return resp;
+    }
+
+    @Override
+    public BusBlacklistResp doGetBlacklist(BusBlacklistReq req) {
+        BusBlacklistResp resp = new BusBlacklistResp();
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        BusApiResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
+        device.setCardverno(req.getCardverno());
+        deviceService.saveDevice(device);
+        List<BusCardverBean> cardverFlags = new ArrayList<>();
+        TSyspara maxcardver = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_MAXCARDVERNO); //非等待锁
+
+        String maxCardverno = maxcardver.getParaval();
+        Integer count = req.getMaxcount();
+        List<TCitizenCardver> blacklist;
+        blacklist = cardverDao.findAllBlacklist(req.getCardverno());
+
+        if (null == blacklist || blacklist.size() < 1) {
+            resp.setCardverno(maxCardverno);
+            resp.setRetcode(ErrorCode.ERRIF_OK);
+            resp.setRetmsg("下载成功");
+            resp.setCount(0);
+            resp.setBlkdata(cardverFlags);
+            return resp;
+        }
+
+        if (blacklist.size() < count) {
+            count = blacklist.size();
+        }
+        for (int i = 0; i < count; i++) {
+            TCitizenCardver cardver = blacklist.get(i);
+            BusCardverBean cardverFlag = new BusCardverBean();
+            cardverFlag.setCardno(cardver.getCardno());
+            cardverFlag.setFlag(cardver.getAdddelflag().toString());
+
+            cardverFlags.add(cardverFlag);
+        }
+
+
+        resp.setCardverno(maxCardverno);
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("下载成功");
+        resp.setCount(count);
+        resp.setBlkdata(cardverFlags);
+        return resp;
+    }
+
+    @Override
+    public BusHeartBeatResp busHeartBeat(BusHeartBeatReq req) {
+        BusHeartBeatResp resp = new BusHeartBeatResp();
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        BusApiResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
+
+        String datetime = DateUtil.getNow("yyyyMMddHHmmss");
+
+        device.setCardverno(req.getCardverno());
+        device.setLastbeattime(datetime);
+        device.setBeatstatus(1);
+        deviceService.saveDevice(device);
+
+        TDevparaGroup group = deviceParamService.getDefaultDevparaGroup();
+        if (group == null) {
+            resp.setRetcode(ErrorCode.ERRIF_OTHER);
+            resp.setRetmsg("未配置默认参数");
+            return resp;
+        }
+
+
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("心跳成功");
+        resp.setSystime(datetime);
+        resp.setParaverno(group.getVerno().intValue());
+        resp.setParagroupid(group.getGroupid());
+        resp.setCardverno(req.getCardverno());
+        return resp;
+
+    }
+
+    @Override
+    public BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req) {
+        BusDtlUploadResp resp = new BusDtlUploadResp();
+        TOfflineTransDtl transDtl = new TOfflineTransDtl();
+        transDtl.setTransdate(req.getTransdate());
+        transDtl.setTranstime(req.getTranstime());
+        transDtl.setBillno(systemUtilService.getRefno());
+        transDtl.setCardno(req.getCardno());
+        transDtl.setRevflag(0);
+        transDtl.setTermsqlno(req.getTermseqno());
+        String err = "";
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        if (null == device) {
+            err += "设备物理ID不存在;";
+        }
+        if (1 != device.getState()) {
+            err += "设备状态错误;";
+        }
+        if (!BusConstant.STATUS_NORMAL.equals(device.getCheckstatus())) {
+            err += "设备审核未通过;";
+        }
+        if (!"".equals(err)) {
+            transDtl.setAttr1(err);
+            offlineTransDtlService.saveOfflineTransdtl(transDtl);
+            resp.setRetmsg("保存成功");
+            resp.setRetcode(ErrorCode.ERRIF_OK);
+            return resp;
+        }
+        Double amount = req.getAmount() / 100.0;
+
+        String cardno;
+
+        cardno = req.getCardno();
+
+        TCitizenCard tCard = cardDao.findByCardno(cardno);
+        if (null == tCard) {
+            err += "卡号[" + req.getCardno() + "]不存在;";
+        } else {
+            transDtl.setCustname(tCard.getUsername());
+        }
+        transDtl.setAmount(amount);
+
+        if (device.getState() != 1) {
+            err += "设备状态错误;";
+        } else {
+            transDtl.setTermid(device.getId());
+            transDtl.setShopid(device.getShopid());
+        }
+
+        transDtl.setStatus(BusConstant.STATUS_INIT);
+        transDtl.setAttr1(err);
+        transDtl.setTransmode(BusConstant.TRANSMODE_BUS);
+        offlineTransDtlService.saveOfflineTransdtl(transDtl);
+
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("保存成功");
+        resp.setTermseqno(req.getTermseqno());
+        return resp;
+    }
+
+
+    private BusApiResp checkDevice(BusApiResp resp, TDevice device) {
+        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;
+        }
+        if (!BusConstant.STATUS_CARDVER_NORMAL.equals(device.getCheckstatus())) {
+            resp.setRetcode(ErrorCode.ERRIF_OTHER);
+            resp.setRetmsg("设备审核未通过");
+            return resp;
+        }
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        return resp;
+    }
 }
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 504ad12..c826a47 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -24,11 +24,18 @@
   public final static String CARDVERTYPE_FREEZE = "frozen"; //状态挂失、冻结、未启用等都会冻结卡,下载黑名单
   public final static String CARDVERTYPE_UNFREEZE = "unfrozen"; //卡状态正常时解冻
 
-  public final static int ADDDELFLAG_DELETE = 2; //下发删除
-  public final static int ADDDELFLAG_ADD = 1; //下发新增
+
+  public final static int ADDDELFLAG_DELETE = 2; //刪除
+  public final static int ADDDELFLAG_ADD = 1; //增加
   public final static int ADDDELFLAG_NONE = 0; //不需要下发
 
   public final static int SYSPARAID_MAXCARDVERNO = 10; //全局参数,最大版本号
   public final static int SYSPARAID_MAXBLACKCARDVERNO = 11; //全局参数,最大黑名单版本号
   public final static int SYSPARAID_CARDSYNCTIME = 21; //全局参数,卡同步时间
+
+  public final static String STATUS_NORMAL="normal";
+  public final static String STATUS_INIT="init";
+
+  public final static String TRANSMODE_BUS="bus";
+
 }