anderx преди 2 години
родител
ревизия
f2c41791ae
променени са 1 файла, в които са добавени 53 реда и са изтрити 19 реда
  1. 53 19
      src/main/java/com/goafanti/expenseAccount/service/impl/ExpenseAccountServiceImpl.java

+ 53 - 19
src/main/java/com/goafanti/expenseAccount/service/impl/ExpenseAccountServiceImpl.java

@@ -133,9 +133,53 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         }else {
             in.setTargetType(1);
         }
+        in.setSettlementAmount(useEA.getSettlementAmount());
+        //计算本单已扣金额
+        if (in.getDebitId()!=null){
+            //如果以前没有选择借支,修改报销和借支数据
+            if (useEA.getDebitId()==null){
+                pushExpenseAccountDebit(in);
+            }else  if (useEA.getDebitId()!=in.getDebitId()) {
+                //如果是修改编号
+                pushExpenseAccountDebit(in);
+                //并且要处理原编号的问题
+                pushresettingDebit(in,useEA.getDebitId());
+            }
+
+        }
         return expenseAccountMapper.updateByPrimaryKeySelective(in);
     }
 
+    private void pushresettingDebit(InputExpenseAccount in, Integer debitId) {
+        ExpenseAccount debit = expenseAccountMapper.selectByPrimaryKey(debitId);
+        ExpenseAccount newdebit=new ExpenseAccount();
+        newdebit.setSettlementAmount(debit.getSettlementAmount().subtract(in.getSettlementAmount()));
+        newdebit.setLiquidationStatus(1);
+        expenseAccountMapper.updateByPrimaryKeySelective(newdebit);
+    }
+
+
+
+    private void pushExpenseAccountDebit(InputExpenseAccount in) {
+        ExpenseAccount debit = expenseAccountMapper.selectByPrimaryKey(in.getDebitId());
+        ExpenseAccount newDebit=new ExpenseAccount();
+        newDebit.setId(debit.getId());
+        //计算剩余需要支付金额
+        BigDecimal decbitAmount=in.getTotalAmount().subtract(in.getSettlementAmount());
+        //本次金额大于等于需要抵扣金额,则变成完全抵扣,抵扣金额变成本次已付金额
+        if (in.getTotalAmount().compareTo(decbitAmount)>0){
+            in.setSettlementAmount(decbitAmount);
+            newDebit.setSettlementAmount(debit.getTotalAmount());
+            newDebit.setLiquidationStatus(2);
+        }else {
+//                本次金额小于需要抵扣,则本次变更全抵扣,借支已付加上本次金额
+            in.setSettlementAmount(in.getTotalAmount());
+            newDebit.setSettlementAmount(debit.getSettlementAmount().add(in.getTotalAmount()));
+            newDebit.setLiquidationStatus(1);
+        }
+        expenseAccountMapper.updateByPrimaryKeySelective(newDebit);
+    }
+
     @Override
     public int addDetails(InputExpenseAccountDetails in) {
         if (in.getAgreeTimes()!=null){
@@ -177,28 +221,16 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         //完成申请
         if (in.getStatus()==2){
             //如果是借支则订单新增
-            if (in.getType()==4){
-
-            }else {
+            if (in.getType()!=4){
                 //不然就看是否挂载借支订单进行抵扣
                 if (useEa.getDebitId()!=null){
                     ExpenseAccount useDebit=expenseAccountMapper.selectByPrimaryKey(useEa.getDebitId());
-                    ExpenseAccount debit=new ExpenseAccount();
-                    debit.setId(useEa.getDebitId());
-                    BigDecimal settlementAmount = useDebit.getSettlementAmount();
-                    settlementAmount=settlementAmount.add(useEa.getTotalAmount());
-                    //如果不大于金额
-                    if (settlementAmount.compareTo(useDebit.getTotalAmount())<1){
-                        //计算抵扣后的已付
-                        debit.setSettlementAmount(settlementAmount);
-                        //设置当前报销已付全额
-                        newEa.setSettlementAmount(useEa.getTotalAmount());
-                    }else {
-                        BigDecimal subtract = settlementAmount.subtract(useDebit.getTotalAmount());
-                        newEa.setSettlementAmount(subtract);
-                        debit.setSettlementAmount(useDebit.getTotalAmount());
+                    if (useDebit.getLiquidationStatus()==2){
+                        ExpenseAccount debit=new ExpenseAccount();
+                        debit.setId(useEa.getDebitId());
+                        debit.setLiquidationStatus(3);
+                        expenseAccountMapper.updateByPrimaryKeySelective(debit);
                     }
-                    expenseAccountMapper.updateByPrimaryKeySelective(debit);
                 }
             }
         }
@@ -312,7 +344,9 @@ public class ExpenseAccountServiceImpl extends BaseMybatisDao<ExpenseAccountMapp
         OutExpenseAccount useEa = expenseAccountMapper.selectByid(id);
         if (useEa.getDebitId()!=null){
             ExpenseAccount debit = expenseAccountMapper.selectByPrimaryKey(useEa.getDebitId());
-            if (debit!=null&&debit.getTotalAmount()!=null)useEa.setDebitTotalAmount(debit.getTotalAmount());
+            if (debit!=null&&debit.getTotalAmount()!=null){
+                useEa.setDebitTotalAmount(debit.getTotalAmount().subtract(debit.getSettlementAmount()));
+            }
         }
         return useEa;
     }