using com.hnshituo.core.webapp.vo; using Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MeterSceneLibrary.JISCO { public class SaveMethod { // 一次计量数据 private MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService(); // 车辆委托表 private PreTrackScaleService preTrackScaleService = new PreTrackScaleService(); // 留期限皮操作 private MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService(); private rtInfo rt = new rtInfo(); // 结净最小值,默认取配置文件 private double diffrentWgt = AppConfigCache.differenceWgt; // 根据车号查询委托表中未使用和使用中的委托 private List listPreScale; #region 私有方法 /// /// 保存一次计量数据 /// public rtInfo doAddFirst(PreTrackScale scale,MeterWorkCarActualFirst model) { if(scale != null) { EntityBase entityBase = new EntityBase(); model = entityBase.format(scale, model); } //操作日志 MeterMonitorNote monitorNote = new MeterMonitorNote(); monitorNote.baseSpotNo = model.baseSpotNo; monitorNote.baseSpotName = model.baseSpotName; monitorNote.operationContent = string.Format("产生一次计量数据"); monitorNote.operationTime = model.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); monitorNote.carNo = model.carNo; monitorNote.meterNoteSource = "0"; PbSomeModel pbSomeModel = new PbSomeModel(); pbSomeModel.one = model; pbSomeModel.two = monitorNote; RESTfulResult rmI = mwcfs.doAdd(pbSomeModel); if (rmI.Succeed) { rt.result = true; rt.resultInfo = "称重完成"; PbCache.actualFirstNo = rmI.Data; PbCache.strQRCode = rmI.Message; PbCache.isTareWeight = false;//毛重 } else { rt.result = false; rt.isError = true; rt.resultInfo = "称重数据保存失败"; } return rt; } /// /// 产生一次计量数据和没有委托的洁净数据 /// /// /// public rtInfo doNet(PreTrackScale scale, MeterWorkCarActualFirst actualFirst, MeterWorkCarActualFirst actualFirst2) { // 构造结净数据 MeterWorkCarActual netDb = new MeterWorkCarActual(); // 将第一个一次数据状态改为 已结净 //actualFirst.valueFlag = "2"; // 复制对象 if (scale != null) { EntityBase entityBase = new EntityBase(); netDb = entityBase.format(scale, netDb); } netDb.carNo = actualFirst.carNo; netDb.tareTime = DateTime.Now; netDb.tareWeight = actualFirst.meterWeight.Value < PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁小谁是皮 BourneCao netDb.baseSpot2No = PbCache.sportInfo.baseSpotNo; netDb.baseSpot2Name = PbCache.sportInfo.baseSpotName; netDb.tareMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 /* netDb.tare_man_no = ""; netDb.tare_man_name = ""; netDb.tare_class = ""; netDb.tare_group = "";*/ // 毛重计量作业编号 // netDb.actualFirst1No = actualFirst.meterWeight.Value > PbCache.lockWgt ? actualFirst.actualFirstNo : actualFirst2.actualFirstNo; // 皮重计量作业编号 // netDb.actualFirst2No = actualFirst.meterWeight.Value < PbCache.lockWgt ? actualFirst.actualFirstNo : actualFirst2.actualFirstNo; netDb.grossTime = actualFirst.createTime; netDb.grossWeight = actualFirst.meterWeight.Value > PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁大谁是毛 BourneCao netDb.baseSpot1No = actualFirst.baseSpotNo; netDb.baseSpot1Name = actualFirst.baseSpotName; netDb.grossMode = "2"; // 1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 netDb.grossManNo = actualFirst.createManNo; netDb.grossManName = actualFirst.createManName; netDb.grossClass = actualFirst.meterClass; netDb.grossGroup = actualFirst.meterGroup; netDb.valueFlag = "2"; netDb.netTime = DateTime.Now; //netDb.netManNo = appUser.userid; //净重计量员编码 //netDb.netManName = appUser.username; //净重计量员名称 netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号 netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点 netDb.addWeight = (actualFirst.addWeight == null ? 0 : actualFirst.addWeight.Value); //净重=毛-皮-附加重量 netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight; netDb.netMode = "1"; //1:正常结净;2:匹配结净 netDb.valueFlag = "0"; //0=有效,1=作废 netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传 //要判断下当前是否勾选了不验证皮重 //操作日志 MeterMonitorNote monitorNote = new MeterMonitorNote(); monitorNote.baseSpotNo = actualFirst2.baseSpotNo; monitorNote.baseSpotName = actualFirst2.baseSpotName; monitorNote.operationContent = string.Format("产生一次计量数据和没有委托的洁净数据"); monitorNote.operationTime = actualFirst2.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); monitorNote.carNo = actualFirst2.carNo; monitorNote.meterNoteSource = "0"; // 保存结净记录,后续改成统一提交模式 BourneCao MeterWorkCarActualService actualService = new MeterWorkCarActualService(); actualService.doAddNet(actualFirst, actualFirst2, netDb, monitorNote, "0"); return rt; } /// /// 混装/混卸保存逻辑 /// /// 委托数据 /// 自动创建的一次计量数据 /// 本次一次计量数据 public rtInfo doNetHZHX(PreTrackScale scale, MeterWorkCarActualFirst actualFirst, MeterWorkCarActualFirst actualFirst2) { // 构造结净数据 MeterWorkCarActual netDb = new MeterWorkCarActual(); // 复制委托 if (scale != null) { EntityBase entityBase1 = new EntityBase(); actualFirst = entityBase1.format(scale, actualFirst); EntityBase entityBase2 = new EntityBase(); actualFirst2 = entityBase2.format(scale, actualFirst2); EntityBase entityBase3 = new EntityBase(); netDb = entityBase3.format(scale, netDb); } netDb.carNo = actualFirst.carNo; netDb.tareTime = DateTime.Now; netDb.tareWeight = actualFirst.meterWeight.Value < actualFirst2.meterWeight.Value ? actualFirst.meterWeight.Value : actualFirst2.meterWeight.Value; // 谁小谁是皮 BourneCao netDb.baseSpot2No = PbCache.sportInfo.baseSpotNo; netDb.baseSpot2Name = PbCache.sportInfo.baseSpotName; netDb.tareMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 /* netDb.tare_man_no = ""; netDb.tare_man_name = ""; netDb.tare_class = ""; netDb.tare_group = "";*/ netDb.actualFirst1No = actualFirst.meterWeight.Value > actualFirst2.meterWeight.Value ? actualFirst.actualFirstNo : actualFirst2.actualFirstNo; netDb.actualFirst2No = actualFirst.meterWeight.Value < actualFirst2.meterWeight.Value ? actualFirst.actualFirstNo : actualFirst2.actualFirstNo; netDb.grossTime = actualFirst.createTime; netDb.grossWeight = actualFirst.meterWeight.Value > actualFirst2.meterWeight.Value ? actualFirst.meterWeight.Value : actualFirst2.meterWeight.Value; // 谁大谁是毛 BourneCao netDb.baseSpot1No = actualFirst.baseSpotNo; netDb.baseSpot1Name = actualFirst.baseSpotName; netDb.grossMode = "2"; // 1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 netDb.grossManNo = actualFirst.createManNo; netDb.grossManName = actualFirst.createManName; netDb.grossClass = actualFirst.meterClass; netDb.grossGroup = actualFirst.meterGroup; netDb.valueFlag = "3"; netDb.netTime = DateTime.Now; //netDb.netManNo = appUser.userid; //净重计量员编码 //netDb.netManName = appUser.username; //净重计量员名称 netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号 netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点 netDb.addWeight = (actualFirst.addWeight == null ? 0 : actualFirst.addWeight.Value); //净重=毛-皮-附加重量 netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight; netDb.netMode = "1"; //1:正常结净;2:匹配结净 netDb.valueFlag = "0"; //0=有效,1=作废 netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传 //要判断下当前是否勾选了不验证皮重 //操作日志 MeterMonitorNote monitorNote = new MeterMonitorNote(); monitorNote.baseSpotNo = actualFirst2.baseSpotNo; monitorNote.baseSpotName = actualFirst2.baseSpotName; monitorNote.operationContent = string.Format("混装/混卸保存逻辑"); monitorNote.operationTime = actualFirst2.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); monitorNote.carNo = actualFirst2.carNo; monitorNote.meterNoteSource = "0"; // 保存结净记录,后续改成统一提交模式 BourneCao MeterWorkCarActualService actualService = new MeterWorkCarActualService(); actualService.doAddNetHZHX(actualFirst2, actualFirst, netDb, monitorNote, "0"); return rt; } /// /// 产生一次计量数据,同时结净并匹配委托 /// /// /// public rtInfo doNetAndScale(PreTrackScale scale, MeterWorkCarActualFirst actualFirst, MeterWorkCarActualFirst actualFirst2) { // 构造结净数据 MeterWorkCarActual netDb = new MeterWorkCarActual(); // 复制对象 if (scale != null) { EntityBase entityBase = new EntityBase(); netDb = entityBase.format(scale, netDb); } netDb.tareTime = DateTime.Now; netDb.tareWeight = actualFirst.meterWeight.Value < PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁小谁是皮 BourneCao netDb.baseSpot2No = PbCache.sportInfo.baseSpotNo; netDb.baseSpot2Name = PbCache.sportInfo.baseSpotName; netDb.tareMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 /* netDb.tare_man_no = ""; netDb.tare_man_name = ""; netDb.tare_class = ""; netDb.tare_group = "";*/ netDb.actualFirst1No = actualFirst.actualFirstNo; netDb.actualFirst2No = actualFirst.actualFirstNo; netDb.grossTime = actualFirst.createTime; netDb.grossWeight = actualFirst.meterWeight.Value > PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁大谁是毛 BourneCao netDb.baseSpot1No = actualFirst.baseSpotNo; netDb.baseSpot1Name = actualFirst.baseSpotName; netDb.grossMode = "2"; // 1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 netDb.grossManNo = actualFirst.createManNo; netDb.grossManName = actualFirst.createManName; netDb.grossClass = actualFirst.meterClass; netDb.grossGroup = actualFirst.meterGroup; netDb.valueFlag = "1"; netDb.netTime = DateTime.Now; //netDb.netManNo = appUser.userid; //净重计量员编码 //netDb.netManName = appUser.username; //净重计量员名称 netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号 netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点 netDb.addWeight = (actualFirst.addWeight == null ? 0 : actualFirst.addWeight.Value); //净重=毛-皮-附加重量 netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight; netDb.netMode = "1"; //1:正常结净;2:匹配结净 netDb.valueFlag = "0"; //0=有效,1=作废 netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传 //要判断下当前是否勾选了不验证皮重 // 保存结净记录,后续改成统一提交模式 BourneCao return rt; } /// /// 产生一次计量数据,同时结净并匹配委托(多委托) /// /// /// public rtInfo doNetAddTwo(PreTrackScale scale, MeterWorkCarActualFirst actualFirst) { // 构造结净数据 MeterWorkCarActual netDb = new MeterWorkCarActual(); // 复制对象 if (scale != null) { EntityBase entityBase = new EntityBase(); netDb = entityBase.format(scale, netDb); } netDb.tareTime = DateTime.Now; netDb.tareWeight = actualFirst.meterWeight.Value < PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁小谁是皮 BourneCao netDb.baseSpot2No = PbCache.sportInfo.baseSpotNo; netDb.baseSpot2Name = PbCache.sportInfo.baseSpotName; netDb.tareMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 /* netDb.tare_man_no = ""; netDb.tare_man_name = ""; netDb.tare_class = ""; netDb.tare_group = "";*/ netDb.actualFirst1No = actualFirst.actualFirstNo; netDb.grossTime = actualFirst.createTime; netDb.grossWeight = actualFirst.meterWeight.Value > PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁大谁是毛 BourneCao netDb.baseSpot1No = actualFirst.baseSpotNo; netDb.baseSpot1Name = actualFirst.baseSpotName; netDb.grossMode = "2"; // 1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 netDb.grossManNo = actualFirst.createManNo; netDb.grossManName = actualFirst.createManName; netDb.grossClass = actualFirst.meterClass; netDb.grossGroup = actualFirst.meterGroup; netDb.netTime = DateTime.Now; //netDb.netManNo = appUser.userid; //净重计量员编码 //netDb.netManName = appUser.username; //净重计量员名称 netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号 netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点 netDb.addWeight = (actualFirst.addWeight == null ? 0 : actualFirst.addWeight.Value); //净重=毛-皮-附加重量 netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight; netDb.netMode = "1"; //1:正常结净;2:匹配结净 netDb.valueFlag = "0"; //0=有效,1=作废 netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传 //要判断下当前是否勾选了不验证皮重 // 保存结净记录,后续改成统一提交模式 BourneCao return rt; } /// /// 一车多卸 /// a. 取第一条委托正常洁净产生一条净重记录 /// b.并自动生成一条一次毛重计量数据并和第二条委托匹配,重量值为当次计量数据中的毛重 /// /// /// public rtInfo doNetMass(PreTrackScale scale, MeterWorkCarActualFirst actualFirst) { // 构造结净数据 MeterWorkCarActual netDb = new MeterWorkCarActual(); // 复制对象 if (scale != null) { EntityBase entityBase = new EntityBase(); netDb = entityBase.format(scale, netDb); } netDb.tareTime = DateTime.Now; netDb.tareWeight = actualFirst.meterWeight.Value < PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁小谁是皮 BourneCao netDb.baseSpot2No = PbCache.sportInfo.baseSpotNo; netDb.baseSpot2Name = PbCache.sportInfo.baseSpotName; netDb.tareMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 /* netDb.tare_man_no = ""; netDb.tare_man_name = ""; netDb.tare_class = ""; netDb.tare_group = "";*/ netDb.actualFirst1No = actualFirst.actualFirstNo; netDb.grossTime = actualFirst.createTime; netDb.grossWeight = actualFirst.meterWeight.Value > PbCache.lockWgt ? actualFirst.meterWeight.Value : PbCache.lockWgt; // 谁大谁是毛 BourneCao netDb.baseSpot1No = actualFirst.baseSpotNo; netDb.baseSpot1Name = actualFirst.baseSpotName; netDb.grossMode = "2"; // 1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配 netDb.grossManNo = actualFirst.createManNo; netDb.grossManName = actualFirst.createManName; netDb.grossClass = actualFirst.meterClass; netDb.grossGroup = actualFirst.meterGroup; netDb.netTime = DateTime.Now; //netDb.netManNo = appUser.userid; //净重计量员编码 //netDb.netManName = appUser.username; //净重计量员名称 netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号 netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点 netDb.addWeight = (actualFirst.addWeight == null ? 0 : actualFirst.addWeight.Value); //净重=毛-皮-附加重量 netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight; netDb.netMode = "1"; //1:正常结净;2:匹配结净 netDb.valueFlag = "0"; //0=有效,1=作废 netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传 //要判断下当前是否勾选了不验证皮重 // 保存结净记录,后续改成统一提交模式 BourneCao return rt; } public rtInfo validHisTare() { // 查询当前秤点是否启用历史皮重判断(暂时不考虑此限制)By BourneCao //String spotNo = PbCache.sportInfo.baseSpotNo; /* 判断当前重量是否满足历史皮重相应限制 */ // 读取车辆历史皮重信息 List validHis = getHisTare(PbCache.lockCarNo); // 读取历史皮重计算配置 MeterBaseHisTareCount hisTareCount = PbCache.tareCount; // 没有历史皮重记录,相关操作都可跳过 if (validHis.Count >= 1) { double maxWgt = 0, minWgt = 0, wgt = PbCache.lockWgt; if (hisTareCount.countTypeNo == "001011001") //固重 当前重量>=历史皮重-固重 当前重量<=历史皮重+固重 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? validHis[0].upWeight.Value : validHis[0].meterWeight.Value); maxWgt = meterWeight + hisTareCount.fixedWeightValue.Value; minWgt = meterWeight - hisTareCount.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】,偏差最大允许重量为【" + hisTareCount.fixedWeightValue.Value + "kg】"; } } else if (hisTareCount.countTypeNo == "001011002") //比例 当前重量>=历史皮重-历史皮重*比例 当前重量<=历史皮重+历史皮重*比例 { long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? validHis[0].upWeight.Value : validHis[0].meterWeight.Value); maxWgt = meterWeight + meterWeight * (hisTareCount.rateValue.Value / 100); //历史皮重+历史皮重*比例 minWgt = meterWeight - meterWeight * (hisTareCount.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】,偏差最大允许比例值为【" + hisTareCount.fixedWeightValue.Value + "%】"; } } else { PbCache.monitorResult.valid_wgt = false; PbCache.ResultMessage = string.Format("未找到历史皮重计算类型{0}配置数据", hisTareCount.countTypeNo); } } else { PbCache.monitorResult.valid_wgt = true; } return rt; } public List getHisTare(string carNo) { List lmhtd = new List(); PbCache.monitorResult.haveHisTare = false;//不存在历史皮 MeterBaseHisTareDataService mbtds = new MeterBaseHisTareDataService(); RESTfulResult> rm = mbtds.doQueryWf(new MeterBaseHisTareData { valueFlag = "0", carNo = 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; } public rtInfo doTermTareData() { MeterBaseTermTareData mbttd = new MeterBaseTermTareData(); mbttd.baseSpotNo = PbCache.sportInfo.baseSpotNo; mbttd.baseSpotName = PbCache.sportInfo.baseSpotName; mbttd.carNo = PbCache.collect.carno; mbttd.meterWeight = PbCache.lockWgt; mbttd.valueFlag = "0"; mbttd.createTime = DateTime.Now; mbttd.createManNo = PbCache.sportInfo.baseSpotNo; mbttd.createManName = PbCache.sportInfo.baseSpotName; mbttd.meterTime = mbttd.createTime.Value; mbttd.startTime = mbttd.createTime.Value; //操作日志 MeterMonitorNote monitorNote = new MeterMonitorNote(); monitorNote.baseSpotNo = mbttd.baseSpotNo; monitorNote.baseSpotName = mbttd.baseSpotName; monitorNote.operationContent = string.Format("保存期限皮重"); monitorNote.operationTime = mbttd.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); monitorNote.carNo = mbttd.carNo; monitorNote.meterNoteSource = "0"; //期限皮重数据保存 RESTfulResult RESTfulResult = termTareDate.doSaveWf(mbttd, monitorNote); rt.result = true; rt.isError = false; rt.resultInfo = "期限皮重保存成功"; return rt; } /// /// 失败执行逻辑 /// public rtInfo doError(string msg) { rt.result = false; rt.isError = true; rt.resultInfo = "计量失败:" + msg; return rt; } #endregion } }