using Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using com.hnshituo.core.webapp.vo; namespace MeterConditionLibrary { /// /// 验证是否可留期限皮重 /// public class validTermTareCar { Log lg = Log.GetInstance(); public bool ValidMethod(string carNo) { //是否在黑名单内 MeterBaseCarBlacelistService bService = new MeterBaseCarBlacelistService(); RESTfulResult> rmB = bService.doQueryWf(new MeterBaseCarBlacelist { carNo = carNo, valueFlag = "0" }); if (rmB.Succeed) { if (rmB.Data != null && rmB.Data.Count > 0) { PbCache.ResultMessage = string.Format("车辆[{0}]在黑名单内,不能留皮", carNo); lg.WriteLog(3, string.Format("车辆[{0}]在黑名单内,不能留皮", carNo)); return false; } else { //是否可留期限皮 MeterBaseTermTareCarService service = new MeterBaseTermTareCarService(); RESTfulResult> rm = service.doQueryWf(new MeterBaseTermTareCar { carNo = carNo, valueFlag = "0" }); if (rm.Succeed) { if (rm.Data != null && rm.Data.Count == 1) { //如果可以留期限皮重,则判断车辆历史皮重,若当前皮重在 历史皮重最大最小偏差范围内,则认为当前确实是皮重允许留皮 MeterBaseHisTareDataService mbhds = new MeterBaseHisTareDataService(); RESTfulResult> rtHisTare = mbhds.doQueryWf(new MeterBaseHisTareData { carNo = carNo, valueFlag = "0" }); if (!rtHisTare.Succeed) { PbCache.ResultMessage = string.Format("车辆[{0}]获取历史皮重维护数据失败,请语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]获取历史皮重维护数据失败,请语音求助", carNo)); return false; } else { if (rtHisTare.Data == null || rtHisTare.Data.Count == 0) { PbCache.ResultMessage = string.Format("车辆[{0}]首次进行计量业务时,无法留期限皮", carNo); lg.WriteLog(3, string.Format("车辆[{0}]首次进行计量业务时,无法留期限皮", carNo)); return false; } else { //查下是否有有效的期限皮重信息 MeterBaseTermTareDataService termTareDataService = new MeterBaseTermTareDataService(); RESTfulResult> resTermData = termTareDataService.doQueryWf(new MeterBaseTermTareData { carNo = carNo, valueFlag = "0" }); //2021年12月23日 杨秀东添加,九钢的特殊处理,全部的皮重校验,都走历史皮重; if (resTermData.Succeed && resTermData.Data.Count > 0 && false) { MeterBaseTermTareCount mbhtc = PbCache.termTareCount; double maxWgt = 0, minWgt = 0; if (mbhtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重 { double meterWeight = (PbCache.termTareCount.contrastTypeNo == "001012001" ? resTermData.Data[0].upWeight.Value : resTermData.Data[0].meterWeight.Value); maxWgt = meterWeight + mbhtc.fixedWeightValue.Value; minWgt = meterWeight - mbhtc.fixedWeightValue.Value; // 杨秀东 2021年3月15日 新增逻辑,若不验证车号则可以强制进行期限皮重保存; if ((PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt) || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.fixedWeightValue + "kg】内,无法留期限皮,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.fixedWeightValue + "kg】,无法留期限皮,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else if (mbhtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例 { double meterWeight = (PbCache.termTareCount.contrastTypeNo == "001012001" ? resTermData.Data[0].upWeight.Value : resTermData.Data[0].meterWeight.Value); maxWgt = meterWeight + meterWeight * (mbhtc.rateValue.Value / 100); minWgt = meterWeight - meterWeight * (mbhtc.rateValue.Value / 100); //杨秀东 2021年3月15日 新增逻辑,若不验证车号则可以强制进行期限皮重保存; if ((PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt) || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.fixedWeightValue + "%】内,无法留期限皮,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.fixedWeightValue + "%】,无法留期限皮,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]期限皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName); //没有配置比例,也没配置固重,这个需要增加逻辑代码 lg.WriteLog(3, string.Format("车辆[{0}]期限皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName)); return false; } } else { //lg.WriteLog(3, string.Format("6车辆[{0}进入留皮判断", carNo)); #region 外面的那一层是新加的代码,这个里面的是原有的判断 //历史皮重计算方式 MeterBaseHisTareCount mbhtc = PbCache.tareCount; double maxWgt = 0, minWgt = 0; if (mbhtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rtHisTare.Data[0].upWeight.Value : rtHisTare.Data[0].meterWeight.Value); maxWgt = meterWeight + mbhtc.fixedWeightValue.Value; minWgt = meterWeight - mbhtc.fixedWeightValue.Value; if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.fixedWeightValue + "kg】内,无法留皮重,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.fixedWeightValue + "kg】,无法留皮重,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else if (mbhtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rtHisTare.Data[0].upWeight.Value : rtHisTare.Data[0].meterWeight.Value); maxWgt = meterWeight + meterWeight * (mbhtc.rateValue.Value / 100); minWgt = meterWeight - meterWeight * (mbhtc.rateValue.Value / 100); if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt || PbCache.monitor.validWgt.Equals("0")) { return true; } else { lg.WriteLog(3, string.Format("8车辆[{0}进入留皮判断min:{1},max:{2},当前{3}", carNo, minWgt, maxWgt, PbCache.lockWgt)); PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.rateValue + "%】内,无法留期限皮,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.rateValue + "%】,无法留期限皮,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]历史皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName); //没有配置比例,也没配置固重,这个需要增加逻辑代码 lg.WriteLog(3, string.Format("车辆[{0}]历史皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName)); return false; } #endregion } } } } else { PbCache.ResultMessage = string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮", carNo); if (rm.Data == null) { lg.WriteLog(3, string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮!!车号[{0}],状态[0],数据条数为0", carNo)); } else { lg.WriteLog(3, string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮!!车号[{0}],状态[0],数据条数大于1,为[{1}]", carNo, rm.Data.Count)); } return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]获取是否可留期限皮时异常,请语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]获取是否可留期限皮时,服务端查询失败", carNo)); return false; } } } else { PbCache.ResultMessage = string.Format("车辆[{0}]获取黑名单数据时,请语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]获取黑名单数据时,服务端查询失败", carNo)); return false; } } /// /// 是否显示期限皮重按钮 /// /// /// public bool isShowBtnTare(string carNo) { Log lg = Log.GetInstance(); //是否可留期限皮 MeterBaseTermTareCarService service = new MeterBaseTermTareCarService(); RESTfulResult> rm = service.doQueryWf(new MeterBaseTermTareCar { carNo = carNo, valueFlag = "0" }); if (rm.Succeed && rm.Data != null && rm.Data.Count == 1) { return true; } return false; } #region /// /// 我们在这个对象中存储 /// /// /// public bool ValidMethod(PreTrackScale pre) { string carNo = pre.carNo; //是否可留期限皮 MeterBaseTermTareCarService service = new MeterBaseTermTareCarService(); RESTfulResult> rm = service.doValidTareWf(pre); //业务类型、物资、车辆均配置能够使用期限皮重 if (rm.Succeed) { if (rm.Data != null && rm.Data.Count == 1) { //如果可以留期限皮重,则判断车辆历史皮重,若当前皮重在 历史皮重最大最小偏差范围内,则认为当前确实是皮重允许留皮 MeterBaseHisTareDataService mbhds = new MeterBaseHisTareDataService(); RESTfulResult> rtHisTare = mbhds.doQueryWf(new MeterBaseHisTareData { carNo = carNo, valueFlag = "0" }); if (!rtHisTare.Succeed) { PbCache.ResultMessage = string.Format("车辆[{0}]获取历史皮重维护数据失败,请语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]获取历史皮重维护数据失败,请语音求助", carNo)); return false; } else { if (rtHisTare.Data == null || rtHisTare.Data.Count == 0) { PbCache.ResultMessage = string.Format("车辆[{0}]首次进行计量业务时,无法留期限皮", carNo); lg.WriteLog(3, string.Format("车辆[{0}]首次进行计量业务时,无法留期限皮", carNo)); return false; } else { //查下是否有有效的期限皮重信息 MeterBaseTermTareDataService termTareDataService = new MeterBaseTermTareDataService(); RESTfulResult> resTermData = termTareDataService.doQueryWf(new MeterBaseTermTareData { carNo = carNo, valueFlag = "0" }); if (resTermData.Succeed && resTermData.Data.Count > 0) { MeterBaseTermTareCount mbhtc = PbCache.termTareCount; double maxWgt = 0, minWgt = 0; if (mbhtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重 { double meterWeight = (PbCache.termTareCount.contrastTypeNo == "001012001" ? resTermData.Data[0].upWeight.Value : resTermData.Data[0].meterWeight.Value); maxWgt = meterWeight + mbhtc.fixedWeightValue.Value; minWgt = meterWeight - mbhtc.fixedWeightValue.Value; // 杨秀东 2021年3月15日 新增逻辑,若不验证车号则可以强制进行期限皮重保存; if ((PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt) || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重允许的范围【" + meterWeight + "kg】内,无法留期限皮,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重允许的范围内,无法留期限皮,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else if (mbhtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例 { double meterWeight = (PbCache.termTareCount.contrastTypeNo == "001012001" ? resTermData.Data[0].upWeight.Value : resTermData.Data[0].meterWeight.Value); maxWgt = meterWeight + meterWeight * (mbhtc.rateValue.Value / 100); minWgt = meterWeight - meterWeight * (mbhtc.rateValue.Value / 100); //杨秀东 2021年3月15日 新增逻辑,若不验证车号则可以强制进行期限皮重保存; if ((PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt) || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.rateValue + "%】内,无法留期限皮,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在期限皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.rateValue + "%】,无法留期限皮,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]期限皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName); //没有配置比例,也没配置固重,这个需要增加逻辑代码 lg.WriteLog(3, string.Format("车辆[{0}]期限皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName)); return false; } } else { //lg.WriteLog(3, string.Format("6车辆[{0}进入留皮判断", carNo)); #region 外面的那一层是新加的代码,这个里面的是原有的判断 //历史皮重计算方式 MeterBaseHisTareCount mbhtc = PbCache.tareCount; double maxWgt = 0, minWgt = 0; if (mbhtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rtHisTare.Data[0].upWeight.Value : rtHisTare.Data[0].meterWeight.Value); maxWgt = meterWeight + mbhtc.fixedWeightValue.Value; minWgt = meterWeight - mbhtc.fixedWeightValue.Value; if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.fixedWeightValue + "kg】内,无法留皮重,请点击语音求助", carNo); lg.WriteLog(3, string.Format("7车辆[{0}进入留皮判断;车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.fixedWeightValue + "kg】,无法留皮重,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else if (mbhtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rtHisTare.Data[0].upWeight.Value : rtHisTare.Data[0].meterWeight.Value); maxWgt = meterWeight + meterWeight * (mbhtc.rateValue.Value / 100); minWgt = meterWeight - meterWeight * (mbhtc.rateValue.Value / 100); if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt || PbCache.monitor.validWgt.Equals("0")) { return true; } else { PbCache.ResultMessage = string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围【" + mbhtc.rateValue + "%】内,无法留皮重,请点击语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]当前重量【" + PbCache.lockWgt / 1000 + " T】不在历史皮重【" + Convert.ToDouble(meterWeight) / 1000 + "T】允许的范围内【" + mbhtc.rateValue + "%】,无法留皮重,请点击语音求助", carNo)); //不在范围内,无法留期限皮 return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]历史皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName); //没有配置比例,也没配置固重,这个需要增加逻辑代码 lg.WriteLog(3, string.Format("车辆[{0}]历史皮重计算配置表中配置的计算方式[{1}]无对应逻辑", carNo, mbhtc.countTypeName)); return false; } #endregion } } } } else { PbCache.ResultMessage = string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮", carNo); if (rm.Data == null) { lg.WriteLog(3, string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮!!车号[{0}],状态[0],数据条数为0", carNo)); } else { lg.WriteLog(3, string.Format("车辆[{0}]未给留期限皮权限,不允许留期限皮!!车号[{0}],状态[0],数据条数大于1,为[{1}]", carNo, rm.Data.Count)); } return false; } } else { PbCache.ResultMessage = string.Format("车辆[{0}]获取是否可留期限皮时异常,请语音求助", carNo); lg.WriteLog(3, string.Format("车辆[{0}]获取是否可留期限皮时,服务端查询失败", carNo)); return false; } } #endregion /// /// 按业务类型,物资编码、车辆、业务类型 /// /// /// public bool ValidMethodThree(PreTrackScale pre) { if (pre == null || string.IsNullOrEmpty(pre.matterNo) || string.IsNullOrEmpty(pre.meterTypeNo) || string.IsNullOrEmpty(pre.carNo)) { PbCache.ResultMessage = string.Format("车辆[{0}]预报中的物资名称、业务类型、车号,均不允许为空!请重新扫描二维码!", pre.carNo); lg.WriteLog(3, string.Format("车辆[{0}]预报中的物资名称、业务类型、车号,均不允许为空!请重新扫描二维码!", pre.carNo)); return false; } //查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重 string sqls = @"select t.matter_no id, t.matter_name text from meter_base_matter_info t,meter_base_metertype_conf t2 where t.allowed_tare_weight = '1' and t.valid_flag = '1' and t.matter_no='" + pre.matterNo + @"' and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + pre.meterTypeNo + @"'"; PbModelDbService> pbp = new PbModelDbService>(); RESTfulResult> rmT = pbp.executeSqlDataWf(sqls); if (rmT.Succeed) { if (rmT.Data != null && rmT.Data.Count > 0) { PbCache.ResultMessage = string.Format("物资【{0}】在使用【{1}】业务类型计量时,不能使用一次皮重计量," + "请点击【期限皮重】留期限皮重,然后计量重车!", pre.matterName, pre.meterTypeName); return true; } else { PbCache.ResultMessage = string.Format("物资【{0}】在使用【{1}】业务类型计量时,不允许留期限皮重," + "请点击【保存】普通皮重,然后计量重车!", pre.matterName, pre.meterTypeName); return false; } } else { PbCache.ResultMessage = "计量失败,获取期限皮可用物料异常:" + rmT.ResultMessage; return false; } } /// /// 若存在有效的一次计量数据,则不允许进行期限皮重保存 /// /// /// public bool ValidActualFirst(PreTrackScale pre) { if (pre == null || string.IsNullOrEmpty(pre.matterNo) || string.IsNullOrEmpty(pre.meterTypeNo) || string.IsNullOrEmpty(pre.carNo)) { PbCache.ResultMessage = string.Format("车辆[{0}]预报中的物资名称、业务类型、车号,均不允许为空!请重新扫描二维码!", pre.carNo); lg.WriteLog(3, string.Format("车辆[{0}]预报中的物资名称、业务类型、车号,均不允许为空!请重新扫描二维码!", pre.carNo)); return false; } MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService(); //VALUE_FLAG 状态(0=作废,1=有效,2=结净) RESTfulResult> rmX = mwcfs.doQueryOrderByTime(new MeterWorkCarActualFirst { valueFlag="1", carNo = pre.carNo }); if (rmX.Succeed) { if (rmX.Data != null && rmX.Data.Count > 0) { PbCache.ResultMessage = string.Format("车辆【{0}】存在一条计量时间为【" + rmX.Data[0].createTime?.ToString("yyyy-MM-dd HH:mm:ss") + "】," + "重量为【" + rmX.Data[0].meterWeight / 1000 + "T】的一次计量数据,不允许留期限皮重," + "请完成上一次计量流程,或点击【语音求助】联系司秤工处理!", pre.carNo, pre.meterTypeName); return false; } } else { PbCache.ResultMessage = "计量失败,一次计量数据异常:" + rmX.ResultMessage; return false; } return true; } } }