InnerFirstGrossSecondlyTare.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. using Common;
  2. using MeterConditionLibrary;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace MeterSceneLibrary
  9. {
  10. public class InnerFirstGrossSecondlyTare
  11. {
  12. /// <summary>
  13. /// InnerMeterInfo 一定会有值,汽车上磅的时候如果是皮重则将毛重信息带入进来
  14. /// </summary>
  15. /// <param name="scale"></param>
  16. /// <returns></returns>
  17. public rtInfo MeterMethod(InnerMeterInfo scale)
  18. {
  19. DbHelper db = new DbHelper();
  20. rtInfo rt = new rtInfo();
  21. rt.isError = false;
  22. /*
  23. //验证是否是内倒车辆
  24. string msgInfo = "";
  25. bool isError = false;
  26. validCarCard vcc = new validCarCard();
  27. if (!vcc.ValidMethod(scale, out msgInfo, out isError))
  28. {
  29. rt.result = false;
  30. rt.isError = isError;
  31. rt.resultInfo = PbCache.msgInfo;
  32. return rt;
  33. }
  34. //没有物料信息,说明第一没有一次毛重信息(若有的话会自动带到界面上),第二说明车辆应该是要留皮重
  35. if (string.IsNullOrEmpty(scale.matter_no))
  36. {
  37. rt.result = false;
  38. rt.isError = false;
  39. return rt;
  40. }
  41. //如果有物料信息,有几种可能,第一种就是存在一次计量毛重信息,那么此时做洁净操作(需要验证下当前是不是重量差值1t内,若是的话,则提示不允许重复计量)
  42. //第二种可能就是不存在一次计量毛重信息,此时不管是毛还是皮,直接存储到数据表中,等第二次上秤时,若重量差值大于1t则查出并跟后面的数据洁净,同时
  43. //存储轻的为历史皮
  44. MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService();
  45. ResultModel<List<MeterWorkCarActualFirst>> rmX = mwcfs.doQueryWf(new MeterWorkCarActualFirst { value_flag = "0", car_no = scale.carno });
  46. if (rmX.state == "500")
  47. {
  48. rt.result = false;
  49. rt.resultInfo = "获取一次计量数据失败";
  50. rt.isError = true;
  51. }
  52. //历史皮重
  53. bool isHaveHisTare = false;
  54. validWgt validWgt = new validWgt();
  55. MeterBaseHisTareDataService mbtds = new MeterBaseHisTareDataService();
  56. ResultModel<List<MeterBaseHisTareData>> rm = mbtds.doQueryWf(new MeterBaseHisTareData { value_flag = "0", car_no = scale.carno });
  57. if (rm.state == "200")
  58. {
  59. //存在历史皮
  60. if (rm.data != null && rm.data.Count > 0)
  61. {
  62. //验证是否是皮重,若为true则是皮,否则无法判断是毛还是皮
  63. validWgt.ValidMethod(new PreTrackScale { car_no = scale.carno });
  64. isHaveHisTare = true;
  65. }
  66. }
  67. //如果没有一次计量数据
  68. if (rmX.data == null || rmX.data.Count == 0)
  69. {
  70. //如果通过验证发现是皮则不能继续后续流程
  71. if (PbCache.monitorResult.valid_wgt)
  72. {
  73. rt.result = false;
  74. rt.isError = false;
  75. return rt;
  76. }
  77. //验证物料时间段
  78. validMatTime vmt = new validMatTime();
  79. vmt.ValidMethod(new PreTrackScale { matter_no = scale.matter_no }, "1");
  80. if (!PbCache.monitorResult.valid_mat_time)
  81. {
  82. rt.result = false;
  83. rt.isError = true;
  84. rt.resultInfo = PbCache.msgInfo;
  85. return rt;
  86. }
  87. //是否增加验证当前重量需大于历史毛重,若无历史毛重也认为是毛重??
  88. //存储一次毛重信息
  89. //验证通过,保存毛重信息***********************
  90. MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  91. //相同名称的均赋值一次
  92. EntityBase<InnerMeterInfo> entityBase = new EntityBase<InnerMeterInfo>();
  93. mwaf = entityBase.format<MeterWorkCarActualFirst>(scale, mwaf);
  94. mwaf.actual_first_no = DateTime.Now.ToString("yyyyMMdd");//10
  95. mwaf.meter_weight = PbCache.lockWgt;//计量重量
  96. mwaf.add_weight = PbCache.addWgt;//附加重量
  97. mwaf.weight_type = "0"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  98. mwaf.create_man_no = "";
  99. mwaf.create_man_name = "";
  100. mwaf.create_time = DateTime.Now;
  101. mwaf.base_spot_no = PbCache.sportInfo.base_spot_no;//计量点编号
  102. mwaf.base_spot_name = PbCache.sportInfo.base_spot_name;
  103. mwaf.memo = "";
  104. mwaf.value_flag = "0"; //0有效
  105. mwaf.update_man_name = "";
  106. mwaf.update_man_no = "";
  107. mwaf.update_time = null;
  108. mwaf.check_flag = "0"; //0未审核
  109. mwaf.meter_mode = "2"; //智能计量
  110. bool isHaveTare = false; //是否期限皮计量
  111. MeterBaseTermTareData mb = new MeterBaseTermTareData();
  112. #region 验证是否有期限皮重情况
  113. //验证是否存在期限皮重信息,若存在有效期限皮重,且车辆不在黑名单则调用的应该是内倒车辆洁净方法
  114. //这里还得考虑下如果有洁净环节也得将洁净环节设置为使用
  115. //验证是否存在期限皮重信息,若存在有效期限皮重,且车辆不在黑名单则调用的应该是内倒车辆洁净方法
  116. MeterBaseCarBlacelistService bService = new MeterBaseCarBlacelistService();
  117. ResultModel<List<MeterBaseCarBlacelist>> rmB = bService.doQueryWf(new MeterBaseCarBlacelist { car_no = scale.carno, value_flag = "0" });
  118. if (rmB.state == "200")
  119. {
  120. if (rmB.data == null || rmB.data.Count == 0) //不在黑名单内
  121. {
  122. MeterBaseTermTareDataService mbttd = new MeterBaseTermTareDataService();
  123. ResultModel<List<MeterBaseTermTareData>> rml = mbttd.doQueryWf(new MeterBaseTermTareData { car_no = scale.carno, value_flag = "0" });
  124. if (rml.state == "200")
  125. {
  126. if (rml.data != null && rml.data.Count > 0)
  127. {
  128. mb = rml.data[0];
  129. isHaveTare = true;
  130. }
  131. }
  132. else
  133. {
  134. rt.result = false;
  135. rt.isError = true;
  136. rt.resultInfo = PbCache.msgInfo;
  137. return rt;
  138. }
  139. }
  140. }
  141. else
  142. {
  143. rt.result = false;
  144. rt.isError = true;
  145. rt.resultInfo = PbCache.msgInfo;
  146. return rt;
  147. }
  148. #endregion
  149. if (isHaveTare) //有期限皮重,做洁净操作
  150. {
  151. //洁净数据
  152. MeterWorkCarActual netDb = new MeterWorkCarActual();
  153. EntityBase<InnerMeterInfo> entityActual = new EntityBase<InnerMeterInfo>();
  154. netDb = entityBase.format<MeterWorkCarActual>(scale, netDb);
  155. //netDb.actual_first1_no = mb.actual_first_no; //皮重计量作业编号
  156. netDb.tare_time = mb.create_time;
  157. netDb.tare_weight = mb.meter_weight;
  158. netDb.base_spot2_no = mb.base_spot_no;
  159. netDb.base_spot2_name = mb.base_spot_name;
  160. netDb.tare_mode = "";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  161. netDb.tare_man_no = "";
  162. netDb.tare_man_name = "";
  163. netDb.tare_class = "";
  164. netDb.tare_group = "";
  165. netDb.gross_time = DateTime.Now;
  166. netDb.gross_weight = PbCache.lockWgt;
  167. netDb.base_spot1_no = PbCache.sportInfo.base_spot_no;
  168. netDb.base_spot1_name = PbCache.sportInfo.base_spot_name;
  169. netDb.gross_mode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  170. //净重=毛-皮-附加重量
  171. netDb.net_weight = netDb.gross_weight - netDb.tare_weight - PbCache.addWgt;
  172. netDb.net_mode = "1"; //1:正常结净;2:匹配结净
  173. netDb.value_flag = "0"; //0=有效,1=作废
  174. netDb.upload_flag = "0"; //0=待审核;1:待上传;2=已上传
  175. ResultModel<string> rmI = mwcfs.doAddNetInnerWf(mwaf, netDb);
  176. if (rmI.state == "200")
  177. {
  178. rt.result = true;
  179. rt.resultInfo = "计量完成";
  180. PbCache.msgInfo = "计量完成";
  181. PbCache.actualFirstNo = rmI.data;
  182. }
  183. else
  184. {
  185. rt.result = false;
  186. rt.isError = true;
  187. rt.resultInfo = "服务端执行失败,计量失败:" + rmI.msgInfo;
  188. }
  189. }
  190. else //没有期限皮,则直接存一次数据
  191. {
  192. ResultModel<string> rmI = mwcfs.doAddInnerWf(mwaf);
  193. if (rmI.state == "200")
  194. {
  195. rt.result = true;
  196. rt.resultInfo = "计量完成";
  197. PbCache.msgInfo = "计量完成";
  198. PbCache.actualFirstNo = rmI.data;
  199. }
  200. else
  201. {
  202. rt.result = false;
  203. rt.isError = true;
  204. rt.resultInfo = "服务端执行失败,计量失败:" + rmI.msgInfo;
  205. }
  206. }
  207. }
  208. else if (rmX.data != null && rmX.data.Count > 0)
  209. {
  210. //isHaveHisTare 存在历史皮 存在一次计量数据
  211. //一次重量减去当前重量需大于1t
  212. if (Math.Abs(rmX.data[0].meter_weight - PbCache.lockWgt) <= AppConfigCache.differenceWgt)
  213. {
  214. rt.result = false;
  215. rt.isError = true;
  216. PbCache.msgInfo = "当前车辆不允许重复计量";
  217. return rt;
  218. }
  219. //当前车辆时间间隔过近
  220. validTimeInterval valid = new validTimeInterval();
  221. valid.ValidMethod(new PreTrackScale { meter_type_no = "001006003" }, "3", rmX.data[0]);
  222. if (!PbCache.monitorResult.valid_time_interval)
  223. {
  224. rt.result = false;
  225. rt.isError = true;
  226. return rt;
  227. }
  228. //当前数据是皮重
  229. if (PbCache.monitorResult.valid_wgt)
  230. {
  231. if (rmX.data[0].weight_type == "0") //存在毛重,那么验证当前重量是否符合皮重,符合则进行洁净操作
  232. {
  233. //进行洁净
  234. MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  235. //相同名称的均赋值一次
  236. EntityBase<InnerMeterInfo> entityBase = new EntityBase<InnerMeterInfo>();
  237. mwaf = entityBase.format<MeterWorkCarActualFirst>(scale, mwaf);
  238. mwaf.actual_first_no = DateTime.Now.ToString("yyyyMMdd");//10
  239. mwaf.meter_weight = PbCache.lockWgt;//计量重量
  240. mwaf.add_weight = 0;//附加重量
  241. mwaf.weight_type = "1"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  242. mwaf.create_man_no = "";
  243. mwaf.create_man_name = "";
  244. mwaf.create_time = DateTime.Now;
  245. mwaf.base_spot_no = PbCache.sportInfo.base_spot_no;//计量点编号
  246. mwaf.base_spot_name = PbCache.sportInfo.base_spot_name;
  247. mwaf.memo = "";
  248. mwaf.value_flag = "0"; //0有效
  249. mwaf.update_man_name = "";
  250. mwaf.update_man_no = "";
  251. mwaf.update_time = null;
  252. mwaf.check_flag = "0"; //0未审核
  253. mwaf.meter_mode = "2"; //智能计量
  254. //洁净数据
  255. MeterWorkCarActual netDb = new MeterWorkCarActual();
  256. EntityBase<InnerMeterInfo> entityActual = new EntityBase<InnerMeterInfo>();
  257. netDb = entityBase.format<MeterWorkCarActual>(scale, netDb);
  258. //netDb.actual_first1_no = mb.actual_first_no; //皮重计量作业编号
  259. netDb.tare_time = mb.create_time;
  260. netDb.tare_weight = mb.meter_weight;
  261. netDb.base_spot2_no = mb.base_spot_no;
  262. netDb.base_spot2_name = mb.base_spot_name;
  263. netDb.tare_mode = "";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  264. netDb.tare_man_no = "";
  265. netDb.tare_man_name = "";
  266. netDb.tare_class = "";
  267. netDb.tare_group = "";
  268. netDb.gross_time = DateTime.Now;
  269. netDb.gross_weight = PbCache.lockWgt;
  270. netDb.base_spot1_no = PbCache.sportInfo.base_spot_no;
  271. netDb.base_spot1_name = PbCache.sportInfo.base_spot_name;
  272. netDb.gross_mode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  273. //净重=毛-皮-附加重量
  274. netDb.net_weight = netDb.gross_weight - netDb.tare_weight - PbCache.addWgt;
  275. netDb.net_mode = "1"; //1:正常结净;2:匹配结净
  276. netDb.value_flag = "0"; //0=有效,1=作废
  277. netDb.upload_flag = "0"; //0=待审核;1:待上传;2=已上传
  278. ResultModel<string> rmI = mwcfs.doAddNetInnerWf(mwaf, netDb);
  279. if (rmI.state == "200")
  280. {
  281. rt.result = true;
  282. rt.resultInfo = "计量完成";
  283. PbCache.msgInfo = "计量完成";
  284. PbCache.actualFirstNo = rmI.data;
  285. }
  286. else
  287. {
  288. rt.result = false;
  289. rt.isError = true;
  290. rt.resultInfo = "服务端执行失败,计量失败:" + rmI.msgInfo;
  291. }
  292. }
  293. else //皮皮不能结合,或者之前不满足这边的业务进入到了先皮后毛流程
  294. {
  295. rt.result = false;
  296. rt.isError = false;
  297. return rt;
  298. }
  299. }
  300. else //当前数据不是皮重
  301. {
  302. //存在历史皮重,,且当前数据不是皮重
  303. if (isHaveHisTare)
  304. {
  305. rt.result = false;
  306. rt.isError = false;
  307. return rt;
  308. }
  309. else
  310. {
  311. //不存历史皮,那么两个数据需比较大小,大的为毛,小的为皮,然后将数据洁净并存到一次表跟历史表中
  312. }
  313. }
  314. //存在历史皮重
  315. if (isHaveHisTare)
  316. {
  317. if (PbCache.monitorResult.valid_wgt)
  318. {
  319. rt.result = false;
  320. rt.isError = false;
  321. return rt;
  322. }
  323. if (rmX.data[0].weight_type == "0") //存在毛重,那么验证当前重量是否符合皮重,符合则进行洁净操作
  324. {
  325. if (scale.matter_no != rmX.data[0].matter_no)
  326. {
  327. rt.result = false;
  328. rt.isError = true;
  329. PbCache.msgInfo = string.Format("已存在一条物料为[0]毛重信息", rmX.data[0].matter_name);
  330. return rt;
  331. }
  332. else //认为当前是皮重计量,进行毛皮洁净
  333. {
  334. MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  335. //相同名称的均赋值一次
  336. EntityBase<InnerMeterInfo> entityBase = new EntityBase<InnerMeterInfo>();
  337. mwaf = entityBase.format<MeterWorkCarActualFirst>(scale, mwaf);
  338. mwaf.actual_first_no = DateTime.Now.ToString("yyyyMMdd");//10
  339. mwaf.meter_weight = PbCache.lockWgt;//计量重量
  340. mwaf.add_weight = 0;//附加重量
  341. mwaf.weight_type = "0"; //0=毛重;1=常规皮重;2=期限皮重;3=历史皮重;4=标识皮重;5=自重皮重
  342. mwaf.create_man_no = "";
  343. mwaf.create_man_name = "";
  344. mwaf.create_time = DateTime.Now;
  345. mwaf.base_spot_no = PbCache.sportInfo.base_spot_no;//计量点编号
  346. mwaf.base_spot_name = PbCache.sportInfo.base_spot_name;
  347. mwaf.memo = "";
  348. mwaf.value_flag = "0"; //0有效
  349. mwaf.update_man_name = "";
  350. mwaf.update_man_no = "";
  351. mwaf.update_time = null;
  352. mwaf.check_flag = "0"; //0未审核
  353. mwaf.meter_mode = "2"; //智能计量
  354. MeterWorkCarActual netDb = new MeterWorkCarActual();
  355. EntityBase<InnerMeterInfo> entityActual = new EntityBase<InnerMeterInfo>();
  356. netDb = entityBase.format<MeterWorkCarActual>(scale, netDb);
  357. //netDb.actual_first1_no = mb.actual_first_no; //皮重计量作业编号
  358. netDb.tare_time = rmX.data[0].create_time;
  359. netDb.tare_weight = rmX.data[0].meter_weight;
  360. netDb.base_spot2_no = rmX.data[0].base_spot_no;
  361. netDb.base_spot2_name = rmX.data[0].base_spot_name;
  362. netDb.tare_mode = "";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  363. netDb.tare_man_no = "";
  364. netDb.tare_man_name = "";
  365. netDb.tare_class = "";
  366. netDb.tare_group = "";
  367. netDb.gross_time = DateTime.Now;
  368. netDb.gross_weight = PbCache.lockWgt;
  369. netDb.base_spot1_no = PbCache.sportInfo.base_spot_no;
  370. netDb.base_spot1_name = PbCache.sportInfo.base_spot_name;
  371. netDb.gross_mode = "2";//1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  372. //净重=毛-皮-附加重量
  373. netDb.net_weight = netDb.gross_weight - netDb.tare_weight - PbCache.addWgt;
  374. netDb.net_mode = "1"; //1:正常结净;2:匹配结净
  375. netDb.value_flag = "0"; //0=有效,1=作废
  376. netDb.upload_flag = "0"; //0=待审核;1:待上传;2=已上传
  377. ResultModel<string> rmI = mwcfs.doAddNetInnerWf(mwaf, netDb);
  378. if (rmI.state == "200")
  379. {
  380. rt.result = true;
  381. rt.resultInfo = "计量完成";
  382. PbCache.msgInfo = "计量完成";
  383. PbCache.actualFirstNo = rmI.data;
  384. }
  385. else
  386. {
  387. rt.result = false;
  388. rt.isError = true;
  389. rt.resultInfo = "服务端执行失败,计量失败:" + rmI.msgInfo;
  390. }
  391. }
  392. }
  393. else //那么第一次存的皮,此时
  394. {
  395. //存在一次计量,则进行洁净操作
  396. //验证两次计量时间间隔
  397. validTimeInterval vti = new validTimeInterval();
  398. //计量类型为内倒计量,一次与二次计量间隔若小于配置值
  399. vti.ValidMethod(new PreTrackScale { meter_type_no = "001006003" }, "3", rmX.data[0]);
  400. if (!PbCache.monitorResult.valid_time_interval)
  401. {
  402. rt.result = false;
  403. rt.isError = true;
  404. rt.resultInfo = PbCache.msgInfo;
  405. return rt;
  406. }
  407. else
  408. {
  409. //进行洁净操作
  410. }
  411. }
  412. }
  413. else //不存在历史皮重
  414. {
  415. }
  416. }
  417. //*/
  418. return rt;
  419. }
  420. }
  421. }