using com.hnshituo.core.webapp.vo;
using Common;
using System;
using System.Collections.Generic;
namespace MeterConditionLibrary
{
///
/// 验证重量 这里必须是皮重计量,只能通过流程来估算
/// 这里是指与历史皮重比较,如果超了可通过该功能跳过
///
/// 预报信息
public class validWgt
{
public void ValidMethod(PreTrackScale scale)
{
//未锁定的情况下
//if (!PbCache.isLockFrm)
{
//验证重量
if (PbCache.monitor.validWgt == "1")
{
MeterBaseHisTareDataService mbtds = new MeterBaseHisTareDataService();
RESTfulResult> rm = mbtds.doQueryWf(new MeterBaseHisTareData { valueFlag = "0", carNo = scale.carNo });
if (rm.Succeed)
{
if (rm.Data != null && rm.Data.Count > 0)
{
//比较历史皮重与当前重量验证;默认为通用
MeterBaseHisTareCount mbtc = PbCache.tareCount;
//特殊配置项处理;物资类:
if (scale != null && !string.IsNullOrEmpty(scale.matterNo))
{
MeterBaseHisTareCountService meterCount = new MeterBaseHisTareCountService();
RESTfulResult> rmMeterCount = meterCount.doQuerySpecWf(new MeterBaseHisTareCount { countTypeNo = scale.matterNo });
if (rmMeterCount.Succeed && rmMeterCount.Data != null && rmMeterCount.Data.Count > 0)
{
mbtc = rmMeterCount.Data[0];
}
}
//计算
double maxWgt = 0, minWgt = 0, wgt = PbCache.lockWgt;
if (mbtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重
{
long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rm.Data[0].upWeight.Value : rm.Data[0].meterWeight.Value);
maxWgt = meterWeight + mbtc.fixedWeightValue.Value;
minWgt = meterWeight - mbtc.fixedWeightValue.Value;
if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt)
{
PbCache.monitorResult.valid_wgt = true;
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "当前皮重【"+ PbCache.lockWgt/1000 + "T 】不在皮重配置范围,历史皮重为【" + Convert.ToDouble(meterWeight) / 1000 + "T】,偏差最大允许重量为【" + mbtc.fixedWeightValue.Value + "kg】";
}
}
else if (mbtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例
{
long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? rm.Data[0].upWeight.Value : rm.Data[0].meterWeight.Value);
maxWgt = meterWeight + meterWeight * (mbtc.rateValue.Value / 100); //历史皮重+历史皮重*比例
minWgt = meterWeight - meterWeight * (mbtc.rateValue.Value / 100); //历史皮重-历史皮重*比例
if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt)
{
PbCache.monitorResult.valid_wgt = true;
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "当前皮重【" + PbCache.lockWgt / 1000 + "T 】不在皮重配置范围,历史皮重为【" + Convert.ToDouble(meterWeight) / 1000 + "T】,偏差最大允许比例值为【" + mbtc.fixedWeightValue.Value + "%】";
}
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = string.Format("未找到历史皮重计算类型{0}配置数据", mbtc.countTypeNo);
}
//当前重量>=历史皮重+历史皮重*比例 当前重量<=历史皮重+历史皮重*比例
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "未找到历史皮重数据";
}
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "查询异常!请点击语音求助,联系系统管理员处理!";
}
}
else
{
PbCache.monitorResult.valid_wgt = true;
}
}
}
///
/// 非内倒的重量验证,这里验证的是历史皮重
///
///
public void ValidNotInnerMethod(PreTrackScale scale)
{
PbCache.monitorResult.haveHisTare = false;//不存在历史皮
List validHis = validHisTare(scale);
//计量中心默认 PbCache.monitorResult.valid_wgt = true;
if (PbCache.isNotValid)
{
string sql = @"select t1.meter_weight meterWeight,
t1.data_no dataNo,
t1.create_time createTime,
t1.base_spot_no baseSpotNo,
t1.base_spot_name baseSpotName
from Meter_Base_Term_Tare_Data t1, Meter_Base_Term_Tare_Car t2
where t1.car_no = t2.car_no
and t2.value_flag = '0'
and t1.value_flag = '0'
and t1.car_no = '" + scale.carNo + @"'
and t1.end_time>sysdate";
PbModelDbService> pb = new PbModelDbService>();
RESTfulResult> rmType = pb.executeSqlDataWf(sql);
if (rmType.Succeed)
{
if (rmType.Data != null && rmType.Data.Count > 0)
{
//查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重
//and t.meter_nature_name like '%外%' //此为物料计量属性,例如:若不是外购物料,则不允许使用期限皮重;(九江取消了)
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='" + scale.matterNo + @"'
and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + scale.meterTypeNo + @"'";
PbModelDbService> pbp = new PbModelDbService>();
RESTfulResult> rmT = pbp.executeSqlDataWf(sqls);
if (rmT.Succeed)
{
if (rmT.Data != null && rmT.Data.Count > 0)
{
// false 的时候,且有期限皮重,则默认为毛重,
PbCache.monitorResult.valid_wgt = false;
}
else
{
PbCache.monitorResult.valid_wgt = true;
}
}
else
{
PbCache.monitorResult.valid_wgt = true;
PbCache.ResultMessage = "计量失败,获取期限皮可用物料异常:" + rmType.ResultMessage;
}
}
else
{
//没有期限皮重,则不验证重量
PbCache.monitorResult.valid_wgt = true;
}
}
else
{
PbCache.monitorResult.valid_wgt = true;
PbCache.ResultMessage = "计量失败,获取期限皮数据异常:" + rmType.ResultMessage;
}
return;
}
if (validHis != null)
{
if (validHis.Count > 0)
{
if (PbCache.monitor.validWgt == "1")
{
//比较历史皮重与当前重量验证;默认为通用
MeterBaseHisTareCount mbtc = PbCache.tareCount;
//特殊配置项处理;物资类:
if (scale != null && !string.IsNullOrEmpty(scale.matterNo))
{
MeterBaseHisTareCountService meterCount = new MeterBaseHisTareCountService();
RESTfulResult> rmMeterCount = meterCount.doQuerySpecWf(new MeterBaseHisTareCount { countTypeNo = scale.matterNo });
if (rmMeterCount.Succeed && rmMeterCount.Data != null && rmMeterCount.Data.Count > 0)
{
mbtc = rmMeterCount.Data[0];
}
}
double maxWgt = 0, minWgt = 0, wgt = PbCache.lockWgt;
if (mbtc.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重
{
long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? validHis[0].upWeight.Value : validHis[0].meterWeight.Value);
maxWgt = meterWeight + mbtc.fixedWeightValue.Value;
minWgt = meterWeight - mbtc.fixedWeightValue.Value;
if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt)
{
PbCache.monitorResult.valid_wgt = true;
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "当前皮重【" + PbCache.lockWgt / 1000 + "T 】不在皮重配置范围,历史皮重为【" + Convert.ToDouble(meterWeight) / 1000 + "T】,偏差最大允许重量为【" + mbtc.fixedWeightValue.Value + "kg】";
}
}
else if (mbtc.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例
{
long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? validHis[0].upWeight.Value : validHis[0].meterWeight.Value);
maxWgt = meterWeight + meterWeight * (mbtc.rateValue.Value / 100); //历史皮重+历史皮重*比例
minWgt = meterWeight - meterWeight * (mbtc.rateValue.Value / 100); //历史皮重-历史皮重*比例
if (PbCache.lockWgt >= minWgt && PbCache.lockWgt <= maxWgt)
{
PbCache.monitorResult.valid_wgt = true;
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "当前皮重【" + PbCache.lockWgt / 1000 + "T 】不在皮重配置范围,历史皮重为【" + (double)Convert.ToDouble(meterWeight) / 1000 + "T】,偏差最大允许比例值为【" + mbtc.fixedWeightValue.Value + "%】";
}
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = string.Format("未找到历史皮重计算类型{0}配置数据", mbtc.countTypeNo);
}
}
}
else
{
//非内倒的在内有历史皮的时候让其正常计量
PbCache.monitorResult.valid_wgt = true;
}
}
else
{
PbCache.monitorResult.valid_wgt = false;
PbCache.ResultMessage = "查询异常!未找到历史皮重数据";
}
if (PbCache.monitor.validWgt == "0")
{
PbCache.monitorResult.valid_wgt = true;
}
}
public List validHisTare(PreTrackScale scale)
{
List lmhtd = new List();
PbCache.monitorResult.haveHisTare = false;//不存在历史皮
MeterBaseHisTareDataService mbtds = new MeterBaseHisTareDataService();
RESTfulResult> rm = mbtds.doQueryWf(new MeterBaseHisTareData { valueFlag = "0", carNo = scale.carNo });
if (rm.Succeed)
{
if (rm.Data != null && rm.Data.Count > 0)
{
PbCache.monitorResult.haveHisTare = true;//存在历史皮
lmhtd = rm.Data;
}
}
else
{
lmhtd = null;
}
PbCache.monitorResult.hisTareData = lmhtd;
return lmhtd;
}
}
}