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 validPrediction
{
///
/// 验证预报信息,在扫码的时候验证
///
/// 预报信息
public bool ValidMethod(PreTrackScale scale,out string ResultMessage)
{
bool flag = false;
ResultMessage = "";
//若预报是批次预报PREDICTION_TYPE 0:批次预报;1:单次预报;2:联运预报;3:分检预报,需验证预报类型USED_TYPE 0:次数;1:时间;2:总量
//一次计量类型为次数时,验证EFFECTIVE_NUM-METER_NUM>0,服务端每结净一次++METER_NUM
//一次计量类型为时间时,验证当前时间在EFFECTIVE_START_TIME、EFFECTIVE_END_TIME范围内即可
//一次计量类型为总量时,验证EFFECTIVE_WEIGHT-METER_WEIGHT>0,服务端每次结净一次METER_WEIGHT+净重
//一次计量时若预报是分检预报,验证EFFECTIVE_NUM-METER_NUM>0,服务端每结净一次++METER_NUM
//一次计量时不是批次预报,则只要有效即可
PreTrackScaleService mwmss = new PreTrackScaleService();
RESTfulResult> rm = mwmss.doQueryWf(new PreTrackScale { predictionNo = scale.predictionNo });
if (!rm.Succeed)
{
ResultMessage = "未找到有效预报!";
PbCache.ResultMessage = "获取预报信息异常:" + rm.ResultMessage;
}
else
{
if (rm.Data == null || rm.Data.Count == 0)
{
ResultMessage = "【"+ scale.predictionNo + "】未找到有效预报";
}
else
{
switch (rm.Data[0].valueFlag)
{
case "0": //未配车
ResultMessage = "【" + scale.predictionNo + "】,未找到有效预报,请先进行配车操作!";
break;
case "1": //未使用,说明是一次计量
{
if (rm.Data[0].predictionType == "0") //0:批次预报
{
if (rm.Data[0].usedType == "0") //0:次数;
{
if (rm.Data[0].effectiveNum - rm.Data[0].meterNum > 0)
{
flag = true;
}
else
{
ResultMessage = "计量预报已经使用";//该预报检斤次数已用完,无法继续使用
PbCache.ResultMessage = "预报【" + scale.predictionNo + "】检斤次数已用完,无法继续使用";
}
}
else if (rm.Data[0].usedType == "1") //1:时间;
{
if (rm.Data[0].effectiveStartTime <= DateTime.Now && DateTime.Now <= rm.Data[0].effectiveEndTime)
{
flag = true;
}
else
{
ResultMessage = "计量预报已经过期";
PbCache.ResultMessage = "计量预报【" + scale.predictionNo + "】已经过期";
}
}
else if (rm.Data[0].usedType == "2") //2:总量
{
if (rm.Data[0].effectiveWeight > rm.Data[0].meterWeight)
{
flag = true;
}
else
{
ResultMessage = "计量预报已经使用";//
PbCache.ResultMessage = "预报【" + scale.predictionNo + "】有效重量已用完,无法继续使用";
}
}
}
else if (rm.Data[0].predictionType == "1" || rm.Data[0].predictionType == "2") //1:单次预报;2:联运预报
{
flag = true;
}
else if (rm.Data[0].predictionType == "3") //3:分检预报
{
if (rm.Data[0].effectiveNum - rm.Data[0].meterNum > 0)
{
flag = true;
}
else
{
ResultMessage = "计量预报已经使用";//该预报检斤次数已用完,无法继续使用
PbCache.ResultMessage = "预报检斤【" + scale.predictionNo + "】次数已用完,无法继续使用";
}
}
else
{
ResultMessage = "未找到有效预报";
PbCache.ResultMessage = string.Format("没有预报类型为【{0}】的逻辑", rm.Data[0].predictionType);
}
};
break;
case "2":
ResultMessage = "计量预报已经使用";//
PbCache.ResultMessage = "计量预报【" + scale.predictionNo + "】已经使用";
//flag = true;
break;
case "3":
ResultMessage = "计量预报已经过期";
PbCache.ResultMessage = "该预报【" + scale.predictionNo + "】已作废";
break;
case "4": //正使用 //已使用,则不验证,因为一次计量的时候会验证一次
flag = true;
//ResultMessage = "计量预报已经使用";//
//PbCache.ResultMessage = "计量预报已经使用";
break;
}
}
}
return flag;
}
}
}