HjController.cs 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511
  1. using Apache.NMS;
  2. using Apache.NMS.ActiveMQ;
  3. using Apache.NMS.Util;
  4. using AutoMapper;
  5. using CSRedis;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Newtonsoft.Json;
  9. using Org.BouncyCastle.Crypto;
  10. using System.Collections.Generic;
  11. using System.Diagnostics;
  12. using System.Linq;
  13. using wms.api.Job;
  14. using wms.dto;
  15. using wms.dto.request;
  16. using wms.dto.request.cp.dto;
  17. using wms.dto.request.hj;
  18. using wms.dto.request.hj.dto;
  19. using wms.dto.request.share;
  20. using wms.dto.response;
  21. using wms.dto.response.hj;
  22. using wms.dto.response.share;
  23. using wms.service;
  24. using wms.service.IService;
  25. using wms.service.Service;
  26. using wms.sqlsugar;
  27. using wms.sqlsugar.model.hj;
  28. using wms.util;
  29. using wms.util.Check;
  30. using wms.util.Ext;
  31. using wms.util.Http;
  32. using static NPOI.HSSF.Util.HSSFColor;
  33. namespace wms.api.Controllers
  34. {
  35. /// <summary>
  36. /// 合金库控制器
  37. /// </summary>
  38. [Route("api/[controller]/[action]")]
  39. [ApiController]
  40. public class HjController : BaseController
  41. {
  42. private readonly IHJService _hJService;
  43. private readonly ILogger<HjController> _logger;
  44. private readonly IMapper _mapper;
  45. static object lockerCopperLineReceiveInstr = new object();
  46. static object lockerWetLineBackInApply = new object();
  47. static object lockerStockChange = new object();
  48. static object lockerSpecialPickMaterApply = new object();
  49. static object lockerSyncMaterInfoList = new object();
  50. static object lockerApplyStockOutTask = new object();
  51. static object lockerWetLinePickMaterApply = new object();
  52. static object lockerWetLinePickMaterApplyCheck = new object();
  53. static object lockerCompleteTask = new object();
  54. static object lockerApplyStockInLoc = new object();
  55. static object lockerMoveTask = new object();
  56. static object lockerSrmPickOutCompleted = new object();
  57. static object lockWcsUploadInfo = new object();
  58. static object lockerMannel = new object();
  59. static object lockerCarryTask = new object();
  60. static object lockerStockInfo = new object();
  61. static object lockerPdaTaskInfo = new object();
  62. static object lockerCancelOrComplet = new object();
  63. static object lockerCopperLineToStockOut = new object();
  64. static object lockerFlowDataMoveJob = new object();
  65. Repository<SysJob> _sysJobrepository => new Repository<SysJob>();
  66. public HjController(IHJService hJService, ILogger<HjController> logger, IMapper mapper) :base(hJService, logger)
  67. {
  68. _hJService = hJService;
  69. _logger= logger;
  70. _mapper = mapper;
  71. }
  72. #region 业务方法
  73. /// <summary>
  74. /// 货位初始化
  75. /// </summary>
  76. /// <param name="row"></param>
  77. /// <param name="col"></param>
  78. /// <param name="deot"></param>
  79. /// <param name="rowcount"></param>
  80. /// <param name="tun"></param>
  81. /// <returns></returns>
  82. [HttpPost]
  83. public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun)
  84. {
  85. return _hJService.WareCellInit(row, col, deot, rowcount, tun);
  86. }
  87. /// <summary>
  88. /// 更新任务进程
  89. /// </summary>
  90. /// <param name="reqEntity"></param>
  91. /// <returns></returns>
  92. [HttpPost]
  93. public SRes<int> WcsTaskCallBack(WcsTaskCallBackRequest reqEntity)
  94. {
  95. return _hJService.WcsTaskCallBack(reqEntity);
  96. }
  97. /// <summary>
  98. /// 获取巷道
  99. /// </summary>
  100. /// <param name="reqEntity"></param>
  101. /// <returns></returns>
  102. [HttpPost]
  103. public SRes<string> GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
  104. {
  105. return _hJService.GetTunnelPriorityList(reqEntity);
  106. }
  107. /// <summary>
  108. /// 分配货位
  109. /// </summary>
  110. /// <param name="reqEntity"></param>
  111. /// <returns></returns>
  112. [HttpPost]
  113. public SRes<ApplyStockInLocResponse> ApplyStockInLoc(ApplyStockInLocRequest reqEntity)
  114. {
  115. lock (lockerCompleteTask)
  116. {
  117. return _hJService.ApplyStockInLoc(reqEntity);
  118. }
  119. //return ConcurrencyReqControl<ApplyStockInLocRequest, SRes<ApplyStockInLocResponse>>(lockerApplyStockInLoc, "ApplyStockInLoc" + reqEntity.TunnelNum, "分配货位" + reqEntity.PickUpEquipmentNo, reqEntity, _hJService.ApplyStockInLoc);
  120. }
  121. /// <summary>
  122. /// 完成任务
  123. /// </summary>
  124. /// <param name="reqEntity"></param>
  125. /// <returns></returns>
  126. [HttpPost]
  127. public SRes<int> CompleteTask(CompleteTaskRequest reqDto)
  128. {
  129. lock (lockerCompleteTask)
  130. {
  131. return _hJService.CompleteTask(reqDto);
  132. }
  133. }
  134. /// <summary>
  135. /// 申请移库任务
  136. /// </summary>
  137. /// <param name="reqEntity"></param>
  138. /// <returns></returns>
  139. [HttpPost]
  140. public SRes<AddWcsMoveTaskResponse> AddWcsMoveTask(AddWcsMoveTaskRequest reqEntity)
  141. {
  142. lock (lockerCompleteTask)
  143. {
  144. return _hJService.AddWcsMoveTask(reqEntity);
  145. }
  146. }
  147. /// <summary>
  148. /// 堆垛机出库放货完成
  149. /// </summary>
  150. /// <param name="reqEntity"></param>
  151. /// <returns></returns>
  152. [HttpPost]
  153. public SRes<int> SrmPickOutCompleted(SrmPickOutCompletedRequest reqDto)
  154. {
  155. lock (lockerCompleteTask)
  156. {
  157. return _hJService.SrmPickOutCompleted(reqDto);
  158. }
  159. }
  160. /// <summary>
  161. /// WCS信息上传
  162. /// </summary>
  163. /// <param name="reqEntity"></param>
  164. /// <returns></returns>
  165. [HttpPost]
  166. public SRes WcsUploadInfo(WcsUploadInfoRequest reqDto)
  167. {
  168. lock (lockWcsUploadInfo)
  169. {
  170. //if (reqDto.Weight > 1)
  171. //{
  172. // var webBaseUrl = AppSettings.GetConfig("maxweight");
  173. //}
  174. return _hJService.WcsUploadInfo(reqDto);
  175. }
  176. }
  177. /// <summary>
  178. /// 物料主数据推送接口
  179. /// </summary>
  180. /// <param name="reqBody"></param>
  181. /// <returns></returns>
  182. [HttpPost]
  183. public SRes SyncMaterInfoList(HJSyncMaterInfoListRequest reqDto)
  184. {
  185. var res = new SRes();
  186. if (string.IsNullOrEmpty(reqDto.ReqId))
  187. {
  188. res.ResCode = ResponseStatusCodeEnum.NotReqId.GetHashCode();
  189. res.ResMsg = ResponseStatusCodeEnum.NotReqId.GetDescription();
  190. return res;
  191. }
  192. if (reqDto.ListInfo == null || !reqDto.ListInfo.Any())
  193. {
  194. res.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
  195. res.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
  196. return res;
  197. }
  198. res = ConcurrencyReqControl<HJSyncMaterInfoListRequest, SRes>(lockerSyncMaterInfoList, "SyncMaterInfoList", "物料主数据推送" + reqDto.ReqId, reqDto, _hJService.SyncMaterInfo);
  199. try
  200. {
  201. HttpUtil.PostRequest("http://10.30.45.5:9191/databus/publish/syncMatBasicInfosForLiku", JsonConvert.SerializeObject(reqDto), 30000, "UTF-8", "application/json");
  202. }
  203. catch (Exception ex)
  204. {
  205. _logger.LogInformation("调用agv主数据异常" + ex.ToString());
  206. }
  207. return res;
  208. }
  209. /// <summary>
  210. /// 镀铜满轮入库/550工字轮入库反馈接口
  211. /// </summary>
  212. /// <param name="billcode"></param>
  213. /// <returns></returns>
  214. [HttpPost(Name = "CopperLineStockInFeedBack")]
  215. public CopperLineStockInFeedBackResponse CopperLineStockInFeedBack(string billcode)
  216. {
  217. var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "CopperLineStockInFeedBack" && p.PostResult == 0 ||( p.PostResult == 2 && p.PostNum < 5));
  218. if (!list.Any())
  219. {
  220. return new CopperLineStockInFeedBackResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  221. }
  222. var dtolist = _mapper.Map<List<CopperLineStockInFeedBackItem>>(list);
  223. CopperLineStockInFeedBackRequest dto = new CopperLineStockInFeedBackRequest();
  224. dto.ListInfo = dtolist;
  225. CopperLineStockInFeedBackResponse resbody = JsonConvert.DeserializeObject<CopperLineStockInFeedBackResponse>(WmsServiceExportApi(dto));
  226. List<long> ids = list.Select(p => p.Id).ToList();
  227. List<string> doccodelist = list.Select(p => p.BillCode).ToList();
  228. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  229. {
  230. //更新推送表数据
  231. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  232. {
  233. Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 },
  234. WhereExpression = it => ids.Contains(it.Id)
  235. });
  236. //删除单据表数据
  237. _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo));
  238. }
  239. else
  240. {
  241. //更新推送表数据
  242. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  243. {
  244. Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 },
  245. WhereExpression = it => ids.Contains(it.Id)
  246. });
  247. }
  248. return resbody;
  249. }
  250. /// <summary>
  251. /// 湿拉生产退料/余料反馈接口
  252. /// </summary>
  253. /// <param name="billcode"></param>
  254. /// <returns></returns>
  255. [HttpPost(Name = "WetLineBackInFeedBack")]
  256. public WetLineBackInFeedBackResponse WetLineBackInFeedBack(string billcode)
  257. {
  258. var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "WetLineBackInFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostNum < 5));
  259. var dtolist = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(list);
  260. var dto = new WetLineBackInFeedBackRequest() { ListInfo = dtolist };
  261. WetLineBackInFeedBackResponse resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(dtolist));
  262. List<long> ids = list.Select(p => p.Id).ToList();
  263. List<string> doccodelist = list.Select(p => p.BillCode).ToList();
  264. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  265. {
  266. //更新推送表数据
  267. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  268. {
  269. Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 },
  270. WhereExpression = it => ids.Contains(it.Id)
  271. });
  272. //删除单据表数据
  273. _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo));
  274. }
  275. else
  276. {
  277. //更新推送表数据
  278. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  279. {
  280. Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 },
  281. WhereExpression = it => ids.Contains(it.Id)
  282. });
  283. }
  284. return resbody;
  285. }
  286. /// <summary>
  287. /// 改判反馈接口
  288. /// </summary>
  289. /// <param name="billcode"></param>
  290. /// <returns></returns>
  291. [HttpPost(Name = "StockChangeFeedBack")]
  292. public StockChangeFeedBackResponse StockChangeFeedBack(string billcode)
  293. {
  294. var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode);
  295. var dtolist = _mapper.Map<List<StockChangeRequestItem>>(list);
  296. StockChangeFeedBackRequest dto = new StockChangeFeedBackRequest() { BillCode = billcode };
  297. dto.ListInfo = dtolist;
  298. StockChangeFeedBackResponse resbody = JsonConvert.DeserializeObject<StockChangeFeedBackResponse>(WmsServiceExportApi(dto));
  299. List<long> ids = list.Select(p => p.Id).ToList();
  300. List<string> doccodelist = list.Select(p => p.BillCode).ToList();
  301. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  302. {
  303. //更新推送表数据
  304. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  305. {
  306. Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 },
  307. WhereExpression = it => ids.Contains(it.Id)
  308. });
  309. //删除单据表数据
  310. _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo));
  311. }
  312. else
  313. {
  314. //更新推送表数据
  315. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  316. {
  317. Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 },
  318. WhereExpression = it => ids.Contains(it.Id)
  319. });
  320. }
  321. return resbody;
  322. }
  323. /// <summary>
  324. /// 特殊料反馈接口
  325. /// </summary>
  326. /// <param name="billcode"></param>
  327. /// <returns></returns>
  328. [HttpPost(Name = "SpecialPickMaterFeedBack")]
  329. public SpecialPickMaterFeedBackResponse SpecialPickMaterFeedBack(string billcode)
  330. {
  331. var list = _hJService.GetBillFeedbackList(p => p.BillCode == billcode && p.ApiCode == "SpecialPickMaterFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostNum < 5));
  332. var dtolist = _mapper.Map<List<SpecialPickMaterFeedBackRequestItem>>(list);
  333. SpecialPickMaterFeedBackRequest dto = new SpecialPickMaterFeedBackRequest() { ListInfo = dtolist };
  334. SpecialPickMaterFeedBackResponse resbody = JsonConvert.DeserializeObject<SpecialPickMaterFeedBackResponse>(WmsServiceExportApi(dtolist));
  335. List<long> ids = list.Select(p => p.Id).ToList();
  336. List<string> doccodelist = list.Select(p => p.BillCode).ToList();
  337. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  338. {
  339. //更新推送表数据
  340. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  341. {
  342. Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 },
  343. WhereExpression = it => ids.Contains(it.Id)
  344. });
  345. //删除单据表数据
  346. _hJService.DeleteDoc(p => doccodelist.Contains(p.DocNo));
  347. }
  348. else
  349. {
  350. //更新推送表数据
  351. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  352. {
  353. Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 },
  354. WhereExpression = it => ids.Contains(it.Id)
  355. });
  356. }
  357. return resbody;
  358. }
  359. /// <summary>
  360. /// 移库货位上报MES接口
  361. /// </summary>
  362. /// <param name="billcode"></param>
  363. /// <returns></returns>
  364. [HttpPost(Name = "MoveStockFeedBack")]
  365. public MoveStockFeedBackResponse MoveStockFeedBack(string billcode)
  366. {
  367. var list = _hJService.GetBillFeedbackList1(p => p.DocsNo == billcode && p.TypeCode == "MoveStockFeedBack" && p.PostResult == 0 || (p.PostResult == 2 && p.PostQty < 5));
  368. var dtolist = _mapper.Map<List<MoveStockFeedBackRequestItem>>(list);
  369. MoveStockFeedBackRequest dto = new MoveStockFeedBackRequest() { ListInfo = dtolist };
  370. MoveStockFeedBackResponse resbody = JsonConvert.DeserializeObject<MoveStockFeedBackResponse>(WmsServiceExportApi(dto));
  371. List<long> ids = list.Select(p => p.Id).ToList();
  372. List<string> doccodelist = list.Select(p => p.DocsNo).ToList();
  373. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  374. {
  375. //更新推送表数据
  376. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  377. {
  378. Columns = it => new hjBillFeedbackPush { PostResult = 1, PostNum = it.PostNum + 1 },
  379. WhereExpression = it => ids.Contains(it.Id)
  380. });
  381. }
  382. else
  383. {
  384. //更新推送表数据
  385. _hJService.UpdateBillFeedbackPushModelColumns(new sqlsugar.model.UpdateModelColumns<hjBillFeedbackPush>()
  386. {
  387. Columns = it => new hjBillFeedbackPush { PostResult = 2, PostNum = it.PostNum + 1 },
  388. WhereExpression = it => ids.Contains(it.Id)
  389. });
  390. }
  391. return resbody;
  392. }
  393. /// <summary>
  394. /// 条码信息查询接口
  395. /// </summary>
  396. /// <param name="billcode"></param>
  397. /// <returns></returns>
  398. [HttpPost(Name = "GetBarCodeInfo")]
  399. public GetBarCodeInfoResponse GetBarCodeInfo(GetBarCodeInfoRequest barcode)
  400. {
  401. GetBarCodeInfoResponse resbody = JsonConvert.DeserializeObject<GetBarCodeInfoResponse>(WmsServiceExportApi(barcode));
  402. return resbody;
  403. }
  404. /// <summary>
  405. /// 镀铜补空/取满指令接收接口(包含550工字轮)
  406. /// </summary>
  407. /// <param name="reqDto"></param>
  408. /// <returns></returns>
  409. [HttpPost(Name = "CopperLineReceiveInstr")]
  410. public SRes CopperLineReceiveInstr(CopperLineNewRequest reqDtoList)
  411. {
  412. var res = new SRes();
  413. if (reqDtoList != null && reqDtoList.data!= null && reqDtoList.data.Any())
  414. {
  415. foreach (var reqDto in reqDtoList.data)
  416. {
  417. res = ConcurrencyReqControl<CopperLineRequest, SRes>(lockerCopperLineReceiveInstr, "CopperLineReceiveInstr" + reqDto.WbCode, reqDto.WbCode, reqDto, _hJService.CopperLineReceiveInstr);
  418. if (res.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  419. {
  420. continue;
  421. }
  422. }
  423. }
  424. return res;
  425. }
  426. /// <summary>
  427. /// 镀铜补空/取满指令接收接口(手持机用)
  428. /// </summary>
  429. /// <param name="reqDto"></param>
  430. /// <returns></returns>
  431. [HttpPost(Name = "PdaCopperLineReceiveInstr")]
  432. public SRes PdaCopperLineReceiveInstr(CopperLineRequest reqDto)
  433. {
  434. return ConcurrencyReqControl<CopperLineRequest, SRes>(lockerCopperLineReceiveInstr, "CopperLineReceiveInstr" + reqDto.WbCode, reqDto.WbCode, reqDto, _hJService.PdaCopperLineReceiveInstr);
  435. }
  436. /// <summary>
  437. /// 合金一楼满轮出库申请(mes调用)
  438. /// </summary>
  439. /// <param name="reqDto"></param>
  440. /// <returns></returns>
  441. [HttpPost(Name = "CopperLineToStockOut")]
  442. public SRes CopperLineToStockOut(CopperLineToStockOutRequest reqDto)
  443. {
  444. return ConcurrencyReqControl<CopperLineToStockOutRequest, SRes>(lockerCopperLineToStockOut, "CopperLineToStockOut", reqDto.MatCode, reqDto, _hJService.CopperLineToStockOut);
  445. }
  446. /// <summary>
  447. /// 申请出库任务(一楼空轮)
  448. /// </summary>
  449. /// <param name="reqDto"></param>
  450. /// <returns></returns>
  451. [HttpPost]
  452. public ApplyStockOutTaskResponse ApplyStockOutTask(ApplyStockOutTaskRequest reqDto)
  453. {
  454. var result = new ApplyStockOutTaskResponse();
  455. if (reqDto.OutType == 2)
  456. {
  457. if (string.IsNullOrEmpty(reqDto.Tunnel))
  458. {
  459. return new ApplyStockOutTaskResponse()
  460. {
  461. ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode(),
  462. ResMsg = "巷道值没有传值"
  463. };
  464. }
  465. var req = new ApplyEmptySpoolRequest() { Tunnel = int.Parse(reqDto.Tunnel),OutEndPostion = reqDto.OutEndPostion };
  466. return ConcurrencyReqControl<ApplyEmptySpoolRequest, ApplyStockOutTaskResponse>(lockerApplyStockOutTask, "ApplyStockOutTask", reqDto.OutEndPostion, req, _hJService.ApplyEmptySpoolService);
  467. }
  468. return result;
  469. }
  470. /// <summary>
  471. /// 获取巷道空轮数量
  472. /// </summary>
  473. /// <returns></returns>
  474. [HttpPost]
  475. public SRes<GetTunnelEmptyConResponse> GetTunnelEmptyConCount(GetTunnelEmptyConCountRequest reqDto)
  476. {
  477. return _hJService.GetTunnelEmptyConCount(reqDto);
  478. }
  479. /// <summary>
  480. /// 库存改判
  481. /// </summary>
  482. /// <param name="reqDto"></param>
  483. /// <returns></returns>
  484. [HttpPost(Name = "StockChange")]
  485. public StockChangeResponse StockChange(StockChangeRequest reqDto)
  486. {
  487. return ConcurrencyReqControl<StockChangeRequest, StockChangeResponse>(lockerStockChange, "HJStockChange", reqDto.BillCode, reqDto, _hJService.StockChange);
  488. }
  489. /// <summary>
  490. /// 特殊出库领料申请接口
  491. /// </summary>
  492. /// <param name="reqDto"></param>
  493. /// <returns></returns>
  494. [HttpPost(Name = "SpecialPickMaterApply")]
  495. public SpecialPickMaterApplyResponse SpecialPickMaterApply(SpecialPickMaterApplyRequest reqDto)
  496. {
  497. return ConcurrencyReqControl<SpecialPickMaterApplyRequest, SpecialPickMaterApplyResponse>(lockerSpecialPickMaterApply, "SpecialPickMaterApply", reqDto.MatBarCode, reqDto, _hJService.SpecialPickMaterApply);
  498. }
  499. /// <summary>
  500. /// 实时库存查询接口
  501. /// </summary>
  502. /// <param name="reqDto"></param>
  503. /// <returns></returns>
  504. [HttpPost]
  505. public GetCurStockListResponse GetCurStockList(GetCurStockListRequest reqDto)
  506. {
  507. return _hJService.GetCurStockList(reqDto);
  508. }
  509. #endregion
  510. #region RCS调用接口
  511. /// <summary>
  512. /// 镀铜一楼res下任务
  513. /// </summary>
  514. /// <param name="reqDto"></param>
  515. /// <returns></returns>
  516. [HttpPost]
  517. public GenAgvSchedulingTaskResponse CopperLineAgvTaskToRcs(GenAgvSchedulingTaskRequest reqDto)
  518. {
  519. var result = new GenAgvSchedulingTaskResponse();
  520. //GenAgvSchedulingTaskRequest resReq = new GenAgvSchedulingTaskRequest();
  521. var apiurl = wms.util.AppSettings.GetConfig("RcsCreateTaskPushUrl");
  522. var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000);
  523. if (string.IsNullOrEmpty(strRes))
  524. {
  525. result.message = "返回空";
  526. return result;
  527. }
  528. return JsonConvert.DeserializeObject<GenAgvSchedulingTaskResponse>(strRes);
  529. }
  530. /// <summary>
  531. /// 镀铜一楼res继续任务
  532. /// </summary>
  533. /// <param name="reqDto"></param>
  534. /// <returns></returns>
  535. [HttpPost]
  536. public GenAgvSchedulingTaskResponse CopperLineContinueTaskToRcs(GenAgvSchedulingTaskRequest reqDto)
  537. {
  538. var result = new GenAgvSchedulingTaskResponse();
  539. //GenAgvSchedulingTaskRequest resReq = new GenAgvSchedulingTaskRequest()
  540. //{ };
  541. var apiurl = wms.util.AppSettings.GetConfig("RcsContinuePushUrl");
  542. var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000);
  543. if (string.IsNullOrEmpty(strRes))
  544. {
  545. result.message = "返回空";
  546. return result;
  547. }
  548. return JsonConvert.DeserializeObject<GenAgvSchedulingTaskResponse>(strRes);
  549. }
  550. /// <summary>
  551. /// 镀铜二楼IWMS下发满轮出库
  552. /// </summary>
  553. /// <param name="reqDto"></param>
  554. /// <returns></returns>
  555. [HttpPost]
  556. public SRes CopperLineAgvTaskStockOutToIWms(CopperLineAgvTaskStockOutToIWmsRequest reqDto)
  557. {
  558. var result = new SRes();
  559. CopperLineAgvTaskStockOutToIWmsRequest resReq = new CopperLineAgvTaskStockOutToIWmsRequest()
  560. {
  561. matCode = "",
  562. wbCode = "满轮接驳口",
  563. inSpoolFull = "1",
  564. wetInto = true,
  565. wetIntoSpec = false,
  566. isSurplus = "",
  567. isRework = "",
  568. matNo = "",
  569. spoolNo = "",
  570. gradeCode = "",
  571. taskNo = Guid.NewGuid().ToString(),
  572. };
  573. var apiurl = wms.util.AppSettings.GetConfig("IWmsStockOutPushUrl");
  574. var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000);
  575. if (string.IsNullOrEmpty(strRes))
  576. {
  577. //result.message = "返回空";
  578. return result;
  579. }
  580. return JsonConvert.DeserializeObject<SRes>(strRes);
  581. }
  582. /// <summary>
  583. /// 镀铜二楼IWMS下发空轮/退料/余料入库
  584. /// </summary>
  585. /// <param name="reqDto"></param>
  586. /// <returns></returns>
  587. [HttpPost]
  588. public SRes CopperLineAgvTaskStockInToIWms(CopperLineAgvTaskStockInToIWmsRequest reqDto)
  589. {
  590. var result = new SRes();
  591. CopperLineAgvTaskStockInToIWmsRequest resReq = new CopperLineAgvTaskStockInToIWmsRequest()
  592. {
  593. matCode = "",
  594. workAreaCode = "11",
  595. outSpoolFull = "1",
  596. taskNo = Guid.NewGuid().ToString()
  597. };
  598. var apiurl = wms.util.AppSettings.GetConfig("IWmsStockInPushUrl");
  599. var strRes = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(reqDto), 30000);
  600. if (string.IsNullOrEmpty(strRes))
  601. {
  602. //result.message = "返回空";
  603. return result;
  604. }
  605. return JsonConvert.DeserializeObject<SRes>(strRes);
  606. }
  607. /// <summary>
  608. /// 复核异常上报接口
  609. /// </summary>
  610. /// <param name="request"></param>
  611. /// <returns></returns>
  612. [HttpPost]
  613. public RfidCheckDiffResponse RfidCheckDiff(RfidCheckDiffRequest request)
  614. {
  615. var res = new RfidCheckDiffResponse();
  616. //异常
  617. _hJService.RfidCheckDiffService(request);
  618. _logger.LogInformation("复核异常上报接口RfidCheckDiff接收数据:" + JsonConvert.SerializeObject(request));
  619. return res;
  620. }
  621. /// <summary>
  622. /// 湿拉生产退料/余料/空轮申请接口
  623. /// </summary>
  624. /// <param name="request"></param>
  625. /// <returns></returns>
  626. [HttpPost]
  627. public SRes WetLineBackInApply(WetLineBackInApplyRequest reqDto)
  628. {
  629. //return ConcurrencyReqControl<WetLineBackInApplyRequest, SRes>(lockerWetLineBackInApply, "WetLineBackInApply", reqDto.MatBarCode, reqDto, _hJService.WetLineBackInApplyService);
  630. lock (lockerWetLineBackInApply)
  631. {
  632. return _hJService.WetLineBackInApplyService(reqDto);
  633. }
  634. }
  635. /// <summary>
  636. /// 湿拉产线领料申请接口WetLinePickMaterApply
  637. /// </summary>
  638. /// <param name="request"></param>
  639. /// <returns></returns>
  640. [HttpPost]
  641. public SRes WetLinePickMaterApply(WetLinePickMaterApplyRequest reqDto)
  642. {
  643. reqDto.Priority = 0;//优先级暂时屏蔽
  644. //return ConcurrencyReqControl<WetLinePickMaterApplyRequest, SRes>(lockerWetLinePickMaterApply, "WetLinePickMaterApply" + reqDto.MatCode, reqDto.MatCode, reqDto, _hJService.WetLinePickMaterApplyService);
  645. lock (lockerWetLinePickMaterApply)
  646. {
  647. return _hJService.WetLinePickMaterApplyService(reqDto);
  648. }
  649. }
  650. /// <summary>
  651. /// 湿拉产线领料申请复核验证
  652. /// </summary>
  653. /// <param name="request"></param>
  654. /// <returns></returns>
  655. [HttpPost]
  656. public SRes WetLinePickMaterApplyCheck(WetLinePickMaterApplyRequest reqDto)
  657. {
  658. reqDto.Priority = 0;//优先级暂时屏蔽
  659. //return ConcurrencyReqControl<WetLinePickMaterApplyRequest, SRes>(lockerWetLinePickMaterApply, "WetLinePickMaterApply" + reqDto.MatCode, reqDto.MatCode, reqDto, _hJService.WetLinePickMaterApplyService);
  660. lock (lockerWetLinePickMaterApplyCheck)
  661. {
  662. return _hJService.ApplyStockOutCheck(reqDto);
  663. }
  664. }
  665. #endregion
  666. #region 定时任务业务
  667. /// <summary>
  668. /// 添加定时任务
  669. /// </summary>
  670. /// <param name="request"></param>
  671. /// <returns></returns>
  672. [HttpPost]
  673. public string AddJob(AddJobRequest request)
  674. {
  675. request.Id = IdFactory.NewId();
  676. return _hJService.AddJob(request);
  677. }
  678. /// <summar y>
  679. /// 编辑定时任务
  680. /// </summary>
  681. /// <returns></returns>
  682. [HttpPost]
  683. public string UpdateJobEntity(AddJobRequest request)
  684. {
  685. return _hJService.UpdateJobEntity(request);
  686. }
  687. /// <summary>
  688. /// 获取job根据id
  689. /// </summary>
  690. /// <returns></returns>
  691. [HttpPost]
  692. public string GetSysJobById(long id)
  693. {
  694. return JsonConvert.SerializeObject(_hJService.GetSysJobById(id));
  695. }
  696. /// <summary>
  697. /// 启用job
  698. /// </summary>
  699. /// <param name="id"></param>
  700. /// <returns></returns>
  701. [HttpPost]
  702. public string StartJob(DetailRequest2Str req)
  703. {
  704. var res = new SRes();
  705. var sysjob = _sysJobrepository.GetById(req.Id);
  706. if (sysjob == null)
  707. {
  708. res.ResCode = 0;
  709. res.ResMsg = "没有找到对应的定时任务";
  710. return res.ToCamelCaseString();
  711. }
  712. JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
  713. return res.ToCamelCaseString();
  714. }
  715. /// <summary>
  716. /// 执行job
  717. /// </summary>
  718. /// <param name="reqEntity"></param>
  719. /// <returns></returns>
  720. [HttpPost]
  721. public string ExecuteJob(DetailCodeRequest reqEntity)
  722. {
  723. var res = new SRes();
  724. if (string.IsNullOrEmpty(reqEntity.Code))
  725. {
  726. res.ResCode = 0;
  727. res.ResMsg = "参数错误";
  728. return res.ToCamelCaseString();
  729. }
  730. var jobEntity = _sysJobrepository.GetSingle(p => p.Code == reqEntity.Code);
  731. if (jobEntity == null)
  732. {
  733. res.ResCode = 0;
  734. res.ResMsg = "没有找到该编码";
  735. return res.ToCamelCaseString();
  736. }
  737. var jobapilist = _hJService.GetSysApiDetail(jobEntity.Id);
  738. if (jobapilist.Any())
  739. {
  740. foreach (var item in jobapilist)
  741. {
  742. Task.Run(() => { HttpUtil.PostRequest(item.ApiUrl, item.RequestBody); });
  743. }
  744. }
  745. return res.ToCamelCaseString();
  746. }
  747. /// <summary>
  748. /// 分页Job列表
  749. /// </summary>
  750. /// <param name="reqEntity"></param>
  751. /// <returns></returns>
  752. [HttpPost]
  753. public List<dto.response.hj.SysJobDto> GetSysJobList(GetSysJobListRequest reqEntity)
  754. {
  755. var list = _sysJobrepository.GetList();
  756. var listdto = _mapper.Map<List<dto.response.hj.SysJobDto>>(list);
  757. if (listdto != null && listdto.Any())
  758. {
  759. for (int i = 0; i < list.Count; i++)
  760. {
  761. listdto[i].JobExecuteStatus = GetExecuteStatus(new DetailCodeRequest() { Code = listdto[i].Code });
  762. }
  763. return listdto;
  764. }
  765. return new List<dto.response.hj.SysJobDto>();
  766. }
  767. /// <summary>
  768. /// 获取执行状态
  769. /// </summary>
  770. /// <param name="reqEntity"></param>
  771. /// <returns></returns>
  772. [HttpPost]
  773. public string GetExecuteStatus(DetailCodeRequest reqEntity)
  774. {
  775. var jobInfo = _sysJobrepository.GetFirst(p=>p.Code == reqEntity.Code);
  776. var jobs = JobScheduler.GetJobList(Const.JobGroupName).Result;
  777. if (jobs != null)
  778. {
  779. var temp = jobs.Where(p => p.JobName == jobInfo.Code);
  780. if (temp.Any())
  781. {
  782. return temp.First().JobStatus;
  783. }
  784. else
  785. {
  786. return "Stop";
  787. }
  788. }
  789. else
  790. {
  791. return "Stop";
  792. }
  793. }
  794. [HttpPost]
  795. public string GetId()
  796. {
  797. return IdFactory.NewId().ToString();
  798. }
  799. #endregion
  800. #region 库存管理
  801. /// <summary>
  802. /// 手动出库确定
  803. /// </summary>
  804. /// <param name="request"></param>
  805. /// <returns></returns>
  806. [HttpPost]
  807. public string ManualTask(ManualTaskRequest request)
  808. {
  809. lock (lockerMannel)
  810. {
  811. return _hJService.ManualTask(request);
  812. }
  813. }
  814. #endregion
  815. #region 合金PDA
  816. /// <summary>
  817. /// 合金解绑
  818. /// </summary>
  819. /// <param name="request"></param>
  820. /// <returns></returns>
  821. [HttpPost]
  822. public SRes<int> Unbounding(UnboundRequest request)
  823. {
  824. return _hJService.Unbounding(request);
  825. }
  826. #region pda出库
  827. /// <summary>
  828. /// pda指定出库确定
  829. /// </summary>
  830. /// <param name="request"></param>
  831. /// <returns></returns>
  832. [HttpPost]
  833. public string PdaManualTask(ManualTaskRequest request)
  834. {
  835. request.BusType = TaskBusType.TaskBusType_HJ_PdaManualOut.GetHashCode().ToString();
  836. return _hJService.ManualTask(request);
  837. }
  838. /// <summary>
  839. /// pda质检领料出库确定
  840. /// </summary>
  841. /// <param name="request"></param>
  842. /// <returns></returns>
  843. [HttpPost]
  844. public string PdaQualityTask(ManualTaskRequest request)
  845. {
  846. request.BusType = TaskBusType.TaskBusType_HJ_QualityOut.GetHashCode().ToString();
  847. return _hJService.ManualTask(request);
  848. }
  849. /// <summary>
  850. /// pda呆滞料出库确定
  851. /// </summary>
  852. /// <param name="request"></param>
  853. /// <returns></returns>
  854. [HttpPost]
  855. public string PdaInactionStockTask(ManualTaskRequest request)
  856. {
  857. request.BusType = TaskBusType.TaskBusType_HJ_DullMaterOut.GetHashCode().ToString();
  858. return _hJService.ManualTask(request);
  859. }
  860. #endregion
  861. /// <summary>
  862. /// pda单据查询
  863. /// </summary>
  864. /// <param name="request"></param>
  865. /// <returns></returns>
  866. [HttpPost]
  867. public string GetDocumentsAll(DocumentsRequest request)
  868. {
  869. return _hJService.GetPageDocumentsList(request).ToCamelCaseString();
  870. }
  871. /// <summary>
  872. /// pda单据明细查询(传单号)
  873. /// </summary>
  874. /// <param name="request"></param>
  875. /// <returns></returns>
  876. [HttpPost]
  877. public string GetDocumentDetails(DocumentsRequest request)
  878. {
  879. return _hJService.GetDocumentDetailListByDocsNo(request).ToCamelCaseString();
  880. }
  881. /// <summary>
  882. /// 获取物料信息,根据RFID
  883. /// </summary>
  884. /// <param name="request"></param>
  885. /// <returns></returns>
  886. [HttpPost]
  887. public SRes<MaterInfo> GetMaterInfoByRfid(PdaRfidRequest request)
  888. {
  889. return _hJService.MaterInfoByRfid(request);
  890. }
  891. /// <summary>
  892. /// 提交(组盘)
  893. /// </summary>
  894. /// <param name="request"></param>
  895. /// <returns></returns>
  896. [HttpPost]
  897. public string PdaGroupStock(PdaRfidRequest request)
  898. {
  899. lock (lockerStockInfo)
  900. {
  901. return _hJService.PdaGroupStock(request);
  902. }
  903. }
  904. /// <summary>
  905. /// pda 下发任务
  906. /// </summary>
  907. /// <param name="request"></param>
  908. /// <returns></returns>
  909. [HttpPost]
  910. public string PdaInsterInTask(PdaRfidRequest request)
  911. {
  912. lock (lockerPdaTaskInfo)
  913. {
  914. return _hJService.PdaInsertTask(request);
  915. }
  916. }
  917. /// <summary>
  918. /// 获取设备报警信息
  919. /// </summary>
  920. /// <param name="request"></param>
  921. /// <returns></returns>
  922. [HttpPost]
  923. public string GetEquipErrorInfo(ErrorInfoRequest request)
  924. {
  925. var it = RedisHelper.Get("equoneRGV3");
  926. return it;
  927. }
  928. /// <summary>
  929. /// 获取物料报警信息
  930. /// </summary>
  931. /// <param name="request"></param>
  932. /// <returns></returns>
  933. [HttpPost]
  934. public string GetMaterErrorInfo(ErrorInfoRequest request)
  935. {
  936. return "";
  937. }
  938. /// <summary>
  939. /// 获取业务报警信息
  940. /// </summary>
  941. /// <param name="request"></param>
  942. /// <returns></returns>
  943. [HttpPost]
  944. public string GetBusinessErrorInfo(ErrorInfoRequest request)
  945. {
  946. return "";
  947. }
  948. /// <summary>
  949. /// agv空轮搬运任务(一楼空轮初始化)
  950. /// </summary>
  951. /// <param name="request"></param>
  952. /// <returns></returns>
  953. [HttpPost]
  954. public string AgvTaskInfo(AgvTaskInfoRequest request)
  955. {
  956. return _hJService.AgvCarryTaskInfo(request);
  957. }
  958. #endregion
  959. /// <summary>
  960. /// 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用)
  961. /// </summary>
  962. /// <param name="request"></param>
  963. /// <returns></returns>
  964. [HttpPost]
  965. public SRes CancelTaskVerify(CancelTaskRequest request)
  966. {
  967. lock (lockerCancelOrComplet)
  968. {
  969. return _hJService.CancelTaskVerify(request);
  970. }
  971. }
  972. /// <summary>
  973. /// 执行任务(开放wcs调用,前端不调用)
  974. /// </summary>
  975. /// <param name="request"></param>
  976. /// <returns></returns>
  977. [HttpPost]
  978. public SRes CarryTaskInfo(CancelTaskRequest request)
  979. {
  980. lock (lockerCarryTask)
  981. {
  982. return _hJService.CarryTaskInfo(request);
  983. }
  984. }
  985. /// <summary>du
  986. /// 异常任务的库存处理
  987. /// </summary>
  988. /// <returns></returns>
  989. [HttpPost]
  990. public SRes GetErrorTaskInfo()
  991. {
  992. var res = new SRes();
  993. //获取货位锁是出库锁,当前时间差大于等于1
  994. var list = _hJService.GetOutStateList();
  995. //根据条码捞取历史任务表中的数据
  996. var barcode = list.Select(p => p.ContGrpBarCode).ToList();
  997. var task = _hJService.GetTaskHistoryByCode(barcode);
  998. if (task.Any())
  999. {
  1000. foreach (var item in task)
  1001. {
  1002. if (item.Type != TaskType.OutDepot)
  1003. {
  1004. continue;
  1005. }
  1006. if (item.Status != dto.TaskStatus.Finish)
  1007. {
  1008. continue;
  1009. }
  1010. var info = CompleteTask(new CompleteTaskRequest() { TaskNum = item.ID, OperationType = 2, WCSUpdateName = "wcs" });
  1011. if (info.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  1012. {
  1013. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1014. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1015. return res;
  1016. }
  1017. }
  1018. }
  1019. return res;
  1020. }
  1021. #region 推送数据
  1022. /// <summary>
  1023. /// 数据推送接口
  1024. /// </summary>
  1025. /// <param name="request"></param>
  1026. /// <returns></returns>
  1027. [HttpPost]
  1028. public PushResponse PushErpDate(PushDate request)
  1029. {
  1030. var result = new PushResponse();
  1031. if (request.init == 1)
  1032. {
  1033. //手动推送
  1034. if (!request.CLBarCode.Any())
  1035. {
  1036. result.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  1037. result.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  1038. return result;
  1039. }
  1040. var list = _hJService.GetPushDatelistMannel(request);
  1041. if (!list.Any())
  1042. {
  1043. result.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode();
  1044. result.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription();
  1045. return result;
  1046. }
  1047. if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList().Any())
  1048. {
  1049. PushRequest push = new PushRequest();
  1050. var onefloor = list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList();
  1051. var info = _mapper.Map<List<ListInfo>>(onefloor);
  1052. push.list = info;
  1053. var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(push));
  1054. var matBarCode = info.Select(p => p.MatBarCode).ToList();
  1055. if (resbody.success == true)
  1056. {
  1057. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1058. {
  1059. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送成功", EditTime = DateTime.Now },
  1060. WhereExpression = it => matBarCode.Contains(it.CLBarCode)
  1061. });
  1062. }
  1063. else
  1064. {
  1065. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1066. {
  1067. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "手动推送失败", EditTime = DateTime.Now },
  1068. WhereExpression = it => matBarCode.Contains(it.CLBarCode)
  1069. });
  1070. }
  1071. }
  1072. //退料
  1073. //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString()).ToList().Any())
  1074. //{
  1075. // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest();
  1076. // var back = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(list);
  1077. // back.ForEach(p =>
  1078. // {
  1079. // p.BusType = "1";
  1080. // p.WareName = "合金库";
  1081. // });
  1082. // wetLineBack.ListInfo = back;
  1083. // var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1084. // var rfid = back.Select(p => p.RFID).ToList();
  1085. // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1086. // {
  1087. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1088. // {
  1089. // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送" },
  1090. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1091. // });
  1092. // }
  1093. // else
  1094. // {
  1095. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1096. // {
  1097. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
  1098. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1099. // });
  1100. // }
  1101. //}
  1102. ////余料
  1103. //if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString()).ToList().Any())
  1104. //{
  1105. // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest();
  1106. // var back = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(list);
  1107. // back.ForEach(p =>
  1108. // {
  1109. // p.BusType = "2";
  1110. // p.WareName = "合金库";
  1111. // });
  1112. // wetLineBack.ListInfo = back;
  1113. // var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1114. // var rfid = back.Select(p => p.RFID).ToList();
  1115. // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1116. // {
  1117. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1118. // {
  1119. // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "手动推送" },
  1120. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1121. // });
  1122. // }
  1123. // else
  1124. // {
  1125. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1126. // {
  1127. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
  1128. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1129. // });
  1130. // }
  1131. //}
  1132. }
  1133. else
  1134. {
  1135. //自动推送
  1136. request.Type = FackbeekType.InterfaceType_HJ_1F_StockIn.ToString();
  1137. var list = _hJService.GetPushDatelistAuto(request);
  1138. //if (!list.Any())
  1139. //{
  1140. // return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  1141. //}
  1142. if (list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList().Any())
  1143. {
  1144. var onefloor = list.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_1F_StockIn.ToString()).ToList();
  1145. PushRequest push = new PushRequest();
  1146. var info = _mapper.Map<List<ListInfo>>(onefloor);
  1147. push.list = info;
  1148. var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(push));
  1149. var matBarCode = info.Select(p => p.MatBarCode).ToList();
  1150. if (resbody.success == true || resbody.ResCode == 200)
  1151. {
  1152. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1153. {
  1154. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  1155. WhereExpression = it => matBarCode.Contains(it.CLBarCode)
  1156. });
  1157. }
  1158. else
  1159. {
  1160. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1161. {
  1162. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  1163. WhereExpression = it => matBarCode.Contains(it.CLBarCode)
  1164. });
  1165. }
  1166. }
  1167. //request.Type = FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString();
  1168. //var listback = _hJService.GetPushDatelistAuto(request);
  1169. ////退料
  1170. //if (listback.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString()).ToList().Any())
  1171. //{
  1172. // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest();
  1173. // var back = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(listback);
  1174. // back.ForEach(p =>
  1175. // {
  1176. // p.BusType = "1";
  1177. // p.WareName = "合金库";
  1178. // });
  1179. // wetLineBack.ListInfo = back;
  1180. // var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1181. // var rfid = back.Select(p => p.RFID).ToList();
  1182. // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1183. // {
  1184. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1185. // {
  1186. // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送" },
  1187. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1188. // });
  1189. // }
  1190. // else
  1191. // {
  1192. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1193. // {
  1194. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
  1195. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1196. // });
  1197. // }
  1198. //}
  1199. //////余料
  1200. //request.Type = FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString();
  1201. //var listleft = _hJService.GetPushDatelistAuto(request);
  1202. //if (listleft.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString()).ToList().Any())
  1203. //{
  1204. // WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest();
  1205. // var back = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(listleft);
  1206. // back.ForEach(p =>
  1207. // {
  1208. // p.BusType = "2";
  1209. // p.WareName = "合金库";
  1210. // });
  1211. // wetLineBack.ListInfo = back;
  1212. // var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1213. // var rfid = back.Select(p => p.RFID).ToList();
  1214. // if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1215. // {
  1216. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1217. // {
  1218. // Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送" },
  1219. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1220. // });
  1221. // }
  1222. // else
  1223. // {
  1224. // _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1225. // {
  1226. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
  1227. // WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1228. // });
  1229. // }
  1230. //}
  1231. }
  1232. return result;
  1233. }
  1234. /// <summary>
  1235. /// 退料/余料反馈
  1236. /// </summary>
  1237. /// <param name="request"></param>
  1238. /// <returns></returns>
  1239. [HttpPost]
  1240. public PushResponse PushBackInfoData(PushDate request)
  1241. {
  1242. var result = new PushResponse();
  1243. if (request.init == 1)
  1244. {
  1245. }
  1246. else
  1247. {
  1248. request.Type = FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString();
  1249. var listback = _hJService.GetPushDatelistAuto(request);
  1250. //退料
  1251. if (listback.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_BackStockIn.ToString()).ToList().Any())
  1252. {
  1253. //WetLineBackInFeedBackRequest wetLineBack = new WetLineBackInFeedBackRequest();
  1254. //var back = _mapper.Map<List<WetLineBackInFeedBackRequestItem>>(listback);
  1255. //back.ForEach(p =>
  1256. //{
  1257. // p.BusType = "1";
  1258. // p.WareName = "合金库";
  1259. //});
  1260. //wetLineBack.ListInfo = back;
  1261. var wetLineBack = _mapper.Map<WetLineBackInFeedBackRequestItem>(listback.First());
  1262. wetLineBack.BusType = "1";
  1263. var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1264. var rfid = wetLineBack.RFID;
  1265. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1266. {
  1267. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1268. {
  1269. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送",EditTime = DateTime.Now },
  1270. WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1271. });
  1272. }
  1273. else
  1274. {
  1275. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1276. {
  1277. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  1278. WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1279. });
  1280. }
  1281. }
  1282. //余料
  1283. request.Type = FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString();
  1284. var listleft = _hJService.GetPushDatelistAuto(request);
  1285. if (listleft.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_2F_LeftStockIn.ToString()).ToList().Any())
  1286. {
  1287. var wetLineLeft = _mapper.Map<WetLineBackInFeedBackRequestItem>(listleft.First());
  1288. wetLineLeft.BusType = "2";
  1289. var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineLeft));
  1290. var rfid = wetLineLeft.RFID;
  1291. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1292. {
  1293. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1294. {
  1295. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  1296. WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1297. });
  1298. }
  1299. else
  1300. {
  1301. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1302. {
  1303. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  1304. WhereExpression = it => rfid.Contains(it.RFIDBarCode)
  1305. });
  1306. }
  1307. }
  1308. }
  1309. return result;
  1310. }
  1311. /// <summary>
  1312. /// 数据推送接口
  1313. /// </summary>
  1314. /// <param name="request"></param>
  1315. /// <returns></returns>
  1316. [HttpPost]
  1317. public PushResponse PushStockOutErpDate(PushDate request)
  1318. {
  1319. var result = new PushResponse();
  1320. //自动推送
  1321. request.Type = FackbeekType.InterfaceType_HJ_StockOut.ToString();
  1322. var liststockout = _hJService.GetPushDatelistAuto(request);
  1323. //出库
  1324. if (liststockout.Where(p => p.TypeCode == FackbeekType.InterfaceType_HJ_StockOut.ToString()).ToList().Any())
  1325. {
  1326. StockOutFeedBackRequest wetLineBack = new StockOutFeedBackRequest()
  1327. {
  1328. MatBarCode = liststockout.First().CLBarCode,
  1329. MoveLoc = liststockout.First().Memo,
  1330. MoveTime = liststockout.First().AddTime.ToString("yyyy-MM-dd HH:mm:ss"),
  1331. RFID = liststockout.First().RFIDBarCode
  1332. };
  1333. var resbody = JsonConvert.DeserializeObject<WetLineBackInFeedBackResponse>(WmsServiceExportApi(wetLineBack));
  1334. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  1335. {
  1336. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1337. {
  1338. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送" },
  1339. WhereExpression = it => wetLineBack.MatBarCode.Contains(it.CLBarCode)
  1340. });
  1341. }
  1342. else
  1343. {
  1344. _hJService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1345. {
  1346. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1 },
  1347. WhereExpression = it => wetLineBack.MatBarCode.Contains(it.CLBarCode)
  1348. });
  1349. }
  1350. }
  1351. return result;
  1352. }
  1353. /// <summary>
  1354. /// 监控遗留的库存数据
  1355. /// </summary>
  1356. /// <param name="request"></param>
  1357. /// <returns></returns>
  1358. [HttpPost]
  1359. public SRes MonitorLeftStock(WebErrorRequest request)
  1360. {
  1361. return null;
  1362. //return _hJService.MonitorLeftStock(request);
  1363. }
  1364. #endregion
  1365. #region 异常处理
  1366. /// <summary>
  1367. /// 强制取消任务
  1368. /// </summary>
  1369. /// <param name="request"></param>
  1370. /// <returns></returns>
  1371. [HttpPost]
  1372. public SRes ForceCancelTask(WebErrorRequest request)
  1373. {
  1374. return _hJService.ForceCancelTask(request);
  1375. }
  1376. /// <summary>
  1377. /// 删除库存信息
  1378. /// </summary>
  1379. /// <param name="request"></param>
  1380. /// <returns></returns>
  1381. [HttpPost]
  1382. public SRes DeleteStockInfo(DetailCodeRequest request)
  1383. {
  1384. return _hJService.DeleteStockInfo(request);
  1385. }
  1386. /// <summary>
  1387. /// 修改库存状态
  1388. /// </summary>
  1389. /// <param name="request"></param>
  1390. /// <returns></returns>
  1391. [HttpPost]
  1392. public SRes UpdateStockState(DetailCodeRequestdto request)
  1393. {
  1394. return _hJService.UpdateStockState(request);
  1395. }
  1396. /// <summary>
  1397. /// 修改货位状态
  1398. /// </summary>
  1399. /// <param name="request"></param>
  1400. /// <returns></returns>
  1401. [HttpPost]
  1402. public SRes UpdateCellState(DetailCodeRequestdto request)
  1403. {
  1404. return _hJService.UpdateCellState(request);
  1405. }
  1406. /// <summary>
  1407. /// 货位数据互换
  1408. /// </summary>
  1409. /// <param name="request"></param>
  1410. /// <returns></returns>
  1411. [HttpPost]
  1412. public SRes DataSwapCell(DataSwapCellRequest request)
  1413. {
  1414. return _hJService.DataSwapCell(request);
  1415. }
  1416. /// <summary>
  1417. /// 补数据
  1418. /// </summary>
  1419. /// <param name="request"></param>
  1420. /// <returns></returns>
  1421. [HttpPost]
  1422. public SRes DataBasePatch(DetailCodeRequest request)
  1423. {
  1424. return _hJService.DataBasePatch(request);
  1425. }
  1426. /// <summary>
  1427. /// 库存转移
  1428. /// </summary>
  1429. /// <param name="request"></param>
  1430. /// <returns></returns>
  1431. [HttpPost]
  1432. public SRes TransStock(DataSwapCellRequest request)
  1433. {
  1434. return _hJService.TransStock(request);
  1435. }
  1436. /// <summary>
  1437. /// AGV上报状态变更接口
  1438. /// </summary>
  1439. /// <param name="reqDto"></param>
  1440. /// <returns></returns>
  1441. [HttpPost]
  1442. public AgvCallbackResponse AgvCallback(AgvCallbackRequest reqDto)
  1443. {
  1444. return _hJService.AgvCallback(reqDto);
  1445. //return ConcurrencyReqControl<SpoolMaterialInfoTransRequest, SRes>(lockerSpoolMaterialInfoTrans, "SpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _fjService.SpoolMaterialInfoTrans);
  1446. }
  1447. /// <summary>
  1448. /// 流水数据归档
  1449. /// </summary>
  1450. /// <param name="request"></param>
  1451. /// <returns></returns>
  1452. [HttpPost]
  1453. public SRes FlowDataMoveJob(PushDate request)
  1454. {
  1455. lock (lockerFlowDataMoveJob)
  1456. {
  1457. return _hJService.FlowDataMoveJob(request);
  1458. }
  1459. }
  1460. #endregion
  1461. }
  1462. }