|
@@ -44,19 +44,28 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.Comparator;
|
|
import java.util.Comparator;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.LinkedHashMap;
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
@Service
|
|
|
public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
|
|
|
|
|
|
|
|
+ private static final String RECORD_STATUS_PENDING_AUTH = "未完成";
|
|
|
|
|
+ private static final String RECORD_STATUS_AUTHORIZED = "已授权";
|
|
|
|
|
+ private static final String RECORD_STATUS_UNAUTHORIZED = "未授权";
|
|
|
|
|
+ private static final Set<String> AUTHORIZATION_TERMINAL_STATUSES =
|
|
|
|
|
+ new HashSet<>(List.of(RECORD_STATUS_AUTHORIZED, RECORD_STATUS_UNAUTHORIZED));
|
|
|
|
|
+
|
|
|
private final MainBackOrderMapper baseMapper;
|
|
private final MainBackOrderMapper baseMapper;
|
|
|
private final MainBackRecordMapper recordMapper;
|
|
private final MainBackRecordMapper recordMapper;
|
|
|
private final MainOrderMapper mainOrderMapper;
|
|
private final MainOrderMapper mainOrderMapper;
|
|
@@ -462,6 +471,51 @@ public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public MainBackOrderCandidateVo confirmPortalCandidateAuthorization(Long recordId, String tenantId) {
|
|
|
|
|
+ if (recordId == null) {
|
|
|
|
|
+ throw new ServiceException("候选人记录不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(tenantId)) {
|
|
|
|
|
+ throw new ServiceException("未登录或token已失效");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ MainBackRecord record = recordMapper.selectById(recordId);
|
|
|
|
|
+ if (record == null) {
|
|
|
|
|
+ throw new ServiceException("候选人记录不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ MainBackOrder backOrder = baseMapper.selectById(record.getOrderId());
|
|
|
|
|
+ if (backOrder == null || !StringUtils.equals(backOrder.getTenantId(), tenantId)) {
|
|
|
|
|
+ throw new ServiceException("无权操作该候选人授权记录");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ MainOrder mainOrder = mainOrderMapper.selectOne(
|
|
|
|
|
+ Wrappers.<MainOrder>lambdaQuery()
|
|
|
|
|
+ .eq(MainOrder::getBusinessId, backOrder.getId())
|
|
|
|
|
+ .eq(MainOrder::getOrderType, 3)
|
|
|
|
|
+ .eq(MainOrder::getTenantId, tenantId)
|
|
|
|
|
+ .last("limit 1")
|
|
|
|
|
+ );
|
|
|
|
|
+ if (mainOrder == null) {
|
|
|
|
|
+ throw new ServiceException("订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!RECORD_STATUS_AUTHORIZED.equals(record.getStatus())) {
|
|
|
|
|
+ MainBackRecord update = new MainBackRecord();
|
|
|
|
|
+ update.setId(record.getId());
|
|
|
|
|
+ update.setStatus(RECORD_STATUS_AUTHORIZED);
|
|
|
|
|
+ update.setFinishTime(LocalDateTime.now());
|
|
|
|
|
+ recordMapper.updateById(update);
|
|
|
|
|
+ record.setStatus(RECORD_STATUS_AUTHORIZED);
|
|
|
|
|
+ record.setFinishTime(update.getFinishTime());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ completePortalOrderWhenAuthorizationFinished(backOrder, mainOrder);
|
|
|
|
|
+ return buildPortalCandidateVo(record);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void fillPortalFields(MainBackOrderVo vo, MainOrder mainOrder) {
|
|
private void fillPortalFields(MainBackOrderVo vo, MainOrder mainOrder) {
|
|
|
Long count = recordMapper.selectCount(
|
|
Long count = recordMapper.selectCount(
|
|
|
new LambdaQueryWrapper<MainBackRecord>()
|
|
new LambdaQueryWrapper<MainBackRecord>()
|
|
@@ -525,6 +579,55 @@ public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
|
return amount == null ? BigDecimal.ZERO : amount;
|
|
return amount == null ? BigDecimal.ZERO : amount;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void completePortalOrderWhenAuthorizationFinished(MainBackOrder backOrder, MainOrder mainOrder) {
|
|
|
|
|
+ List<MainBackRecord> records = recordMapper.selectList(
|
|
|
|
|
+ Wrappers.<MainBackRecord>lambdaQuery()
|
|
|
|
|
+ .eq(MainBackRecord::getOrderId, backOrder.getId())
|
|
|
|
|
+ );
|
|
|
|
|
+ if (records.isEmpty()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ boolean allAuthorizationCompleted = records.stream()
|
|
|
|
|
+ .map(MainBackRecord::getStatus)
|
|
|
|
|
+ .allMatch(AUTHORIZATION_TERMINAL_STATUSES::contains);
|
|
|
|
|
+ if (!allAuthorizationCompleted) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!"2".equals(backOrder.getStatus())) {
|
|
|
|
|
+ MainBackOrder orderUpdate = new MainBackOrder();
|
|
|
|
|
+ orderUpdate.setId(backOrder.getId());
|
|
|
|
|
+ orderUpdate.setStatus("2");
|
|
|
|
|
+ baseMapper.updateById(orderUpdate);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!Integer.valueOf(2).equals(mainOrder.getOrderStatus())) {
|
|
|
|
|
+ MainOrder mainOrderUpdate = new MainOrder();
|
|
|
|
|
+ mainOrderUpdate.setId(mainOrder.getId());
|
|
|
|
|
+ mainOrderUpdate.setOrderStatus(2);
|
|
|
|
|
+ mainOrderUpdate.setCompleteTime(new Date());
|
|
|
|
|
+ mainOrderMapper.updateById(mainOrderUpdate);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private MainBackOrderCandidateVo buildPortalCandidateVo(MainBackRecord record) {
|
|
|
|
|
+ MainBackCandidate candidate = mainBackCandidateMapper.selectById(record.getCandidateId());
|
|
|
|
|
+ MainStudent student = candidate == null ? null : mainStudentMapper.selectById(candidate.getStudentId());
|
|
|
|
|
+
|
|
|
|
|
+ MainBackOrderCandidateVo vo = new MainBackOrderCandidateVo();
|
|
|
|
|
+ vo.setId(record.getId());
|
|
|
|
|
+ vo.setOrderId(record.getOrderId());
|
|
|
|
|
+ vo.setStudentName(student == null ? null : student.getName());
|
|
|
|
|
+ vo.setCandidatePhone(student == null ? null : student.getMobile());
|
|
|
|
|
+ vo.setCandidateIdType("1");
|
|
|
|
|
+ vo.setCandidateIdNumber(student == null ? null : student.getIdCardNumber());
|
|
|
|
|
+ vo.setStatus(mapRecordStatus(record.getStatus()));
|
|
|
|
|
+ vo.setStatusText(mapRecordStatusText(record.getStatus()));
|
|
|
|
|
+ vo.setReportUrl(record.getReportUrl());
|
|
|
|
|
+ return vo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private Payment queryLatestPayment(Long orderId) {
|
|
private Payment queryLatestPayment(Long orderId) {
|
|
|
return paymentMapper.selectOne(
|
|
return paymentMapper.selectOne(
|
|
|
Wrappers.<Payment>lambdaQuery()
|
|
Wrappers.<Payment>lambdaQuery()
|
|
@@ -580,6 +683,7 @@ public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
|
vo.setCandidateIdType("1");
|
|
vo.setCandidateIdType("1");
|
|
|
vo.setCandidateIdNumber(student == null ? null : student.getIdCardNumber());
|
|
vo.setCandidateIdNumber(student == null ? null : student.getIdCardNumber());
|
|
|
vo.setStatus(mapRecordStatus(record.getStatus()));
|
|
vo.setStatus(mapRecordStatus(record.getStatus()));
|
|
|
|
|
+ vo.setStatusText(mapRecordStatusText(record.getStatus()));
|
|
|
vo.setReportUrl(record.getReportUrl());
|
|
vo.setReportUrl(record.getReportUrl());
|
|
|
result.add(vo);
|
|
result.add(vo);
|
|
|
}
|
|
}
|
|
@@ -630,11 +734,28 @@ public class MainBackOrderServiceImpl implements IMainBackOrderService {
|
|
|
return switch (status) {
|
|
return switch (status) {
|
|
|
case "进行中" -> 1;
|
|
case "进行中" -> 1;
|
|
|
case "已完成", "完成" -> 2;
|
|
case "已完成", "完成" -> 2;
|
|
|
|
|
+ case "已授权" -> 4;
|
|
|
|
|
+ case "未授权" -> 5;
|
|
|
case "已取消", "失败" -> 3;
|
|
case "已取消", "失败" -> 3;
|
|
|
default -> 0;
|
|
default -> 0;
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private String mapRecordStatusText(String status) {
|
|
|
|
|
+ if (StringUtils.isBlank(status)) {
|
|
|
|
|
+ return "待授权";
|
|
|
|
|
+ }
|
|
|
|
|
+ return switch (status) {
|
|
|
|
|
+ case RECORD_STATUS_PENDING_AUTH -> "待授权";
|
|
|
|
|
+ case RECORD_STATUS_AUTHORIZED -> RECORD_STATUS_AUTHORIZED;
|
|
|
|
|
+ case RECORD_STATUS_UNAUTHORIZED -> RECORD_STATUS_UNAUTHORIZED;
|
|
|
|
|
+ case "进行中" -> "背调中";
|
|
|
|
|
+ case "已完成", "完成" -> "已完成";
|
|
|
|
|
+ case "已取消", "失败" -> "已取消";
|
|
|
|
|
+ default -> "待授权";
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private String toPaymentStatusText(Integer status) {
|
|
private String toPaymentStatusText(Integer status) {
|
|
|
if (status == null) {
|
|
if (status == null) {
|
|
|
return "未知";
|
|
return "未知";
|