yusm 2 недель назад
Родитель
Сommit
0b13705cb4

+ 53 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Finance.java

@@ -1,15 +1,16 @@
 package com.management.platform.entity;
 
-import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 
@@ -181,6 +182,54 @@ public class Finance extends Model<Finance> {
     @TableField(exist = false)
     private BigDecimal hourCost;
 
+    @TableField(exist = false)
+    private BigDecimal hourSalary;
+
+    @TableField(exist = false)
+    private BigDecimal hourBonus;
+
+    @TableField(exist = false)
+    private BigDecimal hourAllowance;
+
+    @TableField(exist = false)
+    private BigDecimal hourInsuranceOld;
+
+    @TableField(exist = false)
+    private BigDecimal hourInsuranceMedical;
+
+    @TableField(exist = false)
+    private BigDecimal hourInsuranceLoseJob;
+
+    @TableField(exist = false)
+    private BigDecimal hourInsuranceInjury;
+
+    @TableField(exist = false)
+    private BigDecimal hourHouseFund;
+
+    @TableField(exist = false)
+    private BigDecimal hourOthers;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField1;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField2;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField3;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField4;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField5;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField6;
+
+    @TableField(exist = false)
+    private BigDecimal hourCustomField7;
+
 
 
     @Override

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectSumItem.java

@@ -23,7 +23,7 @@ public class ProjectSumItem {
     public BigDecimal loseJob;
     public BigDecimal injury;
     public BigDecimal house;
-//    public BigDecimal other;
+    public BigDecimal other;
 
     //自定义字段
     public BigDecimal field1;

+ 369 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceServiceImpl.java

@@ -2291,11 +2291,76 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         noProjectItem.project = MessageUtils.message("entry.noProject");
                         noProjectItem.workingTime = 0;
                         noProjectItem.cost = new BigDecimal(0);
+                        noProjectItem.salary = new BigDecimal(0);
+                        noProjectItem.bonus = new BigDecimal(0);
+                        noProjectItem.allowance = new BigDecimal(0);
+                        noProjectItem.old = new BigDecimal(0);
+                        noProjectItem.injury = new BigDecimal(0);
+                        noProjectItem.loseJob = new BigDecimal(0);
+                        noProjectItem.medical = new BigDecimal(0);
+                        noProjectItem.house = new BigDecimal(0);
+                        noProjectItem.other = new BigDecimal(0);
+                        noProjectItem.cost = new BigDecimal(0);
+                        noProjectItem.field1 = new BigDecimal(0);
+                        noProjectItem.field2 = new BigDecimal(0);
+                        noProjectItem.field3 = new BigDecimal(0);
+                        noProjectItem.field4 = new BigDecimal(0);
+                        noProjectItem.field5 = new BigDecimal(0);
+                        noProjectItem.field6 = new BigDecimal(0);
+                        noProjectItem.field7 = new BigDecimal(0);
                     }
                     noProjectItem.cost = noProjectItem.cost.add(f.getTotalCost());
+                    noProjectItem.salary = noProjectItem.salary.add(f.getMonthCost());
+                    noProjectItem.bonus = noProjectItem.bonus.add(f.getBonus());
+                    noProjectItem.allowance = noProjectItem.allowance.add(f.getAllowance());
+                    noProjectItem.old = noProjectItem.old.add(f.getInsuranceOld());
+                    noProjectItem.injury = noProjectItem.injury.add(f.getInsuranceInjury());
+                    noProjectItem.loseJob = noProjectItem.loseJob.add(f.getInsuranceLosejob());
+                    noProjectItem.medical = noProjectItem.medical.add(f.getInsuranceMedical());
+                    noProjectItem.house = noProjectItem.house.add(f.getHouseFund());
+                    noProjectItem.other = noProjectItem.other.add(f.getOthers());
+                    noProjectItem.field1 = noProjectItem.field1.add(f.getCustomField1()==null?new BigDecimal(0):f.getCustomField1());
+                    noProjectItem.field2 = noProjectItem.field2.add(f.getCustomField2()==null?new BigDecimal(0):f.getCustomField2());
+                    noProjectItem.field3 = noProjectItem.field3.add(f.getCustomField3()==null?new BigDecimal(0):f.getCustomField3());
+                    noProjectItem.field4 = noProjectItem.field4.add(f.getCustomField4()==null?new BigDecimal(0):f.getCustomField4());
+                    noProjectItem.field5 = noProjectItem.field5.add(f.getCustomField5()==null?new BigDecimal(0):f.getCustomField5());
+                    noProjectItem.field6 = noProjectItem.field6.add(f.getCustomField6()==null?new BigDecimal(0):f.getCustomField6());
+                    noProjectItem.field7 = noProjectItem.field7.add(f.getCustomField7()==null?new BigDecimal(0):f.getCustomField7());
                 } else {
                     BigDecimal avgHourCost = f.getTotalCost().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourSalary = f.getMonthCost().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourBonus = f.getBonus().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourAllowance = f.getAllowance().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourInsuranceOld = f.getInsuranceOld().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourInsuranceInjury = f.getInsuranceInjury().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourInsuranceLoseJob = f.getInsuranceLosejob().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourInsuranceMedical = f.getInsuranceMedical().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourHouseFund = f.getHouseFund().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourOthers = f.getOthers().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled1 =f.getCustomField1()==null?new BigDecimal(0): f.getCustomField1().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled2 =f.getCustomField2()==null?new BigDecimal(0):  f.getCustomField2().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled3 =f.getCustomField3()==null?new BigDecimal(0):  f.getCustomField3().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled4 =f.getCustomField4()==null?new BigDecimal(0):  f.getCustomField4().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled5 =f.getCustomField5()==null?new BigDecimal(0):  f.getCustomField5().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled6 =f.getCustomField6()==null?new BigDecimal(0):  f.getCustomField6().divide(b,6, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal avgHourFiled7 =f.getCustomField7()==null?new BigDecimal(0):  f.getCustomField7().divide(b,6, BigDecimal.ROUND_HALF_UP);
                     f.setHourCost(avgHourCost);
+                    f.setHourSalary(avgHourSalary);
+                    f.setHourBonus(avgHourBonus);
+                    f.setHourAllowance(avgHourAllowance);
+                    f.setHourInsuranceOld(avgHourInsuranceOld);
+                    f.setHourInsuranceInjury(avgHourInsuranceInjury);
+                    f.setHourInsuranceLoseJob(avgHourInsuranceLoseJob);
+                    f.setHourInsuranceMedical(avgHourInsuranceMedical);
+                    f.setHourHouseFund(avgHourHouseFund);
+                    f.setHourOthers(avgHourOthers);
+                    f.setHourCustomField1(avgHourFiled1);
+                    f.setHourCustomField2(avgHourFiled2);
+                    f.setHourCustomField3(avgHourFiled3);
+                    f.setHourCustomField4(avgHourFiled4);
+                    f.setHourCustomField5(avgHourFiled5);
+                    f.setHourCustomField6(avgHourFiled6);
+                    f.setHourCustomField7(avgHourFiled7);
                 }
             });
 
@@ -2307,8 +2372,41 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                 Optional<Finance> first = finances.stream().filter(f -> f.getUserId().equals(creatorId)).findFirst();
                 Double workingTime = (Double)map.get("workingTime");
                 BigDecimal cost = new BigDecimal(0);
+                BigDecimal salary = new BigDecimal(0);
+                BigDecimal bonus = new BigDecimal(0);
+                BigDecimal allowance = new BigDecimal(0);
+                BigDecimal old = new BigDecimal(0);
+                BigDecimal medical = new BigDecimal(0);
+                BigDecimal loseJob = new BigDecimal(0);
+                BigDecimal injury = new BigDecimal(0);
+                BigDecimal house = new BigDecimal(0);
+                BigDecimal other = new BigDecimal(0);
+                BigDecimal field1 = new BigDecimal(0);
+                BigDecimal field2 = new BigDecimal(0);
+                BigDecimal field3 = new BigDecimal(0);
+                BigDecimal field4 = new BigDecimal(0);
+                BigDecimal field5 = new BigDecimal(0);
+                BigDecimal field6 = new BigDecimal(0);
+                BigDecimal field7 = new BigDecimal(0);
+
                 if (first.isPresent()) {
                     cost = first.get().getHourCost().multiply(new BigDecimal(workingTime));
+                    salary = first.get().getHourSalary().multiply(new BigDecimal(workingTime));
+                    bonus = first.get().getHourBonus().multiply(new BigDecimal(workingTime));
+                    allowance = first.get().getHourAllowance().multiply(new BigDecimal(workingTime));
+                    old = first.get().getHourInsuranceOld().multiply(new BigDecimal(workingTime));
+                    medical = first.get().getHourInsuranceMedical().multiply(new BigDecimal(workingTime));
+                    loseJob = first.get().getHourInsuranceLoseJob().multiply(new BigDecimal(workingTime));
+                    injury = first.get().getHourInsuranceInjury().multiply(new BigDecimal(workingTime));
+                    house = first.get().getHourHouseFund().multiply(new BigDecimal(workingTime));
+                    other = first.get().getHourOthers().multiply(new BigDecimal(workingTime));
+                    field1 = first.get().getHourCustomField1().multiply(new BigDecimal(workingTime));
+                    field2 = first.get().getHourCustomField2().multiply(new BigDecimal(workingTime));
+                    field3 = first.get().getHourCustomField3().multiply(new BigDecimal(workingTime));
+                    field4 = first.get().getHourCustomField4().multiply(new BigDecimal(workingTime));
+                    field5 = first.get().getHourCustomField5().multiply(new BigDecimal(workingTime));
+                    field6 = first.get().getHourCustomField6().multiply(new BigDecimal(workingTime));
+                    field7 = first.get().getHourCustomField7().multiply(new BigDecimal(workingTime));
                     if (curProject == null) {
                         System.out.println("projectId="+projectId+", creatorId="+creatorId);
                     }
@@ -2316,6 +2414,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                     if (projectId.equals(item.projectId)) {
                         item.workingTime += workingTime;
                         item.cost = item.cost.add(cost);
+                        item.salary = item.salary.add(salary);
+                        item.bonus = item.bonus.add(bonus);
+                        item.allowance = item.allowance.add(allowance);
+                        item.old = item.old.add(old);
+                        item.medical = item.medical.add(medical);
+                        item.loseJob = item.loseJob.add(loseJob);
+                        item.injury = item.injury.add(injury);
+                        item.house = item.house.add(house);
+                        item.other = item.other.add(other);
+                        item.field1 = item.field1.add(field1);
+                        item.field2 = item.field2.add(field2);
+                        item.field3 = item.field3.add(field3);
+                        item.field4 = item.field4.add(field4);
+                        item.field5 = item.field5.add(field5);
+                        item.field6 = item.field6.add(field6);
+                        item.field7 = item.field7.add(field7);
                     } else {
                         item = new ProjectSumItem();
                         pList.add(item);
@@ -2323,6 +2437,23 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         item.project = curProject;
                         item.workingTime = workingTime;
                         item.cost = cost;
+                        item.salary = salary;
+                        item.bonus = bonus;
+                        item.salary = salary;
+                        item.allowance = allowance;
+                        item.old = old;
+                        item.medical = medical;
+                        item.loseJob = loseJob;
+                        item.injury = injury;
+                        item.house = house;
+                        item.other = other;
+                        item.field1 = field1;
+                        item.field2 = field2;
+                        item.field3 = field3;
+                        item.field4 = field4;
+                        item.field5 = field5;
+                        item.field6 = field6;
+                        item.field7 = field7;
                     }
                     totalMoneyCost = totalMoneyCost.add(cost);
                 } else {
@@ -2363,17 +2494,113 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                                         //计算项目的各自工时占比
                                         System.out.println("按比例分配无工时人员");
                                         BigDecimal accumulate = new BigDecimal(0);
+                                        BigDecimal accumulateSalary = new BigDecimal(0);
+                                        BigDecimal accumulateBonus = new BigDecimal(0);
+                                        BigDecimal accumulateAllowance = new BigDecimal(0);
+                                        BigDecimal accumulateOld = new BigDecimal(0);
+                                        BigDecimal accumulateMedical = new BigDecimal(0);
+                                        BigDecimal accumulateLoseJob = new BigDecimal(0);
+                                        BigDecimal accumulateInjury = new BigDecimal(0);
+                                        BigDecimal accumulateHouse = new BigDecimal(0);
+                                        BigDecimal accumulateOther = new BigDecimal(0);
+                                        // 自定义字段
+                                        BigDecimal accumulateField1 = new BigDecimal(0);
+                                        BigDecimal accumulateField2 = new BigDecimal(0);
+                                        BigDecimal accumulateField3 = new BigDecimal(0);
+                                        BigDecimal accumulateField4 = new BigDecimal(0);
+                                        BigDecimal accumulateField5 = new BigDecimal(0);
+                                        BigDecimal accumulateField6 = new BigDecimal(0);
+                                        BigDecimal accumulateField7 = new BigDecimal(0);
+
                                         double sum = filteredList.stream().mapToDouble(ProjectSumItem::getWorkingTime).sum();
                                         System.out.println("总时长=="+sum);
                                         for (int i=0;i<filteredList.size(); i++) {
                                             ProjectSumItem p = filteredList.get(i);
+                                            if(p.projectId==88194){
+                                                System.out.println("123123123123");
+                                            }
+                                            BigDecimal ratio = new BigDecimal(p.workingTime / sum);
                                             System.out.println("+p.getWorkingtime="+p.workingTime+", project="+p.project);
                                             //避免偏差
-                                            BigDecimal assignAmount = i < filteredList.size() -1 ?user.getTotalCost().multiply(new BigDecimal(p.workingTime / sum)):user.getTotalCost().subtract(accumulate);
+                                            BigDecimal assignAmount = i < filteredList.size() -1 ?user.getTotalCost().multiply(ratio):user.getTotalCost().subtract(accumulate);
+                                            BigDecimal assignAmountSalary = i < filteredList.size() -1 ?user.getMonthCost().multiply(ratio):user.getMonthCost().subtract(accumulateSalary);
+                                            BigDecimal assignAmountBonus = i < filteredList.size() -1 ?user.getBonus().multiply(ratio):user.getBonus().subtract(accumulateBonus);
+                                            BigDecimal assignAmountAllowance = i < filteredList.size() -1 ?user.getAllowance().multiply(ratio):user.getAllowance().subtract(accumulateAllowance);
+                                            BigDecimal assignAmountOld = i < filteredList.size() -1 ?user.getInsuranceOld().multiply(ratio):user.getInsuranceOld().subtract(accumulateOld);
+                                            BigDecimal assignAmountMedical = i < filteredList.size() -1 ?user.getInsuranceMedical().multiply(ratio):user.getInsuranceMedical().subtract(accumulateMedical);
+                                            BigDecimal assignAmountLoseJob = i < filteredList.size() -1 ?user.getInsuranceLosejob().multiply(ratio):user.getInsuranceLosejob().subtract(accumulateLoseJob);
+                                            BigDecimal assignAmountInjury = i < filteredList.size() -1 ?user.getInsuranceInjury().multiply(ratio):user.getInsuranceInjury().subtract(accumulateInjury);
+                                            BigDecimal assignAmountHouse = i < filteredList.size() -1 ?user.getHouseFund().multiply(ratio):user.getHouseFund().subtract(accumulateHouse);
+                                            BigDecimal assignAmountOther = i < filteredList.size() -1 ?user.getOthers().multiply(ratio):user.getOthers().subtract(accumulateOther);
+                                            if(user.getCustomField1()==null)user.setCustomField1(new BigDecimal(0));
+                                            if(user.getCustomField2()==null)user.setCustomField2(new BigDecimal(0));
+                                            if(user.getCustomField3()==null)user.setCustomField3(new BigDecimal(0));
+                                            if(user.getCustomField4()==null)user.setCustomField4(new BigDecimal(0));
+                                            if(user.getCustomField5()==null)user.setCustomField5(new BigDecimal(0));
+                                            if(user.getCustomField6()==null)user.setCustomField6(new BigDecimal(0));
+                                            if(user.getCustomField7()==null)user.setCustomField7(new BigDecimal(0));
+                                            BigDecimal assignAmountField1 = i < filteredList.size() -1 ?user.getCustomField1().multiply(ratio):user.getCustomField1().subtract(accumulateField1);
+                                            BigDecimal assignAmountField2 = i < filteredList.size() -1 ?user.getCustomField2().multiply(ratio):user.getCustomField2().subtract(accumulateField2);
+                                            BigDecimal assignAmountField3 = i < filteredList.size() -1 ?user.getCustomField3().multiply(ratio):user.getCustomField3().subtract(accumulateField3);
+                                            BigDecimal assignAmountField4 = i < filteredList.size() -1 ?user.getCustomField4().multiply(ratio):user.getCustomField4().subtract(accumulateField4);
+                                            BigDecimal assignAmountField5 = i < filteredList.size() -1 ?user.getCustomField5().multiply(ratio):user.getCustomField5().subtract(accumulateField5);
+                                            BigDecimal assignAmountField6 = i < filteredList.size() -1 ?user.getCustomField6().multiply(ratio):user.getCustomField6().subtract(accumulateField6);
+                                            BigDecimal assignAmountField7 = i < filteredList.size() -1 ?user.getCustomField7().multiply(ratio):user.getCustomField7().subtract(accumulateField7);
+
                                             assignAmount = assignAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountSalary = assignAmountSalary.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountBonus = assignAmountBonus.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountAllowance = assignAmountAllowance.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountOld = assignAmountOld.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountMedical = assignAmountMedical.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountLoseJob = assignAmountLoseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountInjury = assignAmountInjury.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountHouse = assignAmountHouse.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountOther = assignAmountOther.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField1 = assignAmountField1.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField2 = assignAmountField2.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField3 = assignAmountField3.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField4 = assignAmountField4.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField5 = assignAmountField5.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField6 = assignAmountField6.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            assignAmountField7 = assignAmountField7.setScale(2, BigDecimal.ROUND_HALF_UP);
+
                                             accumulate = accumulate.add(assignAmount);
+                                            accumulateSalary = accumulateSalary.add(assignAmountSalary);
+                                            accumulateBonus = accumulateBonus.add(assignAmountBonus);
+                                            accumulateAllowance = accumulateAllowance.add(assignAmountAllowance);
+                                            accumulateOld = accumulateOld.add(assignAmountOld);
+                                            accumulateMedical = accumulateMedical.add(assignAmountMedical);
+                                            accumulateLoseJob = accumulateLoseJob.add(assignAmountLoseJob);
+                                            accumulateInjury = accumulateInjury.add(assignAmountInjury);
+                                            accumulateHouse = accumulateHouse.add(assignAmountHouse);
+                                            accumulateOther = accumulateOther.add(assignAmountOther);
+                                            accumulateField1 = accumulateField1.add(assignAmountField1);
+                                            accumulateField2 = accumulateField2.add(assignAmountField2);
+                                            accumulateField3 = accumulateField3.add(assignAmountField3);
+                                            accumulateField4 = accumulateField4.add(assignAmountField4);
+                                            accumulateField5 = accumulateField5.add(assignAmountField5);
+                                            accumulateField6 = accumulateField6.add(assignAmountField6);
+                                            accumulateField7 = accumulateField7.add(assignAmountField7);
                                             System.out.println("增加项目成本==="+assignAmount);
                                             p.cost = p.cost.add(assignAmount);
+                                            p.salary = p.salary.add(assignAmountSalary);
+                                            p.bonus = p.bonus.add(assignAmountBonus);
+                                            p.allowance = p.allowance.add(assignAmountAllowance);
+                                            p.old = p.old.add(assignAmountOld);
+                                            p.medical = p.medical.add(assignAmountMedical);
+                                            p.loseJob = p.loseJob.add(assignAmountLoseJob);
+                                            p.injury = p.injury.add(assignAmountInjury);
+                                            p.house = p.house.add(assignAmountHouse);
+                                            p.other = p.other.add(assignAmountOther);
+                                            p.field1 = p.field1.add(assignAmountField1);
+                                            p.field2 = p.field2.add(assignAmountField2);
+                                            p.field3 = p.field3.add(assignAmountField3);
+                                            p.field4 = p.field4.add(assignAmountField4);
+                                            p.field5 = p.field5.add(assignAmountField5);
+                                            p.field6 = p.field6.add(assignAmountField6);
+                                            p.field7 = p.field7.add(assignAmountField7);
+                                            //todo:奖金计算 需要加上计算逻辑
                                             if (p.secondCost == null)  {
                                                 p.secondCost = new BigDecimal(0);
                                             }
@@ -2484,6 +2711,9 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         String category = p.getProject().equals("生产其他") ? "生产" : "研发";
                         System.out.println("当前其他项目为:" + p.getProject());
                         for (ProjectSumItem projectSumItem : pList) {
+                            if(projectSumItem.getProjectId()==88194){
+                                System.out.println("22341234");
+                            }
                             //把自己去掉
                             if (projectSumItem.getProjectId().equals(p.getProjectId())) {
                                 continue;
@@ -2497,18 +2727,123 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                         if (filteredList.size() > 0) {
                             //获取总时长
                             BigDecimal accumulate = new BigDecimal(0);
+                            BigDecimal accumulateSalary = new BigDecimal(0);
+                            BigDecimal accumulateBonus = new BigDecimal(0);
+                            BigDecimal accumulateAllowance = new BigDecimal(0);
+                            BigDecimal accumulateOld = new BigDecimal(0);
+                            BigDecimal accumulateMedical = new BigDecimal(0);
+                            BigDecimal accumulateLoseJob = new BigDecimal(0);
+                            BigDecimal accumulateInjury = new BigDecimal(0);
+                            BigDecimal accumulateHouse = new BigDecimal(0);
+                            BigDecimal accumulateOther = new BigDecimal(0);
+                            // 自定义字段
+                            BigDecimal accumulateField1 = new BigDecimal(0);
+                            BigDecimal accumulateField2 = new BigDecimal(0);
+                            BigDecimal accumulateField3 = new BigDecimal(0);
+                            BigDecimal accumulateField4 = new BigDecimal(0);
+                            BigDecimal accumulateField5 = new BigDecimal(0);
+                            BigDecimal accumulateField6 = new BigDecimal(0);
+                            BigDecimal accumulateField7 = new BigDecimal(0);
+
+
                             BigDecimal publicProjectCost = p.getCost();//待分摊的其他项目工时
+                            BigDecimal publicProjectSalary = p.getSalary();
+                            BigDecimal publicProjectBonus = p.getBonus();
+                            BigDecimal publicProjectAllowance = p.getAllowance();
+                            BigDecimal publicProjectOld = p.getOld();
+                            BigDecimal publicProjectMedical = p.getMedical();
+                            BigDecimal publicProjectLoseJob = p.getLoseJob();
+                            BigDecimal publicProjectInjury = p.getInjury();
+                            BigDecimal publicProjectHouse = p.getHouse();
+                            BigDecimal publicProjectOther = p.getOther();
+                            BigDecimal publicProjectField1 = p.getField1();
+                            BigDecimal publicProjectField2 = p.getField2();
+                            BigDecimal publicProjectField3 = p.getField3();
+                            BigDecimal publicProjectField4 = p.getField4();
+                            BigDecimal publicProjectField5 = p.getField5();
+                            BigDecimal publicProjectField6 = p.getField6();
+                            BigDecimal publicProjectField7 = p.getField7();
+
                             double sum = filteredList.stream().mapToDouble(ProjectSumItem::getWorkingTime).sum();
                             System.out.println(category+"总时长=="+sum);
+
                             for (int i=0;i<filteredList.size(); i++) {
                                 ProjectSumItem pItem = filteredList.get(i);
+                                BigDecimal ratio = new BigDecimal(pItem.workingTime / sum);
                                 System.out.println("+p.getWorkingtime="+pItem.workingTime+", project="+pItem.project);
                                 //避免偏差
-                                BigDecimal assignAmount = i < filteredList.size() -1 ?publicProjectCost.multiply(new BigDecimal(pItem.workingTime / sum)):publicProjectCost.subtract(accumulate);
+                                BigDecimal assignAmount = i < filteredList.size() -1 ?publicProjectCost.multiply(ratio):publicProjectCost.subtract(accumulate);
+                                BigDecimal assignAmountSalary = i < filteredList.size() -1 ?publicProjectSalary.multiply(ratio):publicProjectSalary.subtract(accumulateSalary);
+                                BigDecimal assignAmountBonus = i < filteredList.size() -1 ?publicProjectBonus.multiply(ratio):publicProjectBonus.subtract(accumulateBonus);
+                                BigDecimal assignAmountAllowance = i < filteredList.size() -1 ?publicProjectAllowance.multiply(ratio):publicProjectAllowance.subtract(accumulateAllowance);
+                                BigDecimal assignAmountOld = i < filteredList.size() -1 ?publicProjectOld.multiply(ratio):publicProjectOld.subtract(accumulateOld);
+                                BigDecimal assignAmountMedical = i < filteredList.size() -1 ?publicProjectMedical.multiply(ratio):publicProjectMedical.subtract(accumulateMedical);
+                                BigDecimal assignAmountLoseJob = i < filteredList.size() -1 ?publicProjectLoseJob.multiply(ratio):publicProjectLoseJob.subtract(accumulateLoseJob);
+                                BigDecimal assignAmountInjury = i < filteredList.size() -1 ?publicProjectInjury.multiply(ratio):publicProjectInjury.subtract(accumulateInjury);
+                                BigDecimal assignAmountHouse = i < filteredList.size() -1 ?publicProjectHouse.multiply(ratio):publicProjectHouse.subtract(accumulateHouse);
+                                BigDecimal assignAmountOther = i < filteredList.size() -1 ?publicProjectOther.multiply(ratio):publicProjectOther.subtract(accumulateOther);
+                                BigDecimal assignAmountField1 = i < filteredList.size() -1 ?publicProjectField1.multiply(ratio):publicProjectField1.subtract(accumulateField1);
+                                BigDecimal assignAmountField2 = i < filteredList.size() -1 ?publicProjectField2.multiply(ratio):publicProjectField2.subtract(accumulateField2);
+                                BigDecimal assignAmountField3 = i < filteredList.size() -1 ?publicProjectField3.multiply(ratio):publicProjectField3.subtract(accumulateField3);
+                                BigDecimal assignAmountField4 = i < filteredList.size() -1 ?publicProjectField4.multiply(ratio):publicProjectField4.subtract(accumulateField4);
+                                BigDecimal assignAmountField5 = i < filteredList.size() -1 ?publicProjectField5.multiply(ratio):publicProjectField5.subtract(accumulateField5);
+                                BigDecimal assignAmountField6 = i < filteredList.size() -1 ?publicProjectField6.multiply(ratio):publicProjectField6.subtract(accumulateField6);
+                                BigDecimal assignAmountField7 = i < filteredList.size() -1 ?publicProjectField7.multiply(ratio):publicProjectField7.subtract(accumulateField7);
+
                                 assignAmount = assignAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountSalary = assignAmountSalary.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountBonus = assignAmountBonus.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountAllowance = assignAmountAllowance.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountOld = assignAmountOld.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountMedical = assignAmountMedical.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountLoseJob = assignAmountLoseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountInjury = assignAmountInjury.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountHouse = assignAmountHouse.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountOther = assignAmountOther.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField1 = assignAmountField1.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField2 = assignAmountField2.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField3 = assignAmountField3.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField4 = assignAmountField4.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField5 = assignAmountField5.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField6 = assignAmountField6.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                assignAmountField7 = assignAmountField7.setScale(2, BigDecimal.ROUND_HALF_UP);
+
                                 accumulate = accumulate.add(assignAmount);
+                                accumulateSalary = accumulateSalary.add(assignAmountSalary);
+                                accumulateBonus = accumulateBonus.add(assignAmountBonus);
+                                accumulateAllowance = accumulateAllowance.add(assignAmountAllowance);
+                                accumulateOld = accumulateOld.add(assignAmountOld);
+                                accumulateMedical = accumulateMedical.add(assignAmountMedical);
+                                accumulateLoseJob = accumulateLoseJob.add(assignAmountLoseJob);
+                                accumulateInjury = accumulateInjury.add(assignAmountInjury);
+                                accumulateHouse = accumulateHouse.add(assignAmountHouse);
+                                accumulateOther = accumulateOther.add(assignAmountOther);
+                                accumulateField1 = accumulateField1.add(assignAmountField1);
+                                accumulateField2 = accumulateField2.add(assignAmountField2);
+                                accumulateField3 = accumulateField3.add(assignAmountField3);
+                                accumulateField4 = accumulateField4.add(assignAmountField4);
+                                accumulateField5 = accumulateField5.add(assignAmountField5);
+                                accumulateField6 = accumulateField6.add(assignAmountField6);
+                                accumulateField7 = accumulateField7.add(assignAmountField7);
+
                                 System.out.println(category + "分摊出来的成本到["+pItem.getProject()+"]==="+assignAmount);
                                 pItem.cost = pItem.cost.add(assignAmount);
+                                pItem.salary = pItem.salary.add(assignAmountSalary);
+                                pItem.bonus = pItem.bonus.add(assignAmountBonus);
+                                pItem.allowance = pItem.allowance.add(assignAmountAllowance);
+                                pItem.old = pItem.old.add(assignAmountOld);
+                                pItem.medical = pItem.medical.add(assignAmountMedical);
+                                pItem.loseJob = pItem.loseJob.add(assignAmountLoseJob);
+                                pItem.injury = pItem.injury.add(assignAmountInjury);
+                                pItem.house = pItem.house.add(assignAmountHouse);
+                                pItem.other = pItem.other.add(assignAmountOther);
+                                pItem.field1 = pItem.field1.add(assignAmountField1);
+                                pItem.field2 = pItem.field2.add(assignAmountField2);
+                                pItem.field3 = pItem.field3.add(assignAmountField3);
+                                pItem.field4 = pItem.field4.add(assignAmountField4);
+                                pItem.field5 = pItem.field5.add(assignAmountField5);
+                                pItem.field6 = pItem.field6.add(assignAmountField6);
+                                pItem.field7 = pItem.field7.add(assignAmountField7);
                                 if (pItem.thirdCost == null)  {
                                     pItem.thirdCost = new BigDecimal(0);
                                 }
@@ -2516,6 +2851,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
                             }
                             //分摊完了,需要将当前这个生产或者研发其他项目上的成本设置为0
                             p.cost = new BigDecimal(0);
+                            p.salary = new BigDecimal(0);
+                            p.bonus = new BigDecimal(0);
+                            p.allowance = new BigDecimal(0);
+                            p.old = new BigDecimal(0);
+                            p.medical = new BigDecimal(0);
+                            p.loseJob = new BigDecimal(0);
+                            p.injury = new BigDecimal(0);
+                            p.house = new BigDecimal(0);
+                            p.other = new BigDecimal(0);
+                            p.field1 = new BigDecimal(0);
+                            p.field2 = new BigDecimal(0);
+                            p.field3 = new BigDecimal(0);
+                            p.field4 = new BigDecimal(0);
+                            p.field5 = new BigDecimal(0);
+                            p.field6 = new BigDecimal(0);
+                            p.field7 = new BigDecimal(0);
                         }
                     }
                     //研发和生产都处理完了,就退出
@@ -2529,6 +2880,22 @@ public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> impl
             totalMoneyCost = totalMoneyCost.setScale(2, BigDecimal.ROUND_HALF_UP);
             pList.forEach(p->{
                 p.cost = p.cost.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.salary = p.salary.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.bonus = p.bonus.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.allowance = p.allowance.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.old = p.old.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.medical = p.medical.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.loseJob = p.loseJob.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.injury = p.injury.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.house = p.house.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.other = p.other.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field1 = p.field1.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field2 = p.field2.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field3 = p.field3.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field4 = p.field4.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field5 = p.field5.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field6 = p.field6.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.field7 = p.field7.setScale(2, BigDecimal.ROUND_HALF_UP);
             });
             resultMap.put("costList", pList);
             resultMap.put("percentTotal", percentTotal);