InnerCarJISCO.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. using com.hnshituo.core.webapp.vo;
  2. using Common;
  3. using Common.DbOption.work;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace MeterSceneLibrary
  10. {
  11. /// <summary>
  12. /// 酒钢厂内车辆计量业务
  13. /// </summary>
  14. public class InnerCarJISCO
  15. {
  16. // 一次计量数据
  17. private MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService();
  18. // 重量类型预处理表
  19. private MeterWorkPreWgttypeService wgttypeService = new MeterWorkPreWgttypeService();
  20. // 车辆委托表
  21. private PreTrackScaleService preTrackScaleService = new PreTrackScaleService();
  22. // 留期限皮操作
  23. private MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService();
  24. private rtInfo rt = new rtInfo();
  25. // 构建一次计量数据
  26. private MeterWorkCarActualFirst mwaf = new MeterWorkCarActualFirst();
  27. // 结净最小值,默认取配置文件
  28. private double diffrentWgt = AppConfigCache.differenceWgt;
  29. // 根据车号查询委托表中未使用和使用中的委托
  30. private List<PreTrackScale> listPreScale;
  31. private JISCO.SaveMethod saveMethod = new JISCO.SaveMethod();
  32. public rtInfo MeterMethod(PreTrackScale scale)
  33. {
  34. Log lg = Log.GetInstance();
  35. rt.isError = false;
  36. string ResultMessage = "";
  37. bool isError = false;
  38. mwaf.carNo = PbCache.lockCarNo;
  39. mwaf.weightType = ""; // 默认重量类型为空
  40. mwaf.actualFirstNo = DateTime.Now.ToString("yyyyMMdd");//10
  41. mwaf.meterWeight = PbCache.lockWgt;//计量重量
  42. mwaf.addWeight = PbCache.addWgt;//附加重量
  43. mwaf.createManNo = PbCache.sportInfo.baseSpotNo;
  44. mwaf.createManName = PbCache.sportInfo.baseSpotName;
  45. mwaf.meterGroup = "";
  46. mwaf.meterClass = "";
  47. mwaf.createTime = DateTime.Now;
  48. mwaf.baseSpotNo = PbCache.sportInfo.baseSpotNo;//计量点编号
  49. mwaf.baseSpotName = PbCache.sportInfo.baseSpotName;
  50. //mwaf.memo = "";
  51. mwaf.valueFlag = "3"; //状态(0 = 作废,1 = 有效(已匹配),2 = 结净,3 = 未匹配)
  52. mwaf.updateManName = "";
  53. mwaf.updateManNo = "";
  54. mwaf.updateTime = null;
  55. mwaf.checkFlag = "1"; //0未审核,1已审核
  56. mwaf.meterMode = "2"; //1:远程计量;2:智能计量;3:手工录入;4:放行智能计量;5:滞后匹配
  57. mwaf.addWeight = PbCache.addWgt;
  58. mwaf.dataSource = "1"; //数据来源(1=智能终端,2=本地计量,3=应急计量,4=手动录入(计量票据录入))
  59. // 根据车号查询重量类型预处理表
  60. RESTfulResult<List<MeterWorkPreWgttype>> rmX = wgttypeService.doQueryWf(new MeterWorkPreWgttype { carNo = PbCache.lockCarNo, valueFlag = "1" });
  61. // 不存在未使用的重量类型数据
  62. if (rmX.Succeed)
  63. {
  64. List<MeterWorkPreWgttype> list = rmX.Data;
  65. // 不存在一次预处理数据
  66. if (list == null || list.Count == 0)
  67. {
  68. /* a. 程序报警
  69. * b. 自动进行语音求助
  70. */
  71. rt = saveMethod.doError("没有重量类型预处理数据,请联系计量大厅");
  72. }
  73. // 存在一条预处理数据
  74. else if (list == null || list.Count == 1)
  75. {
  76. // 查已选择的委托
  77. RESTfulResult<List<PreTrackScale>> rmScale = preTrackScaleService.doQueryByFlag(new PreTrackScale { carNo = PbCache.lockCarNo, lineDesc = "1" });
  78. if (rmScale.Succeed && rmScale.Data.Count == 1)
  79. {
  80. // 重量类型为期限皮重
  81. if (list[0].weightTypeNo == "001033003")
  82. {
  83. // 判断这个车是否有留存期限皮重的权限
  84. MeterBaseTermTareCarService meterBaseTermTareCarService = new MeterBaseTermTareCarService();
  85. RESTfulResult<List<MeterBaseTermTareCar>> tareCarResult = meterBaseTermTareCarService.doQueryWf(new MeterBaseTermTareCar { carNo = PbCache.lockCarNo, valueFlag = "0" });
  86. if (tareCarResult.Succeed)
  87. {
  88. // 没有期限皮重权限
  89. if (tareCarResult.Data == null || tareCarResult.Data.Count == 0)
  90. {
  91. rt = saveMethod.doError("该车辆没有期限皮重权限,请联系计量大厅");
  92. }
  93. // 有期限皮重权限
  94. else if (tareCarResult.Data.Count >= 1)
  95. {
  96. // 正常保存期限皮重
  97. rt = saveMethod.doTermTareData();
  98. }
  99. }
  100. }
  101. // 重量类型为普通毛重/皮重
  102. else if (list[0].weightTypeNo == "001033001" || list[0].weightTypeNo == "001033002")
  103. {
  104. // 查询一次计量数据表
  105. RESTfulResult<List<MeterWorkCarActualFirst>> rmFirst = mwcfs.doQueryByFlag(new MeterWorkCarActualFirst { carNo = PbCache.lockCarNo });
  106. if (rmX.Succeed)
  107. {
  108. List<MeterWorkCarActualFirst> firstList = rmFirst.Data;
  109. // 不存在有效的一次计量数据
  110. if (firstList == null || firstList.Count == 0)
  111. {
  112. // 历史皮重验证
  113. rt = saveMethod.validHisTare();
  114. // 重量类型为皮重且在皮重误差内
  115. if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == true)
  116. {
  117. /*sds
  118. * a. 正常保存重量匹配委托
  119. * b. 提示称重完成
  120. */
  121. rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
  122. }
  123. // 重量类型为皮重且在皮重误差外
  124. else if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == false)
  125. {
  126. rt = saveMethod.doError(PbCache.ResultMessage);
  127. }
  128. // 重量类型为毛重,在皮重误差内
  129. else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == true)
  130. {
  131. rt = saveMethod.doError("当次重量类型为毛重,在皮重误差内");
  132. }
  133. // 重量类型为毛重,不在皮重误差内
  134. else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == false)
  135. {
  136. // 判断车辆是否具有期限皮重权限
  137. MeterBaseTermTareCarService meterBaseTermTareCarService = new MeterBaseTermTareCarService();
  138. RESTfulResult<List<MeterBaseTermTareCar>> tareCarResult = meterBaseTermTareCarService.doQueryWf(new MeterBaseTermTareCar { carNo = PbCache.lockCarNo, valueFlag = "0" });
  139. if (tareCarResult.Succeed)
  140. {
  141. // 没有期限皮重权限
  142. if (tareCarResult.Data.Count == 0)
  143. {
  144. rt = saveMethod.doError("该车辆没有期限皮重权限,请联系计量大厅");
  145. }
  146. // 有期限皮重权限
  147. else if (tareCarResult.Data.Count >= 1)
  148. {
  149. //查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重
  150. string sqls = @"select t.matter_no id, t.matter_name text
  151. from meter_base_matter_info t,meter_base_metertype_conf t2
  152. where t.allowed_tare_weight = '1'
  153. and t.valid_flag = '1'
  154. and t.matter_no='" + rmScale.Data[0].matterNo + @"'
  155. and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + rmScale.Data[0].meterTypeNo + @"'";
  156. PbModelDbService<List<PbModelDb>> pbp = new PbModelDbService<List<PbModelDb>>();
  157. RESTfulResult<List<PbModelDb>> rmT = pbp.executeSqlDataWf(sqls);
  158. if (rmT.Succeed)
  159. {
  160. if (rmT.Data != null && rmT.Data.Count > 0)
  161. {
  162. // 存在使用期限皮重权限,并使用期限皮重洁净
  163. //给一次数据匹配委托
  164. EntityBase<PreTrackScale> entityBase1 = new EntityBase<PreTrackScale>();
  165. mwaf = entityBase1.format<MeterWorkCarActualFirst>(rmScale.Data[0], mwaf);
  166. mwaf.isPreScale = "1";
  167. rt = saveMethod.doNetTermTare(rmScale.Data[0], mwaf);
  168. }
  169. else
  170. {
  171. // 只保存一次计量数据
  172. rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
  173. }
  174. }
  175. }
  176. }
  177. }
  178. }
  179. // 只存在一条有效的一次计量数据
  180. else if (firstList == null || firstList.Count == 1)
  181. {
  182. // 读结净最小值配置
  183. ComBaseInfoService cbis = new ComBaseInfoService();
  184. RESTfulResult<List<ComBaseInfo>> res = cbis.doQueryBaseList(new ComBaseInfo { baseCode = "001031001" });
  185. if (res.Succeed)
  186. {
  187. if (res.Data != null && res.Data.Count == 1)
  188. {
  189. try
  190. {
  191. diffrentWgt = Double.Parse(res.Data[0].baseName);
  192. }
  193. finally
  194. {
  195. }
  196. }
  197. }
  198. // 当次重量和上次重量满足洁净最小值条件
  199. if (Math.Abs(rmFirst.Data[0].meterWeight.Value - PbCache.lockWgt) > diffrentWgt)
  200. {
  201. // 查询当前秤点是否启用历史皮重判断(暂时不考虑此限制)By BourneCao
  202. // String spotNo = PbCache.sportInfo.baseSpotNo;
  203. // 历史皮重验证
  204. rt = saveMethod.validHisTare();
  205. // 重量类型为皮重且在皮重误差内,正常结净
  206. if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == true)
  207. {
  208. // 正常结净
  209. //给一次数据匹配委托
  210. EntityBase<PreTrackScale> entityBase1 = new EntityBase<PreTrackScale>();
  211. mwaf = entityBase1.format<MeterWorkCarActualFirst>(rmScale.Data[0], mwaf);
  212. mwaf.isPreScale = "1";
  213. rt = saveMethod.doNet(rmScale.Data[0], firstList[0], mwaf);
  214. }
  215. // 重量类型为皮重且不在皮重误差内
  216. else if (list[0].weightTypeNo == "001033002" && PbCache.monitorResult.valid_wgt == false)
  217. {
  218. rt = saveMethod.doError(PbCache.ResultMessage);
  219. }
  220. // 重量类型为毛重,不在皮重误差内,正常结净
  221. else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == false)
  222. {
  223. if (firstList[0].weightType == "0")
  224. {
  225. rt = saveMethod.doAddFirst(rmScale.Data[0], mwaf);
  226. }
  227. else
  228. {
  229. // 正常结净
  230. //给一次数据匹配委托
  231. EntityBase<PreTrackScale> entityBase1 = new EntityBase<PreTrackScale>();
  232. mwaf = entityBase1.format<MeterWorkCarActualFirst>(rmScale.Data[0], mwaf);
  233. mwaf.isPreScale = "1";
  234. rt = saveMethod.doNet(rmScale.Data[0], firstList[0], mwaf);
  235. }
  236. }
  237. // 重量类型为毛重,在皮重误差内
  238. else if (list[0].weightTypeNo == "001033001" && PbCache.monitorResult.valid_wgt == true)
  239. {
  240. rt = saveMethod.doError(PbCache.ResultMessage);
  241. }
  242. }
  243. else
  244. {
  245. rt = saveMethod.doError("第一次计量重量【" + rmFirst.Data[0].meterWeight.Value / 1000 + "T】和第二次计量重量【" + PbCache.lockWgt / 1000 + "T】接近,小于结净最小值【" + diffrentWgt / 1000 + " T】");
  246. }
  247. }
  248. // 存在多条有效的一次计量数据
  249. else if (firstList == null || firstList.Count > 1)
  250. {
  251. /* a. 程序报警a
  252. * b. 自动进行语音求助
  253. */
  254. rt = saveMethod.doError("存在多条有效的一次计量数据,请联系计量大厅");
  255. }
  256. }
  257. }
  258. }
  259. else
  260. {
  261. rt = saveMethod.doError("没有已选择的委托,请联系计量大厅");
  262. }
  263. }
  264. }
  265. return rt;
  266. }
  267. }
  268. }