ソースを参照

处理诚信扣款、甲供材超供抵扣款、税金处理

chengqiang 5 年 前
コミット
27e0da4e03

+ 115 - 105
src/main/java/com/jeeplus/modules/sg/overheadline/service/OverheadLineService.java

@@ -97,79 +97,89 @@ public class OverheadLineService {
 //            根据totalFee进行分摊,分摊至最后剩下的 找一个最低层级wbs扣减,并逐层扣减上级wbs
             String lastShareWbs = null;
             for (JkxlDetailFee jkxlDetailFee : list) {
+                Double totalFee = jkxlDetailFee.getTotalFee();
                 //建筑费和
                 if (jkxlDetailFee.getWbsCode().equals("21000000")) {
-                    jz1 = jkxlDetailFee.getTotalFee()!=null? jkxlDetailFee.getTotalFee():0.00;
+                    jz1 = totalFee!=null? jkxlDetailFee.getTotalFee():0.00;
                     jz2 = jkxlDetailFee.getJzFee()!=null? jkxlDetailFee.getJzFee():0.00;
                 }
                 //安装费和
                 if (jkxlDetailFee.getWbsCode().equals("23000000")) {
-                    az1 = jkxlDetailFee.getTotalFee()!=null? jkxlDetailFee.getTotalFee():0.00;
+                    az1 = totalFee!=null? jkxlDetailFee.getTotalFee():0.00;
                     az2 = jkxlDetailFee.getAzFee()!=null? jkxlDetailFee.getAzFee():0.00;
                 }
                 //其他费用和
-                if (jkxlDetailFee.getFeeType().equals("0")&& jkxlDetailFee.getTotalFee() != null) {
-                    qtTotal += jkxlDetailFee.getTotalFee();
+                if (jkxlDetailFee.getFeeType().equals("0")&& totalFee != null) {
+                    qtTotal += totalFee;
                 }
 //                wbs简明表示8位,最低层次wbs最后两位为0
                 String six = jkxlDetailFee.getWbsCode().substring(5,6);
-                if(lastShareWbs!=null && jkxlDetailFee.getFeeType().equals("1")&&!six.equals("0")){
+                if(lastShareWbs==null && jkxlDetailFee.getFeeType().equals("1")&&!six.equals("0")&&totalFee!=null&&totalFee!=0.00){
                     lastShareWbs = jkxlDetailFee.getWbsCode();
                 }
 
             }
 
-            double totalJzShare = DoubleUtil.round2(totalDeal*jz1/(jz1+az1));
-            double totalAzShare = DoubleUtil.round2(totalDeal*az1/(jz1+az1));
-            //实际分摊金额与需分摊金额是否有差额
-            double diff = DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)));
-            //实际分摊与需分摊存在差额情况下 将差额分配的wbs节点及其父节点
-            String wbs1 = null;
-            String wbs2 = null;
-            String wbs3 = null;
-            String wbs4 = null;
-            if(diff != 0.00){
-                wbs1 = lastShareWbs.substring(0,2)+"000000";
-                wbs2 = lastShareWbs.substring(0,3)+"00000";
-                wbs3 = lastShareWbs.substring(0,4)+"0000";
-                wbs4 = lastShareWbs.substring(0,5)+"000";
-            }
-            //根据合计分摊至本体部分 看代码jz1=jz2 az1=az2不知道为什么要分开。
-            for(JkxlDetailFee jkxlDetailFee:list){
-                String wbs = jkxlDetailFee.getWbsCode();
-                Double totalFee = jkxlDetailFee.getTotalFee();
-                if(wbs.startsWith("21")&&totalFee!=null&&totalFee!=0.00){
-                    double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
-                    jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
-                    jkxlDetailFee.setJzFee((DoubleUtil.sub(totalFee,share)));
+            if(totalDeal!=0.00){
+                double totalJzShare = DoubleUtil.round2(totalDeal*jz1/(jz1+az1));
+                double totalAzShare = DoubleUtil.round2(totalDeal*az1/(jz1+az1));
+                //实际分摊金额与需分摊金额是否有差额
+                double diff = DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)));
+                //实际分摊与需分摊存在差额情况下 将差额分配的wbs节点及其父节点
+                String wbs1 = null;
+                String wbs2 = null;
+                String wbs3 = null;
+                String wbs4 = null;
+                if(diff != 0.00&&lastShareWbs!=null){
+                    wbs1 = lastShareWbs.substring(0,2)+"000000";
+                    wbs2 = lastShareWbs.substring(0,3)+"00000";
+                    wbs3 = lastShareWbs.substring(0,4)+"0000";
+                    wbs4 = lastShareWbs.substring(0,5)+"000";
                 }
-                if(wbs.startsWith("23")&&totalFee!=null&&totalFee!=0.00){
-                    double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
-                    jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
-                    jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
-                }
-                if(diff!=0.00){
-                    if(wbs.equals(wbs1)||wbs.equals(wbs2)||wbs.equals(wbs3)||wbs.equals(wbs4)||wbs.equals(lastShareWbs)){
-                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(jkxlDetailFee.getTotalFee(),diff));
-                        if(lastShareWbs.startsWith("21")){
-                            jkxlDetailFee.setJzFee(DoubleUtil.sub(jkxlDetailFee.getJzFee(),diff));
+                //根据合计分摊至本体部分 看代码jz1=jz2 az1=az2不知道为什么要分开。
+                for(JkxlDetailFee jkxlDetailFee:list){
+                    String wbs = jkxlDetailFee.getWbsCode();
+                    Double totalFee = jkxlDetailFee.getTotalFee();
+                    if(wbs.startsWith("21")&&totalFee!=null&&totalFee!=0.00){
+                        double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
+                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
+                        jkxlDetailFee.setJzFee((DoubleUtil.sub(totalFee,share)));
+                    }
+                    if(wbs.startsWith("23")&&totalFee!=null&&totalFee!=0.00){
+                        double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
+                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
+                        jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
+                    }
+                    if(diff!=0.00&&lastShareWbs!=null){
+                        if(wbs.equals(wbs1)||wbs.equals(wbs2)||wbs.equals(wbs3)||wbs.equals(wbs4)||wbs.equals(lastShareWbs)){
+                            jkxlDetailFee.setTotalFee(DoubleUtil.sub(jkxlDetailFee.getTotalFee(),diff));
+                            if(lastShareWbs.startsWith("21")){
+                                jkxlDetailFee.setJzFee(DoubleUtil.sub(jkxlDetailFee.getJzFee(),diff));
+                            }else{
+                                jkxlDetailFee.setAzFee(DoubleUtil.sub(jkxlDetailFee.getAzFee(),diff));
+                            }
+                        }
+
+                    }else if(diff!=0.00&& lastShareWbs==null){
+                        if(jz1>0.00){
+                            lastShareWbs = "21000000";
                         }else{
-                            jkxlDetailFee.setAzFee(DoubleUtil.sub(jkxlDetailFee.getAzFee(),diff));
+                            lastShareWbs = "23000000";
                         }
                     }
 
                 }
-
-            }
-            if(lastShareWbs.startsWith("21")){
-                totalJzShare = DoubleUtil.add(totalJzShare,diff);
-            }else{
-                totalAzShare = DoubleUtil.add(totalAzShare,diff);
+                if(lastShareWbs.startsWith("21")){
+                    totalJzShare = DoubleUtil.add(totalJzShare,diff);
+                }else{
+                    totalAzShare = DoubleUtil.add(totalAzShare,diff);
+                }
+                jz1 = DoubleUtil.sub(jz1,totalJzShare);
+                jz2 = DoubleUtil.sub(jz2,totalJzShare);
+                az1 = DoubleUtil.sub(az1,totalAzShare);
+                az2 = DoubleUtil.sub(az2,totalAzShare);
             }
-            jz1 = DoubleUtil.sub(jz1,totalJzShare);
-            jz2 = DoubleUtil.sub(jz2,totalJzShare);
-            az1 = DoubleUtil.sub(az1,totalAzShare);
-            az2 = DoubleUtil.sub(az2,totalAzShare);
+
 
             qtTotal = qtTotal + integrityFee;
             for (JkxlDetailFee jkxlDetailFee : list) {
@@ -221,55 +231,54 @@ public class OverheadLineService {
             }
 
             //处理税金和甲供材超供抵扣款
-            double totalJzShare = 0.00;
-            double totalAzShare = 0.00;
-            //根据合计分摊至本体部分 看代码jz1=jz2 az1=az2不知道为什么要分开。
-            for(JkxlDetailFee jkxlDetailFee:list){
-                String wbs = jkxlDetailFee.getWbsCode().substring(0,3);
-                String wbs1 = jkxlDetailFee.getWbsCode().substring(3,4);
-                Double totalFee = jkxlDetailFee.getTotalFee();
-                if(wbs.equals("491") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
-                    double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
-                    jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
-                    jkxlDetailFee.setJzFee((DoubleUtil.sub(totalFee,share)));
-                    totalJzShare = DoubleUtil.add(totalJzShare,share);
-                }
-                if(wbs.equals("493") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
-                    double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
-                    jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
-                    jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
-                    totalAzShare = DoubleUtil.add(totalAzShare,share);
-                }
-
-            }
-            //将分摊后的差额放入第一个分部分项
-            if(totalDeal!=(totalJzShare+totalAzShare)){
+            if(totalDeal!=0.00){
+                double totalJzShare = 0.00;
+                double totalAzShare = 0.00;
+                //根据合计分摊至本体部分 看代码jz1=jz2 az1=az2不知道为什么要分开。
                 for(JkxlDetailFee jkxlDetailFee:list){
                     String wbs = jkxlDetailFee.getWbsCode().substring(0,3);
                     String wbs1 = jkxlDetailFee.getWbsCode().substring(3,4);
                     Double totalFee = jkxlDetailFee.getTotalFee();
                     if(wbs.equals("491") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
-                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
-                        jkxlDetailFee.setJzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
-                        totalJzShare = DoubleUtil.add(totalJzShare,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare))));
-                        break;
+                        double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
+                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
+                        jkxlDetailFee.setJzFee((DoubleUtil.sub(totalFee,share)));
+                        totalJzShare = DoubleUtil.add(totalJzShare,share);
                     }
                     if(wbs.equals("493") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
-                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
-                        jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
-                        totalAzShare = DoubleUtil.add(totalAzShare,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare))));
-                        break;
+                        double share = DoubleUtil.round2(totalDeal*totalFee/(jz1+az1));
+                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
+                        jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
+                        totalAzShare = DoubleUtil.add(totalAzShare,share);
                     }
 
                 }
-            }
-            jz1 = DoubleUtil.sub(jz1,totalJzShare);
-            jz2 = DoubleUtil.sub(jz2,totalJzShare);
-            az1 = DoubleUtil.sub(az1,totalAzShare);
-            az2 = DoubleUtil.sub(az2,totalAzShare);
-
-
+                //将分摊后的差额放入第一个分部分项
+                if(totalDeal!=(totalJzShare+totalAzShare)){
+                    for(JkxlDetailFee jkxlDetailFee:list){
+                        String wbs = jkxlDetailFee.getWbsCode().substring(0,3);
+                        String wbs1 = jkxlDetailFee.getWbsCode().substring(3,4);
+                        Double totalFee = jkxlDetailFee.getTotalFee();
+                        if(wbs.equals("491") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
+                            jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
+                            jkxlDetailFee.setJzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
+                            totalJzShare = DoubleUtil.add(totalJzShare,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare))));
+                            break;
+                        }
+                        if(wbs.equals("493") && !wbs1.equals("0")&&totalFee!=null&&totalFee!=0.00){
+                            jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
+                            jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare)))));
+                            totalAzShare = DoubleUtil.add(totalAzShare,DoubleUtil.sub(totalDeal,(DoubleUtil.add(totalJzShare,totalAzShare))));
+                            break;
+                        }
 
+                    }
+                }
+                jz1 = DoubleUtil.sub(jz1,totalJzShare);
+                jz2 = DoubleUtil.sub(jz2,totalJzShare);
+                az1 = DoubleUtil.sub(az1,totalAzShare);
+                az2 = DoubleUtil.sub(az2,totalAzShare);
+            }
 
             //诚信扣款
             qtTotal = qtTotal + integrityFee;
@@ -332,30 +341,31 @@ public class OverheadLineService {
             }
 
             //处理税金和甲供材超供抵扣款
-            double totalShare = 0.00;
-            //根据合计分摊至本体部分
-            for(JkxlDetailFee jkxlDetailFee:list){
-                Double totalFee = jkxlDetailFee.getTotalFee();
-                if(jkxlDetailFee.getFeeType().equals("1") && totalFee != null && totalFee!=0.00){
-                    double share = DoubleUtil.round2(totalDeal*totalFee/az1);
-                    jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
-                    jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
-                    totalShare = DoubleUtil.add(totalShare,share);
-                }
-            }
-            //将分摊后的差额放入第一个分部分项
-            if(totalDeal!=totalShare){
+            if(totalDeal!=0.00){
+                double totalShare = 0.00;
+                //根据合计分摊至本体部分
                 for(JkxlDetailFee jkxlDetailFee:list){
                     Double totalFee = jkxlDetailFee.getTotalFee();
                     if(jkxlDetailFee.getFeeType().equals("1") && totalFee != null && totalFee!=0.00){
-                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,totalShare)));
-                        jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,totalShare)));
-                        break;
+                        double share = DoubleUtil.round2(totalDeal*totalFee/az1);
+                        jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,share));
+                        jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,share));
+                        totalShare = DoubleUtil.add(totalShare,share);
                     }
                 }
+                //将分摊后的差额放入第一个分部分项
+                if(totalDeal!=totalShare){
+                    for(JkxlDetailFee jkxlDetailFee:list){
+                        Double totalFee = jkxlDetailFee.getTotalFee();
+                        if(jkxlDetailFee.getFeeType().equals("1") && totalFee != null && totalFee!=0.00){
+                            jkxlDetailFee.setTotalFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,totalShare)));
+                            jkxlDetailFee.setAzFee(DoubleUtil.sub(totalFee,DoubleUtil.sub(totalDeal,totalShare)));
+                            break;
+                        }
+                    }
+                }
+                az1 = DoubleUtil.sub(az1,totalDeal);
             }
-            az1 = DoubleUtil.sub(az1,totalDeal);
-
 
             qtTotal = qtTotal + integrityFee;
             for (JkxlDetailFee jkxlDetailFee : list) {

+ 6 - 3
src/main/java/com/jeeplus/modules/sg/project/web/ProjectController.java

@@ -192,7 +192,8 @@ public class ProjectController extends BaseController {
 
 
 
-    //单个工程导出
+
+    //单项工程导出
     @RequestMapping("/exportone")
     public String exportone(HttpServletRequest request,Model model,HttpServletResponse response) throws IOException {
         String id = request.getParameter("id");
@@ -200,7 +201,8 @@ public class ProjectController extends BaseController {
         String fileName = wbsProject.getProjectNo()+wbsProject.getProjectName()+".xlsx";
         List<WbsItem> wbsItems = wbsProject.getWbsItems();
         List<WbsItem> wbsItems1 = new ArrayList<>();
-        //过滤相同供应商名称
+
+        //过滤相同供应商名称,获取所有供应商
         for(WbsItem wbsItem : wbsItems){
             if(!wbsItems1.contains(wbsItem)){
                 wbsItems1.add(wbsItem);
@@ -211,6 +213,7 @@ public class ProjectController extends BaseController {
         for (int i=0;i<wbsItems1.size();i++){
             sts[i+1] = wbsItems1.get(i).getUnit();
         }
+
         List<JkxlDetailFee> list = new ArrayList<>();
         for(WbsItem wbsItem :wbsItems){
             List<JkxlDetailFee> jkxlDetailFees = overheadLineService.findList(wbsItem.getId(),wbsItem.getType());
@@ -360,7 +363,7 @@ public class ProjectController extends BaseController {
 
 
     /**
-     * 数据去重合并
+     * list中 所有wbs编码一样的JkxlDetailFee对象只保留一个,且相同wbs对象的“安装费”、“建筑费”、“其他费”、“合计”等费用合并
      * @param list
      * @return
      */