|
@@ -37,6 +37,7 @@ import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -138,7 +139,7 @@ public class BaseBusiness {
|
|
|
List<XfConsumeDetailVo> detailVos = new ArrayList<>();
|
|
List<XfConsumeDetailVo> detailVos = new ArrayList<>();
|
|
|
|
|
|
|
|
for (PtBagVo bagVo : bagVos) {
|
|
for (PtBagVo bagVo : bagVos) {
|
|
|
- log.info("钱包代码:{},钱包余额:{},消费金额:{}", bagVo.getBagCode(), bagVo.getBalance(), bo.getConsumeMoney());
|
|
|
|
|
|
|
+ log.info("扣费钱包代码:{},钱包余额:{},消费金额:{}", bagVo.getBagCode(), bagVo.getBalance(), bo.getConsumeMoney());
|
|
|
XfConsumeDetailVo vo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo, remark);
|
|
XfConsumeDetailVo vo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo, remark);
|
|
|
// 多钱包扣费时,只要有一个钱包入消费明细表失败,则都失败
|
|
// 多钱包扣费时,只要有一个钱包入消费明细表失败,则都失败
|
|
|
if (ObjUtil.isEmpty(vo)) {
|
|
if (ObjUtil.isEmpty(vo)) {
|
|
@@ -167,7 +168,7 @@ public class BaseBusiness {
|
|
|
|
|
|
|
|
// 5.发送一条消费记录到kafka(教务就餐打卡)
|
|
// 5.发送一条消费记录到kafka(教务就餐打卡)
|
|
|
if (ObjectUtil.equals(defaultConfig.getLocationFlag(), DefaultConstants.LOCAL_FLAG)) {
|
|
if (ObjectUtil.equals(defaultConfig.getLocationFlag(), DefaultConstants.LOCAL_FLAG)) {
|
|
|
- this.sendConsumeToKafka(detailVos,userAccountVo);
|
|
|
|
|
|
|
+ this.sendConsumeToKafka(detailVos, userAccountVo);
|
|
|
}
|
|
}
|
|
|
return R.ok();
|
|
return R.ok();
|
|
|
}
|
|
}
|
|
@@ -212,7 +213,7 @@ public class BaseBusiness {
|
|
|
CreditTypeEnum creditType = CreditTypeEnum.fromCode(bo.getCreditType());
|
|
CreditTypeEnum creditType = CreditTypeEnum.fromCode(bo.getCreditType());
|
|
|
if (creditType != null) {
|
|
if (creditType != null) {
|
|
|
switch (creditType) {
|
|
switch (creditType) {
|
|
|
- case TERM_CONSUME,HAND_CONSUME:
|
|
|
|
|
|
|
+ case TERM_CONSUME, HAND_CONSUME:
|
|
|
termTotalBo.setMealCount(1L);
|
|
termTotalBo.setMealCount(1L);
|
|
|
termTotalBo.setMealAmount(bo.getConsumeMoney());
|
|
termTotalBo.setMealAmount(bo.getConsumeMoney());
|
|
|
break;
|
|
break;
|
|
@@ -235,30 +236,36 @@ public class BaseBusiness {
|
|
|
public boolean updateBagBalance(List<PtBagVo> bagVos) {
|
|
public boolean updateBagBalance(List<PtBagVo> bagVos) {
|
|
|
AtomicReference<Boolean> result = new AtomicReference<>();
|
|
AtomicReference<Boolean> result = new AtomicReference<>();
|
|
|
bagVos.parallelStream().forEach(bagVo -> {
|
|
bagVos.parallelStream().forEach(bagVo -> {
|
|
|
- PtBagBo bagBo = new PtBagBo();
|
|
|
|
|
- bagBo.setUserId(bagVo.getUserId());
|
|
|
|
|
- bagBo.setBagId(bagVo.getBagId());
|
|
|
|
|
- bagBo.setBagCode(bagVo.getBagCode());
|
|
|
|
|
- bagBo.setReceiptMoney(bagVo.getReceiptMoney());
|
|
|
|
|
- bagBo.setOperationMode(BalanceUpdateEnum.CONSUME);
|
|
|
|
|
- PtBagVo vo = bagService.updateBalanceByBo(bagBo);
|
|
|
|
|
- // 多钱包更新余额时,只要有一个钱包更新余额失败,则都失败
|
|
|
|
|
- if (ObjUtil.isEmpty(vo)) {
|
|
|
|
|
- result.set(false);
|
|
|
|
|
|
|
+ if (bagVo.getReceiptMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ // 如果操作金额为0,不操作钱包余额
|
|
|
|
|
+ result.set(true);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ PtBagBo bagBo = new PtBagBo();
|
|
|
|
|
+ bagBo.setUserId(bagVo.getUserId());
|
|
|
|
|
+ bagBo.setBagId(bagVo.getBagId());
|
|
|
|
|
+ bagBo.setBagCode(bagVo.getBagCode());
|
|
|
|
|
+ bagBo.setReceiptMoney(bagVo.getReceiptMoney());
|
|
|
|
|
+ bagBo.setOperationMode(BalanceUpdateEnum.CONSUME);
|
|
|
|
|
+ PtBagVo vo = bagService.updateBalanceByBo(bagBo);
|
|
|
|
|
+ // 多钱包更新余额时,只要有一个钱包更新余额失败,则都失败
|
|
|
|
|
+ if (ObjUtil.isEmpty(vo)) {
|
|
|
|
|
+ result.set(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ result.set(true);
|
|
|
}
|
|
}
|
|
|
- result.set(true);
|
|
|
|
|
});
|
|
});
|
|
|
return result.get();
|
|
return result.get();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 请求云端消费业务的kafka消息推送
|
|
* 请求云端消费业务的kafka消息推送
|
|
|
|
|
+ *
|
|
|
* @param bo 请求消费数据
|
|
* @param bo 请求消费数据
|
|
|
*/
|
|
*/
|
|
|
@Async
|
|
@Async
|
|
|
- public void sendCloudConsume(ConsumptionBo bo){
|
|
|
|
|
|
|
+ public void sendCloudConsume(ConsumptionBo bo) {
|
|
|
kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.TO_CLOUD_TOPIC, EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
|
|
kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.TO_CLOUD_TOPIC, EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
|
|
|
- //kafkaNormalProducer.sendKafkaMessage("test", EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
|
|
|
|
|
|
|
+ // kafkaNormalProducer.sendKafkaMessage("test", EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -290,7 +297,7 @@ public class BaseBusiness {
|
|
|
consumeDetailBo.setConsumeDate(bo.getConsumeDate());
|
|
consumeDetailBo.setConsumeDate(bo.getConsumeDate());
|
|
|
consumeDetailBo.setConsumeMoney(bo.getConsumeMoney());
|
|
consumeDetailBo.setConsumeMoney(bo.getConsumeMoney());
|
|
|
consumeDetailBo.setConsumeBalance(bo.getBalance());
|
|
consumeDetailBo.setConsumeBalance(bo.getBalance());
|
|
|
- //consumeDetailBo.setCardValue(bagVo.getBalance());
|
|
|
|
|
|
|
+ // consumeDetailBo.setCardValue(bagVo.getBalance());
|
|
|
// 设置卡片信息
|
|
// 设置卡片信息
|
|
|
consumeDetailBo.setCardNo(cardVo.getCardNo());
|
|
consumeDetailBo.setCardNo(cardVo.getCardNo());
|
|
|
consumeDetailBo.setFactoryId(cardVo.getFactoryId());
|
|
consumeDetailBo.setFactoryId(cardVo.getFactoryId());
|
|
@@ -317,51 +324,56 @@ public class BaseBusiness {
|
|
|
consumeDetailBo.setTenantId(bo.getTenantId());
|
|
consumeDetailBo.setTenantId(bo.getTenantId());
|
|
|
|
|
|
|
|
return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);
|
|
return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);
|
|
|
- } catch (Exception ex){
|
|
|
|
|
- log.error("消费明细入库错误",ex);
|
|
|
|
|
|
|
+ } catch (Exception ex) {
|
|
|
|
|
+ log.error("消费明细入库错误", ex);
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 查询指定日期的消费对账记录
|
|
* 查询指定日期的消费对账记录
|
|
|
|
|
+ *
|
|
|
* @param consumeDate 消费日期
|
|
* @param consumeDate 消费日期
|
|
|
* @return 消费记录
|
|
* @return 消费记录
|
|
|
*/
|
|
*/
|
|
|
- public List<ConsumptionBo> selectOriginalReconciliation(Date consumeDate){
|
|
|
|
|
|
|
+ public List<ConsumptionBo> selectOriginalReconciliation(Date consumeDate) {
|
|
|
return TenantHelper.ignore(() -> originalService.selectReconciliationData(consumeDate));
|
|
return TenantHelper.ignore(() -> originalService.selectReconciliationData(consumeDate));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 查询注册信息,用来检查客户的公钥和么钥
|
|
* 查询注册信息,用来检查客户的公钥和么钥
|
|
|
*/
|
|
*/
|
|
|
- public void getRegisterInfo(){
|
|
|
|
|
- if (ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PUB_KEY)) || ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PRI_KEY))) {
|
|
|
|
|
|
|
+ public void getRegisterInfo() {
|
|
|
|
|
+ if (ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PUB_KEY)) || ObjectUtil.isEmpty(
|
|
|
|
|
+ RedisUtils.getCacheObject(CacheNames.CUSTOM_PRI_KEY))) {
|
|
|
remoteRegisterInfoService.queryRegisterInfo();
|
|
remoteRegisterInfoService.queryRegisterInfo();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 根据消费记录的状态标志获取
|
|
* 根据消费记录的状态标志获取
|
|
|
|
|
+ *
|
|
|
* @param statusFlag 状态标志
|
|
* @param statusFlag 状态标志
|
|
|
- * 1,4--消费机消费=25000
|
|
|
|
|
- * 3-消费补扣=25020
|
|
|
|
|
- * 0-错扣补款=25010
|
|
|
|
|
|
|
+ * 1,4--消费机消费=25000
|
|
|
|
|
+ * 3-消费补扣=25020
|
|
|
|
|
+ * 0-错扣补款=25010
|
|
|
* @return 根据状态转换的消费类型
|
|
* @return 根据状态转换的消费类型
|
|
|
*/
|
|
*/
|
|
|
- public Integer getCreditType(Integer statusFlag){
|
|
|
|
|
|
|
+ public Integer getCreditType(Integer statusFlag) {
|
|
|
return switch (statusFlag) {
|
|
return switch (statusFlag) {
|
|
|
case 0 -> CreditTypeEnum.ERROR_FILL.code();
|
|
case 0 -> CreditTypeEnum.ERROR_FILL.code();
|
|
|
case 3 -> CreditTypeEnum.HAND_CONSUME.code();
|
|
case 3 -> CreditTypeEnum.HAND_CONSUME.code();
|
|
|
default -> CreditTypeEnum.TERM_CONSUME.code();
|
|
default -> CreditTypeEnum.TERM_CONSUME.code();
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 将消费信息发送到kafka,教务消费此消息实现就餐打卡
|
|
* 将消费信息发送到kafka,教务消费此消息实现就餐打卡
|
|
|
|
|
+ *
|
|
|
* @param consumeList 消费记录列表
|
|
* @param consumeList 消费记录列表
|
|
|
- * @param accountVo 消费人员信息
|
|
|
|
|
|
|
+ * @param accountVo 消费人员信息
|
|
|
*/
|
|
*/
|
|
|
- private void sendConsumeToKafka(List<XfConsumeDetailVo> consumeList,RemoteUserAccountVo accountVo){
|
|
|
|
|
|
|
+ private void sendConsumeToKafka(List<XfConsumeDetailVo> consumeList, RemoteUserAccountVo accountVo) {
|
|
|
for (XfConsumeDetailVo vo : consumeList) {
|
|
for (XfConsumeDetailVo vo : consumeList) {
|
|
|
YcPushConsumeInfoVo ycSendConsumeInfo = new YcPushConsumeInfoVo();
|
|
YcPushConsumeInfoVo ycSendConsumeInfo = new YcPushConsumeInfoVo();
|
|
|
ycSendConsumeInfo.setRecordId(vo.getRecordId().toString());
|
|
ycSendConsumeInfo.setRecordId(vo.getRecordId().toString());
|
|
@@ -387,7 +399,8 @@ public class BaseBusiness {
|
|
|
ycSendConsumeInfo.setTermRecordID(vo.getTermRecordId());
|
|
ycSendConsumeInfo.setTermRecordID(vo.getTermRecordId());
|
|
|
ycSendConsumeInfo.setPosRecordState(vo.getRecordStatus().intValue());
|
|
ycSendConsumeInfo.setPosRecordState(vo.getRecordStatus().intValue());
|
|
|
|
|
|
|
|
- kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.OLD_SYNC_TOPIC, EventTypeConstants.CONSUME_RECORD, EventSenderEnum.OLD.code(), ycSendConsumeInfo);
|
|
|
|
|
|
|
+ kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.OLD_SYNC_TOPIC, EventTypeConstants.CONSUME_RECORD, EventSenderEnum.OLD.code(),
|
|
|
|
|
+ ycSendConsumeInfo);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|