|
|
@@ -81,22 +81,11 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
public Boolean submitAccess(CustomerAccessRequestVO request) {
|
|
|
validateAccessRequest(request);
|
|
|
checkCustomerNameUnique(request.getCustomerName(), null);
|
|
|
-
|
|
|
- VppCustomer customer = buildCustomerFromAccessRequest(request);
|
|
|
- VppAuditHelper.fillCreate(customer);
|
|
|
- customerMapper.insert(customer);
|
|
|
- savePrimaryContact(customer.getId(), request);
|
|
|
+ checkAccessCustomerNameUnique(request.getCustomerName(), null);
|
|
|
|
|
|
VppCustomerAccess access = new VppCustomerAccess();
|
|
|
access.setApplyNo(VppAuditHelper.nextApplyNo());
|
|
|
- access.setAccountNo(request.getAccountNo());
|
|
|
- access.setCustomerName(request.getCustomerName());
|
|
|
- access.setCustomerType(request.getCustomerType());
|
|
|
- access.setPowerCompany(request.getPowerCompany());
|
|
|
- access.setContractCapacity(request.getContractCapacity());
|
|
|
- access.setBusinessLicenseUrl(request.getBusinessLicenseUrl());
|
|
|
- access.setCreditStatus(request.getCreditStatus());
|
|
|
- access.setCustomerId(customer.getId());
|
|
|
+ applyAccessFromRequest(access, request);
|
|
|
access.setAccessStatus(ACCESS_PENDING);
|
|
|
access.setApplyAt(LocalDateTime.now());
|
|
|
VppAuditHelper.fillCreate(access);
|
|
|
@@ -165,9 +154,12 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
|
|
|
if (request.getResult() == ACCESS_PASSED) {
|
|
|
if (access.getCustomerId() == null) {
|
|
|
- throw new BusinessException("准入申请未关联客户,无法审核通过!");
|
|
|
+ checkCustomerNameUnique(access.getCustomerName(), null);
|
|
|
+ VppCustomer customer = createCustomerFromAccess(access);
|
|
|
+ access.setCustomerId(customer.getId());
|
|
|
+ } else {
|
|
|
+ checkCustomerNameUnique(access.getCustomerName(), access.getCustomerId());
|
|
|
}
|
|
|
- checkCustomerNameUnique(access.getCustomerName(), access.getCustomerId());
|
|
|
access.setAccessStatus(ACCESS_PASSED);
|
|
|
} else {
|
|
|
access.setAccessStatus(ACCESS_REJECTED);
|
|
|
@@ -189,28 +181,22 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
if (access.getAccessStatus() != ACCESS_REJECTED) {
|
|
|
throw new BusinessException("仅已驳回的准入申请允许修改!");
|
|
|
}
|
|
|
- if (access.getCustomerId() == null) {
|
|
|
- throw new BusinessException("准入申请未关联客户,无法修改!");
|
|
|
- }
|
|
|
checkCustomerNameUnique(request.getCustomerName(), access.getCustomerId());
|
|
|
+ checkAccessCustomerNameUnique(request.getCustomerName(), access.getId());
|
|
|
|
|
|
- access.setAccountNo(request.getAccountNo());
|
|
|
- access.setCustomerName(request.getCustomerName());
|
|
|
- access.setCustomerType(request.getCustomerType());
|
|
|
- access.setPowerCompany(request.getPowerCompany());
|
|
|
- access.setContractCapacity(request.getContractCapacity());
|
|
|
- access.setBusinessLicenseUrl(request.getBusinessLicenseUrl());
|
|
|
- access.setCreditStatus(request.getCreditStatus());
|
|
|
+ applyAccessFromRequest(access, request);
|
|
|
access.setAccessStatus(ACCESS_PENDING);
|
|
|
access.setAuditOpinion(null);
|
|
|
access.setAuditAt(null);
|
|
|
access.setApplyAt(LocalDateTime.now());
|
|
|
|
|
|
- VppCustomer customer = findCustomerById(access.getCustomerId());
|
|
|
- applyCustomerFromAccessRequest(customer, request);
|
|
|
- VppAuditHelper.fillUpdate(customer);
|
|
|
- customerMapper.updateById(customer);
|
|
|
- upsertPrimaryContact(customer.getId(), request);
|
|
|
+ if (access.getCustomerId() != null) {
|
|
|
+ VppCustomer customer = findCustomerById(access.getCustomerId());
|
|
|
+ applyCustomerFromAccessRequest(customer, request);
|
|
|
+ VppAuditHelper.fillUpdate(customer);
|
|
|
+ customerMapper.updateById(customer);
|
|
|
+ upsertPrimaryContact(customer.getId(), request);
|
|
|
+ }
|
|
|
|
|
|
VppAuditHelper.fillUpdate(access);
|
|
|
return accessMapper.updateById(access) > 0;
|
|
|
@@ -934,6 +920,45 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
|
|
|
// ==================== 内部辅助方法 ====================
|
|
|
|
|
|
+ private void applyAccessFromRequest(VppCustomerAccess access, CustomerAccessRequestVO request) {
|
|
|
+ access.setAccountNo(request.getAccountNo());
|
|
|
+ access.setCustomerName(request.getCustomerName());
|
|
|
+ access.setCustomerType(request.getCustomerType());
|
|
|
+ access.setPowerCompany(request.getPowerCompany());
|
|
|
+ access.setContractCapacity(request.getContractCapacity());
|
|
|
+ access.setBusinessLicenseUrl(request.getBusinessLicenseUrl());
|
|
|
+ access.setCreditStatus(request.getCreditStatus());
|
|
|
+ access.setContactName(request.getContactName());
|
|
|
+ access.setContactPhone(request.getContactPhone());
|
|
|
+ access.setContactEmail(request.getContactEmail());
|
|
|
+ access.setAddress(request.getAddress());
|
|
|
+ }
|
|
|
+
|
|
|
+ private CustomerAccessRequestVO toAccessRequest(VppCustomerAccess access) {
|
|
|
+ CustomerAccessRequestVO request = new CustomerAccessRequestVO();
|
|
|
+ request.setAccountNo(access.getAccountNo());
|
|
|
+ request.setCustomerName(access.getCustomerName());
|
|
|
+ request.setCustomerType(access.getCustomerType());
|
|
|
+ request.setPowerCompany(access.getPowerCompany());
|
|
|
+ request.setContractCapacity(access.getContractCapacity());
|
|
|
+ request.setBusinessLicenseUrl(access.getBusinessLicenseUrl());
|
|
|
+ request.setCreditStatus(access.getCreditStatus());
|
|
|
+ request.setContactName(access.getContactName());
|
|
|
+ request.setContactPhone(access.getContactPhone());
|
|
|
+ request.setContactEmail(access.getContactEmail());
|
|
|
+ request.setAddress(access.getAddress());
|
|
|
+ return request;
|
|
|
+ }
|
|
|
+
|
|
|
+ private VppCustomer createCustomerFromAccess(VppCustomerAccess access) {
|
|
|
+ CustomerAccessRequestVO request = toAccessRequest(access);
|
|
|
+ VppCustomer customer = buildCustomerFromAccessRequest(request);
|
|
|
+ VppAuditHelper.fillCreate(customer);
|
|
|
+ customerMapper.insert(customer);
|
|
|
+ savePrimaryContact(customer.getId(), request);
|
|
|
+ return customer;
|
|
|
+ }
|
|
|
+
|
|
|
private VppCustomer buildCustomerFromAccessRequest(CustomerAccessRequestVO request) {
|
|
|
VppCustomer customer = new VppCustomer();
|
|
|
applyCustomerFromAccessRequest(customer, request);
|
|
|
@@ -1007,10 +1032,10 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
|
|
|
private void fillAccessContactInfo(CustomerAccessResponseVO vo, VppCustomer customer,
|
|
|
VppCustomerContact contact) {
|
|
|
- if (customer != null) {
|
|
|
+ if (StringUtils.isBlank(vo.getAddress()) && customer != null) {
|
|
|
vo.setAddress(customer.getAddress());
|
|
|
}
|
|
|
- if (contact != null) {
|
|
|
+ if (StringUtils.isBlank(vo.getContactName()) && contact != null) {
|
|
|
vo.setContactName(contact.getContactName());
|
|
|
vo.setContactPhone(contact.getContactPhone());
|
|
|
vo.setContactEmail(contact.getContactEmail());
|
|
|
@@ -1100,6 +1125,22 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 待审核/已驳回准入申请的客户名称唯一校验(当前租户)
|
|
|
+ */
|
|
|
+ private void checkAccessCustomerNameUnique(String customerName, Long excludeAccessId) {
|
|
|
+ LambdaQueryWrapper<VppCustomerAccess> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(VppCustomerAccess::getCustomerName, customerName)
|
|
|
+ .eq(VppCustomerAccess::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .eq(VppCustomerAccess::getDeleteFlag, VppAuditHelper.NOT_DELETED)
|
|
|
+ .in(VppCustomerAccess::getAccessStatus, ACCESS_PENDING, ACCESS_REJECTED)
|
|
|
+ .ne(excludeAccessId != null, VppCustomerAccess::getId, excludeAccessId);
|
|
|
+ Integer count = accessMapper.selectCount(wrapper);
|
|
|
+ if (count != null && count > 0) {
|
|
|
+ throw new BusinessException("客户名称已存在待处理准入申请,请更换!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void validateAccessRequest(CustomerAccessRequestVO request) {
|
|
|
if (request == null) {
|
|
|
throw new BusinessException("准入申请参数不能为空!");
|