FirstTareSecondlyGross.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. using com.hnshituo.core.webapp.vo;
  2. using Common;
  3. using MeterConditionLibrary;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace MeterSceneLibrary
  8. {
  9. /// <summary>
  10. /// 先皮后毛
  11. /// </summary>
  12. public class FirstTareSecondlyGross
  13. {
  14. private validTermTareCar termTareCar = new validTermTareCar();//验证是否可留期限皮
  15. private MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService();//期限皮操作
  16. public rtInfo MeterMethod(PreTrackScale scale, CoreAppUser appUser, RESTfulResult<List<MeterWorkPreLink>> rmDb)
  17. {
  18. rtInfo rt = new rtInfo();
  19. rt.isError = false;
  20. //0:批次预报;1:单次预报;2:联运预报;3:分检预报
  21. if (scale.predictionType == "2")
  22. {
  23. rt.result = false;
  24. rt.isError = false;
  25. return rt;
  26. }
  27. RESTfulResult<List<MeterWorkPreLink>> rm = rmDb;
  28. //如果配置了则走下面的流程
  29. //如果存在一次计量未结净数据,则认为是结净计量,否则认为一次计量
  30. MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService();
  31. RESTfulResult<List<MeterWorkCarActualFirst>> rmX = mwcfs.doQueryWf(new MeterWorkCarActualFirst { valueFlag = "1", predictionNo = scale.predictionNo, carNo = scale.carNo });
  32. if (!rmX.Succeed)
  33. {
  34. rt.result = false;
  35. rt.resultInfo = "没有计量信息点语音求助";
  36. PbCache.ResultMessage = "获取一次计量数据异常!";
  37. rt.isError = true;
  38. }
  39. if (rm.Data[0].linkCode == "001021003") //计量环节为 一次计量 计量场景为先皮后毛
  40. {
  41. if (rmX.Data != null && rmX.Data.Count > 0)
  42. {
  43. rt.resultInfo = "已存在一次计量数据";
  44. PbCache.ResultMessage = "当前计量环节为【" + rm.Data[0].linkName + "】,但已存在已存在一次计量数据,不允许进行计量操作!";
  45. rt.result = false;
  46. rt.isError = true;
  47. }
  48. else
  49. {
  50. //验证两次计量时间间隔
  51. validTimeInterval vti = new validTimeInterval();
  52. vti.ValidMethod(scale, "2", null);
  53. if (!PbCache.monitorResult.valid_time_interval)
  54. {
  55. rt.result = false;
  56. rt.isError = true;
  57. rt.resultInfo = PbCache.ResultMessage;
  58. return rt;
  59. }
  60. //验证当前皮重是否符合要求;不符合则验证是否能够使用期限皮重计量;再验证是否使用历史皮重
  61. validWgt vw = new validWgt();
  62. vw.ValidNotInnerMethod(scale);
  63. if (PbCache.monitorResult.valid_wgt)
  64. {
  65. //期限皮重业务是否能够保存验证;若为true,则不允许进行普通皮重保存
  66. if (termTareCar.ValidMethodThree(scale))
  67. {
  68. rt.result = false;
  69. rt.isError = true;
  70. rt.resultInfo = "不允许进行普通皮重保存";
  71. //PbCache.ResultMessage = "不允许进行普通皮重保存!"; //在ValidMethodThree方法里面有处理了
  72. return rt;
  73. }
  74. //保存皮重信息***********************
  75. MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  76. //相同名称的均赋值一次
  77. EntityBase<PreTrackScale> entityBase = new EntityBase<PreTrackScale>();
  78. mwaf = entityBase.format<MeterWorkCarActualFirst>(scale, mwaf);
  79. mwaf.actualFirstNo = DateTime.Now.ToString("yyyyMMdd");//10
  80. mwaf.meterWeight = PbCache.lockWgt;//计量重量
  81. //mwaf.addWeight = 0;//附加重量
  82. mwaf.weightType = "1"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  83. mwaf.createManNo = appUser.userid;
  84. mwaf.createManName = appUser.username;
  85. mwaf.meterGroup = appUser.userGroup;
  86. mwaf.meterClass = appUser.userClass;
  87. mwaf.createTime = DateTime.Now;
  88. mwaf.baseSpotNo = PbCache.sportInfo.baseSpotNo;//计量点编号
  89. mwaf.baseSpotName = PbCache.sportInfo.baseSpotName;
  90. //mwaf.memo = "";
  91. mwaf.valueFlag = "1"; //0有效
  92. mwaf.updateManName = "";
  93. mwaf.updateManNo = "";
  94. mwaf.updateTime = null;
  95. mwaf.checkFlag = "0"; //0未审核
  96. mwaf.meterMode = string.IsNullOrEmpty(appUser.userid) ? "2" : "1"; //1远程计量,2智能计量
  97. mwaf.addWeight = PbCache.addWgt;
  98. MeterWorkPreLink mwpl = new MeterWorkPreLink();
  99. mwpl.preLinkNo = rm.Data[0].preLinkNo;
  100. mwpl.preProcessNo = rm.Data[0].preProcessNo;
  101. //操作日志
  102. MeterMonitorNote monitorNote = new MeterMonitorNote();
  103. monitorNote.baseSpotNo = mwaf.baseSpotNo;
  104. monitorNote.baseSpotName = mwaf.baseSpotName;
  105. monitorNote.operationContent = string.Format("称重保存");
  106. monitorNote.operationTime = mwaf.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  107. monitorNote.carNo = mwaf.carNo;
  108. monitorNote.meterNoteSource = string.IsNullOrEmpty(appUser.userid) ? "0" : "4";
  109. monitorNote.meterManNo = appUser.userid;
  110. monitorNote.meterManName = appUser.username;
  111. RESTfulResult<string> rmI = mwcfs.doAddWf(mwaf, mwpl, monitorNote, "", "1");
  112. if (rmI.Succeed)
  113. {
  114. rt.result = true;
  115. rt.resultInfo = "称重完成";
  116. PbCache.ResultMessage = "称重完成";
  117. PbCache.actualFirstNo = rmI.Data;
  118. PbCache.strQRCode = rmI.Message;
  119. PbCache.isTareWeight = true;//皮重
  120. RESTfulResult<string> RESTfulResult = termTareDate.abolishForCSharp(new MeterBaseTermTareData { carNo = mwaf.carNo });
  121. if (RESTfulResult.Succeed)
  122. {
  123. if (!string.IsNullOrEmpty(RESTfulResult.Message))
  124. {
  125. PbCache.ResultMessage = PbCache.ResultMessage + ";请注意期限皮重已作废";
  126. }
  127. }
  128. else
  129. {
  130. PbCache.ResultMessage = PbCache.ResultMessage + ";但作废期限皮重异常,请点击【语音求助】联系计量员";
  131. }
  132. }
  133. else
  134. {
  135. rt.result = false;
  136. rt.isError = true;
  137. rt.resultInfo = "称重数据保存失败";
  138. PbCache.ResultMessage = "计量失败:" + rmI.ResultMessage;
  139. }
  140. }
  141. else
  142. {
  143. //如果存在历史皮,且重量不符合皮重,但是又不到毛重的重量,此时没法计量毛重跟皮重,提示皮重信息异常
  144. if (PbCache.monitorResult.haveHisTare)
  145. {
  146. long meterWeight = (PbCache.tareCount.contrastTypeNo == "001012001" ? PbCache.monitorResult.hisTareData[0].upWeight.Value : PbCache.monitorResult.hisTareData[0].avgWeight.Value);
  147. double maxWgt = 0, rateV = 0;
  148. if (PbCache.tareCount.countTypeNo == "001011002") //按比例
  149. {
  150. if (PbCache.tareCount.rateValue != null)
  151. {
  152. rateV = PbCache.tareCount.rateValue.Value / 100;
  153. }
  154. maxWgt = meterWeight * (1 + rateV);
  155. }
  156. else //固重
  157. {
  158. maxWgt = meterWeight + (PbCache.tareCount.fixedWeightValue == null ? 0 : PbCache.tareCount.fixedWeightValue.Value);
  159. }
  160. if (!PbCache.monitorResult.valid_wgt)
  161. {
  162. if (PbCache.lockWgt > maxWgt && maxWgt > 0)
  163. {
  164. //若皮重不在配置范围,且重量大于最大范围值,则认为是过毛,此时有期限皮,且物料可使用期限皮,则使用期限皮进行计量,否则
  165. #region 若此时有期限皮,且当前物料是可用期限皮的数据,则走着看的代码,否则走下面的doAddWf方法
  166. // and t2.meter_nature_name like '%外%' //此为车辆计量属性; 例如:若不是中控,则不允许使用期限皮重(九江取消了)
  167. bool bTerm = false;
  168. string sql = @"select t1.meter_weight meterWeight,
  169. t1.data_no dataNo,
  170. t1.create_time createTime,
  171. t1.base_spot_no baseSpotNo,
  172. t1.base_spot_name baseSpotName
  173. from Meter_Base_Term_Tare_Data t1, Meter_Base_Term_Tare_Car t2
  174. where t1.car_no = t2.car_no
  175. and t2.value_flag = '0'
  176. and t1.value_flag = '0'
  177. and t1.car_no = '" + scale.carNo + @"'
  178. and t1.end_time>sysdate";
  179. PbModelDbService<List<MeterBaseTermTareData>> pb = new PbModelDbService<List<MeterBaseTermTareData>>();
  180. RESTfulResult<List<MeterBaseTermTareData>> rmType = pb.executeSqlDataWf(sql);
  181. if (rmType.Succeed)
  182. {
  183. if (rmType.Data != null && rmType.Data.Count > 0)
  184. {
  185. //查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重
  186. //and t.meter_nature_name like '%外%' //此为物料计量属性,例如:若不是外购物料,则不允许使用期限皮重;(九江取消了)
  187. string sqls = @"select t.matter_no id, t.matter_name text
  188. from meter_base_matter_info t,meter_base_metertype_conf t2
  189. where t.allowed_tare_weight = '1'
  190. and t.valid_flag = '1'
  191. and t.matter_no='" + scale.matterNo + @"'
  192. and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + scale.meterTypeNo + @"'";
  193. PbModelDbService<List<PbModelDb>> pbp = new PbModelDbService<List<PbModelDb>>();
  194. RESTfulResult<List<PbModelDb>> rmT = pbp.executeSqlDataWf(sqls);
  195. if (rmT.Succeed)
  196. {
  197. if (rmT.Data != null && rmT.Data.Count > 0)
  198. {
  199. bTerm = true;
  200. }
  201. else
  202. {
  203. PbCache.ResultMessage = ";且物料【" + scale.matterName + "】【"+ scale.meterTypeName + "】不允许使用期限皮重";
  204. }
  205. }
  206. else
  207. {
  208. rt.result = false;
  209. rt.isError = true;
  210. rt.resultInfo = "称重数据保存失败";
  211. PbCache.ResultMessage = "计量失败,获取期限皮可用物料异常:" + rmType.ResultMessage;
  212. }
  213. }
  214. else
  215. {
  216. //判断一下是不是车辆的期限皮重过期了
  217. sql = @"select t1.meter_weight meterWeight,
  218. t1.end_time endTime,
  219. t1.data_no dataNo,
  220. t1.create_time createTime,
  221. t1.base_spot_no baseSpotNo,
  222. t1.base_spot_name baseSpotName
  223. from Meter_Base_Term_Tare_Data t1, Meter_Base_Term_Tare_Car t2
  224. where t1.car_no = t2.car_no
  225. and t2.value_flag = '0'
  226. and t1.value_flag = '0'
  227. and t1.car_no = '" + scale.carNo + "'";
  228. PbModelDbService<List<MeterBaseTermTareData>> pbEnd = new PbModelDbService<List<MeterBaseTermTareData>>();
  229. RESTfulResult<List<MeterBaseTermTareData>> rmTypeEnd = pb.executeSqlDataWf(sql);
  230. if (rmTypeEnd.Succeed && rmTypeEnd.Data != null && rmTypeEnd.Data.Count > 0)
  231. {
  232. PbCache.ResultMessage += ";且车号【" + scale.carNo + "】的期限皮重已过期,结束时间【"+ rmTypeEnd.Data[0].endTime+ "】!";
  233. }
  234. else
  235. {
  236. PbCache.ResultMessage += ";且车号【" + scale.carNo + "】的没有有效的期限皮重!";
  237. }
  238. }
  239. }
  240. else
  241. {
  242. rt.result = false;
  243. rt.isError = true;
  244. rt.resultInfo = "称重数据保存失败";
  245. PbCache.ResultMessage = "计量失败,获取期限皮数据异常:" + rmType.ResultMessage;
  246. }
  247. if (bTerm)
  248. {
  249. MeterWorkPreLinkService mwpps = new MeterWorkPreLinkService();
  250. //获取预环节流程信息;001021007;未进行装货确认
  251. RESTfulResult<List<MeterWorkPreLink>> rmLink = mwpps.doQueryWf(new MeterWorkPreLink { valueFlag = "0", predictionNo = scale.predictionNo });
  252. if (rmLink.Succeed && rmLink.Data != null && rmLink.Data.Count > 0)
  253. {
  254. rmLink.Data = rmLink.Data.OrderBy(s => s.seqNo).ToList();
  255. foreach (var item in rm.Data)
  256. {
  257. if (item.linkCode == "001021007" && item.valueFlag == "0")
  258. {
  259. rt.result = false;
  260. rt.isError = true;
  261. rt.resultInfo = "未进行装货确认";
  262. PbCache.ResultMessage = string.Format("【"+ scale.meterTypeName + "】业务,未进行【{0}】,不允许进行二次计量操作!", item.linkName);
  263. return rt;
  264. }
  265. }
  266. }
  267. //验证预报超差信息
  268. validPredictionDiff vpd = new validPredictionDiff();
  269. vpd.ValidMethod(scale, "1", null); //验证毛重
  270. if (!PbCache.monitorResult.valid_prediction_diff)
  271. {
  272. rt.result = false;
  273. rt.isError = true;
  274. rt.resultInfo = PbCache.ResultMessage;
  275. return rt;
  276. }
  277. //验证联达码头;江西联达联达料场,预报超差
  278. validLianDaWgtDiff lianDaWgtDiff = new validLianDaWgtDiff();
  279. lianDaWgtDiff.ValidMethod(scale, "1", null); //验证毛重
  280. if (!PbCache.monitorResult.valid_prediction_diff)
  281. {
  282. rt.result = false;
  283. rt.isError = true;
  284. rt.resultInfo = PbCache.ResultMessage;
  285. return rt;
  286. }
  287. //验证危化品验证;//2021年7月13日 添加危化品验证,解决硫酸期限皮重结净问题
  288. validExceedWgt vew = new validExceedWgt();
  289. vew.validMatMethod(scale, "1", null);
  290. if (!PbCache.monitorResult.valid_exceed_wgt)
  291. {
  292. rt.result = false;
  293. rt.isError = true;
  294. return rt;
  295. }
  296. MeterWorkCarActualFirst firstValid = new MeterWorkCarActualFirst();
  297. firstValid.meterWeight = rmType.Data[0].meterWeight;
  298. firstValid.addWeight = 0;
  299. //验证物资限载验证
  300. validExceedWgt vewNet = new validExceedWgt();
  301. vewNet.validMatMethod(scale, "3", firstValid); //验证净重
  302. if (!PbCache.monitorResult.valid_exceed_wgt)
  303. {
  304. rt.result = false;
  305. rt.isError = true;
  306. return rt;
  307. }
  308. //验证预报超差信息
  309. validPredictionDiff vpdNet = new validPredictionDiff();
  310. vpdNet.ValidMethod(scale, "3", firstValid); //验证净重
  311. if (!PbCache.monitorResult.valid_prediction_diff)
  312. {
  313. rt.result = false;
  314. rt.isError = true;
  315. rt.resultInfo = PbCache.ResultMessage;
  316. return rt;
  317. }
  318. //验证计量区域:若二次计量数据的计量区域与一次计量的计量区域不一致,则禁止自助计量;
  319. validMeterArea vMeterArea = new validMeterArea();
  320. vMeterArea.ValidMethod(rmType.Data[0].baseSpotNo);
  321. if (!PbCache.monitorResult.valid_meter_area)
  322. {
  323. rt.result = false;
  324. rt.isError = true;
  325. rt.resultInfo = PbCache.ResultMessage;
  326. return rt;
  327. }
  328. MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  329. //相同名称的均赋值一次
  330. EntityBase<PreTrackScale> entityBase = new EntityBase<PreTrackScale>();
  331. mwaf = entityBase.format<MeterWorkCarActualFirst>(scale, mwaf);
  332. mwaf.actualFirstNo = DateTime.Now.ToString("yyyyMMdd");//10
  333. mwaf.meterWeight = PbCache.lockWgt;//计量重量
  334. //mwaf.addWeight = 0;//附加重量
  335. mwaf.weightType = "0"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  336. mwaf.createManNo = appUser.userid;
  337. mwaf.createManName = appUser.username;
  338. mwaf.meterGroup = appUser.userGroup;
  339. mwaf.meterClass = appUser.userClass;
  340. mwaf.createTime = DateTime.Now;
  341. mwaf.baseSpotNo = PbCache.sportInfo.baseSpotNo;//计量点编号
  342. mwaf.baseSpotName = PbCache.sportInfo.baseSpotName;
  343. //mwaf.memo = "";
  344. mwaf.valueFlag = "1"; //0有效
  345. mwaf.updateManName = "";
  346. mwaf.updateManNo = "";
  347. mwaf.updateTime = null;
  348. mwaf.checkFlag = "0"; //0未审核
  349. mwaf.meterMode = string.IsNullOrEmpty(appUser.userid) ? "2" : "1"; //1远程计量,2智能计量
  350. mwaf.addWeight = PbCache.addWgt;
  351. //操作日志
  352. MeterMonitorNote monitorNote = new MeterMonitorNote();
  353. monitorNote.baseSpotNo = mwaf.baseSpotNo;
  354. monitorNote.baseSpotName = mwaf.baseSpotName;
  355. monitorNote.operationContent = string.Format("结净称重保存");
  356. monitorNote.operationTime = mwaf.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  357. monitorNote.carNo = mwaf.carNo;
  358. monitorNote.meterNoteSource = string.IsNullOrEmpty(appUser.userid) ? "0" : "4";
  359. monitorNote.meterManNo = appUser.userid;
  360. monitorNote.meterManName = appUser.username;
  361. //结净数据
  362. MeterWorkCarActual netDb = new MeterWorkCarActual();
  363. netDb = entityBase.format<MeterWorkCarActual>(scale, netDb);
  364. netDb.grossTime = DateTime.Now;
  365. netDb.grossWeight = PbCache.lockWgt;
  366. netDb.baseSpot1No = PbCache.sportInfo.baseSpotNo;
  367. netDb.baseSpot1Name = PbCache.sportInfo.baseSpotName;
  368. netDb.grossMode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  369. netDb.actualFirst2No = rmType.Data[0].dataNo;
  370. netDb.tareTime = rmType.Data[0].createTime;
  371. netDb.tareWeight = rmType.Data[0].meterWeight;
  372. netDb.baseSpot2No = rmType.Data[0].baseSpotNo;
  373. netDb.baseSpot2Name = rmType.Data[0].baseSpotName;
  374. netDb.netTime = DateTime.Now;
  375. netDb.netManNo = appUser.userid; //净重计量员编码
  376. netDb.netManName = appUser.username; //净重计量员名称
  377. netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号
  378. netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点
  379. netDb.addWeight = PbCache.addWgt;
  380. //净重=毛-皮-附加重量
  381. netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight;
  382. netDb.netMode = "1"; //1:正常结净;2:匹配结净
  383. netDb.valueFlag = "0"; //0=有效,1=作废
  384. netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传
  385. RESTfulResult<string> rmIs = mwcfs.doAddNetByTermWf(mwaf, netDb, monitorNote);
  386. if (rmIs.Succeed)
  387. {
  388. rt.result = true;
  389. rt.resultInfo = "称重完成";
  390. PbCache.ResultMessage = "称重完成";
  391. PbCache.actualFirstNo = rmIs.Data;
  392. PbCache.strQRCode = rmIs.Message;
  393. PbCache.isTareWeight = false;//毛重
  394. }
  395. else
  396. {
  397. rt.result = false;
  398. rt.isError = true;
  399. rt.resultInfo = "称重数据保存失败";
  400. PbCache.ResultMessage = "计量失败:" + rmIs.ResultMessage;
  401. }
  402. return rt;
  403. }
  404. #endregion 若此时有期限皮,且当前物料是可用期限皮的数据,则走着看的代码,否则走下面的doAddWf方法
  405. //else
  406. {
  407. rt.result = false;
  408. rt.isError = true;
  409. rt.resultInfo = "当前皮重不在皮重配置范围";
  410. if (PbCache.ResultMessage != null && !PbCache.ResultMessage.Contains("皮重"))
  411. {
  412. PbCache.ResultMessage += "当前皮重不在皮重配置范围";
  413. }
  414. }
  415. }
  416. else
  417. {
  418. rt.result = false;
  419. rt.isError = true;
  420. rt.resultInfo = "当前皮重不在皮重配置范围";
  421. if (PbCache.ResultMessage != null && !PbCache.ResultMessage.Contains("皮重"))
  422. {
  423. PbCache.ResultMessage = "当前皮重不在皮重配置范围";
  424. }
  425. }
  426. }
  427. }
  428. else
  429. {
  430. //沿用ValidNotInnerMethod方法的提示信息
  431. rt.result = false;
  432. rt.isError = false;
  433. }
  434. }
  435. }
  436. }
  437. else if (rm.Data[0].linkCode == "001021005") //计量环节为 结净 计量场景为先皮后毛
  438. {
  439. if (string.IsNullOrEmpty(scale.forwardingUnitName) || string.IsNullOrEmpty(scale.receivingUintName))
  440. {
  441. PbCache.ResultMessage = "结净时,预报中的发货单位以及收货单位均不允许为空,请点击[语音求助]!";
  442. rt.result = false;
  443. rt.isError = false;
  444. return rt;
  445. }
  446. if (rmX.Data == null || rmX.Data.Count == 0)
  447. {
  448. rt.resultInfo = "未找到一次计量数据!";
  449. rt.result = false;
  450. rt.isError = false;
  451. PbCache.ResultMessage = "未找到一次计量数据,请先计量皮重!";
  452. }
  453. else if (rmX.Data.Count == 1)
  454. {
  455. //则走其他的验证,比如与历史皮重验证,与其他的信息验证,若验证都通过则保存一次计量信息
  456. MeterWorkCarActualFirst first = rmX.Data[0];
  457. if (first.weightType == "0") //一次为毛重
  458. {
  459. rt.result = false;
  460. rt.isError = false;
  461. PbCache.ResultMessage = "已经存在一条重量为[" + first.meterWeight + "]的毛重数据,毛重与毛重不能计量!";
  462. }
  463. else //一次为皮重,那么当前则是走先皮后毛流程
  464. {
  465. if (!PbCache.isNotValid)
  466. {
  467. //如果勾选了不验证重量则可以放过 1000kg的判断
  468. if (Math.Abs(rmX.Data[0].meterWeight.Value - PbCache.lockWgt) < AppConfigCache.differenceWgt && PbCache.monitor.validWgt != "0")
  469. {
  470. //重复计量
  471. rt.result = false;
  472. rt.isError = true;
  473. rt.resultInfo = "第一次计量重量和第二次计量重量接近";
  474. //PbCache.ResultMessage = "第一次计量重量和第二次计量重量接近";
  475. PbCache.ResultMessage = "第一次计量重量【" + rmX.Data[0].meterWeight.Value / 1000 + "T】和第二次计量重量【" + PbCache.lockWgt / 1000 + "T】接近,小于结净最小值【" + AppConfigCache.differenceWgt / 1000 + " T】,请点击[语音求助],由司秤工过磅!";
  476. return rt;
  477. }
  478. }
  479. //验证是否存在历史皮
  480. validWgt vw = new validWgt();
  481. //一次重量大于当前重量,所以一次的时候应该是毛重
  482. if (rmX.Data[0].meterWeight.Value - PbCache.lockWgt > 0)
  483. {
  484. vw.validHisTare(scale);
  485. //没有历史皮的情况下,若配置了先皮后毛与先毛后皮,则会先走先皮流程,然后发现一次大于二次则将一次改为毛,继续走后面的先毛后皮流程
  486. if (!PbCache.monitorResult.haveHisTare)
  487. {
  488. //将一次数据类型修改为皮重
  489. mwcfs.doUpdateWf(new MeterWorkCarActualFirst { actualFirstNo = rmX.Data[0].actualFirstNo, weightType = "0" });
  490. rt.result = false;
  491. rt.isError = false;
  492. PbCache.ResultMessage = "请再次点击[保存]按钮";
  493. return rt;
  494. }
  495. else
  496. {
  497. rt.result = false;
  498. rt.isError = true;
  499. rt.resultInfo = "存在一次皮重信息,当前重量小于一次皮重皮皮不能结合";
  500. PbCache.ResultMessage = "存在一次皮重信息,当前重量小于一次皮重皮皮不能结合";
  501. return rt;
  502. }
  503. }
  504. //验证物料时间段
  505. validMatTime vmt = new validMatTime();
  506. vmt.ValidMethod(scale, "1");
  507. if (!PbCache.monitorResult.valid_mat_time)
  508. {
  509. rt.result = false;
  510. rt.isError = true;
  511. rt.resultInfo = PbCache.ResultMessage;
  512. return rt;
  513. }
  514. //验证两次计量时间间隔
  515. validTimeInterval vti = new validTimeInterval();
  516. vti.ValidMethod(scale, "3", first);
  517. if (!PbCache.monitorResult.valid_time_interval)
  518. {
  519. rt.result = false;
  520. rt.isError = true;
  521. rt.resultInfo = PbCache.ResultMessage;
  522. return rt;
  523. }
  524. //验证危化品验证
  525. validExceedWgt vew = new validExceedWgt();
  526. vew.validMatMethod(scale, "3", first);
  527. if (!PbCache.monitorResult.valid_exceed_wgt)
  528. {
  529. rt.result = false;
  530. rt.isError = true;
  531. return rt;
  532. }
  533. //验证预报超差信息
  534. validPredictionDiff vpd = new validPredictionDiff();
  535. vpd.ValidMethod(scale, "3", first); //验证净重
  536. if (!PbCache.monitorResult.valid_prediction_diff)
  537. {
  538. rt.result = false;
  539. rt.isError = true;
  540. rt.resultInfo = PbCache.ResultMessage;
  541. return rt;
  542. }
  543. //验证物资是否需要发运重量
  544. validMatterName vmn = new validMatterName();
  545. if (!vmn.ValidEffectiveWeight(scale))
  546. {
  547. rt.result = false;
  548. rt.isError = true;
  549. rt.resultInfo = PbCache.ResultMessage;
  550. return rt;
  551. }
  552. //验证计量区域:若二次计量数据的计量区域与一次计量的计量区域不一致,则禁止自助计量;
  553. validMeterArea vMeterArea = new validMeterArea();
  554. vMeterArea.ValidMethod(first.baseSpotNo);
  555. if (!PbCache.monitorResult.valid_meter_area)
  556. {
  557. rt.result = false;
  558. rt.isError = true;
  559. rt.resultInfo = PbCache.ResultMessage;
  560. return rt;
  561. }
  562. //====所有验证均通过后,此时进行结净=====================
  563. //保存毛重信息 即:二次计量信息***********************
  564. MeterWorkCarActualFirst secondDb = new MeterWorkCarActualFirst();
  565. //相同名称的均赋值一次
  566. EntityBase<PreTrackScale> entityBase = new EntityBase<PreTrackScale>();
  567. secondDb = entityBase.format<MeterWorkCarActualFirst>(scale, secondDb);
  568. secondDb.actualFirstNo = DateTime.Now.ToString("yyyyMMdd");//10
  569. secondDb.meterWeight = PbCache.lockWgt;//计量重量
  570. secondDb.addWeight = PbCache.addWgt;//附加重量
  571. secondDb.weightType = "0"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  572. secondDb.createManNo = appUser.userid;
  573. secondDb.createManName = appUser.username;
  574. secondDb.meterGroup = appUser.userGroup;
  575. secondDb.meterClass = appUser.userClass;
  576. secondDb.createTime = DateTime.Now;
  577. secondDb.baseSpotNo = PbCache.sportInfo.baseSpotNo;//计量点编号
  578. secondDb.baseSpotName = PbCache.sportInfo.baseSpotName;
  579. //secondDb.memo = "";
  580. secondDb.valueFlag = "1"; //0有效
  581. secondDb.updateManName = "";
  582. secondDb.updateManNo = "";
  583. secondDb.updateTime = null;
  584. secondDb.checkFlag = "0"; //0未审核
  585. secondDb.meterMode = string.IsNullOrEmpty(appUser.userid) ? "2" : "1"; //1远程计量,2智能计量
  586. //环节信息
  587. MeterWorkPreLink link = new MeterWorkPreLink();
  588. link.preLinkNo = rm.Data[0].preLinkNo;
  589. link.preProcessNo = rm.Data[0].preProcessNo;
  590. //结净数据
  591. MeterWorkCarActual netDb = new MeterWorkCarActual();
  592. EntityBase<PreTrackScale> entityActual = new EntityBase<PreTrackScale>();
  593. netDb = entityBase.format<MeterWorkCarActual>(scale, netDb);
  594. //netDb.actualFirst1No = ""; //毛重计量作业编号
  595. netDb.grossTime = DateTime.Now;
  596. netDb.grossWeight = PbCache.lockWgt; //毛重
  597. netDb.baseSpot1No = PbCache.sportInfo.baseSpotNo; //毛重计量点编号
  598. netDb.baseSpot1Name = PbCache.sportInfo.baseSpotName; //毛重计量点
  599. netDb.grossMode = string.IsNullOrEmpty(appUser.userid) ? "2" : "1"; //1远程计量,2智能计量
  600. netDb.grossGroup = appUser.userGroup;
  601. netDb.grossClass = appUser.userClass;
  602. netDb.grossManNo = appUser.userid;
  603. netDb.grossManName = appUser.username;
  604. netDb.actualFirst2No = first.actualFirstNo;
  605. netDb.tareWeight = first.meterWeight;
  606. netDb.tareTime = first.createTime;
  607. netDb.baseSpot2No = first.baseSpotNo;
  608. netDb.baseSpot2Name = first.baseSpotName;
  609. netDb.tareMode = first.meterMode;
  610. netDb.tareClass = first.meterClass;
  611. netDb.tareGroup = first.meterGroup;
  612. netDb.tareManName = first.createManName;
  613. netDb.tareManNo = first.createManNo;
  614. netDb.addWeight = PbCache.addWgt;
  615. //净重=毛-皮-附加重量
  616. netDb.netWeight = netDb.grossWeight - netDb.tareWeight - netDb.addWeight;
  617. netDb.netMode = "1"; //1:正常结净;2:匹配结净
  618. netDb.valueFlag = "0"; //0=有效,1=作废
  619. netDb.uploadFlag = "0"; //0=待审核;1:待上传;2=已上传
  620. netDb.netTime = DateTime.Now;
  621. netDb.netManNo = appUser.userid; //净重计量员编码
  622. netDb.netManName = appUser.username; //净重计量员名称
  623. netDb.netSpot3No = PbCache.sportInfo.baseSpotNo; //净重计量点编号
  624. netDb.netSpot3Name = PbCache.sportInfo.baseSpotName; //净重计量点
  625. //操作日志
  626. MeterMonitorNote monitorNote = new MeterMonitorNote();
  627. monitorNote.baseSpotNo = secondDb.baseSpotNo;
  628. monitorNote.baseSpotName = secondDb.baseSpotName;
  629. monitorNote.operationContent = string.Format("结净称重保存");
  630. monitorNote.operationTime = secondDb.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  631. monitorNote.carNo = secondDb.carNo;
  632. monitorNote.meterNoteSource = string.IsNullOrEmpty(appUser.userid) ? "0" : "4";
  633. monitorNote.meterManNo = appUser.userid;
  634. monitorNote.meterManName = appUser.username;
  635. RESTfulResult<string> rmI = mwcfs.doAddNetWf(secondDb, netDb, link, monitorNote, "", "0");
  636. if (rmI.Succeed)
  637. {
  638. rt.result = true;
  639. rt.resultInfo = "称重完成";
  640. PbCache.ResultMessage = "称重完成";
  641. PbCache.actualFirstNo = rmI.Data;
  642. PbCache.strQRCode = rmI.Message;
  643. PbCache.isTareWeight = false;//毛重
  644. }
  645. else
  646. {
  647. rt.result = false;
  648. rt.isError = true;
  649. rt.resultInfo = "称重数据保存失败";
  650. PbCache.ResultMessage = "计量失败:" + rmI.ResultMessage;
  651. }
  652. }
  653. }
  654. else
  655. {
  656. PbCache.ResultMessage = string.Format("当前预报[{0}]存在多条未结净数据", scale.predictionNo);
  657. rt.resultInfo = "找到多条未结净数据";
  658. rt.result = false;
  659. rt.isError = true;
  660. }
  661. }
  662. return rt;
  663. }
  664. }
  665. }