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(); } }