Jelajahi Sumber

准入管理接口代码优化,优化必填项等

fuyuchuan 3 hari lalu
induk
melakukan
43ff60a5be

+ 12 - 0
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/domain/VppCustomerAccess.java

@@ -49,6 +49,18 @@ public class VppCustomerAccess implements Serializable {
     @TableField("customer_id")
     private Long customerId;
 
+    @TableField(exist = false)
+    private String contactName;
+
+    @TableField(exist = false)
+    private String contactPhone;
+
+    @TableField(exist = false)
+    private String contactEmail;
+
+    @TableField(exist = false)
+    private String address;
+
     @TableField(exist = false)
     private LocalDateTime signingDate;
 

+ 7 - 0
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/domain/VppSettlementBill.java

@@ -48,8 +48,15 @@ public class VppSettlementBill implements Serializable {
 
     @TableField("total_amount")
     private BigDecimal totalAmount;
+
+    /**
+     * 已付金额,默认0
+     */
     @TableField("paid_amount")
     private BigDecimal paidAmount;
+    /**
+     * 0未缴 1部分 2已缴 3逾期
+     */
     @TableField("payment_status")
     private Integer paymentStatus;
     @TableField("due_date")

+ 73 - 32
service-vpp/service-vpp-biz/src/main/java/com/usky/vpp/service/impl/VppCustomerServiceImpl.java

@@ -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("准入申请参数不能为空!");