|
|
@@ -19,6 +19,7 @@ import com.gree.mall.manager.plus.entity.OrderInfo;
|
|
|
import com.gree.mall.manager.plus.entity.UserCompanyCredit;
|
|
|
import com.gree.mall.manager.plus.entity.UserCompanyCreditBill;
|
|
|
import com.gree.mall.manager.plus.entity.UserCompanyCreditBillItem;
|
|
|
+import com.gree.mall.manager.plus.service.UserCompanyCreditBillItemService;
|
|
|
import com.gree.mall.manager.plus.service.UserCompanyCreditBillService;
|
|
|
import com.gree.mall.manager.plus.service.UserCompanyCreditService;
|
|
|
import com.gree.mall.manager.zfire.bean.ZfireParamBean;
|
|
|
@@ -33,6 +34,7 @@ import org.springframework.transaction.support.TransactionSynchronization;
|
|
|
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.locks.Lock;
|
|
|
@@ -48,6 +50,7 @@ public class UserCompanyCreditLogic {
|
|
|
private final LockQueryMapper lockQueryMapper;
|
|
|
private final UserCompanyCreditService userCompanyCreditService;
|
|
|
private final UserCompanyCreditBillService userCompanyCreditBillService;
|
|
|
+ private final UserCompanyCreditBillItemService userCompanyCreditBillItemService;
|
|
|
|
|
|
public IPage<UserCompanyCreditBillVO> list(ZfireParamBean zfireParamBean) {
|
|
|
AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
@@ -110,18 +113,51 @@ public class UserCompanyCreditLogic {
|
|
|
creditBill.setStatus(newRemainingAmount.compareTo(BigDecimal.ZERO) == 0 ? UserCreditBillStatusEnum.REPAID.getKey() : UserCreditBillStatusEnum.REPAYMENT.getKey())
|
|
|
.setRemainingAmount(newRemainingAmount)
|
|
|
.updateById();
|
|
|
+
|
|
|
+ // 恢复使用额度
|
|
|
+ this.repay(null, userId, companyWechatId, amount, billId);
|
|
|
} else {
|
|
|
- final UserCompanyCredit userCompanyCredit = userCompanyCreditService.getById(userCompanyCreditId);
|
|
|
+ UserCompanyCredit userCompanyCredit = userCompanyCreditService.getById(userCompanyCreditId);
|
|
|
if (!userCompanyCredit.getCompanyWechatId().equals(adminUser.getCompanyWechatId())) {
|
|
|
throw new RemoteServiceException("请使用商户账号");
|
|
|
}
|
|
|
|
|
|
userId = userCompanyCredit.getUserId();
|
|
|
companyWechatId = userCompanyCredit.getCompanyWechatId();
|
|
|
- }
|
|
|
|
|
|
- // 恢复使用额度
|
|
|
- this.repay(null, userId, companyWechatId, amount, billId);
|
|
|
+ userCompanyCredit = lockQueryMapper.queryExistUserCompanyCredit(companyWechatId, userId);
|
|
|
+
|
|
|
+ // 旧授信额度
|
|
|
+ final BigDecimal oldCreditLimit = userCompanyCredit.getCreditLimit();
|
|
|
+
|
|
|
+ // 检查是加还是减额度
|
|
|
+ if (amount.compareTo(oldCreditLimit) > 0) {
|
|
|
+ // 增加额度处理
|
|
|
+ final BigDecimal addCreditLimit = amount.subtract(oldCreditLimit);
|
|
|
+ userCompanyCredit.setCreditLimit(amount)
|
|
|
+ .setAvailableCredit(userCompanyCredit.getAvailableCredit().add(addCreditLimit))
|
|
|
+ .updateById();
|
|
|
+ } else if (amount.compareTo(oldCreditLimit) < 0) {
|
|
|
+ // 减少额度处理
|
|
|
+
|
|
|
+ // 减少的额度是否低于当前已使用的授信额度
|
|
|
+ final List<UserCompanyCreditBillItem> billItems = userCompanyCreditBillItemService.lambdaQuery()
|
|
|
+ .select(UserCompanyCreditBillItem::getAmount)
|
|
|
+ .eq(UserCompanyCreditBillItem::getCompanyWechatId, userCompanyCredit.getCompanyWechatId())
|
|
|
+ .eq(UserCompanyCreditBillItem::getUserId, userCompanyCredit.getUserId())
|
|
|
+ .eq(UserCompanyCreditBillItem::getTransactionType, TransactionTypeEnum.CONSUMPTION.getKey())
|
|
|
+ .isNull(UserCompanyCreditBillItem::getRepaymentBillId)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ final BigDecimal useCreditAmount = billItems.stream().map(UserCompanyCreditBillItem::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (useCreditAmount.compareTo(amount) > 0) {
|
|
|
+ throw new RemoteServiceException("当前账期已使用授信额度" + useCreditAmount + ", 设置失败!");
|
|
|
+ }
|
|
|
+
|
|
|
+ userCompanyCredit.setCreditLimit(amount)
|
|
|
+ .updateById();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|