fix:审批功能重构-安能添加行程和变更行程-细节问题修复
This commit is contained in:
parent
2ba217d23d
commit
61dbc769c8
|
@ -65,16 +65,23 @@ public class ApprovalLegAddAndChangeBatch extends ApprovalProcess {
|
||||||
public void handlerApprovalResultBefore(ApprovalResultData data) {
|
public void handlerApprovalResultBefore(ApprovalResultData data) {
|
||||||
String approvalRecordNo = data.getApprovalRecordNo();
|
String approvalRecordNo = data.getApprovalRecordNo();
|
||||||
RouteOrder routeOrder = data.getRouteOrder();
|
RouteOrder routeOrder = data.getRouteOrder();
|
||||||
|
List<Leg> legs = routeOrder.getLegItems().stream()
|
||||||
routeOrder.getLegItems().stream()
|
|
||||||
.filter(leg -> isLegApprovalPending(leg, approvalRecordNo))
|
.filter(leg -> isLegApprovalPending(leg, approvalRecordNo))
|
||||||
.forEach(leg -> handleLegApprovalResult(data, routeOrder, leg));
|
.toList();
|
||||||
|
for (Leg leg : legs) {
|
||||||
|
handleLegApprovalResult(data, routeOrder, leg);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isLegApprovalPending(Leg leg, String approvalRecordNo) {
|
private boolean isLegApprovalPending(Leg leg, String approvalRecordNo) {
|
||||||
|
if (leg == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
BaseEvent lastEvent = leg.getLastEvent();
|
BaseEvent lastEvent = leg.getLastEvent();
|
||||||
return lastEvent.getEventType().equals(LEG_APPROVAL_STATUS_SUBMIT) &&
|
return lastEvent.getEventType().equals(LEG_APPROVAL_STATUS_SUBMIT) &&
|
||||||
lastEvent.getExtension().equals(approvalRecordNo);
|
lastEvent.getExtension().equals(approvalRecordNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleLegApprovalResult(ApprovalResultData data, RouteOrder routeOrder, Leg leg) {
|
private void handleLegApprovalResult(ApprovalResultData data, RouteOrder routeOrder, Leg leg) {
|
||||||
if (data.getApprovalStatus().equals(ApprovalRecord.successApprovalStatus())) {
|
if (data.getApprovalStatus().equals(ApprovalRecord.successApprovalStatus())) {
|
||||||
leg.addEvent(LegApprovalEvent.success());
|
leg.addEvent(LegApprovalEvent.success());
|
||||||
|
@ -83,6 +90,7 @@ public class ApprovalLegAddAndChangeBatch extends ApprovalProcess {
|
||||||
rollbackLegState(routeOrder, leg);
|
rollbackLegState(routeOrder, leg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rollbackLegState(RouteOrder routeOrder, Leg leg) {
|
private void rollbackLegState(RouteOrder routeOrder, Leg leg) {
|
||||||
leg.getLegApprovalEventList().stream()
|
leg.getLegApprovalEventList().stream()
|
||||||
.filter(event -> event.getEventType().equals(LEG_APPROVAL_STATUS_PREPARE))
|
.filter(event -> event.getEventType().equals(LEG_APPROVAL_STATUS_PREPARE))
|
||||||
|
@ -95,6 +103,7 @@ public class ApprovalLegAddAndChangeBatch extends ApprovalProcess {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRollbackToOriginalLeg(LegApprovalEvent lastPrepareEvent) {
|
private boolean isRollbackToOriginalLeg(LegApprovalEvent lastPrepareEvent) {
|
||||||
return lastPrepareEvent.getExtension() == null || lastPrepareEvent.getExtension().isEmpty();
|
return lastPrepareEvent.getExtension() == null || lastPrepareEvent.getExtension().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.springframework.data.relational.core.mapping.Table;
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Table("approval_record")
|
@Table("approval_record")
|
||||||
|
@ -65,4 +66,17 @@ public class ApprovalRecord implements Serializable {
|
||||||
public static Integer rejectApprovalStatus() {
|
public static Integer rejectApprovalStatus() {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String approvalStatusName() {
|
||||||
|
if (Objects.equals(this.approvalStatus, prepareApprovalStatus())) {
|
||||||
|
return "待审批";
|
||||||
|
}
|
||||||
|
if (Objects.equals(this.approvalStatus, successApprovalStatus())) {
|
||||||
|
return "已通过";
|
||||||
|
}
|
||||||
|
if (Objects.equals(this.approvalStatus, rejectApprovalStatus())) {
|
||||||
|
return "已驳回";
|
||||||
|
}
|
||||||
|
return "未知状态";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.chint.domain.aggregates.approval;
|
||||||
|
|
||||||
import com.chint.domain.aggregates.approval.platform.ApprovalPlatform;
|
import com.chint.domain.aggregates.approval.platform.ApprovalPlatform;
|
||||||
import com.chint.domain.aggregates.order.RouteOrder;
|
import com.chint.domain.aggregates.order.RouteOrder;
|
||||||
|
import com.chint.domain.exceptions.CommandException;
|
||||||
import com.chint.domain.repository.ApprovalRecordRepository;
|
import com.chint.domain.repository.ApprovalRecordRepository;
|
||||||
import com.chint.domain.repository.RouteRepository;
|
import com.chint.domain.repository.RouteRepository;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
@ -12,7 +13,9 @@ import org.springframework.context.ApplicationListener;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -75,10 +78,16 @@ public class ApprovalSubmit implements ApplicationListener<ApplicationReadyEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processHandleApprovalResult(ApprovalResultData data, RouteOrder routeOrder, ApprovalRecord approvalRecord) {
|
private void processHandleApprovalResult(ApprovalResultData data, RouteOrder routeOrder, ApprovalRecord approvalRecord) {
|
||||||
|
if (!approvalRecord.getApprovalStatus().equals(ApprovalRecord.prepareApprovalStatus())) {
|
||||||
|
throw new CommandException("该审批单已审批完毕,结果为" + approvalRecord.approvalStatusName());
|
||||||
|
}
|
||||||
ApprovalProcess approvalProcess = of(ApprovalType.valueOf(approvalRecord.getApprovalType()),
|
ApprovalProcess approvalProcess = of(ApprovalType.valueOf(approvalRecord.getApprovalType()),
|
||||||
approvalRecord.getApprovalPlatformMark());
|
approvalRecord.getApprovalPlatformMark());
|
||||||
approvalProcess.handlerApprovalResult(data);
|
approvalProcess.handlerApprovalResult(data);
|
||||||
approvalRecord.setApprovalStatus(data.getApprovalStatus());
|
approvalRecord.setApprovalStatus(Objects.equals(data.getApprovalStatus(), ApprovalRecord.successApprovalStatus()) ?
|
||||||
|
ApprovalRecord.successApprovalStatus() :
|
||||||
|
ApprovalRecord.rejectApprovalStatus());
|
||||||
|
approvalRecord.setApprovalResponseDate(LocalDateTime.now());
|
||||||
routeRepository.save(routeOrder);
|
routeRepository.save(routeOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,11 @@ public class ApprovalPlatformAN implements ApprovalPlatform {
|
||||||
approvalScheduleParam.setApplicant(routeOrder.getUserId());
|
approvalScheduleParam.setApplicant(routeOrder.getUserId());
|
||||||
approvalScheduleParam.setApplicantDate(DateTimeUtil.timeToStr(LocalDateTime.now()));
|
approvalScheduleParam.setApplicantDate(DateTimeUtil.timeToStr(LocalDateTime.now()));
|
||||||
approvalScheduleParam.setApplyNo(approveOrderNo.getActualOrderNo());
|
approvalScheduleParam.setApplyNo(approveOrderNo.getActualOrderNo());
|
||||||
|
routeOrder.getApprovalRecordList()
|
||||||
|
.stream()
|
||||||
|
.filter(it -> it.getApprovalRecordNo().equals(approvalData.getApprovalRecordNo()))
|
||||||
|
.findFirst()
|
||||||
|
.ifPresent(it -> approvalScheduleParam.setRemark(it.getApprovalReason()));
|
||||||
List<ScheduleItem> scheduleItemList = new ArrayList<>();
|
List<ScheduleItem> scheduleItemList = new ArrayList<>();
|
||||||
for (Pair<Leg, Leg> legPair : approvalData.getChangeLegList()) {
|
for (Pair<Leg, Leg> legPair : approvalData.getChangeLegList()) {
|
||||||
Leg newLeg = legPair.getFirst();
|
Leg newLeg = legPair.getFirst();
|
||||||
|
@ -287,6 +292,7 @@ public class ApprovalPlatformAN implements ApprovalPlatform {
|
||||||
public String applicant;
|
public String applicant;
|
||||||
public String applicantDate;
|
public String applicantDate;
|
||||||
public String applyNo;
|
public String applyNo;
|
||||||
|
public String remark;
|
||||||
public List<ScheduleItem> scheduleList;
|
public List<ScheduleItem> scheduleList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,25 +132,28 @@ public class RouteApprovalDomainService {
|
||||||
|
|
||||||
public RouteOrder checkApprovalPermissions(RouteOrder routeOrder) {
|
public RouteOrder checkApprovalPermissions(RouteOrder routeOrder) {
|
||||||
ApproveOrderNo approveOrderNo = routeOrder.getApproveOrderNo();
|
ApproveOrderNo approveOrderNo = routeOrder.getApproveOrderNo();
|
||||||
String approvalType = systemOrganizationRepository.findByOrgCodeContainingOrOrgNameContaining(approveOrderNo.getAccountCompany(),
|
String approvalType = findApprovalType(approveOrderNo);
|
||||||
approveOrderNo.getAccountCompany()).map(SystemOrganization::getApprovalType).orElseGet(
|
|
||||||
() -> systemCodeRepository.findBySysCode(approveOrderNo.getSysCode()).getApprovalType());
|
|
||||||
if (approvalType != null) {
|
if (approvalType != null) {
|
||||||
routeOrder.setRoutePermissionSet(
|
Set<RoutePermission> permissions = findRoutePermissions(approvalType);
|
||||||
permissionConfigRepository.findByPermissionName(approvalType)
|
routeOrder.setRoutePermissionSet(permissions);
|
||||||
.map(permissionConfig -> {
|
|
||||||
List<String> permissions = permissionConfig.permissions();
|
|
||||||
return permissions.stream()
|
|
||||||
.distinct()
|
|
||||||
.map(permission -> Enum.valueOf(RoutePermission.class, permission))
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
}).orElseGet(Set::of)
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
routeOrder.setRoutePermissionSet(Collections.emptySet());
|
routeOrder.setRoutePermissionSet(Collections.emptySet());
|
||||||
}
|
}
|
||||||
return routeOrder;
|
return routeOrder;
|
||||||
}
|
}
|
||||||
|
private String findApprovalType(ApproveOrderNo approveOrderNo) {
|
||||||
|
return systemOrganizationRepository.findByOrgCodeContainingOrOrgNameContaining(approveOrderNo.getAccountCompany(), approveOrderNo.getAccountCompany())
|
||||||
|
.map(SystemOrganization::getApprovalType)
|
||||||
|
.orElseGet(() -> systemCodeRepository.findBySysCode(approveOrderNo.getSysCode()).getApprovalType());
|
||||||
|
}
|
||||||
|
private Set<RoutePermission> findRoutePermissions(String approvalType) {
|
||||||
|
return permissionConfigRepository.findByPermissionName(approvalType)
|
||||||
|
.map(permissionConfig -> permissionConfig.permissions().stream()
|
||||||
|
.distinct()
|
||||||
|
.map(permission -> Enum.valueOf(RoutePermission.class, permission))
|
||||||
|
.collect(Collectors.toSet()))
|
||||||
|
.orElseGet(Collections::emptySet);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private String getApprovalPlatformMark(RouteOrder routeOrder) {
|
private String getApprovalPlatformMark(RouteOrder routeOrder) {
|
||||||
|
|
|
@ -250,7 +250,7 @@ public class CTripTest {
|
||||||
@Test
|
@Test
|
||||||
void search() {
|
void search() {
|
||||||
BaseContext.setCurrentUser(user);
|
BaseContext.setCurrentUser(user);
|
||||||
SearchOrderResponse response = orderSearchRequest.searchOrderResponseByOrderId("32219551997");
|
SearchOrderResponse response = orderSearchRequest.searchOrderResponseByOrderId("32952443950");
|
||||||
System.out.println(response);
|
System.out.println(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -313,7 +313,7 @@ class RouteApplicationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void loginSign() {
|
void loginSign() {
|
||||||
String sfno = "011207001";
|
String sfno = "221108016";
|
||||||
String syscode = "FSSC";
|
String syscode = "FSSC";
|
||||||
String billcode = "CLSQ240620004123";
|
String billcode = "CLSQ240620004123";
|
||||||
String companycode = "正泰集团股份有限公司";
|
String companycode = "正泰集团股份有限公司";
|
||||||
|
|
Loading…
Reference in New Issue