|
@@ -132,12 +132,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
} else {
|
|
|
List<TradeDetailBaseDO> tradeDetailBaseList = tradeDetailBaseMapper.selectProductBaseList(tradeDetail.getId(), checkReqVO.getChannelId());
|
|
|
Assert.isTrue(!tradeDetailBaseList.isEmpty(), () -> exception(NO_SUB_TICKET_ERROR));
|
|
|
- // 核销指定子票(基础产品)
|
|
|
- if (!Objects.isNull(checkReqVO.getProductBaseId())) {
|
|
|
- tradeDetailBaseList = tradeDetailBaseList.stream()
|
|
|
- .filter(item -> item.getProductBaseId().equals(checkReqVO.getProductBaseId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- }
|
|
|
List<TradeCheckRespVO> list = new ArrayList<>();
|
|
|
|
|
|
for (TradeDetailBaseDO item : tradeDetailBaseList) {
|
|
@@ -228,9 +222,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (detailDO == null) {
|
|
|
- detailDO = tradeDetailMapper.getOneByVoucherCodePlat(checkCode);
|
|
|
- }
|
|
|
if (detailDO == null) {
|
|
|
TenantContextHolder.setIgnore(true);
|
|
|
detailDO = tradeDetailMapper.getOneByVoucherCode(checkCode);
|
|
@@ -239,11 +230,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
if (detailDO == null) {
|
|
|
throw exception(TRADE_DETAIL_NOT_EXIST);
|
|
|
}
|
|
|
- TradeDetailBaseDO tradeDetailBase = null;
|
|
|
- if (checkReqVO != null && checkReqVO.getProductBaseId() != null) {
|
|
|
- // 门票核销带子票id的情况,带子票信息核销
|
|
|
- tradeDetailBase = tradeDetailBaseMapper.selectById(checkReqVO.getProductBaseId());
|
|
|
- }
|
|
|
|
|
|
TradeCheckRespVO respVO = TradeCheckRespVO.builder()
|
|
|
.targetType(CheckTargetTypeEnum.Voucher.getType())
|
|
@@ -251,27 +237,10 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
.targetNo(detailDO.getVoucherCode())
|
|
|
.isSuccess(0).isPreSuccess(0)
|
|
|
.build();
|
|
|
-// String detailKey = String.format(UPDATE_ORDER_LOCK, detailDO.getOrderId());
|
|
|
-// RLock lock = redissonClient.getLock(detailKey);
|
|
|
try {
|
|
|
if (checkReqVO != null && checkReqVO.getType() != null && checkReqVO.getType() == 0 && checkReqVO.getCodeType() == 0) {
|
|
|
throw exception(INVALID_TYPE_DEVICE);
|
|
|
}
|
|
|
- if(checkReqVO != null && checkReqVO.getType()!= null && checkReqVO.getType()!=5) {
|
|
|
- checkVoucherVerify(detailDO, checkReqVO, tradeDetailBase);
|
|
|
- }
|
|
|
- String needConfirmSpec = configApi.getPlatformConfigValueByKey("need_confirm_spec");
|
|
|
- if (!Objects.isNull(needConfirmSpec) && !confirm && Objects.equals(checkReqVO.getType(), CheckTypeEnum.Gate.getType())&& !Objects.equals(checkReqVO.getType(), CheckTypeEnum.Ren.getType())) {
|
|
|
- // 闸机核销需要确认卡的规格
|
|
|
- List<String> specList = Arrays.asList(needConfirmSpec.split(","));
|
|
|
- if (specList.contains(detailDO.getSpecType()) ) {
|
|
|
- respVO.setMsg("需要确认卡");
|
|
|
- RBucket<Object> bucket = redissonClient.getBucket(String.format(TO_CONFIRM_SPEC, checkReqVO.getMachineId()));
|
|
|
- checkReqVO.setCheckCodes(checkCode);
|
|
|
- bucket.set(JSONUtil.toJsonStr(checkReqVO), 5, TimeUnit.MINUTES);
|
|
|
- return respVO;
|
|
|
- }
|
|
|
- }
|
|
|
// 核销操作记录
|
|
|
Integer statusOld = 7;
|
|
|
Integer statusNew = 7;
|
|
@@ -303,19 +272,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
detailLog.setVoucherCode(detailDO.getVoucherCode());
|
|
|
detailLog.setOperatorName("闸机预检");
|
|
|
tradeCheckMapper.insert(detailLog);
|
|
|
-
|
|
|
- // 子票核销记录
|
|
|
- TradeCheckDetailDO checkDetailLog = BeanUtil.toBean(checkReqVO, TradeCheckDetailDO.class);
|
|
|
- if (!Objects.isNull(checkReqVO.getDispatchId())) {
|
|
|
- checkDetailLog.setDispatchBatchId(Long.valueOf(checkReqVO.getDispatchId()));
|
|
|
- }
|
|
|
- checkDetailLog.setDetailBaseId(detailDO.getId());
|
|
|
- checkDetailLog.setDetailId(detailDO.getId());
|
|
|
- checkDetailLog.setType(CheckTypeEnum.GatePreCheck.getType());
|
|
|
- checkDetailLog.setOriginalStatus(detailDO.getVoucherStatus());
|
|
|
- checkDetailLog.setCheckId(detailLog.getId());
|
|
|
- checkDetailLog.setOperatorName("闸机预检");
|
|
|
- tradeCheckDetailMapper.insert(checkDetailLog);
|
|
|
}catch (Exception e){
|
|
|
log.error("预检存检票记录失败", e);
|
|
|
}
|
|
@@ -330,18 +286,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
if (respVO.getIsSuccess() == 1) {
|
|
|
tradePublishUtils.checkVoucherSuccessMsg(detailDO.getId().toString());
|
|
|
tradePublishUtils.updateOrderStatusMsg(detailDO.getOrderId()+"");
|
|
|
-// String s = updateOrderStatus(detailDO.getOrderId());
|
|
|
-// String[] split = s.split(":");
|
|
|
-// statusNew = Integer.valueOf(split[1]);
|
|
|
-// if (lock.tryLock(30, 60, TimeUnit.SECONDS)) {
|
|
|
-// String s = updateOrderStatus(detailDO.getOrderId());
|
|
|
-// String[] split = s.split(":");
|
|
|
-// statusOld = Integer.valueOf(split[0]);
|
|
|
-// statusNew = Integer.valueOf(split[1]);
|
|
|
-// } else {
|
|
|
-// log.error("未获取到锁,核销(组合产品)门票失败 detailId:{}", detailDO.getId());
|
|
|
-// throw exception(CHECK_PRODUCT_LOCK_ERROR, detailDO.getId());
|
|
|
-// }
|
|
|
}
|
|
|
Long s5 = System.currentTimeMillis();
|
|
|
log.error("{}检票时间5:{}",detailDO.getVoucherCode(), s5-s4);
|
|
@@ -353,11 +297,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
log.error("核销门票(组合产品)voucherCode:{}: {}", detailDO.getVoucherCode(), e.toString());
|
|
|
respVO.setMsg(e.getMessage());
|
|
|
}
|
|
|
-// finally {
|
|
|
-// if (lock.isHeldByCurrentThread() && lock.isLocked()) {
|
|
|
-// lock.unlock();
|
|
|
-// }
|
|
|
-// }
|
|
|
return respVO;
|
|
|
}
|
|
|
|
|
@@ -591,124 +530,14 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
* @param tradeDetailBase 子票(基础产品)
|
|
|
*/
|
|
|
private void updateVoucherStatus(TradeDetailDO tradeDetail, TradeCheckReqVO checkReqVO, TradeDetailBaseDO tradeDetailBase) {
|
|
|
- List<TradeDetailBaseDO> tradeDetailBaseList = tradeDetailBaseMapper.selectProductBaseList(tradeDetail.getId(), checkReqVO.getChannelId());
|
|
|
- // 核销指定子票(基础产品)
|
|
|
- if (tradeDetailBase != null) {
|
|
|
- checkReqVO.setProductBaseId(tradeDetailBase.getProductBaseId());
|
|
|
- }
|
|
|
- if (!Objects.isNull(checkReqVO.getProductBaseId())) {
|
|
|
- tradeDetailBaseList = tradeDetailBaseList.stream()
|
|
|
- .filter(item -> item.getProductBaseId().equals(checkReqVO.getProductBaseId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- }
|
|
|
- if (!Objects.isNull(checkReqVO.getSupplierId())) {
|
|
|
- tradeDetailBaseList = tradeDetailBaseList.stream()
|
|
|
- .filter(item -> item.getSupplierId().equals(checkReqVO.getSupplierId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- }
|
|
|
- Set<Long> baseIdSet = tradeDetailBaseList.stream().map(TradeDetailBaseDO::getProductBaseId).collect(Collectors.toSet());
|
|
|
-
|
|
|
- if(CollUtil.isEmpty(baseIdSet)){
|
|
|
- throw exception(500,"无有效子票");
|
|
|
- }
|
|
|
- // 旅行社相关门票及子票
|
|
|
- TenantContextHolder.setIgnore(true);
|
|
|
- TradeDetailDO otcTradeDetail = tradeDetailMapper.selectTravelTradeDetail(tradeDetail.getVoucherCode());
|
|
|
- List<TradeDetailBaseDO> otcTradeDetailBaseList = tradeDetailBaseMapper
|
|
|
- .selectList(new LambdaQueryWrapper<TradeDetailBaseDO>()
|
|
|
- .eq(TradeDetailBaseDO::getSupplierVoucherCode, tradeDetail.getVoucherCode())
|
|
|
- .in(TradeDetailBaseDO::getProductBaseId, baseIdSet));
|
|
|
- TenantContextHolder.setIgnore(false);
|
|
|
// 门票核销记录
|
|
|
TradeCheckDO detailLog = BeanUtil.toBean(checkReqVO, TradeCheckDO.class);
|
|
|
detailLog.setOrderId(tradeDetail.getOrderId());
|
|
|
detailLog.setDetailId(tradeDetail.getId());
|
|
|
- if (!Objects.isNull(checkReqVO.getSupplierId())) {
|
|
|
- detailLog.setMachineId(checkReqVO.getSupplierId()+"");
|
|
|
- }
|
|
|
detailLog.setOriginalStatus(tradeDetail.getVoucherStatus());
|
|
|
detailLog.setVoucherCode(tradeDetail.getVoucherCode());
|
|
|
tradeCheckMapper.insert(detailLog);
|
|
|
-
|
|
|
- List<TradeDetailBaseDO> allDetailBaseList = tradeDetailBaseMapper.selectList(TradeDetailBaseDO::getDetailId, tradeDetail.getId());
|
|
|
- long totalNum = allDetailBaseList.size();
|
|
|
- long checkedNum = allDetailBaseList.stream().filter(item -> VoucherStatusEnum.VERIFIED.getStatus().equals(item.getUseStatus())).count();
|
|
|
- StringJoiner detailBaseNames = new StringJoiner("、");
|
|
|
- for (TradeDetailBaseDO item : tradeDetailBaseList) {
|
|
|
- checkedNum += 1;
|
|
|
- // 子票核销记录
|
|
|
- TradeCheckDetailDO checkDetailLog = BeanUtil.toBean(checkReqVO, TradeCheckDetailDO.class);
|
|
|
- if (!Objects.isNull(checkReqVO.getDispatchId())) {
|
|
|
- checkDetailLog.setDispatchBatchId(Long.valueOf(checkReqVO.getDispatchId()));
|
|
|
- }
|
|
|
- checkDetailLog.setDetailBaseId(item.getId());
|
|
|
- checkDetailLog.setDetailId(item.getDetailId());
|
|
|
- checkDetailLog.setOriginalStatus(item.getUseStatus());
|
|
|
- checkDetailLog.setCheckId(detailLog.getId());
|
|
|
- tradeCheckDetailMapper.insert(checkDetailLog);
|
|
|
-
|
|
|
- item.setUseStatus(VoucherStatusEnum.VERIFIED.getStatus());
|
|
|
- item.setCheckStatus(UseStatusEnum.ENABLE.getStatus());
|
|
|
- item.setVerifyTime(LocalDateTime.now());
|
|
|
- if (item.getUsageCount() == null) {
|
|
|
- item.setUsageCount(1);
|
|
|
- } else {
|
|
|
- item.setUsageCount(item.getUsageCount() + 1);
|
|
|
- }
|
|
|
- tradeDetailBaseMapper.updateById(item);
|
|
|
- detailBaseNames.add(item.getProductBaseName());
|
|
|
-
|
|
|
- try {
|
|
|
- if (StringUtils.isNotBlank(item.getSupplierVoucherCode())) {
|
|
|
- //供应商订单核销
|
|
|
- TenantContextHolder.setIgnore(true);
|
|
|
- int num = tradeSupplierOrderMapper.selectSupplierOrderNoCheckCount(item.getPlatSupplierOrderId());
|
|
|
- Integer status = num == 0 ? TradeOrderStatusEnum.ALL_CHECK.getStatus() : TradeOrderStatusEnum.PART_CHECK.getStatus();
|
|
|
- tradeSupplierOrderMapper.update(new LambdaUpdateWrapper<TradeSupplierOrderDO>()
|
|
|
- .set(TradeSupplierOrderDO::getOrderStatus, status)
|
|
|
- .eq(TradeSupplierOrderDO::getOrderId, item.getOrderId())
|
|
|
- .ne(TradeSupplierOrderDO::getOrderStatus, status)
|
|
|
- );
|
|
|
- TenantContextHolder.setIgnore(false);
|
|
|
- }
|
|
|
- }catch (Exception e){
|
|
|
- log.error(item.getSupplierVoucherCode()+"供应商订单核销异常",e);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- tradeDetail.setCheckedDetailBaseNames(detailBaseNames.toString());
|
|
|
- int status = checkedNum>=totalNum ? VoucherStatusEnum.VERIFIED.getStatus() : VoucherStatusEnum.PART_VERIFIED.getStatus();
|
|
|
- checkVoucherStatus(tradeDetail, status);
|
|
|
-
|
|
|
- // 修改旅行社门票及子票状态
|
|
|
- if (otcTradeDetail != null && !otcTradeDetailBaseList.isEmpty()) {
|
|
|
- TenantUtils.execute(otcTradeDetail.getTenantId(), ()-> {
|
|
|
- for (TradeDetailBaseDO item : otcTradeDetailBaseList) {
|
|
|
- // 子票核销记录
|
|
|
- TradeCheckDetailDO checkDetailLog = BeanUtil.toBean(checkReqVO, TradeCheckDetailDO.class);
|
|
|
- if (!Objects.isNull(checkReqVO.getDispatchId())) {
|
|
|
- checkDetailLog.setDispatchBatchId(Long.valueOf(checkReqVO.getDispatchId()));
|
|
|
- }
|
|
|
- checkDetailLog.setDetailBaseId(item.getId());
|
|
|
- checkDetailLog.setDetailId(item.getDetailId());
|
|
|
- checkDetailLog.setOriginalStatus(item.getUseStatus());
|
|
|
- checkDetailLog.setCheckId(detailLog.getId());
|
|
|
- tradeCheckDetailMapper.insert(checkDetailLog);
|
|
|
-
|
|
|
- item.setUseStatus(VoucherStatusEnum.VERIFIED.getStatus());
|
|
|
- item.setCheckStatus(UseStatusEnum.ENABLE.getStatus());
|
|
|
- item.setVerifyTime(LocalDateTime.now());
|
|
|
- if (item.getUsageCount() == null) {
|
|
|
- item.setUsageCount(1);
|
|
|
- } else {
|
|
|
- item.setUsageCount(item.getUsageCount() + 1);
|
|
|
- }
|
|
|
- tradeDetailBaseMapper.updateById(item);
|
|
|
- }
|
|
|
- checkVoucherStatus(otcTradeDetail, status);
|
|
|
- updateOrderStatus(otcTradeDetail.getOrderId());
|
|
|
- });
|
|
|
- }
|
|
|
+ checkVoucherStatus(tradeDetail, VoucherStatusEnum.VERIFIED.getStatus());
|
|
|
}
|
|
|
/**
|
|
|
* 判断是否修改订单状态
|
|
@@ -764,9 +593,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
* @param checkReqVO 记录
|
|
|
*/
|
|
|
private void updateVoucherStatusWithSelfBuilt(TradeDetailDO tradeDetail, TradeCheckReqVO checkReqVO) {
|
|
|
- List<TradeDetailBaseDO> tradeDetailBaseList = tradeDetailBaseMapper.selectList(TradeDetailBaseDO::getDetailId, tradeDetail.getId());
|
|
|
- // 过滤已核销子票
|
|
|
- tradeDetailBaseList = tradeDetailBaseList.stream().filter(item -> item.getCheckStatus() == 0).collect(Collectors.toList());
|
|
|
// 门票核销记录
|
|
|
TradeCheckDO detailLog = BeanUtil.toBean(checkReqVO, TradeCheckDO.class);
|
|
|
detailLog.setOrderId(tradeDetail.getOrderId());
|
|
@@ -774,29 +600,6 @@ public class TradeCheckHandleServiceImpl implements TradeCheckHandleService {
|
|
|
detailLog.setOriginalStatus(tradeDetail.getVoucherStatus());
|
|
|
detailLog.setVoucherCode(tradeDetail.getVoucherCode());
|
|
|
tradeCheckMapper.insert(detailLog);
|
|
|
- // 核销指定子票(基础产品)
|
|
|
- if (!Objects.isNull(checkReqVO.getProductBaseId())) {
|
|
|
- tradeDetailBaseList = tradeDetailBaseList.stream()
|
|
|
- .filter(item -> item.getProductBaseId().equals(checkReqVO.getProductBaseId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- }
|
|
|
- StringJoiner detailBaseNames = new StringJoiner("、");
|
|
|
- for (TradeDetailBaseDO item : tradeDetailBaseList) {
|
|
|
- // 子票核销记录
|
|
|
- TradeCheckDetailDO checkDetailLog = BeanUtil.toBean(checkReqVO, TradeCheckDetailDO.class);
|
|
|
- checkDetailLog.setDetailBaseId(item.getId());
|
|
|
- checkDetailLog.setDetailId(item.getDetailId());
|
|
|
- checkDetailLog.setOriginalStatus(item.getUseStatus());
|
|
|
- checkDetailLog.setCheckId(detailLog.getId());
|
|
|
- tradeCheckDetailMapper.insert(checkDetailLog);
|
|
|
-
|
|
|
- item.setUseStatus(VoucherStatusEnum.VERIFIED.getStatus());
|
|
|
- item.setCheckStatus(UseStatusEnum.ENABLE.getStatus());
|
|
|
- item.setVerifyTime(LocalDateTime.now());
|
|
|
- tradeDetailBaseMapper.updateById(item);
|
|
|
- detailBaseNames.add(item.getProductBaseName());
|
|
|
- }
|
|
|
- tradeDetail.setCheckedDetailBaseNames(detailBaseNames.toString());
|
|
|
tradeDetailMapper.updateVoucherStatus(tradeDetail.getId(), VoucherStatusEnum.VERIFIED.getStatus());
|
|
|
|
|
|
}
|