using com.hnshituo.core.webapp.vo;
using Common;
using Common.DbOption.work;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MeterSceneLibrary
{
///
/// 酒钢厂内车辆计量业务
///
public class InnerCarJISCO
{
// 一次计量数据
private MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService();
// 重量类型预处理表
private MeterWorkPreWgttypeService wgttypeService = new MeterWorkPreWgttypeService();
// 车辆委托表
private PreTrackScaleService preTrackScaleService = new PreTrackScaleService();
// 留期限皮操作
private MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService();
private rtInfo rt = new rtInfo();
// 构建一次计量数据
private MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
// 结净最小值,默认取配置文件
private double diffrentWgt = AppConfigCache.differenceWgt;
// 根据车号查询委托表中未使用和使用中的委托
private List listPreScale;
private JISCO.SaveMethod saveMethod = new JISCO.SaveMethod();
public rtInfo MeterMethod(PreTrackScale scale)
{
Log lg = Log.GetInstance();
rt.isError = false;
string ResultMessage = "";
bool isError = false;
mwaf.carNo = PbCache.lockCarNo;
mwaf.weightType = ""; // 默认重量类型为空
mwaf.actualFirstNo = DateTime.Now.ToString("yyyyMMdd");//10
mwaf.meterWeight = PbCache.lockWgt;//计量重量
mwaf.addWeight = PbCache.addWgt;//附加重量
mwaf.createManNo = PbCache.sportInfo.baseSpotNo;
mwaf.createManName = PbCache.sportInfo.baseSpotName;
mwaf.meterGroup = "";
mwaf.meterClass = "";
mwaf.createManNo = "SYSTEM";
mwaf.createManName = "system";
mwaf.createTime = DateTime.Now;
mwaf.baseSpotNo = PbCache.sportInfo.baseSpotNo;//计量点编号
mwaf.baseSpotName = PbCache.sportInfo.baseSpotName;
//mwaf.memo = "";
mwaf.valueFlag = "3"; //状态(0 = 作废,1 = 有效(已匹配),2 = 结净,3 = 未匹配)
mwaf.updateManName = "";
mwaf.updateManNo = "";
mwaf.updateTime = null;
mwaf.checkFlag = "1"; //0未审核,1已审核
mwaf.meterMode = "2"; //1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
mwaf.addWeight = PbCache.addWgt;
mwaf.dataSource = "1"; //数据来源(1=智能终端,2=本地计量,3=应急计量,4=手动录入(计量票据录入))
// 根据车号查询重量类型预处理表
RESTfulResult> rmX = wgttypeService.doQueryWf(new MeterWorkPreWgttype { carNo = PbCache.lockCarNo, valueFlag = "1" });
// 不存在未使用的重量类型数据
if (rmX.Succeed)
{
List list = rmX.Data;
// 不存在一次预处理数据
if (list == null || list.Count == 0)
{
/* a. 程序报警
* b. 自动进行语音求助
*/
rt = saveMethod.doError("没有重量类型预处理数据,请联系计量大厅");
}
// 存在一条预处理数据
else if (list == null || list.Count == 1)
{
// 查已选择的委托
RESTfulResult> rmScale = preTrackScaleService.doQueryByFlag(new PreTrackScale { carNo = PbCache.lockCarNo, lineDesc = "1" });
if (rmScale.Succeed && rmScale.Data.Count == 1)
{
// 重量类型为期限皮重
if (list[0].weightTypeNo == "001033003")
{
// 判断这个车是否有留存期限皮重的权限
MeterBaseTermTareCarService meterBaseTermTareCarService = new MeterBaseTermTareCarService();
RESTfulResult> tareCarResult = meterBaseTermTareCarService.doQueryWf(new MeterBaseTermTareCar { carNo = PbCache.lockCarNo, valueFlag = "0" });
if (tareCarResult.Succeed)
{
// 没有期限皮重权限
if (tareCarResult.Data == null || tareCarResult.Data.Count == 0)
{
rt = saveMethod.doError("该车辆没有期限皮重权限,请联系计量大厅");
}
// 有期限皮重权限
else if (tareCarResult.Data.Count >= 1)
{
// 正常保存期限皮重
rt = saveMethod.doTermTareData();
}
}
}
// 重量类型为普通毛重/皮重
else if (list[0].weightTypeNo == "001033001" || list[0].weightTypeNo == "001033002")
{
// 查询一次计量数据表
RESTfulResult> rmFirst = mwcfs.doQueryByFlag(new MeterWorkCarActualFirst { carNo = PbCache.lockCarNo });
if (rmX.Succeed)
{
List firstList = rmFirst.Data;
// 不存在有效的一次计量数据
if (firstList == null || firstList.Count == 0)
{
// 历史皮重验证
rt = saveMethod.validHisTare();
// 重量类型为皮重且在皮重误差内
if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == true)
{
/*sds
* a. 正常保存重量匹配委托
* b. 提示称重完成
*/
rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
}
// 重量类型为皮重且在皮重误差外
else if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == false)
{
rt = saveMethod.doError(PbCache.ResultMessage);
}
// 重量类型为毛重,在皮重误差内
else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == true)
{
rt = saveMethod.doError("当次重量类型为毛重,在皮重误差内");
}
// 重量类型为毛重,不在皮重误差内
else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == false)
{
// 判断车辆是否具有期限皮重权限
MeterBaseTermTareCarService meterBaseTermTareCarService = new MeterBaseTermTareCarService();
RESTfulResult> tareCarResult = meterBaseTermTareCarService.doQueryWf(new MeterBaseTermTareCar { carNo = PbCache.lockCarNo, valueFlag = "0" });
if (tareCarResult.Succeed)
{
// 没有期限皮重权限
if (tareCarResult.Data.Count == 0)
{
rt = saveMethod.doError("该车辆没有期限皮重权限,请联系计量大厅");
}
// 有期限皮重权限
else if (tareCarResult.Data.Count >= 1)
{
//查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重
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='" + rmScale.Data[0].matterNo + @"'
and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + rmScale.Data[0].meterTypeNo + @"'";
PbModelDbService> pbp = new PbModelDbService>();
RESTfulResult> rmT = pbp.executeSqlDataWf(sqls);
if (rmT.Succeed)
{
if (rmT.Data != null && rmT.Data.Count > 0)
{
// 存在使用期限皮重权限,并使用期限皮重洁净
//给一次数据匹配委托
EntityBase entityBase1 = new EntityBase();
mwaf = entityBase1.format(rmScale.Data[0], mwaf);
mwaf.isPreScale = "1";
rt = saveMethod.doNetTermTare(rmScale.Data[0], mwaf);
}
else
{
// 只保存一次计量数据
rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
}
}
}
}
}
}
// 只存在一条有效的一次计量数据
else if (firstList == null || firstList.Count == 1)
{
// 读结净最小值配置
ComBaseInfoService cbis = new ComBaseInfoService();
RESTfulResult> res = cbis.doQueryBaseList(new ComBaseInfo { baseCode = "001031001" });
if (res.Succeed)
{
if (res.Data != null && res.Data.Count == 1)
{
try
{
diffrentWgt = Double.Parse(res.Data[0].baseName);
}
finally
{
}
}
}
// 当次重量和上次重量满足洁净最小值条件
if (Math.Abs(rmFirst.Data[0].meterWeight.Value - PbCache.lockWgt) > diffrentWgt)
{
// 查询当前秤点是否启用历史皮重判断(暂时不考虑此限制)By BourneCao
// String spotNo = PbCache.sportInfo.baseSpotNo;
// 历史皮重验证
rt = saveMethod.validHisTare();
// 重量类型为皮重且在皮重误差内,正常结净
if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == true)
{
// 正常结净
//给一次数据匹配委托
EntityBase entityBase1 = new EntityBase();
mwaf = entityBase1.format(rmScale.Data[0], mwaf);
mwaf.isPreScale = "1";
rt = saveMethod.doNet(rmScale.Data[0], firstList[0], mwaf);
}
// 重量类型为皮重且不在皮重误差内
else if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == false)
{
rt = saveMethod.doError(PbCache.ResultMessage);
}
// 重量类型为毛重,不在皮重误差内,正常结净
else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == false)
{
if (firstList[0].weightType == "0")
{
rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
}
else
{
// 正常结净
//给一次数据匹配委托
EntityBase entityBase1 = new EntityBase();
mwaf = entityBase1.format(rmScale.Data[0], mwaf);
mwaf.isPreScale = "1";
rt = saveMethod.doNet(rmScale.Data[0], firstList[0], mwaf);
}
}
// 重量类型为毛重,在皮重误差内
else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == true)
{
rt = saveMethod.doError(PbCache.ResultMessage);
}
}
else
{
rt = saveMethod.doError("第一次计量重量【" + rmFirst.Data[0].meterWeight.Value / 1000 + "T】和第二次计量重量【" + PbCache.lockWgt / 1000 + "T】接近,小于结净最小值【" + diffrentWgt / 1000 + " T】");
}
}
// 存在多条有效的一次计量数据
else if (firstList == null || firstList.Count > 1)
{
/* a. 程序报警a
* b. 自动进行语音求助
*/
//多条一次记录下判断是否全为毛重,是全部结净
if (firstList[firstList.Count-1].weightType == "0" && list[0].weightTypeNo == "001033002")
{
//给一次数据匹配委托
EntityBase entityBase = new EntityBase();
mwaf = entityBase.format(rmScale.Data[0], mwaf);
mwaf.isPreScale = "1";
rt = saveMethod.doNetAddMuch(mwaf);
}
else
{
rt = saveMethod.doError("存在多条有效的一次计量数据,请联系计量大厅");
}
}
}
}
}
else
{
rt = saveMethod.doError("没有已选择的委托,请联系计量大厅");
}
}
}
return rt;
}
}
}