Procházet zdrojové kódy

错误数据添加背景颜色,添加保存限制禁止付款金额大于已报账金额,sql优化

梁世豪 před 1 měsícem
rodič
revize
ff66524ca0

+ 0 - 8
src/main/java/com/liang/service/impl/PrjAnnualbudgetdetailServiceImpl.java

@@ -222,14 +222,6 @@ public class PrjAnnualbudgetdetailServiceImpl implements PrjAnnualbudgetdetailSe
222 222
     @Override
223 223
     public List<PrjAnnualbudgetdetail> getBz(Map map) {
224 224
         List<PrjAnnualbudgetdetail> bz = this.prjAnnualbudgetdetailDao.getBz(map);
225
-
226
-        for (int i = 0; i < bz.size(); i++) {
227
-            PrjAnnualbudgetdetail detail = bz.get(i);
228
-            if (detail != null && detail.getYfze() > detail.getBzze()) {
229
-                bz.remove(i);
230
-                i--;
231
-            }
232
-        }
233 225
         return bz;
234 226
 
235 227
     }

+ 22 - 50
src/main/resources/mapper/PrjAnnualbudgetdetailDao.xml

@@ -721,32 +721,21 @@
721 721
     </select>
722 722
     <select id="getBz" resultType="com.liang.entity.PrjAnnualbudgetdetail">
723 723
         SELECT
724
-        SUM(inner_result.BZZE) AS BZZE,
725
-        MAX(inner_result.YFZE) AS YFZE,
726
-        inner_result.XMMC,
727
-        inner_result.FYMC
724
+        SUM(budget.BZZE) * 0.0001 AS BZZE,
725
+        SUM(payment.YFZE) AS YFZE,
726
+        budget.XMMC,
727
+        budget.FYMC
728 728
         FROM (
729 729
         SELECT
730
-        COALESCE((SUM(b_sub.BZZE)), 0.00) * 0.0001 AS BZZE,
731
-        c_sub.YFZE,
732
-        b_sub.XMMC,
733
-        b_sub.ID,
734
-        b_sub.FYMC
735
-        FROM
736
-        (
737
-        SELECT
738
-        COALESCE(SUM(r.BZJE), 0.00) AS BZZE,
739
-        b.XMMC,
740 730
         b.ID,
741
-        a.FYMC
742
-        FROM
743
-        sta_BudgetApproval b
744
-        LEFT JOIN sta_Reimbursement r on r.FYSQ = b.ID
731
+        b.XMMC,
732
+        a.FYMC,
733
+        COALESCE(SUM(r.BZJE), 0.00) AS BZZE
734
+        FROM sta_BudgetApproval b
735
+        LEFT JOIN sta_Reimbursement r ON r.FYSQ = b.ID AND r.SPZT = '审批结束'
745 736
         LEFT JOIN prj_AnnualBudgetDetail a ON a.ID = b.FYLB
746
-        WHERE
747
-        b.SFBZ = 1
737
+        WHERE b.SFBZ = 1
748 738
         AND b.SPZT = '审批结束'
749
-        AND r.SPZT = '审批结束'
750 739
         AND b.BH != ''
751 740
         <if test="nys != null and nys !=''">
752 741
             AND b.NYS = #{nys}
@@ -755,37 +744,20 @@
755 744
             AND b.XMID = #{xmid}
756 745
         </if>
757 746
         <if test="fymc != null and fymc != ''">
758
-            AND a.FYMC like '%'+#{fymc}+'%'
747
+            AND a.FYMC LIKE '%'+#{fymc}+'%'
759 748
         </if>
760
-        GROUP BY
761
-        b.XMMC,
762
-        a.FYMC,
763
-        b.ID
764
-        ) b_sub
765
-        LEFT JOIN
766
-        (
749
+        GROUP BY b.ID, b.XMMC, a.FYMC
750
+        ) budget
751
+        LEFT JOIN (
767 752
         SELECT
768
-        c.FYSQ,
769
-        COALESCE(SUM(c.BCFKJE), 0.00) AS YFZE
770
-        FROM
771
-        sta_PayApproval c
772
-        WHERE
773
-        c.SPZT != '作废'
774
-        GROUP BY
775
-        c.FYSQ
776
-        ) c_sub ON b_sub.ID = c_sub.FYSQ
777
-        GROUP BY
778
-        c_sub.YFZE,
779
-        b_sub.XMMC,
780
-        b_sub.ID,
781
-        b_sub.FYMC
782
-        ) inner_result
783
-        GROUP BY
784
-        inner_result.XMMC,
785
-        inner_result.FYMC
786
-        ORDER BY
787
-        inner_result.FYMC,
788
-        inner_result.XMMC;
753
+        FYSQ,
754
+        COALESCE(SUM(BCFKJE), 0.00) AS YFZE
755
+        FROM sta_PayApproval
756
+        WHERE SPZT = '审批结束'
757
+        GROUP BY FYSQ
758
+        ) payment ON budget.ID = payment.FYSQ
759
+        GROUP BY budget.XMMC, budget.FYMC
760
+        ORDER BY budget.FYMC, budget.XMMC;
789 761
     </select>
790 762
     <select id="getWw" resultType="java.math.BigDecimal">
791 763
         SELECT

+ 56 - 14
src/main/resources/templates/payapply/adds.html

@@ -154,6 +154,8 @@
154 154
         var xmApproval = parent.getXmApproval();
155 155
         let htList = ' ';
156 156
         var ysId = 1;
157
+        var bzze = 0.0;
158
+        var yf‘ze = 0.0;
157 159
         $("#fysq").val(xmApproval.fysq);
158 160
         $("#fysqmc").val(xmApproval.fysqmc);
159 161
         $("#rws").val(xmApproval.rws);
@@ -379,22 +381,52 @@
379 381
                                             {type: "radio", fixed: 'left',title: '😊'},
380 382
                                             {type: 'numbers', align: 'center',title: '序号'},
381 383
                                             {field: 'fymc', width: '25%', title: '费用名称'},
382
-                                            {title: '报账总金额(万元)',align: 'right',width: '20%',templet:function (row) {
383
-                                                if (row.bzze == ' '){
384
-                                                    return 0.00;
385
-                                                }else if (row.bzze == null){
386
-                                                    return 0.00;
387
-                                                }else {
388
-                                                    return  parseFloat(row.bzze).toFixed(2).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
389
-                                                }
390
-                                                }},
391
-                                            {title: '已付总额(万元)',width: '20%',align: 'right',templet:function (row) {
392
-                                                if (row.yfze == null || row.yfze == ' '){
393
-                                                    return 0.00;
384
+                                            {
385
+                                                title: '报账总金额(万元)',
386
+                                                align: 'right',
387
+                                                width: '20%',
388
+                                                templet: function(row) {
389
+                                                    // 检查空值
390
+                                                    if (row.bzze == ' ' || row.bzze == null) {
391
+                                                        return '<div style="display:block;">0.00</div>';
392
+                                                    }
393
+
394
+                                                    // 格式化数值
395
+                                                    const formattedValue = parseFloat(row.bzze).toFixed(2).toLocaleString(undefined, {
396
+                                                        minimumFractionDigits: 2,
397
+                                                        maximumFractionDigits: 2
398
+                                                    });
399
+
400
+                                                    // 检查是否 yfze ≥ bzze
401
+                                                    const shouldHighlight = parseFloat(row.yfze || 0) > parseFloat(row.bzze || 0);
402
+                                                    const bgStyle = shouldHighlight ? 'background-color: #ffdddd;' : '';
403
+
404
+                                                    return `<div style="${bgStyle}">${formattedValue}</div>`;
394 405
                                                 }
395
-                                                return row.yfze.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
406
+                                            },
407
+                                            {
408
+                                                title: '已付总额(万元)',
409
+                                                width: '20%',
410
+                                                align: 'right',
411
+                                                templet: function(row) {
412
+                                                    // 检查空值
413
+                                                    if (row.yfze == null || row.yfze == ' ') {
414
+                                                        return '<div style="display:block;">0.00</div>';
415
+                                                    }
416
+
417
+                                                    // 格式化数值
418
+                                                    const formattedValue = row.yfze.toLocaleString(undefined, {
419
+                                                        minimumFractionDigits: 2,
420
+                                                        maximumFractionDigits: 2
421
+                                                    });
396 422
 
397
-                                                }},
423
+                                                    // 检查是否 yfze ≥ bzze
424
+                                                    const shouldHighlight = parseFloat(row.yfze || 0) > parseFloat(row.bzze || 0);
425
+                                                    const bgStyle = shouldHighlight ? 'background-color: #ffdddd;' : '';
426
+
427
+                                                    return `<div style="${bgStyle}">${formattedValue}</div>`;
428
+                                                }
429
+                                            },
398 430
                                             {title: '可申请额度(万元)',align: 'right',width: '20%',templet:function (row) {
399 431
                                                     const bzze = parseFloat(row.bzze);
400 432
                                                     const yfze = parseFloat(row.yfze);
@@ -417,6 +449,12 @@
417 449
                                     ]
418 450
                                 },
419 451
                                 done: function (elem, data) {
452
+                                    const selectedRow = data.data[0]; // 如果是单选模式,data.data[0] 就是选中的行
453
+
454
+                                    // 获取报账总额和已付总额
455
+                                     bzze = selectedRow.bzze || 0; // 已报账总额
456
+                                     yfze = selectedRow.yfze || 0; // 已付款总额
457
+
420 458
                                     var NEWJSON = [];
421 459
                                     var NEWJSON1 = [];
422 460
                                     var NEWJSON2 = [];
@@ -457,6 +495,10 @@
457 495
                 e.delegateTarget.value = "";
458 496
             }else if (bcfkje > 1000){
459 497
                 layer.msg('本次付款金额单位为万元,请确认当前数据无误。',{icon:2});
498
+            }else if (bcfkje + yfze > bzze){
499
+                console.log('bcfkje:' + bcfkje + 'yfze:' + yfze + 'bzze:' + bzze)
500
+                layer.msg('本次付款金额和已付款金额之和不能大于已报账总额,请重新输入!',{icon:2});
501
+                e.delegateTarget.value = "";
460 502
             }
461 503
         });
462 504
         //合同文件