|
|
@@ -15,6 +15,7 @@ import com.usky.vpp.mapper.VppCustomerAccessMapper;
|
|
|
import com.usky.vpp.mapper.VppCustomerContactMapper;
|
|
|
import com.usky.vpp.mapper.VppCustomerMapper;
|
|
|
import com.usky.vpp.service.VppCustomerService;
|
|
|
+import com.usky.vpp.service.VppSiteService;
|
|
|
import com.usky.vpp.service.vo.CustomerAccessAuditRequest;
|
|
|
import com.usky.vpp.service.vo.CustomerAccessRequestVO;
|
|
|
import com.usky.vpp.service.vo.CustomerAccessResponseVO;
|
|
|
@@ -22,6 +23,7 @@ import com.usky.vpp.service.vo.CustomerContactRequest;
|
|
|
import com.usky.vpp.service.vo.CustomerRequestVO;
|
|
|
import com.usky.vpp.service.vo.CustomerResponseVO;
|
|
|
import com.usky.vpp.util.VppAuditHelper;
|
|
|
+import com.usky.vpp.util.VppContractStatusHelper;
|
|
|
import com.usky.vpp.util.VppFieldValidator;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
@@ -104,7 +106,7 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
access.setContactName(request.getContactName());
|
|
|
access.setContactPhone(request.getContactPhone());
|
|
|
access.setContactEmail(request.getContactEmail());
|
|
|
- access.setSigningDate(request.getSigningDate());
|
|
|
+ // access.setSigningDate(request.getSigningDate());
|
|
|
VppAuditHelper.fillCreate(access);
|
|
|
|
|
|
int insert = accessMapper.insert(access);
|
|
|
@@ -200,6 +202,48 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
accessMapper.updateById(access);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean updateAccess(CustomerAccessRequestVO request) {
|
|
|
+ if (request.getId() == null) {
|
|
|
+ throw new BusinessException("准入申请ID不能为空!");
|
|
|
+ }
|
|
|
+ validateAccessRequest(request);
|
|
|
+
|
|
|
+ VppCustomerAccess access = findAccessById(request.getId());
|
|
|
+ if (access.getAccessStatus() != ACCESS_REJECTED) {
|
|
|
+ throw new BusinessException("仅已驳回的准入申请允许修改!");
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<VppCustomerAccess> dupWrapper = new LambdaQueryWrapper<>();
|
|
|
+ dupWrapper.eq(VppCustomerAccess::getAccountNo, request.getAccountNo())
|
|
|
+ .eq(VppCustomerAccess::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ .eq(VppCustomerAccess::getDeleteFlag, VppAuditHelper.NOT_DELETED)
|
|
|
+ .ne(VppCustomerAccess::getId, request.getId());
|
|
|
+ Integer accessCount = accessMapper.selectCount(dupWrapper);
|
|
|
+ if (accessCount != null && accessCount > 0) {
|
|
|
+ throw new BusinessException("该电力户号已存在准入申请,请勿重复提交!");
|
|
|
+ }
|
|
|
+
|
|
|
+ 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.setAccessStatus(ACCESS_PENDING);
|
|
|
+ access.setAuditOpinion(null);
|
|
|
+ access.setAuditAt(null);
|
|
|
+ access.setApplyAt(LocalDateTime.now());
|
|
|
+
|
|
|
+ VppAuditHelper.fillUpdate(access);
|
|
|
+ return accessMapper.updateById(access) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean deleteAccess(Long id) {
|
|
|
@@ -370,17 +414,8 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
throw new BusinessException("用电容量不能为空!");
|
|
|
}
|
|
|
|
|
|
- // 同租户下 accountNo 和 customerName 唯一校验
|
|
|
- Integer tenantId = SecurityUtils.getTenantId();
|
|
|
- LambdaQueryWrapper<VppCustomer> dupWrapper = new LambdaQueryWrapper<>();
|
|
|
- dupWrapper.eq(VppCustomer::getTenantId, tenantId)
|
|
|
- .eq(VppCustomer::getDeleteFlag, VppAuditHelper.NOT_DELETED)
|
|
|
- .and(w -> w.eq(VppCustomer::getAccountNo, vo.getAccountNo())
|
|
|
- .or().eq(VppCustomer::getCustomerName, vo.getCustomerName()));
|
|
|
- Integer dupCount = customerMapper.selectCount(dupWrapper);
|
|
|
- if (dupCount != null && dupCount > 0) {
|
|
|
- throw new BusinessException("同租户下已存在相同电力户号或客户名称的客户!");
|
|
|
- }
|
|
|
+ // 电力户号全局唯一校验
|
|
|
+ checkAccountNoUnique(vo.getAccountNo(), null);
|
|
|
|
|
|
// 构建客户
|
|
|
VppCustomer customer = new VppCustomer();
|
|
|
@@ -554,18 +589,13 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
VppCustomer existing = findCustomerById(id);
|
|
|
|
|
|
// 仅更新非空字段
|
|
|
- if (StringUtils.isNotBlank(vo.getCustomerName())) {
|
|
|
- if (!vo.getCustomerName().equals(existing.getCustomerName())) {
|
|
|
- // 校验同租户下客户名称唯一
|
|
|
- LambdaQueryWrapper<VppCustomer> uniqueWrapper = new LambdaQueryWrapper<>();
|
|
|
- uniqueWrapper.eq(VppCustomer::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .eq(VppCustomer::getCustomerName, vo.getCustomerName())
|
|
|
- .eq(VppCustomer::getDeleteFlag, VppAuditHelper.NOT_DELETED);
|
|
|
- Integer count = customerMapper.selectCount(uniqueWrapper);
|
|
|
- if (count != null && count > 0) {
|
|
|
- throw new BusinessException("客户名称已存在,请更换!");
|
|
|
- }
|
|
|
+ if (StringUtils.isNotBlank(vo.getAccountNo())) {
|
|
|
+ if (!vo.getAccountNo().equals(existing.getAccountNo())) {
|
|
|
+ checkAccountNoUnique(vo.getAccountNo(), id);
|
|
|
}
|
|
|
+ existing.setAccountNo(vo.getAccountNo());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(vo.getCustomerName())) {
|
|
|
existing.setCustomerName(vo.getCustomerName());
|
|
|
}
|
|
|
if (vo.getCustomerType() != null) {
|
|
|
@@ -942,7 +972,7 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
customer.setBusinessLicenseUrl(access.getBusinessLicenseUrl());
|
|
|
customer.setLifecycleStatus(LIFECYCLE_ADMITTED);
|
|
|
customer.setDrNotifyMinutes(30);
|
|
|
- customer.setSigningDate(access.getSigningDate());
|
|
|
+ customer.setSigningDate(LocalDateTime.now());
|
|
|
return customer;
|
|
|
}
|
|
|
|
|
|
@@ -952,7 +982,8 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
brief.setContractNo(contract.getContractNo());
|
|
|
brief.setContractName(contract.getContractName());
|
|
|
brief.setContractType(contract.getContractType());
|
|
|
- brief.setContractStatus(contract.getContractStatus());
|
|
|
+ brief.setContractStatus(VppContractStatusHelper.resolve(
|
|
|
+ contract.getContractStatus(), contract.getEffectiveDate(), contract.getExpireDate()));
|
|
|
brief.setSignDate(contract.getSignDate());
|
|
|
brief.setEffectiveDate(contract.getEffectiveDate());
|
|
|
brief.setExpireDate(contract.getExpireDate());
|
|
|
@@ -999,6 +1030,20 @@ public class VppCustomerServiceImpl implements VppCustomerService {
|
|
|
return contact;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 电力户号全局唯一校验(不限租户)
|
|
|
+ */
|
|
|
+ private void checkAccountNoUnique(String accountNo, Long excludeId) {
|
|
|
+ LambdaQueryWrapper<VppCustomer> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(VppCustomer::getAccountNo, accountNo)
|
|
|
+ .eq(VppCustomer::getDeleteFlag, VppAuditHelper.NOT_DELETED)
|
|
|
+ .ne(excludeId != null, VppCustomer::getId, excludeId);
|
|
|
+ Integer count = customerMapper.selectCount(wrapper);
|
|
|
+ if (count != null && count > 0) {
|
|
|
+ throw new BusinessException("电力户号已存在,请更换!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void validateAccessRequest(CustomerAccessRequestVO request) {
|
|
|
if (request == null || StringUtils.isBlank(request.getAccountNo())) {
|
|
|
throw new BusinessException("电力户号不能为空!");
|