|
@@ -23,15 +23,10 @@ import org.dromara.common.core.enums.UserAccountStatusEnum;
|
|
|
import org.dromara.common.core.utils.RecordIdUtils;
|
|
import org.dromara.common.core.utils.RecordIdUtils;
|
|
|
import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
|
|
import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
|
|
|
import org.dromara.server.consume.cache.TokenManager;
|
|
import org.dromara.server.consume.cache.TokenManager;
|
|
|
-import org.dromara.server.consume.domain.vo.PtBagVo;
|
|
|
|
|
-import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
|
|
|
|
|
-import org.dromara.server.consume.domain.vo.XfConsumeDetailVo;
|
|
|
|
|
-import org.dromara.server.consume.domain.vo.XfTermVo;
|
|
|
|
|
|
|
+import org.dromara.server.consume.domain.bo.XfCardLimitedBo;
|
|
|
|
|
+import org.dromara.server.consume.domain.vo.*;
|
|
|
import org.dromara.server.consume.domain.vo.yc.TermToken;
|
|
import org.dromara.server.consume.domain.vo.yc.TermToken;
|
|
|
-import org.dromara.server.consume.service.IConsumeDetailOriginalService;
|
|
|
|
|
-import org.dromara.server.consume.service.IPtBagService;
|
|
|
|
|
-import org.dromara.server.consume.service.IXfConsumeDetailService;
|
|
|
|
|
-import org.dromara.server.consume.service.IXfTermService;
|
|
|
|
|
|
|
+import org.dromara.server.consume.service.*;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
@@ -40,6 +35,7 @@ import java.text.MessageFormat;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneOffset;
|
|
import java.time.ZoneOffset;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
|
|
|
@@ -71,6 +67,7 @@ public class CheckBusiness {
|
|
|
private final IXfConsumeDetailService consumeDetailService;
|
|
private final IXfConsumeDetailService consumeDetailService;
|
|
|
private final IPtBagService bagService;
|
|
private final IPtBagService bagService;
|
|
|
private final TokenManager tokenManager;
|
|
private final TokenManager tokenManager;
|
|
|
|
|
+ private final IXfCardLimitedService cardLimitedService;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 消费记录参数检检查
|
|
* 消费记录参数检检查
|
|
@@ -531,10 +528,74 @@ public class CheckBusiness {
|
|
|
return R.ok();
|
|
return R.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public R<ErrorInfo> checkCardLimitDeal(ConsumptionBo bo, XfTermVo termVo, RemoteCardVo userCardVo, RemoteMealTypeVo mealTypeVo){
|
|
|
|
|
|
|
+ public R<ErrorInfo> checkCardLimitDeal(ConsumptionBo bo, XfTermVo termVo, RemoteCardVo userCardVo, RemoteMealTypeVo mealTypeVo) {
|
|
|
|
|
+ LocalDateTime currentLocalDt = LocalDateTime.now();
|
|
|
|
|
+ Long cardNo = userCardVo.getCardNo();
|
|
|
|
|
+ Long mealTypeId = Long.valueOf(mealTypeVo.getTypeId());
|
|
|
|
|
+ XfCardLimitedVo cardLimitedVo = cardLimitedService.queryByCardNo(cardNo);
|
|
|
|
|
+ if (ObjectUtil.isEmpty(cardLimitedVo)) {
|
|
|
|
|
+ cardLimitedVo = initXfCardLimited(cardNo, mealTypeVo.getMealId(), userCardVo);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 每天限制消费次数
|
|
|
|
|
+ Long dayLimitCount = cardLimitedVo.getDayCount();
|
|
|
|
|
+ // 每餐限制消费次数
|
|
|
|
|
+ Long mealLimitCount = cardLimitedVo.getMealCount();
|
|
|
|
|
+ // 每天限制消费金额
|
|
|
|
|
+ BigDecimal dayLimitValue = cardLimitedVo.getDayMoney();
|
|
|
|
|
+ // 每餐限制消费金额
|
|
|
|
|
+ BigDecimal mealLimitValue = cardLimitedVo.getDayMoney();
|
|
|
|
|
+ // 每天折扣限制消费次数
|
|
|
|
|
+ Long zkDayCount = cardLimitedVo.getDayDiscountCount();
|
|
|
|
|
+ // 每餐折扣限制消费次数
|
|
|
|
|
+ Long zkMealCount = cardLimitedVo.getMealDiscountCount();
|
|
|
|
|
+ // 最后交易时间
|
|
|
|
|
+ LocalDateTime lastPayLimitLocalDt = LocalDateTime.ofInstant(cardLimitedVo.getLastPay().toInstant(),
|
|
|
|
|
+ ZoneOffset.of("+8"));
|
|
|
|
|
+ // 最后交易餐类
|
|
|
|
|
+ Long lastPayLimitMealType = cardLimitedVo.getLastMeal();
|
|
|
|
|
+ // 判断交易是否为新的一天(重置各项数据)
|
|
|
|
|
+ if (!lastPayLimitLocalDt.toLocalDate().isEqual(currentLocalDt.toLocalDate())) {
|
|
|
|
|
+ cardLimitedVo = cardLimitedService.resetDayCardLimitedData(cardNo, mealTypeId.toString());
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(cardLimitedVo)) {
|
|
|
|
|
+ lastPayLimitMealType = mealTypeId;
|
|
|
|
|
+ dayLimitCount = 0L;
|
|
|
|
|
+ mealLimitCount = 0L;
|
|
|
|
|
+ dayLimitValue = BigDecimal.ZERO;
|
|
|
|
|
+ mealLimitValue = BigDecimal.ZERO;
|
|
|
|
|
+ zkDayCount = 0L;
|
|
|
|
|
+ zkMealCount = 0L;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 判断是否为新的餐类
|
|
|
|
|
+ if (!Objects.equals(lastPayLimitMealType, mealTypeId)) {
|
|
|
|
|
+ cardLimitedVo = cardLimitedService.resetMealCardLimitedData(cardNo, mealTypeId.toString());
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(cardLimitedVo)) {
|
|
|
|
|
+ mealLimitCount = zkMealCount = 0L;
|
|
|
|
|
+ mealLimitValue = BigDecimal.ZERO;
|
|
|
|
|
+ zkMealCount = 0L;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return R.ok();
|
|
return R.ok();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private XfCardLimitedVo initXfCardLimited(Long cardNo, Long mealType, RemoteCardVo userCardVo) {
|
|
|
|
|
+ LocalDateTime lastPayLocalDt = LocalDateTime.ofInstant(userCardVo.getLastPay().toInstant(), ZoneOffset.of("+8"));
|
|
|
|
|
+ ;
|
|
|
|
|
+ XfCardLimitedBo bo = new XfCardLimitedBo();
|
|
|
|
|
+ bo.setCardNo(cardNo);
|
|
|
|
|
+ bo.setDayCount(0L);
|
|
|
|
|
+ bo.setDayMoney(BigDecimal.ZERO);
|
|
|
|
|
+ bo.setMealCount(0L);
|
|
|
|
|
+ bo.setMealMoney(BigDecimal.ZERO);
|
|
|
|
|
+ bo.setDayDiscountCount(0L);
|
|
|
|
|
+ bo.setMealDiscountCount(0L);
|
|
|
|
|
+ bo.setLastPay(Date.from(lastPayLocalDt.toInstant(ZoneOffset.of("+8"))));
|
|
|
|
|
+ bo.setLastMeal(mealType);
|
|
|
|
|
+
|
|
|
|
|
+ return cardLimitedService.insertReturnByBo(bo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private RemoteOperatorVo getOperatorVo(ConsumptionBo bo) {
|
|
private RemoteOperatorVo getOperatorVo(ConsumptionBo bo) {
|
|
|
RemoteOperatorVo operatorVo = remoteOperatorService.getVoById(bo.getOperatorId());
|
|
RemoteOperatorVo operatorVo = remoteOperatorService.getVoById(bo.getOperatorId());
|
|
|
if (ObjectUtil.isEmpty(operatorVo)) {
|
|
if (ObjectUtil.isEmpty(operatorVo)) {
|