فهرست منبع

增加修改回款记录

xda 2 سال پیش
والد
کامیت
556a035c76
1فایلهای تغییر یافته به همراه49 افزوده شده و 1 حذف شده
  1. 49 1
      src/main/java/com/winhc/repal/service/impl/RepalChangeRecordServiceImpl.java

+ 49 - 1
src/main/java/com/winhc/repal/service/impl/RepalChangeRecordServiceImpl.java

@@ -9,6 +9,7 @@ import com.winhc.repal.entity.RepalBill;
 import com.winhc.repal.entity.RepalChangeRecord;
 import com.winhc.repal.entity.RepalGroupMember;
 import com.winhc.repal.enums.DeletedStatusEnum;
+import com.winhc.repal.enums.RepalBillStatusEnum;
 import com.winhc.repal.model.dto.ReturnedEditDTO;
 import com.winhc.repal.repository.RepalChangeRecordMapper;
 import com.winhc.repal.service.RepalBillService;
@@ -50,6 +51,7 @@ public class RepalChangeRecordServiceImpl extends ServiceImpl<RepalChangeRecordM
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateReturned(ReturnedEditDTO dto) {
         if (dto.getMoney().compareTo(BigDecimal.ZERO) <= 0) {
             throw new CommonException(CodeMsg.FAILED, "金额必须大于0");
@@ -58,13 +60,21 @@ public class RepalChangeRecordServiceImpl extends ServiceImpl<RepalChangeRecordM
         if (Objects.isNull(repalChangeRecord)) {
             throw new CommonException(CodeMsg.FAILED, "未查到对应的账款");
         }
+        if (repalChangeRecord.getTransMoney().compareTo(dto.getMoney()) == 0) {
+            return true;
+        }
         RepalBill repalBill = repalBillService.getById(repalChangeRecord.getRepalBillId());
+        if (dto.getMoney().compareTo(repalChangeRecord.getTransMoney()) > 0) {
+            if (dto.getMoney().subtract(repalChangeRecord.getTransMoney()).compareTo(repalBill.getReceivable()) > 0) {
+                throw new CommonException(CodeMsg.FAILED, "金额错误");
+            }
+        }
         List<RepalChangeRecord> recordList = this.list(Wrappers.lambdaQuery(RepalChangeRecord.class)
                 .eq(RepalChangeRecord::getRepalBillId, repalBill.getId())
                 .eq(RepalChangeRecord::getDeleted, DeletedStatusEnum.NORMAL.getCode())
                 .ge(RepalChangeRecord::getId, repalChangeRecord.getId()));
         if (CollUtil.isEmpty(recordList)) {
-            return true;
+            throw new CommonException(CodeMsg.FAILED, "未查到对应的账款");
         }
         // 单独修改一条,后续的重新计算
         RepalGroupMember member = repalGroupMemberService.getMemberByUserId(UserContextUtil.getUser().getUserId());
@@ -80,6 +90,34 @@ public class RepalChangeRecordServiceImpl extends ServiceImpl<RepalChangeRecordM
             recordList.get(i).setAfterMoney(recordList.get(i).getPreMoney().subtract(recordList.get(i).getTransMoney()));
         }
         this.saveOrUpdateBatch(recordList);
+        // 修改账款状态或者金额
+        if (dto.getMoney().compareTo(repalChangeRecord.getTransMoney()) > 0) {
+            // 应收金额调小
+            BigDecimal changeMoney = dto.getMoney().subtract(repalChangeRecord.getTransMoney());
+            repalBill.setReceivable(repalBill.getReceivable().subtract(changeMoney));
+            repalBill.setReceipt(repalBill.getReceipt().add(changeMoney));
+            if (BigDecimal.ZERO.compareTo(repalBill.getReceivable()) == 0) {
+                repalBill.setRepalBillStatus(RepalBillStatusEnum.SUCCESS.getCode());
+            }
+        } else {
+            // 应收金额调大
+            BigDecimal changeMoney = repalChangeRecord.getTransMoney().subtract(dto.getMoney());
+            repalBill.setReceivable(repalBill.getReceivable().add(changeMoney));
+            repalBill.setReceipt(repalBill.getReceipt().subtract(changeMoney));
+            if (RepalBillStatusEnum.SUCCESS.getCode().equals(repalBill.getRepalBillStatus())) {
+                if (LocalDate.now().isBefore(repalBill.getEndDate())) {
+                    repalBill.setRepalBillStatus(RepalBillStatusEnum.OVERDUE.getCode());
+                }
+                if (LocalDate.now().isAfter(repalBill.getEndDate())) {
+                    repalBill.setRepalBillStatus(RepalBillStatusEnum.PROGRESSING.getCode());
+                }
+            }
+        }
+        repalBillService.update(Wrappers.lambdaUpdate(RepalBill.class)
+                .eq(RepalBill::getId, repalBill.getId())
+                .set(RepalBill::getRepalBillStatus, repalBill.getRepalBillStatus())
+                .set(RepalBill::getReceivable, repalBill.getReceivable())
+                .set(RepalBill::getReceipt, repalBill.getReceipt()));
         return true;
     }
 
@@ -107,10 +145,20 @@ public class RepalChangeRecordServiceImpl extends ServiceImpl<RepalChangeRecordM
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean delReturnedById(Long repalChangeRecordId) {
         RepalChangeRecord repalChangeRecord = this.getById(repalChangeRecordId);
         RepalBill repalBill = repalBillService.getById(repalChangeRecord.getRepalBillId());
         this.calculateMoney(repalChangeRecordId, repalBill.getId());
+        repalBill.setRepalBillStatus(LocalDate.now().isBefore(repalBill.getEndDate()) ? RepalBillStatusEnum.OVERDUE.getCode() : RepalBillStatusEnum.PROGRESSING.getCode());
+        repalBill.setReceipt(repalBill.getReceipt().subtract(repalChangeRecord.getTransMoney()));
+        repalBill.setReceivable(repalBill.getReceivable().add(repalChangeRecord.getTransMoney()));
+        // 删除后一定是进行中或者已逾期
+        repalBillService.update(Wrappers.lambdaUpdate(RepalBill.class)
+                .eq(RepalBill::getId, repalBill.getId())
+                .set(RepalBill::getRepalBillStatus, repalBill.getRepalBillStatus())
+                .set(RepalBill::getReceivable, repalBill.getReceivable())
+                .set(RepalBill::getReceipt, repalBill.getReceipt()));
         return true;
     }