审查视图

src/main/java/com/sy/service/impl/WeightCheckHandleServiceImpl.java 6.7 KB
朱兆平 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
package com.sy.service.impl;

import com.sy.logic.LiftBar;
import com.sy.service.WeightCheckHandleService;
import com.sy.utils.FileTool;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;

@Service
public class WeightCheckHandleServiceImpl implements WeightCheckHandleService {

    private static final Logger logger = Logger.getLogger(WeightCheckHandleServiceImpl.class);

    //从配置文件中读取货物重差可控范围
    private static String checkWt = FileTool.readProperties("grossWt");

    /**
     * 校验载重和称重是否在合理的范围
     *
     * @param grossWt   地磅称重,也称出场过磅重量
     * @param wt        车辆自重
     * @param goodsWt   货物总重
     * @param inWt      进场过磅重量
     * @return 获取运单重量
     */
    /**
     * 进场卸货误差判定
     * 出场重量 = 进场重量 - 货物重量
     * 首先计算 进出场差值数 ABS(进场重量-货物重量-出场重量)/出场重量, 计算出出场误差百分比
     *  (出场重量 - 车辆备案重量) /出场重量   空车离场
     *  (出场重量 - (车辆备案重量+货物重量)/出场重量   进场提货(涉及业务,普货提货,调拨,分拨,转关提货)
     *  (出场重量 - (进场重量+货物重量)/出场重量
     */
    @Override
    public boolean checkResult(double grossWt, double wt, double goodsWt, double inWt) {
        DecimalFormat df = new DecimalFormat("0.00");
        boolean flag = false;
        double result= 0.0,result2= 0.0,result3= 0.0,result4= 0.0;
        if(grossWt>0){
            result = Double.parseDouble(df.format(Math.abs((inWt - goodsWt - grossWt)) / grossWt));
            result2 = Double.parseDouble(df.format(Math.abs((grossWt-wt)) / grossWt));
            result3 = Double.parseDouble(df.format(Math.abs((grossWt-wt-goodsWt)) / grossWt));
            result4 = Double.parseDouble(df.format(Math.abs((inWt + goodsWt)) / grossWt));
        }
        if (result <= valueDob() ||result2 <= valueDob() || result3 <= valueDob() || result4 <= valueDob()) {
            flag = true;
        }
        return flag;
    }

    /**
     * 出口普货送货业务重量校验,可支持 带货送货,不支持送货提货
     * 进场重量-载货重量 = 出场重量 (此逻辑已包含空车离场判定)
     * @param grossWt   地磅称重,也称出场过磅重量
     * @param wt        车辆自重
     * @param goodsWt   货物总重
     * @param inWt      进场过磅重量
     * 误差计算方式 (应该出场重量 - 出场重量) / 出场重量 与 误差比对,超过误差则不放行
     * @return 返回校验结果 true 通过,false 不通过
     */
    @Override
    public boolean checkExportDownLoading(double grossWt, double wt, double goodsWt, double inWt){
        DecimalFormat df = new DecimalFormat("0.00");
        boolean flag = false;
        //卸货判定
        double result= 0.0;
        //以防万一 空车离场判定
        double result2= 0.0;
        if(grossWt>0){
            result = Double.parseDouble(df.format(Math.abs((inWt - goodsWt - grossWt)) / grossWt));
            result2 = Double.parseDouble(df.format(Math.abs((grossWt-wt)) / grossWt));
        }
        if (result <= valueDob() ||  result2 <= valueDob()) {
            flag = true;
        }
        return flag;
    }

    /**
     * 进口普货提货业务重量校验,可支持 带货提货,不支持卸货提货
     * 进口转关业务重量校验
     * 进场重量+载货重量 = 出场重量
     * @param grossWt   地磅称重,也称出场过磅重量
     * @param wt        车辆自重
     * @param goodsWt   货物总重
     * @param inWt      进场过磅重量
     * 误差计算方式 (应该出场重量 - 出场重量) / 出场重量 与 误差比对,超过误差则不放行
     * @return 返回校验结果 true 通过,false 不通过
     */
    @Override
    public boolean checkImportDlv(double grossWt, double wt, double goodsWt,double inWt){
        DecimalFormat df = new DecimalFormat("0.00");
        boolean flag = false;
        double result= 0.0;
        if(grossWt>0){
            result = Double.parseDouble(df.format(Math.abs((inWt + goodsWt - grossWt)) / grossWt));
        }
        if (result <= valueDob()) {
            flag = true;
        }
        return flag;
    }

    /**
     * 分拨/调拨业务重量校验
     * 进场重量+载货重量 = 出场重量 (装载场站装货离场)
     * 或者 空车出场 (最后卸货离场)
     * 或者 进场重量-载货重量 = 出场重量 (目的场站卸货离场)
     * @param grossWt   地磅称重,也称出场过磅重量
     * @param wt        车辆自重
     * @param goodsWt   货物总重
     * @param inWt      进场过磅重量
     * 误差计算方式 (应该出场重量 - 出场重量) / 出场重量 与 误差比对,超过误差则不放行
     * @return 返回校验结果 true 通过,false 不通过
     */
    @Override
    public boolean checkAllocateOrDispatch(double grossWt, double wt, double goodsWt,double inWt){
        DecimalFormat df = new DecimalFormat("0.00");
        boolean flag = false;
        //载货离场判定
        double result= 0.0;
        //空车离场判定
        double result2= 0.0;

        //卸货离场判定
        double result3= 0.0;

        if(grossWt>0){
            result = Double.parseDouble(df.format(Math.abs((inWt + goodsWt - grossWt)) / grossWt));
            result2 = Double.parseDouble(df.format(Math.abs((grossWt-wt)) / grossWt));
            result3 = Double.parseDouble(df.format(Math.abs((inWt - goodsWt - grossWt)) / grossWt));
        }
        if (result <= valueDob() ||  result2 <= valueDob() ||  result3 <= valueDob() ) {
            flag = true;
        }
        return flag;
    }

    /**
     * 判断备案车重与运单重量和地磅称重是否在合理范围
     *
     * @param grossWt
     * @param wt
     * @return
     */
    public boolean checkFlag(double grossWt, double wt) {
        DecimalFormat df = new DecimalFormat("0.00");
        boolean flag = false;
        double reult = Double.parseDouble(df.format(Math.abs((grossWt - wt)) / grossWt));
        if (reult <= valueDob()) {
            flag = true;
        }
        return flag;
    }

    //将获取的checkWt进行小数转化
    private double valueDob() {
        NumberFormat nf = NumberFormat.getPercentInstance();
        Number m = null;
        try {
            m = nf.parse(checkWt);//将百分数转换成Number类型
        } catch (ParseException e) {
            logger.info("重量校验消息异常---"+e.toString());
            logger.info(e.getMessage());
        }
        return m.doubleValue();
    }
}