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; } } }