PtController.cs 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403
  1. using AutoMapper;
  2. using MathNet.Numerics.Distributions;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Newtonsoft.Json;
  5. using Org.BouncyCastle.Crypto;
  6. using Quartz.Util;
  7. using System.Text.RegularExpressions;
  8. using wms.api.Job;
  9. using wms.dto;
  10. using wms.dto.request;
  11. using wms.dto.request.cp;
  12. using wms.dto.request.hj;
  13. using wms.dto.request.hj.dto;
  14. using wms.dto.request.pt;
  15. using wms.dto.request.pt.dto;
  16. using wms.dto.request.share;
  17. using wms.dto.response;
  18. using wms.dto.response.pt;
  19. using wms.service.IService;
  20. using wms.service.Service;
  21. using wms.sqlsugar;
  22. using wms.sqlsugar.model.pt;
  23. using wms.util.Ext;
  24. using wms.util.Http;
  25. namespace wms.api.Controllers
  26. {
  27. /// <summary>
  28. /// 盘条库控制器
  29. /// </summary>
  30. [Route("api/[controller]/[action]")]
  31. [ApiController]
  32. public class PtController : BaseController
  33. {
  34. private readonly IPTService _ptService;
  35. private readonly ILogger<PtController> _logger;
  36. private readonly IMapper _mapper;
  37. static object lockerPurchaseBillTrans = new object();
  38. static object lockerErpUnlockStock = new object();
  39. static object lockerProductionStockOut = new object();
  40. static object lockerProductionFeedBack = new object();
  41. static object lockerStockChange = new object();
  42. static object lockerProductionBack = new object();
  43. static object lockerPtPurchTaskIn = new object();
  44. static object lockerPtApplyStockInLoc = new object();
  45. static object lockerPtCompleteTask = new object();
  46. static object lockerPtSrmPickOutCompleted = new object();
  47. static object lockerSyncMaterInfoList = new object();
  48. static object lockerPtWcsProductionOutTask = new object();
  49. static object lockerGetPtTunnelList = new object();
  50. static object lockerManualTaskOut = new object();
  51. static object lockerPinkuInfoUpdate = new object();
  52. static object lockerPinkucarryInTask = new object();
  53. static object lockerPinkucarryOutTask = new object();
  54. static object lockerPtCancelOrComplet = new object();
  55. static object lockerPtCarryTask = new object();
  56. static object lockerUpdatePuchState = new object();
  57. static object lockerForceCancelTask = new object();
  58. static object lockerDeleteStockInfo = new object();
  59. static object lockerUpdateStockState = new object();
  60. static object lockerUpdateCellState = new object();
  61. static object lockerDataSwapCell = new object();
  62. static object lockerDataBasePatch = new object();
  63. static object lockerDataMoveCell = new object();
  64. static object lockerProductRequisition = new object();
  65. static object lockerPdaInsterInTask = new object();
  66. static object lockerHandErrTask = new object();
  67. static object lockerJKArriveInfo = new object();
  68. static object lockerJKTransPTInfo = new object();
  69. static object lockerPurchaseBillTransCheck = new object();
  70. static object lockerFlowDataMoveJob = new object();
  71. Repository<ptSysJob> _sysJobrepository => new Repository<ptSysJob>();
  72. public PtController(IPTService ptService, ILogger<PtController> logger, IMapper mapper) : base(ptService)
  73. {
  74. _ptService = ptService;
  75. _logger = logger;
  76. _mapper = mapper;
  77. }
  78. /// <summary>
  79. /// 同步物料基础信息
  80. /// </summary>
  81. /// <param name="reqDto"></param>
  82. /// <returns></returns>
  83. [HttpPost]
  84. public string SyncMaterInfo(SyncMaterInfoRequest reqBody)
  85. {
  86. var result = new SRes();
  87. //_logger.LogInformation("请求参数:{@reqBody},{aa}", reqBody,1);
  88. PTSyncMaterInfoResponse resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
  89. if (reqBody.SyncType == 1)
  90. {
  91. reqBody.PageIndex = 1;
  92. while (resbody.ResData.Any())
  93. {
  94. _ptService.SyncMaterInfo(resbody.ResData);
  95. reqBody.PageIndex++;
  96. resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
  97. }
  98. }
  99. else if (reqBody.SyncType == 2)
  100. {
  101. //拿到增量
  102. var increconf = _ptService.GetSysConfigByCode(Const.MESMaterialInitIncrement);
  103. if (increconf != null)
  104. {
  105. reqBody.StartTime = DateTime.Parse(increconf.SContent);
  106. //reqBody.Count = int.Parse(increconf.Remark);
  107. resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
  108. if (resbody.ResData.Any())
  109. {
  110. if (_ptService.SyncMaterInfo(resbody.ResData))
  111. {
  112. var lastdata = resbody.ResData.OrderBy(p => p.UpdatedTime).Last();
  113. _ptService.UpdateSysConfigModelColumns(new sqlsugar.model.UpdateModelColumns<ptSysConfig>()
  114. {
  115. Columns = it => new ptSysConfig { SContent = lastdata.UpdatedTime.ToString("yyyy-MM-dd HH:mm:ss.fff") },
  116. WhereExpression = it => it.Code == Const.MESMaterialInitIncrement
  117. });
  118. }
  119. }
  120. else
  121. {
  122. result.ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode();
  123. result.ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription();
  124. }
  125. }
  126. else
  127. {
  128. result.ResCode = ResponseStatusCodeEnum.AccountError.GetHashCode();
  129. result.ResMsg = "没有配置信息" + Const.MESMaterialInitIncrement;
  130. }
  131. }
  132. else
  133. {
  134. if (!string.IsNullOrEmpty(reqBody.MatCode))
  135. {
  136. resbody = JsonConvert.DeserializeObject<PTSyncMaterInfoResponse>(WmsServiceExportApi(reqBody));
  137. if (resbody.ResData.Any())
  138. {
  139. if (_ptService.SyncMaterInfo(resbody.ResData))
  140. {
  141. }
  142. }
  143. }
  144. }
  145. return result.ToCamelCaseString();
  146. }
  147. /// <summary>
  148. /// 采购到货单/采购退货单/到货重挂清单接口(二楼入库默认传2999)
  149. /// </summary>
  150. /// <param name="request"></param>
  151. /// <returns></returns>
  152. [HttpPost]
  153. public SRes PurchaseBillTrans(PurchaseBillTransReqest reqDto)
  154. {
  155. reqDto.ListInfo = reqDto.ListInfo.Where(p => p.RFID.StartsWith("PT")).ToList();
  156. var res = ConcurrencyReqControl<PurchaseBillTransReqest, SRes>(lockerPurchaseBillTrans, "PurchaseBillTrans", reqDto.BillCode, reqDto, _ptService.PurchaseBillTrans);
  157. if (res.ResCode != 200)
  158. {
  159. return res;
  160. }
  161. if (string.IsNullOrEmpty(reqDto.Equip))
  162. {
  163. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  164. res.ResMsg = "请扫描地码,地码没有传值";
  165. return res;
  166. }
  167. if (!string.IsNullOrEmpty(reqDto.Equip) && res.ResCode == 200)
  168. {
  169. if (reqDto.ListInfo.Count > 1)
  170. {
  171. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  172. res.ResMsg = "只能绑定一个盘条信息,当前接口传递多条数据F";
  173. return res;
  174. }
  175. res = PdaPurchaseTask(new PtPurchaseTaskReqest() { Equip = reqDto.Equip, ConBarCode = reqDto.ListInfo.First().RFID, MatBarCode = reqDto.ListInfo.First().MatBarCode });
  176. }
  177. return res;
  178. }
  179. /// <summary>
  180. /// 采购到货单验证
  181. /// </summary>
  182. /// <param name="request"></param>
  183. /// <returns></returns>
  184. [HttpPost]
  185. public SRes PurchaseBillTransCheck(PurchaseBillTransReqestCheck reqDto)
  186. {
  187. lock (lockerPurchaseBillTransCheck)
  188. {
  189. return _ptService.InsertBillInvinitCheck(reqDto);
  190. }
  191. }
  192. /// <summary>
  193. /// 盘条RFID验证
  194. /// </summary>
  195. /// <param name="request"></param>
  196. /// <returns></returns>
  197. [HttpPost]
  198. public SRes PurchaseRFIDCheck(PurchaseRFIDCheckReqest reqDto)
  199. {
  200. lock (lockerPurchaseBillTransCheck)
  201. {
  202. return _ptService.PurchaseRFIDCheck(reqDto); ;
  203. }
  204. }
  205. /// <summary>
  206. /// 盘条主数据接收
  207. /// </summary>
  208. /// <param name="reqDto"></param>
  209. /// <returns></returns>
  210. [HttpPost]
  211. public SRes PtSyncMaterInfoList(PtSyncMaterInfoListRequest reqDto)
  212. {
  213. var res = new SRes();
  214. return ConcurrencyReqControl<PtSyncMaterInfoListRequest, SRes>(lockerSyncMaterInfoList, "PtSyncMaterInfoList", "物料主数据推送", reqDto, _ptService.GetSyncMaterInfo);
  215. }
  216. /// <summary>
  217. /// 采购到货单入库反馈/采购退货出库反馈/异常出库重挂反馈接口
  218. /// </summary>
  219. /// <param name="request"></param>
  220. /// <returns></returns>
  221. [HttpPost]
  222. public SRes PurchaseBillTransFeedBack(PtAutoPurchData request)
  223. {
  224. var res = new SRes();
  225. //自动推送
  226. if (request.Type == "1")
  227. {
  228. var list = _ptService.GetBillFeedbackList(PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString());
  229. if (!list.Any())
  230. {
  231. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  232. res.ResMsg = "没有取到符合条件的数据";
  233. }
  234. //采购入库单
  235. if (list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString()).ToList().Any())
  236. {
  237. var purch = list.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString()).ToList();
  238. PurchaseBillTransFeedBackRequest purchaseBill = new PurchaseBillTransFeedBackRequest();
  239. var dtolist = _mapper.Map<List<PurchaseBillTransFeedBackRequestItem>>(purch);
  240. var purchs = purch.First();
  241. purchaseBill.ListInfo = dtolist;
  242. purchaseBill.BillCode = purchs.DocsNo;
  243. purchaseBill.BillType = purchs.TypeCode;
  244. purchaseBill.ReqId = purchs.ReqNo;
  245. var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(purchaseBill));
  246. var ids = purch.Select(p => p.Id).ToList();
  247. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  248. {
  249. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  250. {
  251. Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  252. WhereExpression = it => ids.Contains(it.Id)
  253. });
  254. }
  255. else
  256. {
  257. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  258. {
  259. Columns = it => new ptBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  260. WhereExpression = it => ids.Contains(it.Id)
  261. });
  262. }
  263. }
  264. var listAnewStockIn = _ptService.GetBillFeedbackList(PtFackbeekType.InterfaceType_PT_AnewStockIn.ToString());
  265. //重挂
  266. if (listAnewStockIn.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_AnewStockIn.ToString()).ToList().Any())
  267. {
  268. var purch = listAnewStockIn.Where(p => p.TypeCode == PtFackbeekType.InterfaceType_PT_AnewStockIn.ToString()).ToList();
  269. PurchaseBillTransFeedBackRequest purchaseBill = new PurchaseBillTransFeedBackRequest();
  270. var dtolist = _mapper.Map<List<PurchaseBillTransFeedBackRequestItem>>(purch);
  271. var purchs = purch.First();
  272. purchaseBill.ListInfo = dtolist;
  273. purchaseBill.BillCode = purchs.DocsNo;
  274. purchaseBill.BillType = purchs.TypeCode;
  275. purchaseBill.ReqId = purchs.ReqNo;
  276. var resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(purchaseBill));
  277. var ids = purch.Select(p => p.Id).ToList();
  278. if (resbody.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  279. {
  280. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  281. {
  282. Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  283. WhereExpression = it => ids.Contains(it.Id)
  284. });
  285. }
  286. else
  287. {
  288. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  289. {
  290. Columns = it => new ptBillPushinfo() { PostResult = 2, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  291. WhereExpression = it => ids.Contains(it.Id)
  292. });
  293. }
  294. }
  295. }
  296. return res;
  297. }
  298. /// <summary>
  299. /// 放行单传输接口
  300. /// </summary>
  301. /// <param name="request"></param>
  302. /// <returns></returns>
  303. [HttpPost]
  304. public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto)
  305. {
  306. return ConcurrencyReqControl<ErpUnlockStockRequest, ErpUnlockStockResponse>(lockerErpUnlockStock, "PtErpUnlockStock", reqDto.BillCode, reqDto, _ptService.ErpUnlockStock);
  307. }
  308. /// <summary>
  309. /// 生产领料单传输接口
  310. /// </summary>
  311. /// <param name="request"></param>
  312. /// <returns></returns>
  313. [HttpPost]
  314. public SRes ProductionStockOut(ProductionStockOutRequest reqDto)
  315. {
  316. return ConcurrencyReqControl<ProductionStockOutRequest, SRes>(lockerProductionStockOut, "PtProductionStockOut", reqDto.BillCode, reqDto, _ptService.ProductionStockOut);
  317. }
  318. /// <summary>
  319. /// 自动叫料
  320. /// </summary>
  321. /// <param name="request"></param>
  322. /// <returns></returns>
  323. //[HttpPost]
  324. //public SRes WcsProductionOutRequest(WcsProductionOutRequest request)
  325. //{
  326. // return ConcurrencyReqControl<WcsProductionOutRequest, SRes>(lockerPtWcsProductionOutTask, "PtWcsProductionOutRequest" , "自动叫料", request, _ptService.WcsProductionOutRequest);
  327. //}
  328. /// <summary>
  329. /// 自动叫料新
  330. /// </summary>
  331. /// <param name="request"></param>
  332. /// <returns></returns>
  333. [HttpPost]
  334. public SRes WcsProductionOutRequestNew(WcsProductionOutRequest request)
  335. {
  336. return ConcurrencyReqControl<WcsProductionOutRequest, SRes>(lockerPtWcsProductionOutTask, "PtWcsProductionOutRequest", "自动叫料", request, _ptService.WcsProductionOutRequest2);
  337. }
  338. /// <summary>
  339. /// 生产领料/退料/改判反馈接口
  340. /// </summary>
  341. /// <param name="request"></param>
  342. /// <returns></returns>
  343. [HttpPost]
  344. public SRes ProductionFeedBack(PtAutoPurchData request)
  345. {
  346. var res = new SRes();
  347. //自动推送
  348. if (request.Type == "1")
  349. {
  350. var list = _ptService.GetProductionFeedBack();
  351. if (!list.Any())
  352. {
  353. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  354. res.ResMsg = "没有取到符合条件的数据";
  355. return res;
  356. }
  357. //生产领料反馈
  358. if (list.Where(p => p.TypeCode == PtFackbeekType.PickMat.ToString()).ToList().Any())
  359. {
  360. var purch = list.Where(p => p.TypeCode == PtFackbeekType.PickMat.ToString()).ToList();
  361. var purchs = purch.First();
  362. purch = purch.Where(p => p.DocsNo == purchs.DocsNo).ToList();
  363. ProductionFeedBackRequest purchaseBill = new ProductionFeedBackRequest();
  364. var dtolist = _mapper.Map<List<ProductionFeedBackRequestItem>>(purch);
  365. purchaseBill.ListInfo = dtolist;
  366. purchaseBill.BillCode = purchs.DocsNo;
  367. purchaseBill.BillType = purchs.TypeCode;
  368. WmsServiceExportMq(purchaseBill);
  369. var ids = purch.Select(p => p.Id).ToList();
  370. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  371. {
  372. Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  373. WhereExpression = it => ids.Contains(it.Id)
  374. });
  375. }
  376. //退料
  377. if (true)
  378. {
  379. }
  380. //改判
  381. if (true)
  382. {
  383. }
  384. }
  385. return res;
  386. }
  387. /// <summary>
  388. /// 手动出库反馈接口
  389. /// </summary>
  390. /// <param name="request"></param>
  391. /// <returns></returns>
  392. [HttpPost]
  393. public SRes ProductionFeedBackManual(PtAutoPurchData request)
  394. {
  395. var res = new SRes();
  396. //自动推送
  397. if (request.Type == "1")
  398. {
  399. var list = _ptService.GetProductionFeedBack();
  400. if (!list.Any())
  401. {
  402. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  403. res.ResMsg = "没有取到符合条件的数据";
  404. return res;
  405. }
  406. if (list.Where(p => p.TypeCode == "Manual").ToList().Any())
  407. {
  408. var purch = list.Where(p => p.TypeCode == "Manual").ToList();
  409. var purchs = purch.First();
  410. purch = purch.Where(p => p.DocsNo == purchs.DocsNo).ToList();
  411. ProductionFeedBackRequest purchaseBill = new ProductionFeedBackRequest();
  412. var dtolist = _mapper.Map<List<ProductionFeedBackRequestItem>>(purch);
  413. purchaseBill.ListInfo = dtolist;
  414. purchaseBill.BillCode = purchs.DocsNo;
  415. purchaseBill.BillType = purchs.TypeCode;
  416. WmsServiceExportApi(purchaseBill);
  417. var ids = purch.Select(p => p.Id).ToList();
  418. _ptService.UpdatePuchinfoModelColumns(new sqlsugar.model.UpdateModelColumns<ptBillPushinfo>()
  419. {
  420. Columns = it => new ptBillPushinfo() { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  421. WhereExpression = it => ids.Contains(it.Id)
  422. });
  423. }
  424. }
  425. return res;
  426. }
  427. /// <summary>
  428. /// 炉号用完反馈给mes
  429. /// </summary>
  430. /// <param name="request"></param>
  431. /// <returns></returns>
  432. [HttpPost]
  433. public SRes BoilerNoFeedBack(PtAutoPurchData request)
  434. {
  435. var res = new SRes();
  436. var list = _ptService.GetSysConfigListByExpression(p=>p.Default1 == "ProductPinKu" && p.Default6 == "0" && p.Default5 == p.Default7);
  437. if (!list.Any())
  438. {
  439. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  440. res.ResMsg = "没有取到符合条件的数据";
  441. return res;
  442. }
  443. foreach (var item in list)
  444. {
  445. BoilerNoRequest boilerNoRequest = new BoilerNoRequest();
  446. boilerNoRequest.BoilerNo = item.Default5;
  447. _logger.LogInformation("推送mes炉号用完信号请求:" + JsonConvert.SerializeObject(boilerNoRequest));
  448. var resbody = JsonConvert.DeserializeObject<PushResponse1>(WmsServiceExportApi(boilerNoRequest));
  449. _logger.LogInformation("推送mes炉号用完信号返回:" + JsonConvert.SerializeObject(resbody));
  450. if (resbody.Success == true || resbody.Code == "200")
  451. {
  452. _ptService.UpdateSysConfigModelColumns(new sqlsugar.model.UpdateModelColumns<ptSysConfig>()
  453. {
  454. Columns = it => new ptSysConfig() { Default6 = "1", EditTime = DateTime.Now },
  455. WhereExpression = it => it.Id == item.Id
  456. });
  457. }
  458. }
  459. return res;
  460. }
  461. /// <summary>
  462. /// 库存改判
  463. /// </summary>
  464. /// <param name="reqDto"></param>
  465. /// <returns></returns>
  466. [HttpPost]
  467. public SRes<StockChangeResItem> StockChange(PtStockChangeRequest reqDto)
  468. {
  469. lock (lockerStockChange)
  470. {
  471. return _ptService.StockChange(reqDto);
  472. }
  473. //return ConcurrencyReqControl<PtStockChangeRequest, SRes<StockChangeResItem>>(lockerStockChange, "PtStockChange", "PtStockChange", reqDto, _ptService.StockChange);
  474. }
  475. /// <summary>
  476. /// 生产退料单接口
  477. /// </summary>
  478. /// <param name="reqDto"></param>
  479. /// <returns></returns>
  480. [HttpPost]
  481. public SRes ProductionBack(ProductionBackRequest reqDto)
  482. {
  483. return ConcurrencyReqControl<ProductionBackRequest, SRes>(lockerProductionBack, "PtProductionBack", reqDto.BillCode, reqDto, _ptService.ProductionBack);
  484. }
  485. [HttpPost]
  486. public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun)
  487. {
  488. return _ptService.WareCellInit(row, col, deot, rowcount, tun);
  489. }
  490. /// <summary>
  491. /// 实时库存查询接口
  492. /// </summary>
  493. /// <param name="reqDto"></param>
  494. /// <returns></returns>
  495. [HttpPost]
  496. public PTGetCurStockListResponse GetPtCurStockList(PtGetCurStockListRequest reqDto)
  497. {
  498. return _ptService.GetCurStockList(reqDto);
  499. }
  500. #region 盘条PDA功能
  501. /// <summary>
  502. /// 盘条解绑
  503. /// </summary>
  504. /// <param name="request"></param>
  505. /// <returns></returns>
  506. [HttpPost]
  507. public SRes<int> Unbounding(PtUnboundRequest request)
  508. {
  509. return _ptService.Unbounding(request);
  510. }
  511. /// <summary>
  512. /// pda单据查询
  513. /// </summary>
  514. /// <param name="request"></param>
  515. /// <returns></returns>
  516. [HttpPost]
  517. public string GetDocumentsAll(PtDocumentsRequest request)
  518. {
  519. return _ptService.GetPageDocumentsList(request).ToCamelCaseString();
  520. }
  521. /// <summary>
  522. /// pda单据明细查询(传单号)
  523. /// </summary>
  524. /// <param name="request"></param>
  525. /// <returns></returns>
  526. [HttpPost]
  527. public string GetDocumentDetails(PtDocumentsRequest request)
  528. {
  529. return _ptService.GetDocumentDetailListByDocsNo(request).ToCamelCaseString();
  530. }
  531. /// <summary>
  532. /// pda指定出库确定
  533. /// </summary>
  534. /// <param name="request"></param>
  535. /// <returns></returns>
  536. [HttpPost]
  537. public string PdaManualTask(PtManualTaskRequest request)
  538. {
  539. request.BusType = TaskBusType.TaskBusType_HJ_PdaManualOut.GetDescription();
  540. return _ptService.ManualTask(request);
  541. }
  542. /// <summary>
  543. /// pda质检领料出库确定
  544. /// </summary>
  545. /// <param name="request"></param>
  546. /// <returns></returns>
  547. [HttpPost]
  548. public string PdaQualityTask(PtManualTaskRequest request)
  549. {
  550. request.BusType = TaskBusType.TaskBusType_HJ_QualityOut.GetDescription();
  551. return _ptService.ManualTask(request);
  552. }
  553. /// <summary>
  554. /// pda重挂出库确定
  555. /// </summary>
  556. /// <param name="request"></param>
  557. /// <returns></returns>
  558. [HttpPost]
  559. public string PdaInactionStockTask(PtManualTaskRequest request)
  560. {
  561. request.BusType = TaskBusType.TaskBusType_HJ_AnewOut.GetDescription();
  562. return _ptService.ManualTask(request);
  563. }
  564. /// <summary>
  565. /// 获取设备报警信息
  566. /// </summary>
  567. /// <param name="request"></param>
  568. /// <returns></returns>
  569. [HttpPost]
  570. public string GetEquipErrorInfo(PtErrorInfoRequest request)
  571. {
  572. return "";
  573. }
  574. /// <summary>
  575. /// 获取物料报警信息
  576. /// </summary>
  577. /// <param name="request"></param>
  578. /// <returns></returns>
  579. [HttpPost]
  580. public string GetMaterErrorInfo(PtErrorInfoRequest request)
  581. {
  582. return "";
  583. }
  584. /// <summary>
  585. /// 获取业务报警信息
  586. /// </summary>
  587. /// <param name="request"></param>
  588. /// <returns></returns>
  589. [HttpPost]
  590. public string GetBusinessErrorInfo(PtErrorInfoRequest request)
  591. {
  592. return "";
  593. }
  594. /// <summary>
  595. /// 手动入库
  596. /// </summary>
  597. /// <param name="request"></param>
  598. /// <returns></returns>
  599. [HttpPost]
  600. public SRes PdaInsterInTask(PtGroupInTaskRequest request)
  601. {
  602. lock (lockerPdaInsterInTask)
  603. {
  604. request.Equip = Regex.Replace(request.Equip.Trim(), @"[\r\n]", "");
  605. request.Rfid = Regex.Replace(request.Rfid.Trim(), @"[\r\n]", "");
  606. return _ptService.PdaInsterInTask(request);
  607. }
  608. }
  609. /// <summary>
  610. /// PDA 采购入库
  611. /// </summary>
  612. /// <param name="request"></param>
  613. /// <returns></returns>
  614. [HttpPost]
  615. public SRes PdaPurchaseTask(PtPurchaseTaskReqest request)
  616. {
  617. if (string.IsNullOrWhiteSpace(request.ConBarCode))
  618. {
  619. return new SRes() {
  620. ResCode = 0,
  621. ResMsg = "条码不能传空值"
  622. };
  623. }
  624. lock (lockerPtPurchTaskIn)
  625. {
  626. request.Equip = Regex.Replace(request.Equip.Trim(), @"[\r\n]", "");
  627. return _ptService.PtPurchaseTask(request);
  628. }
  629. }
  630. /// <summary>
  631. /// PDA 生产领料确定
  632. /// </summary>
  633. /// <param name="request"></param>
  634. /// <returns></returns>
  635. [HttpPost]
  636. public SRes PdaProductRequisition(PtUnboundRequest request)
  637. {
  638. lock (lockerProductRequisition)
  639. {
  640. return _ptService.PdaProductRequisition(request);
  641. }
  642. }
  643. /// <summary>
  644. /// PDA 生产领料空架子发回
  645. /// </summary>
  646. /// <param name="request"></param>
  647. /// <returns></returns>
  648. [HttpPost]
  649. public SRes PdaProductRequisition2(PtUnboundRequest request)
  650. {
  651. lock (lockerProductRequisition)
  652. {
  653. return _ptService.PdaProductRequisition2(request);
  654. }
  655. }
  656. /// <summary>
  657. /// 监控领料出扫过码的架子搬走
  658. /// </summary>
  659. /// <param name="request"></param>
  660. /// <returns></returns>
  661. [HttpPost]
  662. public SRes MoniterEmptCon(PtUnboundRequest request)
  663. {
  664. lock (lockerProductRequisition)
  665. {
  666. return _ptService.MoniterEmptCon(request);
  667. }
  668. }
  669. #endregion
  670. /// <summary>
  671. /// 手动出库确定
  672. /// </summary>
  673. /// <param name="request"></param>
  674. /// <returns></returns>
  675. [HttpPost]
  676. public string ManualTask(PtManualTaskRequest request)
  677. {
  678. lock (lockerManualTaskOut)
  679. {
  680. request.BusType = TaskBusType.TaskBusType_HJ_ManualOut.GetDescription();
  681. return _ptService.ManualTask(request);
  682. }
  683. }
  684. #region WCS调用
  685. /// <summary>
  686. /// 获取巷道
  687. /// </summary>
  688. /// <param name="reqEntity"></param>
  689. /// <returns></returns>
  690. [HttpPost]
  691. public SRes<string> GetTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
  692. {
  693. lock (lockerGetPtTunnelList)
  694. {
  695. return _ptService.GetPtTunnelPriorityList(reqEntity);
  696. }
  697. }
  698. /// <summary>
  699. /// 分配货位
  700. /// </summary>
  701. /// <param name="reqEntity"></param>
  702. /// <returns></returns>
  703. [HttpPost]
  704. public SRes<PtApplyStockInLocResponse> ApplyStockInLoc(PtApplyStockInLocRequest reqEntity)
  705. {
  706. return ConcurrencyReqControl<PtApplyStockInLocRequest, SRes<PtApplyStockInLocResponse>>(lockerPtApplyStockInLoc, "PtApplyStockInLoc", "分配货位" + reqEntity.PickUpEquipmentNo, reqEntity, _ptService.PtApplyStockInLoc);
  707. }
  708. /// <summary>
  709. /// 完成任务
  710. /// </summary>
  711. /// <param name="reqEntity"></param>
  712. /// <returns></returns>
  713. [HttpPost]
  714. public SRes<int> CompleteTask(CompleteTaskRequest reqDto)
  715. {
  716. lock (lockerPtCompleteTask)
  717. {
  718. var res = new SRes<int>();
  719. res = _ptService.PtCompleteTask(reqDto);
  720. //如果是二楼入库,调用下机科的接口
  721. if (res.Memo3 == "1")
  722. {
  723. //try
  724. //{
  725. // var tsk = _ptService.GetTask(reqDto.TaskNum);
  726. // var req = new JKPalletizerRequest()
  727. // {
  728. // wmsNo = "YL01",
  729. // taskId = tsk.ResData.Id.ToString(),
  730. // rfId = tsk.ResData.BarCode,
  731. // rowNo = tsk.ResData.Tunnel,
  732. // palletizerNo = Math.Ceiling(decimal.Parse(tsk.ResData.Tunnel) / 2).ToString()
  733. // };
  734. // _logger.LogInformation("调用机科接口请求:" + JsonConvert.SerializeObject(req));
  735. // var apiurl = wms.util.AppSettings.GetConfig("JKPushUrl");
  736. // var strpost = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(req), 30000, "UTF-8", "application/json");
  737. // _logger.LogInformation("调用机科接口返回:" + strpost);
  738. //}
  739. //catch (Exception ex)
  740. //{
  741. // _logger.LogInformation("调用机科接口异常:" + ex.ToString());
  742. //}
  743. }
  744. return res;
  745. }
  746. }
  747. /// <summary>
  748. /// 堆垛机取货完成通知机科
  749. /// </summary>
  750. /// <param name="reqEntity"></param>
  751. /// <returns></returns>
  752. [HttpPost]
  753. public SRes<int> NoticeToJK(CompleteTaskRequest reqDto)
  754. {
  755. lock (lockerPtCompleteTask)
  756. {
  757. var res = new SRes<int>();
  758. try
  759. {
  760. var tsk = _ptService.GetCurTask(reqDto.TaskNum);
  761. if (tsk.ResData == null)
  762. {
  763. tsk.ResData = _mapper.Map<ptWCS_TaskInfo>(_ptService.GetTask(reqDto.TaskNum).ResData);
  764. }
  765. if (tsk.ResData.Type != TaskType.EnterDepot || tsk.ResData.AddrFrom != "2999")
  766. {
  767. res.ResMsg = reqDto.TaskNum + "不符合回调任务";
  768. return res;
  769. }
  770. var tasknum = RedisHelper.Get("Pt:NoticeToJK:Tun" + tsk.ResData.Tunnel);
  771. if (reqDto.TaskNum.ToString() == tasknum && reqDto.OperationType == 1)
  772. {
  773. res.ResMsg = tasknum + "重复请求";
  774. return res;
  775. }
  776. var req = new JKPalletizerRequest()
  777. {
  778. wmsNo = "YL01",
  779. taskId = tsk.ResData.ID.ToString(),
  780. rfId = tsk.ResData.BarCode,
  781. rowNo = tsk.ResData.Tunnel,
  782. palletizerNo = Math.Ceiling(decimal.Parse(tsk.ResData.Tunnel) / 2).ToString()
  783. };
  784. _logger.LogInformation("调用机科接口请求:" + JsonConvert.SerializeObject(req));
  785. var apiurl = wms.util.AppSettings.GetConfig("JKPushUrl");
  786. var strpost = HttpUtil.PostRequest(apiurl, JsonConvert.SerializeObject(req), 30000, "UTF-8", "application/json");
  787. _logger.LogInformation("调用机科接口返回:" + strpost);
  788. RedisHelper.Set("Pt:NoticeToJK:Tun" + tsk.ResData.Tunnel, reqDto.TaskNum);
  789. }
  790. catch (Exception ex)
  791. {
  792. _logger.LogInformation("调用机科接口异常:" + ex.ToString());
  793. }
  794. return res;
  795. }
  796. }
  797. /// <summary>
  798. /// 堆垛机出库放货完成
  799. /// </summary>
  800. /// <param name="reqDto"></param>
  801. /// <returns></returns>
  802. [HttpPost]
  803. public SRes<int> SrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto)
  804. {
  805. lock (lockerPtSrmPickOutCompleted)
  806. {
  807. return _ptService.PtSrmPickOutCompleted(reqDto);
  808. }
  809. }
  810. /// <summary>
  811. /// 盘条库 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用)
  812. /// </summary>
  813. /// <param name="request"></param>
  814. /// <returns></returns>
  815. [HttpPost]
  816. public SRes CancelTaskVerify(CancelTaskRequest request)
  817. {
  818. lock (lockerPtCancelOrComplet)
  819. {
  820. return _ptService.PtCancelTaskVerify(request);
  821. }
  822. }
  823. /// <summary>
  824. /// 盘条库 执行任务(开放wcs调用,前端不调用)
  825. /// </summary>
  826. /// <param name="request"></param>
  827. /// <returns></returns>
  828. [HttpPost]
  829. public SRes CarryTaskInfo(CancelTaskRequest request)
  830. {
  831. lock (lockerPtCarryTask)
  832. {
  833. return _ptService.PtCarryTaskInfo(request);
  834. }
  835. }
  836. /// <summary>
  837. /// 移库确定
  838. /// </summary>
  839. /// <param name="request"></param>
  840. /// <returns></returns>
  841. [HttpPost]
  842. public SRes MoveTaskInfo(MoveTaskRequest request)
  843. {
  844. lock (lockerPtCarryTask)
  845. {
  846. return _ptService.MoveTaskInfo(request);
  847. }
  848. }
  849. /// <summary>
  850. /// 架子管理接口,wcs上报agv取货完成信号,清除起始位置
  851. /// </summary>
  852. /// <param name="request"></param>
  853. /// <returns></returns>
  854. [HttpPost]
  855. public SRes PinkuInfoManagement(PtSrmPickOutCompletedRequest request)
  856. {
  857. return ConcurrencyReqControl<PtSrmPickOutCompletedRequest, SRes>(lockerPinkuInfoUpdate, "PinkuInfoManagement", request.TaskNum.ToString(), request, _ptService.PinkuInfoManagement);
  858. }
  859. /// <summary>
  860. /// 堆垛机入库站台架子搬运任务请求(入库站台到22支架)
  861. /// </summary>
  862. /// <param name="request"></param>
  863. /// <returns></returns>
  864. [HttpPost]
  865. public SRes PinKuCarryInTask(PinkucarryTaskRequest request)
  866. {
  867. lock (lockerProductRequisition)
  868. {
  869. return ConcurrencyReqControl<PinkucarryTaskRequest, SRes>(lockerPinkucarryInTask, "PinKuCarryInTask", request.Equip, request, _ptService.PinKuCarryInTask);
  870. }
  871. }
  872. /// <summary>
  873. /// 堆垛机出库站台架子搬运任务请求(交接区支架到出库口)
  874. /// </summary>
  875. /// <param name="request"></param>
  876. /// <returns></returns>
  877. [HttpPost]
  878. public SRes PinKuCarryOutTask(PinkucarryTaskRequest request)
  879. {
  880. return ConcurrencyReqControl<PinkucarryTaskRequest, SRes>(lockerPinkucarryOutTask, "PinKuCarryOutTask", request.Equip, request, _ptService.PinKuCarryOutTask);
  881. }
  882. #endregion
  883. /// <summary>
  884. /// 生产交接区6个点位的物料编码接收绑定
  885. /// </summary>
  886. /// <param name="request"></param>
  887. /// <returns></returns>
  888. [HttpPost]
  889. public SRes ProductMaterInfo(ProductMaterInfoRequest request)
  890. {
  891. return ConcurrencyReqControl<ProductMaterInfoRequest, SRes>(lockerPinkucarryOutTask, "ProductMaterInfo", request.Equip, request, _ptService.ProductMaterInfo);
  892. }
  893. #region 异常处理功能
  894. /// <summary>
  895. /// 强制取消任务
  896. /// </summary>
  897. /// <param name="request"></param>
  898. /// <returns></returns>
  899. [HttpPost]
  900. public SRes ForceCancelTask(ErrorTaskRequest request)
  901. {
  902. lock (lockerForceCancelTask)
  903. {
  904. return _ptService.ForceCancelTask(request);
  905. }
  906. }
  907. /// <summary>
  908. /// 删除库存信息
  909. /// </summary>
  910. /// <param name="request"></param>
  911. /// <returns></returns>
  912. [HttpPost]
  913. public SRes DeleteStockInfo(DetailCodeStrRequest request)
  914. {
  915. lock (lockerDeleteStockInfo)
  916. {
  917. return _ptService.DeleteStockInfo(request);
  918. }
  919. }
  920. /// <summary>
  921. /// 删除条码信息
  922. /// </summary>
  923. /// <param name="request"></param>
  924. /// <returns></returns>
  925. [HttpPost]
  926. public SRes DeleteBarCodeInfo(DetailCodeStrRequest request)
  927. {
  928. lock (lockerDeleteStockInfo)
  929. {
  930. return _ptService.DeleteBarCodeInfo(request);
  931. }
  932. }
  933. /// <summary>
  934. /// 修改库存状态
  935. /// </summary>
  936. /// <param name="request"></param>
  937. /// <returns></returns>
  938. [HttpPost]
  939. public SRes UpdateStockState(DetailCodeStr1Requestdto request)
  940. {
  941. lock (lockerUpdateStockState)
  942. {
  943. return _ptService.UpdateStockState(request);
  944. }
  945. }
  946. /// <summary>
  947. /// 修改货位状态
  948. /// </summary>
  949. /// <param name="request"></param>
  950. /// <returns></returns>
  951. [HttpPost]
  952. public SRes UpdateCellState(DetailCodeStr1Requestdto request)
  953. {
  954. lock (lockerUpdateCellState)
  955. {
  956. return _ptService.UpdateCellState(request);
  957. }
  958. }
  959. /// <summary>
  960. /// 货位数据互换
  961. /// </summary>
  962. /// <param name="request"></param>
  963. /// <returns></returns>
  964. [HttpPost]
  965. public SRes DataSwapCell(DataSwapCellStrRequest request)
  966. {
  967. lock (lockerDataSwapCell)
  968. {
  969. return _ptService.DataSwapCell(request);
  970. }
  971. }
  972. /// <summary>
  973. /// 补数据
  974. /// </summary>
  975. /// <param name="request"></param>
  976. /// <returns></returns>
  977. [HttpPost]
  978. public SRes DataBasePatch(DetailCodeStrRequest request)
  979. {
  980. lock (lockerDataBasePatch)
  981. {
  982. return _ptService.DataBasePatch(request);
  983. }
  984. }
  985. /// <summary>
  986. /// 货位数据转移
  987. /// </summary>
  988. /// <param name="request"></param>
  989. /// <returns></returns>
  990. [HttpPost]
  991. public SRes DataMoveCell(DataSwapCellStrRequest request)
  992. {
  993. lock (lockerDataMoveCell)
  994. {
  995. return _ptService.DataMoveCell(request);
  996. }
  997. }
  998. #endregion
  999. #region 定时器
  1000. /// <summary>
  1001. /// 启用job
  1002. /// </summary>
  1003. /// <param name="req"></param>
  1004. /// <returns></returns>
  1005. [HttpPost]
  1006. public string StartJob(AutoDetailRequest req)
  1007. {
  1008. var res = new SRes();
  1009. var sysjob = _ptService.GetJobEntityByid(req.Id);
  1010. if (sysjob == null)
  1011. {
  1012. res.ResCode = 0;
  1013. res.ResMsg = "没有找到对应的定时任务";
  1014. return res.ToCamelCaseString();
  1015. }
  1016. JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
  1017. return res.ToCamelCaseString();
  1018. }
  1019. /// <summary>
  1020. /// 执行job
  1021. /// </summary>
  1022. /// <param name="reqEntity"></param>
  1023. /// <returns></returns>
  1024. [HttpPost]
  1025. public string ExecuteJob(DetailCodeStrRequest reqEntity)
  1026. {
  1027. var res = new SRes();
  1028. if (string.IsNullOrEmpty(reqEntity.Code))
  1029. {
  1030. res.ResCode = 0;
  1031. res.ResMsg = "参数错误";
  1032. return res.ToCamelCaseString();
  1033. }
  1034. var jobEntity = _ptService.GetJobEntityByCode(reqEntity.Code);
  1035. if (jobEntity == null)
  1036. {
  1037. res.ResCode = 0;
  1038. res.ResMsg = "没有找到该编码";
  1039. return res.ToCamelCaseString();
  1040. }
  1041. var jobapilist = _ptService.GetJobapilist(jobEntity.Id);
  1042. if (jobapilist.Any())
  1043. {
  1044. foreach (var item in jobapilist)
  1045. {
  1046. Task.Run(() => { HttpUtil.PostRequest(item.ApiUrl, item.RequestBody); });
  1047. }
  1048. }
  1049. return res.ToCamelCaseString();
  1050. }
  1051. #endregion
  1052. [HttpPost]
  1053. public SRes UpdatePurchState(UpdatePurchStateRequest request)
  1054. {
  1055. lock (lockerUpdatePuchState)
  1056. {
  1057. return _ptService.UpdatePurchState(request);
  1058. }
  1059. }
  1060. /// <summary>
  1061. /// 监控遗留的库存数据
  1062. /// </summary>
  1063. /// <param name="request"></param>
  1064. /// <returns></returns>
  1065. [HttpPost]
  1066. public SRes MonitorLeftStock(WebErrorRequest request)
  1067. {
  1068. return _ptService.MonitorLeftStock(request);
  1069. }
  1070. /// <summary>
  1071. /// 分页Job列表
  1072. /// </summary>
  1073. /// <param name="reqEntity"></param>
  1074. /// <returns></returns>
  1075. [HttpPost]
  1076. public List<dto.response.hj.SysJobDto> GetSysJobList(GetSysJobListRequest reqEntity)
  1077. {
  1078. var list = _sysJobrepository.GetList();
  1079. var listdto = _mapper.Map<List<dto.response.hj.SysJobDto>>(list);
  1080. if (listdto != null && listdto.Any())
  1081. {
  1082. for (int i = 0; i < list.Count; i++)
  1083. {
  1084. listdto[i].JobExecuteStatus = GetExecuteStatus(new DetailCodeRequest() { Code = listdto[i].Code });
  1085. }
  1086. return listdto;
  1087. }
  1088. return new List<dto.response.hj.SysJobDto>();
  1089. }
  1090. /// <summary>
  1091. /// 获取执行状态
  1092. /// </summary>
  1093. /// <param name="reqEntity"></param>
  1094. /// <returns></returns>
  1095. [HttpPost]
  1096. public string GetExecuteStatus(DetailCodeRequest reqEntity)
  1097. {
  1098. var jobInfo = _sysJobrepository.GetFirst(p => p.Code == reqEntity.Code);
  1099. var jobs = JobScheduler.GetJobList(Const.JobGroupName).Result;
  1100. if (jobs != null)
  1101. {
  1102. var temp = jobs.Where(p => p.JobName == jobInfo.Code);
  1103. if (temp.Any())
  1104. {
  1105. return temp.First().JobStatus;
  1106. }
  1107. else
  1108. {
  1109. return "Stop";
  1110. }
  1111. }
  1112. else
  1113. {
  1114. return "Stop";
  1115. }
  1116. }
  1117. [HttpPost]
  1118. public SRes HandErrTask(DetailListRequest2Str request)
  1119. {
  1120. lock (lockerHandErrTask)
  1121. {
  1122. foreach (var item in request.IdList)
  1123. {
  1124. var res = _ptService.HandErrTask(new DetailRequest2Str() { Id = item });
  1125. if (res.ResCode != 200)
  1126. {
  1127. return res;
  1128. }
  1129. }
  1130. return new SRes();
  1131. }
  1132. }
  1133. /// <summary>
  1134. /// 更新单据状态
  1135. /// </summary>
  1136. /// <param name="req"></param>
  1137. /// <returns></returns>
  1138. [HttpPost]
  1139. public SRes UpdateDocState(UpdateDocStateReqest req)
  1140. {
  1141. return _ptService.UpdateDocState(req);
  1142. }
  1143. /// <summary>
  1144. /// 修改任务RFID
  1145. /// </summary>
  1146. /// <param name="req"></param>
  1147. /// <returns></returns>
  1148. [HttpPost]
  1149. public SRes UpdateTaskCont(UpdateTaskContRequest req)
  1150. {
  1151. return _ptService.UpdateTaskCont(req);
  1152. }
  1153. /// <summary>
  1154. /// 修改货位RFID
  1155. /// </summary>
  1156. /// <param name="req"></param>
  1157. /// <returns></returns>
  1158. [HttpPost]
  1159. public SRes UpdateLocationContGrpBarCode(UpdateLocationContGrpBarCode req)
  1160. {
  1161. return _ptService.UpdateLocationContGrpBarCode(req);
  1162. }
  1163. /// <summary>
  1164. /// 添加组盘信息
  1165. /// </summary>
  1166. /// <param name="req"></param>
  1167. /// <returns></returns>
  1168. [HttpPost]
  1169. public SRes AddStock(UpdateTaskContRequest req)
  1170. {
  1171. return _ptService.AddStock(req);
  1172. }
  1173. /// <summary>
  1174. /// 机科对接-获取巷道
  1175. /// </summary>
  1176. /// <param name="req"></param>
  1177. /// <returns></returns>
  1178. [HttpPost]
  1179. public JKGetTunRes JKGetTun1(JKGetTunRequest req)
  1180. {
  1181. var res = new JKGetTunRes();
  1182. var task = _ptService.GetTaskNum(req.rfId);
  1183. if (task.ResData == 0)
  1184. {
  1185. res.palletizerNo = task.ResMsg;
  1186. return res;
  1187. }
  1188. var tun = GetTunnelPriorityList(new GetTunnelPriorityListRequest() { TaskNum = task.ResData }).ResData.Split(',')[0];
  1189. if (string.IsNullOrEmpty(tun))
  1190. {
  1191. res.palletizerNo = "没有可用的巷道";
  1192. return res;
  1193. }
  1194. res.rowNo = tun;
  1195. res.palletizerNo = Math.Ceiling(decimal.Parse(tun) / 2).ToString();
  1196. return res;
  1197. }
  1198. /// <summary>
  1199. /// 机科对接-获取巷道
  1200. /// </summary>
  1201. /// <param name="req"></param>
  1202. /// <returns></returns>
  1203. [HttpPost]
  1204. public JKGetTunResNew JKGetTun(JKGetTunRequest req)
  1205. {
  1206. var res = new JKGetTunResNew() { ListData = new List<JKGetTunRes>() };
  1207. var task = _ptService.GetTaskNum(req.rfId);
  1208. if (task.ResData == 0)
  1209. {
  1210. //res.palletizerNo = task.ResMsg;
  1211. return res;
  1212. }
  1213. var tun = GetTunnelPriorityList(new GetTunnelPriorityListRequest() { TaskNum = task.ResData }).ResData.Split(',');
  1214. if (tun !=null && tun.Any())
  1215. {
  1216. foreach (var item in tun)
  1217. {
  1218. res.ListData.Add(new JKGetTunRes() {
  1219. rowNo = item,
  1220. palletizerNo = Math.Ceiling(decimal.Parse(item) / 2).ToString()
  1221. });
  1222. }
  1223. }
  1224. //res.rowNo = tun;
  1225. //res.palletizerNo = Math.Ceiling(decimal.Parse(tun) / 2).ToString();
  1226. return res;
  1227. }
  1228. /// <summary>
  1229. /// 机科对接-达到二楼取货站台通知
  1230. /// </summary>
  1231. /// <param name="req"></param>
  1232. /// <returns></returns>
  1233. [HttpPost]
  1234. public JKPalletizerRes JKArriveInfo(JKArrRequest req)
  1235. {
  1236. lock (lockerJKArriveInfo)
  1237. {
  1238. var res = new JKPalletizerRes();
  1239. var task = _ptService.GetTaskNum(req.rfId);
  1240. if (task.ResData == 0)
  1241. {
  1242. res.code = 0;
  1243. res.message = task.ResMsg;
  1244. return res;
  1245. }
  1246. //更新任务表当前位置
  1247. var curpoint = "";
  1248. var srm = "";
  1249. switch (req.rowNo)
  1250. {
  1251. case "1":
  1252. curpoint = "1027";
  1253. srm = "SRM1";
  1254. break;
  1255. case "2":
  1256. curpoint = "1028";
  1257. srm = "SRM1";
  1258. break;
  1259. case "3":
  1260. curpoint = "1029";
  1261. srm = "SRM2";
  1262. break;
  1263. case "4":
  1264. curpoint = "1030";
  1265. srm = "SRM2";
  1266. break;
  1267. case "5":
  1268. curpoint = "1031";
  1269. srm = "SRM3";
  1270. break;
  1271. case "6":
  1272. curpoint = "1032";
  1273. srm = "SRM3";
  1274. break;
  1275. case "7":
  1276. curpoint = "1033";
  1277. srm = "SRM4";
  1278. break;
  1279. case "8":
  1280. curpoint = "1034";
  1281. srm = "SRM4";
  1282. break;
  1283. }
  1284. if (string.IsNullOrEmpty(curpoint))
  1285. {
  1286. res.code = 0;
  1287. res.message = "请确认巷道编号传输是否正确";
  1288. return res;
  1289. }
  1290. _ptService.UpdateTask(task.ResData, curpoint, srm, req.rowNo);
  1291. return res;
  1292. }
  1293. }
  1294. /// <summary>
  1295. /// 机科对接-接收盘条信息接口
  1296. /// </summary>
  1297. /// <param name="req"></param>
  1298. /// <returns></returns>
  1299. [HttpPost]
  1300. public JKPalletizerRes JKTransPTInfo(JKTransPTInfo req)
  1301. {
  1302. lock (lockerJKTransPTInfo)
  1303. {
  1304. var res = new JKPalletizerRes();
  1305. var temp = PurchaseBillTrans(new PurchaseBillTransReqest()
  1306. {
  1307. BillCode = req.BillCode,
  1308. BillType = req.BillType,
  1309. Equip = "2999",
  1310. ReqId = req.ReqId,
  1311. SupCode = req.SupCode,
  1312. SupName = req.SupName,
  1313. WareCode = req.WareCode,
  1314. ListInfo = new List<ListInfoItem>() {
  1315. new ListInfoItem(){
  1316. Batch= req.Batch,
  1317. BoilerNo = req.BoilerNo,
  1318. Brand = req.Brand,
  1319. Carbon = req.Carbon,
  1320. Describe = req.Describe,
  1321. ExecStandard = req.ExecStandard,
  1322. HoldDuration = req.HoldDuration,
  1323. Licence = req.Licence,
  1324. MatBarCode = req.MatBarCode,
  1325. MatCode = req.MatCode,
  1326. PackNo = req.PackNo,
  1327. ProductDate = req.ProductDate,
  1328. RFID = req.RFID,
  1329. RodBar = req.RodBar,
  1330. Weight = req.Weight
  1331. }
  1332. }
  1333. });
  1334. if (temp.ResCode != 200)
  1335. {
  1336. res.code = 0;
  1337. res.message = temp.ResMsg;
  1338. return res;
  1339. }
  1340. return res;
  1341. }
  1342. }
  1343. /// <summary>
  1344. /// 流水数据归档
  1345. /// </summary>
  1346. /// <param name="request"></param>
  1347. /// <returns></returns>
  1348. [HttpPost]
  1349. public SRes FlowDataMoveJob(PtAutoPurchData request)
  1350. {
  1351. lock (lockerFlowDataMoveJob)
  1352. {
  1353. return _ptService.FlowDataMoveJob(request);
  1354. }
  1355. }
  1356. }
  1357. }