FirstGrossSecondlyTare.cs 32 KB

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