ZhongTianSxService.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. using AutoMapper;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using Wms.Screen.DataService.Impl;
  6. using Wms.Screen.DataService.Interface;
  7. using Wms.Screen.Dto.ZhongTian.Response;
  8. using Wms.Screen.Dto;
  9. using Wms.Screen.Service.IService;
  10. using System.Linq;
  11. using Wms.Screen.Dto.ZhongTian.Request;
  12. using Wms.Screen.Dto.ZhongTian;
  13. using WCS.Entity.Protocol.DataStructure;
  14. using System.Linq.Expressions;
  15. using static Dm.net.buffer.ByteArrayBuffer;
  16. using WCS.Protocol.SX.DataStructure;
  17. using WCS.Protocol.SX.QT;
  18. using System.Collections;
  19. namespace Wms.Screen.Service.Service
  20. {
  21. /// <summary>
  22. /// 时效
  23. /// </summary>
  24. public class ZhongTianSxService : IZhongTianSxService
  25. {
  26. private IZhongTianSxDataService _zhongTianSxDataService;
  27. private IMapper _Mapper;
  28. private readonly FreeRedis.RedisClient _freeRedisClient;
  29. public ZhongTianSxService(IZhongTianSxDataService zhongTianSxDataService, IMapper mapper, FreeRedis.RedisClient freeRedisClient)
  30. {
  31. _zhongTianSxDataService = zhongTianSxDataService;
  32. _Mapper = mapper;
  33. _freeRedisClient = freeRedisClient;
  34. }
  35. public PageResult<ReverseErrorInfo> GetReverseErrorInfo()
  36. {
  37. var result = new PageResult<ReverseErrorInfo>() { ReturnValue = new List<ReverseErrorInfo>() };
  38. var list = _zhongTianSxDataService.GetReverseErrorInfo();
  39. result.ReturnValue = list.ToList();
  40. return result;
  41. }
  42. public List<TorsiveTestEquipDto> GetTorsiveTestEquips(GetEquipsRequest reqEntity)
  43. {
  44. var real = new List<TorsiveTestEquipDto>();
  45. // var list = _zhongTianSxDataService.GetSxEquips(reqEntity);
  46. var Len = _freeRedisClient.LLen("Packs");
  47. var dataPack = _freeRedisClient.LIndex<DataPack>("Packs", Len - 1);
  48. List<TorsiveTestEquipDto> result = new List<TorsiveTestEquipDto>{
  49. new TorsiveTestEquipDto { Code = "QT1" }, new TorsiveTestEquipDto { Code = "QT2" }, new TorsiveTestEquipDto { Code = "QT3" }, new TorsiveTestEquipDto { Code = "QT4" }, new TorsiveTestEquipDto { Code = "QT5" }, new TorsiveTestEquipDto { Code = "QT6" }, new TorsiveTestEquipDto { Code = "QT7" }, new TorsiveTestEquipDto { Code = "QT8" }, new TorsiveTestEquipDto { Code = "QT9" }, new TorsiveTestEquipDto { Code = "QT10" } };
  50. foreach (var equipDto in result)
  51. {
  52. try
  53. {
  54. if (equipDto.Code.Contains("QT"))
  55. {
  56. var qt = dataPack.QT51?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  57. if (qt != null)
  58. {
  59. if (qt.Data?.Enable == QTStatus.启用 && qt.Data?.RunStatus == QTRunStatus.空闲 && qt.Data?.Fault == QTFault.非异常)
  60. {
  61. equipDto.EquipState = "1";
  62. }
  63. else if (qt.Data?.Fault == QTFault.异常)
  64. {
  65. equipDto.EquipState = "3";
  66. }
  67. else if (qt.Data?.RunStatus == QTRunStatus.非空闲 || qt.Data?.Enable == QTStatus.停用)
  68. {
  69. equipDto.EquipState = "2";
  70. }
  71. else
  72. {
  73. equipDto.EquipState = "0";
  74. }
  75. }
  76. //todo
  77. equipDto.ResidueTask = _zhongTianSxDataService.GetTorschWbCount(equipDto.Code.Replace("QT", "")).WbCount;
  78. equipDto.MatInfos = new List<string>();
  79. var bindlist = _zhongTianSxDataService.GetTorStaticsInfo(equipDto.Code.Replace("QT", ""));
  80. if (bindlist != null && bindlist.Any())
  81. {
  82. bindlist = bindlist.OrderBy(p => p.WorkStation).ToList();
  83. for (int j = 1; j < 5; j++)
  84. {
  85. var item = bindlist.FirstOrDefault(o => o.WorkStation == j.ToString());
  86. if (item != null)
  87. {
  88. equipDto.MatInfos.Add(item.ContBarCode);
  89. }
  90. else
  91. {
  92. equipDto.MatInfos.Add("");
  93. }
  94. }
  95. }
  96. else
  97. {
  98. for (int i = 0; i < 4; i++)
  99. {
  100. equipDto.MatInfos.Add("");
  101. }
  102. }
  103. }
  104. }
  105. catch
  106. {
  107. }
  108. }
  109. return result;
  110. }
  111. public List<SXPalletizingInfo> GetPalletizingInfo()
  112. {
  113. var real = new List<EquipDto>();
  114. var list = _zhongTianSxDataService.GetPalletizingTasks();
  115. var Len = _freeRedisClient.LLen("Packs");
  116. var dataPack = _freeRedisClient.LIndex<DataPack>("Packs", Len - 1);
  117. List<SXPalletizingInfo> result = new List<SXPalletizingInfo>
  118. {
  119. new SXPalletizingInfo
  120. {
  121. Code = "8090",
  122. Equips =new List<List<EquipDto>> {
  123. new List<EquipDto> { new EquipDto { Code = "SRM101" }, new EquipDto { Code = "SRM102" }, new EquipDto { Code = "SRM103" }, new EquipDto { Code = "SRM104" }, new EquipDto { Code = "SRM105" }, new EquipDto { Code = "SRM106" }, new EquipDto { Code = "SRM107" }, new EquipDto { Code = "SRM108" } },
  124. new List<EquipDto> { new EquipDto { Code = "SRM201" }, new EquipDto { Code = "SRM202" }, new EquipDto { Code = "SRM203" }, new EquipDto { Code = "SRM204" }, new EquipDto { Code = "SRM205" }, new EquipDto { Code = "SRM206" }, new EquipDto { Code = "SRM207" }, new EquipDto { Code = "SRM208" } },
  125. new List<EquipDto> { new EquipDto { Code = "SRM301" }, new EquipDto { Code = "SRM302" }, new EquipDto { Code = "SRM303" }, new EquipDto { Code = "SRM304" }, new EquipDto { Code = "SRM305" }, new EquipDto { Code = "SRM306" }, new EquipDto { Code = "SRM307" }, new EquipDto { Code = "SRM308" } }
  126. }},
  127. new SXPalletizingInfo
  128. {
  129. Code = "8092",
  130. Equips =new List<List<EquipDto>> {
  131. new List<EquipDto> { new EquipDto { Code = "SRM101" }, new EquipDto { Code = "SRM102" }, new EquipDto { Code = "SRM103" }, new EquipDto { Code = "SRM104" }, new EquipDto { Code = "SRM105" }, new EquipDto { Code = "SRM106" }, new EquipDto { Code = "SRM107" }, new EquipDto { Code = "SRM108" } },
  132. new List<EquipDto> { new EquipDto { Code = "SRM201" }, new EquipDto { Code = "SRM202" }, new EquipDto { Code = "SRM203" }, new EquipDto { Code = "SRM204" }, new EquipDto { Code = "SRM205" }, new EquipDto { Code = "SRM206" }, new EquipDto { Code = "SRM207" }, new EquipDto { Code = "SRM208" } },
  133. new List<EquipDto> { new EquipDto { Code = "SRM301" }, new EquipDto { Code = "SRM302" }, new EquipDto { Code = "SRM303" }, new EquipDto { Code = "SRM304" }, new EquipDto { Code = "SRM305" }, new EquipDto { Code = "SRM306" }, new EquipDto { Code = "SRM307" }, new EquipDto { Code = "SRM308" } }
  134. } },
  135. new SXPalletizingInfo
  136. {
  137. Code = "8096",
  138. Equips =new List<List<EquipDto>> {
  139. new List<EquipDto> { new EquipDto { Code = "SRM101" }, new EquipDto { Code = "SRM102" }, new EquipDto { Code = "SRM103" }, new EquipDto { Code = "SRM104" }, new EquipDto { Code = "SRM105" }, new EquipDto { Code = "SRM106" }, new EquipDto { Code = "SRM107" }, new EquipDto { Code = "SRM108" } },
  140. new List<EquipDto> { new EquipDto { Code = "SRM201" }, new EquipDto { Code = "SRM202" }, new EquipDto { Code = "SRM203" }, new EquipDto { Code = "SRM204" }, new EquipDto { Code = "SRM205" }, new EquipDto { Code = "SRM206" }, new EquipDto { Code = "SRM207" }, new EquipDto { Code = "SRM208" } },
  141. new List<EquipDto> { new EquipDto { Code = "SRM301" }, new EquipDto { Code = "SRM302" }, new EquipDto { Code = "SRM303" }, new EquipDto { Code = "SRM304" }, new EquipDto { Code = "SRM305" }, new EquipDto { Code = "SRM306" }, new EquipDto { Code = "SRM307" }, new EquipDto { Code = "SRM308" } }
  142. } },
  143. new SXPalletizingInfo
  144. {
  145. Code = "8098",
  146. Equips =new List<List<EquipDto>> {
  147. new List<EquipDto> { new EquipDto { Code = "SRM101" }, new EquipDto { Code = "SRM102" }, new EquipDto { Code = "SRM103" }, new EquipDto { Code = "SRM104" }, new EquipDto { Code = "SRM105" }, new EquipDto { Code = "SRM106" }, new EquipDto { Code = "SRM107" }, new EquipDto { Code = "SRM108" } },
  148. new List<EquipDto> { new EquipDto { Code = "SRM201" }, new EquipDto { Code = "SRM202" }, new EquipDto { Code = "SRM203" }, new EquipDto { Code = "SRM204" }, new EquipDto { Code = "SRM205" }, new EquipDto { Code = "SRM206" }, new EquipDto { Code = "SRM207" }, new EquipDto { Code = "SRM208" } },
  149. new List<EquipDto> { new EquipDto { Code = "SRM301" }, new EquipDto { Code = "SRM302" }, new EquipDto { Code = "SRM303" }, new EquipDto { Code = "SRM304" }, new EquipDto { Code = "SRM305" }, new EquipDto { Code = "SRM306" }, new EquipDto { Code = "SRM307" }, new EquipDto { Code = "SRM308" } }
  150. }}};
  151. foreach (var item in result)
  152. {
  153. foreach (var equips in item.Equips)
  154. {
  155. foreach (var equipDto in equips)
  156. {
  157. try
  158. {
  159. if (equipDto.Code.Contains("SRM"))
  160. {
  161. var srm521 = dataPack.SRM521?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  162. if (srm521 != null)
  163. {
  164. equipDto.EquipState = srm521.Data?.Mode.GetHashCode() == 1 ? "1" : "2";
  165. }
  166. var srm542 = dataPack.SRM542?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  167. if (srm542 != null && ((int)srm542?.Data.Alarm > 0 || (int)srm542?.Data.Alarm1 > 0))
  168. {
  169. equipDto.EquipState = "3";
  170. }
  171. equipDto.ResidueTask = list.Count(o => !string.IsNullOrEmpty(o.Device) && o.Device.Equals(equipDto.Code) && o.AddrTo == item.Code);
  172. }
  173. }
  174. catch
  175. {
  176. }
  177. }
  178. }
  179. item.TotalQty = list.Count(o => o.AddrTo == item.Code);
  180. }
  181. return result;
  182. }
  183. public List<List<EquipDto>> GetSxEquips(GetEquipsRequest reqEntity)
  184. {
  185. var real = new List<EquipDto>();
  186. var list = _zhongTianSxDataService.GetSxEquips(reqEntity);
  187. var Len = _freeRedisClient.LLen("Packs");
  188. var dataPack = _freeRedisClient.LIndex<DataPack>("Packs", Len - 1);
  189. List<List<EquipDto>> result = new List<List<EquipDto>>
  190. {
  191. new List<EquipDto> { new EquipDto { Code = "SRM101" }, new EquipDto { Code = "SRM102" }, new EquipDto { Code = "SRM103" }, new EquipDto { Code = "SRM104" }, new EquipDto { Code = "SRM105" }, new EquipDto { Code = "SRM106" }, new EquipDto { Code = "SRM107" }, new EquipDto { Code = "SRM108" } },
  192. new List<EquipDto> { new EquipDto { Code = "SRM201" }, new EquipDto { Code = "SRM202" }, new EquipDto { Code = "SRM203" }, new EquipDto { Code = "SRM204" }, new EquipDto { Code = "SRM205" }, new EquipDto { Code = "SRM206" }, new EquipDto { Code = "SRM207" }, new EquipDto { Code = "SRM208" }, new EquipDto { Code = "Robot1" } },
  193. new List<EquipDto> { new EquipDto { Code = "SRM301" }, new EquipDto { Code = "SRM302" }, new EquipDto { Code = "SRM303" }, new EquipDto { Code = "SRM304" }, new EquipDto { Code = "SRM305" }, new EquipDto { Code = "SRM306" }, new EquipDto { Code = "SRM307" }, new EquipDto { Code = "SRM308" }, new EquipDto { Code = "Robot2" } }
  194. };
  195. foreach (var item in result)
  196. {
  197. foreach (var equipDto in item)
  198. {
  199. try
  200. {
  201. if (equipDto.Code.Contains("SRM"))
  202. {
  203. var srm521 = dataPack.SRM521?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  204. if (srm521 != null)
  205. {
  206. equipDto.EquipState = srm521.Data?.Mode.GetHashCode() == 1 ? "1" : "2";
  207. }
  208. var srm542 = dataPack.SRM542?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  209. if (srm542 != null && ((int)srm542?.Data.Alarm > 0 || (int)srm542?.Data.Alarm1 > 0))
  210. {
  211. equipDto.EquipState = "3";
  212. }
  213. equipDto.ResidueTask = list.Count(o => !string.IsNullOrEmpty(o.Device) && o.Device.Equals(equipDto.Code)
  214. && ((o.Type == TaskType.OutDepot && o.Status <= 20 && o.Status >= 0)
  215. || (o.Type == TaskType.TransferDepot && o.Status <= 20 && o.Status >= 0)
  216. || (o.Type == TaskType.EnterDepot && o.Status >= 20 && o.Status < 99))
  217. );
  218. }
  219. else if (equipDto.Code.Contains("Robot"))
  220. {
  221. var robot521 = dataPack.Robot521?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  222. if (robot521 != null)
  223. {
  224. equipDto.EquipState = robot521.Data?.Mode.GetHashCode().ToString();
  225. }
  226. var robot522 = dataPack.Robot522?.FirstOrDefault(o => o.Code.Equals(equipDto.Code));
  227. if (robot522 != null && (int)robot522.Data?.Alarm > 0)
  228. {
  229. equipDto.EquipState = "3";
  230. }
  231. equipDto.ResidueTask = list.Count(o => !string.IsNullOrEmpty(o.Robot) && o.Robot.Equals(equipDto.Code) && o.Type == TaskType.OutDepot && o.Status < 55 && o.Status > 0 && o.BusType == "装箱码垛");
  232. }
  233. }
  234. catch
  235. {
  236. }
  237. }
  238. }
  239. return result;
  240. }
  241. public List<LocationUsageReportViewDto> GetSxLocationUsageViewList()
  242. {
  243. var lists = _zhongTianSxDataService.GetSxLocationUsageReportList();
  244. //result.ReturnValue = list.ToList();
  245. //result.ItemGroupSum = new List<ItemGroup>() {
  246. //new ItemGroup(){ UnitName="总货位",qty=list.Sum(s=>s.AllLocationTotal)},
  247. //new ItemGroup(){ UnitName="有效货位",qty=list.Sum(s=>s.CanUseLocation)},
  248. //new ItemGroup(){ UnitName="空余货位",qty=list.Sum(s=>s.SpareLocation)},
  249. //new ItemGroup(){ UnitName="锁定货位",qty=list.Sum(s=>s.LockLocation)},
  250. //new ItemGroup(){ UnitName="停用货位",qty=list.Sum(s=>s.StopLocation)},
  251. //new ItemGroup(){ UnitName="有料货位",qty=list.Sum(s=>s.MaterilLocation)},
  252. //new ItemGroup(){ UnitName="有容器货位",qty=list.Sum(s=>s.ContainLocation)}
  253. //};
  254. var tunnellists = _zhongTianSxDataService.GetTunnelStopList();
  255. var confLocRateVal = _zhongTianSxDataService.GetSysConfig("LocRateVal");
  256. if (tunnellists != null && tunnellists.Any())
  257. {
  258. //更新巷道状态
  259. lists.ForEach(s =>
  260. {
  261. var conf = tunnellists.Where(m => m.Tunnel == s.Tunnel && m.Floor == s.Floor).ToList();
  262. if (conf != null)
  263. {
  264. if (conf.Where(o => o.Name.Contains("入库")).Any())
  265. {
  266. s.InStates = conf.Where(o => o.Name.Contains("入库")).First().StatuName;
  267. }
  268. if (conf.Where(o => o.Name.Contains("出库")).Any())
  269. {
  270. s.OutStates = conf.Where(o => o.Name.Contains("出库")).First().StatuName;
  271. }
  272. s.LocYWarnVal = int.Parse(confLocRateVal.Default2) ;
  273. s.LocRWarnVal = int.Parse(confLocRateVal.Default1);
  274. }
  275. });
  276. }
  277. lists = lists.OrderBy(s => s.Tunnel).ThenBy(o => o.Floor).ToList();
  278. lists.Add(new LocationUsageReportViewDto()
  279. {
  280. Tunnel = "",
  281. Floor = "",
  282. WarehouseName = "合计:",
  283. AllLocationTotal = lists.Sum(s => s.AllLocationTotal),
  284. CanUseLocation = lists.Sum(s => s.CanUseLocation),
  285. SpareLocation = lists.Sum(s => s.SpareLocation),
  286. LockLocation = lists.Sum(s => s.LockLocation),
  287. StopLocation = lists.Sum(s => s.StopLocation),
  288. MaterilLocation = lists.Sum(s => s.MaterilLocation),
  289. });
  290. return lists;
  291. }
  292. public List<ProductPackRule> GetSxProductPackRule(GetWorkPlanBillListRequest reqEntity)
  293. {
  294. var list = _zhongTianSxDataService.GetSxProductPackRule(reqEntity);
  295. return list;
  296. }
  297. public List<SXTaskInfoDto> GetSxTaskInfo(GetWcsTaskInfoRequest ReqEntity)
  298. {
  299. //List<TaskInfoDto> taskInfoDtos = new List<TaskInfoDto>();
  300. var taskInfoDtos = _zhongTianSxDataService.GetSxRunWcsTaskInfo(ReqEntity);
  301. return taskInfoDtos;
  302. }
  303. public List<SXStockDto> GetExceptionStockInfo()
  304. {
  305. var StockInfoDtos = _zhongTianSxDataService.GetExceptionStockInfo();
  306. return StockInfoDtos;
  307. }
  308. public List<CurStockInfo> GetCurStockInfo()
  309. {
  310. var StockInfoDtos = _zhongTianSxDataService.GetCurStockInfo();
  311. return StockInfoDtos;
  312. }
  313. public List<CurStockInfo> GetCurStockInfoControl()
  314. {
  315. var StockInfoDtos = _zhongTianSxDataService.GetCurStockInfoControl();
  316. return StockInfoDtos;
  317. }
  318. public TorStaticsInfo GetTorStaticsInfo()
  319. {
  320. var StockInfoDtos = _zhongTianSxDataService.GetTorStaticsInfo();
  321. return StockInfoDtos;
  322. }
  323. }
  324. }