SxController.cs 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496
  1. using AutoMapper;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Newtonsoft.Json;
  5. using Org.BouncyCastle.Asn1.Ocsp;
  6. using wms.api.Job;
  7. using wms.dto;
  8. using wms.dto.request;
  9. using wms.dto.request.fj;
  10. using wms.dto.request.cp;
  11. using wms.dto.request.hj;
  12. using wms.dto.request.hj.dto;
  13. using wms.dto.request.share;
  14. using wms.dto.request.sx;
  15. using wms.dto.response;
  16. using wms.dto.response.cp;
  17. using wms.service.IService;
  18. using wms.sqlsugar.model.sx;
  19. using wms.util.Ext;
  20. using wms.util.Http;
  21. using wms.dto.response.sx;
  22. using wms.service.Service;
  23. using Castle.Core.Internal;
  24. using wms.util.Check;
  25. using Autofac.Core;
  26. namespace wms.api.Controllers
  27. {
  28. [Route("api/[controller]/[action]")]
  29. [ApiController]
  30. public class SxController : BaseController
  31. {
  32. private readonly ISXService _sxService;
  33. private readonly ILogger<SxController> _logger;
  34. private readonly IMapper _mapper;
  35. private static object lockerCurtainProductionOrder = new object();
  36. private static object lockerSpoolMaterialInfoTrans = new object();
  37. private static object lockerCloseWorkOrder = new object();
  38. private static object lockerSynchronizeBoxStatus = new object();
  39. private static object lockerlockerStockChange = new object();
  40. private static object lockerManualBuildStockTrans = new object();
  41. private static object lockerBomInfoTrans = new object();
  42. private static object lockerCompleteTask = new object();
  43. private static object lockerApplyStockInLoc = new object();
  44. private static object lockerSKUInfoTrans = new object();
  45. private static object lockerPackInfoTrans = new object();
  46. private static object lockerTorsChkComplete = new object();
  47. private static object lockerGetTunnelPriorityList = new object();
  48. private static object lockerApplyFloor = new object();
  49. private static object lockerTorsChkStockOut = new object();
  50. private static object lockerCancelOrComplet = new object();
  51. private static object lockerCarryTask = new object();
  52. private static object lockerPalletizingLayerPackStockOut = new object();
  53. private static object lockerTorsChkValue = new object();
  54. private static object lockerSrmPickOutCompleted = new object();
  55. private static object lockerTorsChkFloor = new object();
  56. private static object lockerPalletizingPatchWheel = new object();
  57. private static object lockerPalletizingForceknot = new object();
  58. private static object lockerPalletizinginfobinde = new object();
  59. private static object lockerCompletePalletizingTask = new object();
  60. private static object lockerSxMoveTask = new object();
  61. private static object lockerPalletizingSpcPackStockOut = new object();
  62. private static object lockerPalletizingSpcPackPreALL = new object();
  63. private static object lockerPalletizingSpcNotPackStockOut = new object();
  64. private static object lockerTorsChkStationbinde = new object();
  65. private static object lockerTorsChkErrorinfo = new object();
  66. private static object lockerTorsChkinfo = new object();
  67. private static object lockerPalletizingPackBStockOut = new object();
  68. private static object lockerSolderErrorStockOut = new object();
  69. private static object lockerChongraoPackStockOut = new object();
  70. private static object lockerForceCancelTask = new object();
  71. private static object lockerDeleteStockInfo = new object();
  72. private static object lockerUpdateStockState = new object();
  73. private static object lockerUpdateCellState = new object();
  74. private static object lockerDataSwapCell = new object();
  75. private static object lockerDataBasePatch = new object();
  76. private static object lockerUpdatePuchState = new object();
  77. private static object lockerDataMoveCell = new object();
  78. private static object lockerTaskRepeatSend = new object();
  79. private static object lockerUpdateTaskState = new object();
  80. private static object lockerCancelPreStockinfo = new object();
  81. private static object lockerErrorDateclearJob = new object();
  82. private static object lockerFlowDataMoveJob = new object();
  83. public SxController(ISXService sxService, ILogger<SxController> logger, IMapper mapper) : base(sxService, logger)
  84. {
  85. _sxService = sxService;
  86. _logger = logger;
  87. _mapper = mapper;
  88. }
  89. /// <summary>
  90. /// 物料主数据推送接口(帘线)
  91. /// </summary>
  92. /// <param name="reqBody"></param>
  93. /// <returns></returns>
  94. [HttpPost]
  95. public SRes SyncMaterInfoListForLX(SxSyncMaterInfoListRequest reqBody)
  96. {
  97. var res = new SRes();
  98. if (reqBody.ListInfo == null || !reqBody.ListInfo.Any())
  99. {
  100. res.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
  101. res.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
  102. RedisHelper.Set("Sx:WMSErrorInfo:MESEquip3", new RedisErrorInfo() { Equip = "MESEquip3", Con = "MES推送物料主数据时" + ResponseStatusCodeEnum.DocDetailNotExist.GetDescription(), Time = DateTime.Now });
  103. return res;
  104. }
  105. try
  106. {
  107. HttpUtil.PostRequest("http://10.30.44.4:8066/api/Fj/SyncMaterInfoListForLX", JsonConvert.SerializeObject(reqBody), 30000, "UTF-8", "application/json");
  108. }
  109. catch (Exception ex)
  110. {
  111. _logger.LogInformation("物料主数据推送接口(帘线)异常:" + ex.ToString());
  112. }
  113. _sxService.SyncMaterInfo(reqBody.ListInfo);
  114. return res;
  115. }
  116. /// <summary>
  117. /// 帘线生产工单信息传输接口
  118. /// </summary>
  119. /// <param name="reqDto"></param>
  120. /// <returns></returns>
  121. [HttpPost]
  122. public SRes CurtainProductionOrder(CurtainProductionOrderRequest reqDto)
  123. {
  124. lock (lockerCurtainProductionOrder)
  125. {
  126. return _sxService.CurtainProductionOrder(reqDto);
  127. }
  128. //return ConcurrencyReqControl<CurtainProductionOrderRequest, SRes>(lockerCurtainProductionOrder, "CurtainProductionOrder", reqDto.BillCode, reqDto, _sxService.CurtainProductionOrder);
  129. }
  130. /// <summary>
  131. /// 帘线工字轮信息传输接口(mes调用)
  132. /// </summary>
  133. /// <param name="reqDto"></param>
  134. /// <returns></returns>
  135. [HttpPost(Name = "SpoolMaterialInfoTrans")]
  136. public SRes SpoolMaterialInfoTrans(SxSpoolMaterialInfoTransRequest reqDto)
  137. {
  138. lock (lockerSpoolMaterialInfoTrans)
  139. {
  140. return _sxService.SpoolMaterialInfoTrans(reqDto);
  141. }
  142. //return ConcurrencyReqControl<SxSpoolMaterialInfoTransRequest, SRes>(lockerSpoolMaterialInfoTrans, "SxSpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _sxService.SpoolMaterialInfoTrans);
  143. }
  144. /// <summary>
  145. /// 关闭工单
  146. /// </summary>
  147. /// <param name="reqDto"></param>
  148. /// <returns></returns>
  149. [HttpPost(Name = "CloseWorkOrder")]
  150. public SRes CloseWorkOrder(CloseWorkOrderRequest reqDto)
  151. {
  152. lock (lockerCloseWorkOrder)
  153. {
  154. return _sxService.CloseWorkOrder(reqDto);
  155. }
  156. //return ConcurrencyReqControl<SxSpoolMaterialInfoTransRequest, SRes>(lockerSpoolMaterialInfoTrans, "SxSpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _sxService.SpoolMaterialInfoTrans);
  157. }
  158. /// <summary>
  159. /// 同步箱号状态
  160. /// </summary>
  161. /// <param name="reqDto"></param>
  162. /// <returns></returns>
  163. [HttpPost(Name = "SynchronizeBoxStatus")]
  164. public SRes SynchronizeBoxStatus(SynchronizeBoxStatusRequest reqDto)
  165. {
  166. lock (lockerSynchronizeBoxStatus)
  167. {
  168. return _sxService.SynchronizeBoxStatus(reqDto);
  169. }
  170. }
  171. /// <summary>
  172. /// SKU信息传输接口
  173. /// </summary>
  174. /// <param name="reqDto"></param>
  175. /// <returns></returns>
  176. [HttpPost(Name = "SKUInfoTrans")]
  177. public SRes SKUInfoTrans(SKUInfoTransRequest reqDto)
  178. {
  179. return ConcurrencyReqControl<SKUInfoTransRequest, SRes>(lockerSKUInfoTrans, "SKUInfoTrans", reqDto.SkuCode, reqDto, _sxService.SKUInfoTrans);
  180. }
  181. /// <summary>
  182. /// 包装信息传输接口
  183. /// </summary>
  184. /// <param name="reqDto"></param>
  185. /// <returns></returns>
  186. [HttpPost(Name = "PackInfoTrans")]
  187. public SRes PackInfoTrans(PackInfoTrans reqDto)
  188. {
  189. return ConcurrencyReqControl<PackInfoTrans, SRes>(lockerPackInfoTrans, "SKUInfoTrans", reqDto.PackCode, reqDto, _sxService.PackInfoTrans);
  190. }
  191. /// <summary>
  192. /// 扭转出库完成
  193. /// </summary>
  194. /// <param name="request"></param>
  195. /// <returns></returns>
  196. [HttpPost]
  197. public SRes<int> TorsChkComplete(TorsChkCompleteRequest request)
  198. {
  199. return ConcurrencyReqControl<TorsChkCompleteRequest, SRes<int>>(lockerTorsChkComplete, "TorsChkComplete", request.TaskNo, request, _sxService.TorsChkComplete);
  200. }
  201. /// <summary>
  202. /// 扭转入库分配楼层接口
  203. /// </summary>
  204. /// <param name="reqDto"></param>
  205. /// <returns></returns>
  206. [HttpPost]
  207. public SRes<int> TorsChkFloor(TorsChkFloorRequest reqDto)
  208. {
  209. lock (lockerTorsChkFloor)
  210. {
  211. return _sxService.TorsChkFloor(reqDto);
  212. }
  213. }
  214. /// <summary>
  215. /// 扭转出库申请
  216. /// </summary>
  217. /// <param name="request"></param>
  218. /// <returns></returns>
  219. [HttpPost]
  220. public SRes TorsChkStockOut(TorsChkStockOutRequest request)
  221. {
  222. return ConcurrencyReqControl<TorsChkStockOutRequest, SRes>(lockerTorsChkStockOut, "TorsChkStockOut", request.Equip, request, _sxService.TorsChkStockOut);
  223. }
  224. /// <summary>
  225. /// 接收扭转值
  226. /// </summary>
  227. /// <param name="request"></param>
  228. /// <returns></returns>
  229. [HttpPost]
  230. public SRes TorsChkValue(TorsChkValueRequest request)
  231. {
  232. lock (lockerTorsChkValue)
  233. {
  234. return _sxService.TorsChkValue(request);
  235. }
  236. }
  237. /// <summary>
  238. /// 扭转工位产品绑定接口
  239. /// </summary>
  240. /// <param name="request"></param>
  241. /// <returns></returns>
  242. [HttpPost]
  243. public SRes TorsChkStationbinde(TorsChkStationbindeRequest request)
  244. {
  245. lock (lockerTorsChkStationbinde)
  246. {
  247. return _sxService.TorsChkStationbinde(request);
  248. }
  249. }
  250. /// <summary>
  251. /// 扭转异常信息上传
  252. /// </summary>
  253. /// <param name="request"></param>
  254. /// <returns></returns>
  255. [HttpPost]
  256. public SRes TorsChkErrorinfo(TorsChkErrorinfoRequest request)
  257. {
  258. lock (lockerTorsChkErrorinfo)
  259. {
  260. return _sxService.TorsChkErrorinfo(request);
  261. }
  262. }
  263. /// <summary>
  264. /// 扭转获取基础信息
  265. /// </summary>
  266. /// <param name="request"></param>
  267. /// <returns></returns>
  268. [HttpPost]
  269. public TorsChkResponse GetTorsChkinfo(GetTorsChkinfoRequest request)
  270. {
  271. lock (lockerTorsChkinfo)
  272. {
  273. return _sxService.GetTorsChkinfo(request);
  274. }
  275. }
  276. [HttpPost]
  277. public SRes CellInfo(string code)
  278. {
  279. return _sxService.CellInfo(code);
  280. }
  281. /// <summary>
  282. /// 码垛层配装箱
  283. /// </summary>
  284. /// <param name="request"></param>
  285. /// <returns></returns>
  286. [HttpPost]
  287. public SRes PalletizingLayerPackStockOut(PalletizingPackStockOutRequest request)
  288. {
  289. return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingLayerPackStockOut, "PalletizingLayerPackStockOut", request.Equip, request, _sxService.PalletizingLayerPackStockOut);
  290. }
  291. /// <summary>
  292. /// 码垛SPC非控制装箱(缓存托盘)
  293. /// </summary>
  294. /// <param name="request"></param>
  295. /// <returns></returns>
  296. [HttpPost]
  297. public SRes PalletizingSpcNotPackStockOut2(PalletizingPackStockOutRequest request)
  298. {
  299. lock (lockerPalletizingSpcPackStockOut)
  300. {
  301. return _sxService.PalletizingSpcNotPackStockOut2(request);
  302. }
  303. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcNotPackStockOut);
  304. }
  305. /// <summary>
  306. /// 码垛SPC控制装箱(缓存托盘)
  307. /// </summary>
  308. /// <param name="request"></param>
  309. /// <returns></returns>
  310. [HttpPost]
  311. public SRes PalletizingSpcPackStockOut2(PalletizingPackStockOutRequest request)
  312. {
  313. lock (lockerPalletizingSpcPackStockOut)
  314. {
  315. return _sxService.PalletizingSpcPackStockOut2(request);
  316. }
  317. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  318. }
  319. /// <summary>
  320. /// 码垛SPC装箱(控制非控制一起执行)
  321. /// </summary>
  322. /// <param name="request"></param>
  323. /// <returns></returns>
  324. [HttpPost]
  325. public SRes PalletizingSpcPackStockOutALL(PalletizingPackStockOutRequest request)
  326. {
  327. lock (lockerPalletizingSpcPackStockOut)
  328. {
  329. var timesign = IdFactory.NewId();
  330. var temp3 = _sxService.PalletizingPackBStockOut(request);
  331. //var temp1 = _sxService.PalletizingSpcPackStockOut3(request);//控制箱根据新逻辑已经合并到非控制箱中
  332. var temp2 = _sxService.PalletizingSpcNotPackStockOut3(request);
  333. temp2.ResMsg = "非控制箱执行结果:" + temp2.ResMsg + ";B质量码垛:" + temp3.ResMsg;
  334. return temp2;
  335. }
  336. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  337. }
  338. /// <summary>
  339. /// 码垛SPC装箱库存程序
  340. /// </summary>
  341. /// <param name="request"></param>
  342. /// <returns></returns>
  343. [HttpPost]
  344. public SRes PalletizingSpcPackRulePreAll(PalletizingPackStockOutRequest request)
  345. {
  346. lock (lockerPalletizingSpcPackPreALL)
  347. {
  348. //var temp1 = _sxService.PalletizingSpcPackRulePre(request);
  349. //var temp2 = _sxService.PalletizingSpcNotPackRulePre(request);//控制箱根据新逻辑已经合并到非控制箱中
  350. var temp2 = _sxService.PalletizingSpcNotPackRulePre2(request);
  351. temp2.ResMsg = "非控制箱预占库存执行结果:" + temp2.ResMsg; //+ ";控制箱预占库存执行结果:"+ temp1.ResMsg;
  352. return temp2;
  353. }
  354. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  355. }
  356. /// <summary>
  357. /// 码垛SPC非控制装箱计算预占箱号-去掉黑盘和批次限制
  358. /// </summary>
  359. /// <param name="request"></param>
  360. /// <returns></returns>
  361. [HttpPost]
  362. public SRes PalletizingSpcNotPackRulePre2(PalletizingPackStockOutRequest request)
  363. {
  364. lock (lockerPalletizingSpcPackPreALL)
  365. {
  366. var temp2 = _sxService.PalletizingSpcNotPackRulePre2(request);
  367. temp2.ResMsg = "非控制箱预占库存执行结果:" + temp2.ResMsg;
  368. return temp2;
  369. }
  370. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  371. }
  372. /// <summary>
  373. /// 码垛SPC装箱控制预占库存程序
  374. /// </summary>
  375. /// <param name="request"></param>
  376. /// <returns></returns>
  377. [HttpPost]
  378. public SRes PalletizingSpcNotPackRulePre(PalletizingPackStockOutRequest request)
  379. {
  380. lock (lockerPalletizingSpcPackPreALL)
  381. {
  382. var temp2 = _sxService.PalletizingSpcNotPackRulePre(request);
  383. return temp2;
  384. }
  385. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  386. }
  387. /// <summary>
  388. /// 码垛SPC装箱控制预占库存程序
  389. /// </summary>
  390. /// <param name="request"></param>
  391. /// <returns></returns>
  392. [HttpPost]
  393. public SRes PalletizingSpcPackRulePre(PalletizingPackStockOutRequest request)
  394. {
  395. lock (lockerPalletizingSpcPackPreALL)
  396. {
  397. var temp2 = _sxService.PalletizingSpcPackRulePre(request);
  398. return temp2;
  399. }
  400. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  401. }
  402. /// <summary>
  403. /// 码垛SPC非控制箱出预占库存
  404. /// </summary>
  405. /// <param name="request"></param>
  406. /// <returns></returns>
  407. [HttpPost]
  408. public SRes PalletizingSpcNotPackStockOut3(PalletizingPackStockOutRequest request)
  409. {
  410. lock (lockerPalletizingSpcPackPreALL)
  411. {
  412. var temp2 = _sxService.PalletizingSpcNotPackStockOut3(request);
  413. return temp2;
  414. }
  415. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  416. }
  417. /// <summary>
  418. /// 码垛SPC控制箱出预占库存
  419. /// </summary>
  420. /// <param name="request"></param>
  421. /// <returns></returns>
  422. [HttpPost]
  423. public SRes PalletizingSpcPackStockOut3(PalletizingPackStockOutRequest request)
  424. {
  425. lock (lockerPalletizingSpcPackPreALL)
  426. {
  427. var temp2 = _sxService.PalletizingSpcPackStockOut3(request);
  428. return temp2;
  429. }
  430. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
  431. }
  432. /// <summary>
  433. /// B质量码垛装箱
  434. /// </summary>
  435. /// <param name="request"></param>
  436. /// <returns></returns>
  437. [HttpPost]
  438. public SRes PalletizingPackBStockOut(PalletizingPackStockOutRequest request)
  439. {
  440. lock (lockerPalletizingSpcPackStockOut)
  441. {
  442. return _sxService.PalletizingPackBStockOut(request);
  443. }
  444. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingPackBStockOut, "PalletizingPackBStockOut", request.Equip, request, _sxService.PalletizingPackBStockOut);
  445. }
  446. /// <summary>
  447. /// 重绕盘超时装箱码垛
  448. /// </summary>
  449. /// <param name="request"></param>
  450. /// <returns></returns>
  451. [HttpPost]
  452. public SRes ChongraoPackStockOut(PalletizingPackStockOutRequest request)
  453. {
  454. lock (lockerPalletizingSpcPackStockOut)
  455. {
  456. return _sxService.ChongraoPackStockOut(request);
  457. }
  458. }
  459. /// <summary>
  460. /// 焊点不符合异常排出
  461. /// </summary>
  462. /// <param name="request"></param>
  463. /// <returns></returns>
  464. [HttpPost]
  465. public SRes SolderErrorStockOut(PalletizingPackStockOutRequest request)
  466. {
  467. return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerSolderErrorStockOut, "SolderErrorStockOut", request.Equip, request, _sxService.SolderErrorStockOut);
  468. }
  469. /// <summary>
  470. /// 特殊码垛出库(超时)
  471. /// </summary>
  472. /// <param name="request"></param>
  473. /// <returns></returns>
  474. [HttpPost]
  475. public SRes SpecialStockOut(PalletizingPackStockOutRequest request)
  476. {
  477. lock (lockerPalletizingSpcPackStockOut)
  478. {
  479. return _sxService.SpecialStockOut(request);
  480. }
  481. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.SpecialStockOut);
  482. }
  483. /// <summary>
  484. /// 手动码垛
  485. /// </summary>
  486. /// <param name="request"></param>
  487. /// <returns></returns>
  488. [HttpPost]
  489. public SRes ManualPalletizingStockOut(ManualPalletizingStockOutRequest request)
  490. {
  491. lock (lockerPalletizingSpcPackStockOut)
  492. {
  493. return _sxService.ManualPalletizingStockOut(request);
  494. }
  495. //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.SpecialStockOut);
  496. }
  497. /// <summary>
  498. /// C级品码垛出库
  499. /// </summary>
  500. /// <param name="request"></param>
  501. /// <returns></returns>
  502. [HttpPost]
  503. public SRes CGrageStockOut(PalletizingPackStockOutRequest request)
  504. {
  505. lock (lockerPalletizingSpcPackStockOut)
  506. {
  507. return _sxService.CGrageStockOut(request);
  508. }
  509. }
  510. /// <summary>
  511. /// 清理库存 (码垛)
  512. /// </summary>
  513. /// <param name="request"></param>
  514. /// <returns></returns>
  515. [HttpPost]
  516. public SRes OnePackStock(PalletizingPackStockOutRequest request)
  517. {
  518. return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.OnePackStock);
  519. }
  520. /// <summary>
  521. /// 完成码垛任务(自动入库)
  522. /// </summary>
  523. /// <param name="reqDto"></param>
  524. /// <returns></returns>
  525. [HttpPost]
  526. public SRes<int> CompletePalletizingTask(SxPalletizingCompleteRequest reqDto)
  527. {
  528. lock (lockerCompletePalletizingTask)
  529. {
  530. return _sxService.CompletePalletizingTask(reqDto);
  531. }
  532. }
  533. /// <summary>
  534. /// 码垛补工字轮接口
  535. /// </summary>
  536. /// <param name="request"></param>
  537. /// <returns></returns>
  538. [HttpPost]
  539. public SRes PalletizingPatchWheel(PalletizingPatchWheelRequest request)
  540. {
  541. return ConcurrencyReqControl<PalletizingPatchWheelRequest, SRes>(lockerPalletizingPatchWheel, "PalletizingPatchWheel", request.Equip, request, _sxService.PalletizingPatchWheel);
  542. }
  543. /// <summary>
  544. /// 码垛强制结盘
  545. /// </summary>
  546. /// <param name="request"></param>
  547. /// <returns></returns>
  548. [HttpPost]
  549. public SRes PalletizingForceknot(PalletizingForceknotRequest request)
  550. {
  551. lock (lockerPalletizingForceknot)
  552. {
  553. return _sxService.PalletizingForceknot(request);
  554. }
  555. }
  556. /// <summary>
  557. /// 码垛信息绑定(抓取完成)
  558. /// </summary>
  559. /// <param name="request"></param>
  560. /// <returns></returns>
  561. [HttpPost]
  562. public SRes Palletizinginfobinde(PalletizinginfobindeRequest request)
  563. {
  564. lock (lockerPalletizinginfobinde)
  565. {
  566. return _sxService.Palletizinginfobinde(request);
  567. }
  568. }
  569. /// <summary>
  570. /// 手动出库
  571. /// </summary>
  572. /// <param name="request"></param>
  573. /// <returns></returns>
  574. [HttpPost]
  575. public SRes ManualTask(DetailCodeStrdtoRequest request)
  576. {
  577. lock (lockerSKUInfoTrans)
  578. {
  579. return _sxService.Manaler(request);
  580. }
  581. }
  582. /// <summary>
  583. /// 手动出库(mes调用)
  584. /// </summary>
  585. /// <param name="request"></param>
  586. /// <returns></returns>
  587. [HttpPost]
  588. public SRes MesManualTask(MesManualTaskRequest request)
  589. {
  590. lock (lockerSKUInfoTrans)
  591. {
  592. var cell = _sxService.GetLocationInfo(new DetailCodeRequest() { Code = request.BarCode });
  593. if (string.IsNullOrEmpty(cell.ResData))
  594. {
  595. return new SRes()
  596. {
  597. ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode(),
  598. ResMsg = "该条码不在时效库中" + request.BarCode
  599. };
  600. }
  601. var newreq = new DetailCodeStrdtoRequest()
  602. {
  603. Location = new List<string>() { cell.ResData },
  604. EndPoint = 5,
  605. User = request.User
  606. };
  607. return _sxService.Manaler(newreq);
  608. }
  609. }
  610. /// <summary>
  611. /// CD级品自动出库
  612. /// </summary>
  613. /// <param name="request"></param>
  614. /// <returns></returns>
  615. [HttpPost]
  616. public SRes CGradeAutoTask(DetailCodeStrdtoRequest request)
  617. {
  618. var list = _sxService.GetCGradeList();
  619. if (list.ResDataList.Any())
  620. {
  621. return ManualTask(new DetailCodeStrdtoRequest() { Location = new List<string>() { list.ResDataList.First() }, EndPoint = 5, User = "WMS自动触发CD排出" });
  622. }
  623. return null;
  624. }
  625. /// <summary>
  626. /// B质量超时自动出库
  627. /// </summary>
  628. /// <param name="request"></param>
  629. /// <returns></returns>
  630. [HttpPost]
  631. public SRes BGradeTimeOutAutoTask(DetailCodeStrdtoRequest request)
  632. {
  633. var list = _sxService.GetBGradeTimeOutList();
  634. if (list.ResDataList.Any())
  635. {
  636. return ManualTask(new DetailCodeStrdtoRequest() { Location = new List<string>() { list.ResDataList.First() }, EndPoint = 5, User = "B质量超时自动排出" });
  637. }
  638. return null;
  639. }
  640. /// <summary>
  641. /// 移库任务申请
  642. /// </summary>
  643. /// <param name="request"></param>
  644. /// <returns></returns>
  645. [HttpPost]
  646. public SRes<WcsMoveTaskResponse> WcsMoveTask(WcsMoveTaskRequest request)
  647. {
  648. lock (lockerSxMoveTask)
  649. {
  650. return _sxService.WcsMoveTask(request);
  651. }
  652. }
  653. /// <summary>
  654. /// 分配楼层(扫码分配)
  655. /// </summary>
  656. /// <param name="reqDto"></param>
  657. /// <returns></returns>
  658. [HttpPost(Name = "ApplyFloor")]
  659. public SRes<ApplyFloorResponse> ApplyFloor(ApplyFloorRequest reqDto)
  660. {
  661. lock (lockerApplyFloor)
  662. {
  663. var res = _sxService.ApplyFloor(reqDto);
  664. if (res.ResCode == ResponseStatusCodeEnum.StockNotExist.GetHashCode() || res.ResCode == ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode())//组盘数据不存在时,主动从mes同步一下
  665. {
  666. try
  667. {
  668. _logger.LogInformation("触发主动拉取工字轮信息:" + reqDto.Code);
  669. ApplyHunrRequest push = new ApplyHunrRequest() { SpoolNr = reqDto.Code };
  670. var str = WmsServiceExportApi(push);
  671. _logger.LogInformation("触发主动拉取工字轮返回:" + str);
  672. var spoolMaterialInfo = JsonConvert.DeserializeObject<SxSpoolMaterialInfoTransRequest>(str);
  673. if (!string.IsNullOrEmpty(spoolMaterialInfo.SpoolCode))
  674. {
  675. var temp = SpoolMaterialInfoTrans(spoolMaterialInfo);
  676. if (temp.ResCode == 200)
  677. {
  678. res = _sxService.ApplyFloor(reqDto);
  679. }
  680. else
  681. {
  682. _logger.LogInformation("SpoolMaterialInfoTrans返回报错:" + temp.ResMsg + ",工字轮" + reqDto.Code);
  683. }
  684. }
  685. }
  686. catch (Exception ex)
  687. {
  688. _logger.LogInformation("触发主动拉取工字轮信息异常" + reqDto.Code);
  689. }
  690. }
  691. return res;
  692. }
  693. }
  694. /// <summary>
  695. /// 获取巷道
  696. /// </summary>
  697. /// <param name="reqEntity"></param>
  698. /// <returns></returns>
  699. [HttpPost]
  700. public SRes<string> GetTunnelPriorityList(GetSxTunnelPriorityListRequest reqEntity)
  701. {
  702. lock (lockerGetTunnelPriorityList)
  703. {
  704. //如果不存在任务,则拉取一下条码信息(环线下面异常口回库情况)
  705. if (!_sxService.IsExistTask(new DetailCodeRequest() { Code = reqEntity.Code }).ResData)
  706. {
  707. DataBasePatch2(new DataBasePatchRequest() { Code = reqEntity.Code });
  708. }
  709. //先判断有没有条码信息
  710. return _sxService.GetTunnelPriorityList(reqEntity);
  711. }
  712. }
  713. /// <summary>
  714. /// 分配货位
  715. /// </summary>
  716. /// <param name="reqEntity"></param>
  717. /// <returns></returns>
  718. [HttpPost]
  719. public SRes<List<dto.response.hj.ApplyStockInLocResponse>> ApplyStockInLoc(SxApplyStockInLocRequest reqEntity)
  720. {
  721. return ConcurrencyReqControl<SxApplyStockInLocRequest, SRes<List<dto.response.hj.ApplyStockInLocResponse>>>(lockerApplyStockInLoc, "SxApplyStockInLoc" + reqEntity.TunnelNum + reqEntity.Floor, "分配货位" + reqEntity.TunnelNum + reqEntity.Floor, reqEntity, _sxService.ApplyStockInLoc);
  722. }
  723. /// <summary>
  724. /// 完成出库任务
  725. /// </summary>
  726. /// <param name="reqDto"></param>
  727. /// <returns></returns>
  728. [HttpPost]
  729. public SRes<int> CompleteTask(SxCompleteTaskRequest reqDto)
  730. {
  731. lock (lockerCompleteTask)
  732. {
  733. return _sxService.CompleteTask(reqDto);
  734. }
  735. }
  736. /// <summary>
  737. /// 堆垛机完成
  738. /// </summary>
  739. /// <param name="reqDto"></param>
  740. /// <returns></returns>
  741. [HttpPost]
  742. public SRes<int> SrmCompleted(SxCompleteTaskRequest reqDto)
  743. {
  744. lock (lockerSrmPickOutCompleted)
  745. {
  746. return _sxService.SrmCompleted(reqDto);
  747. }
  748. }
  749. /// <summary>
  750. /// 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用)
  751. /// </summary>
  752. /// <param name="request"></param>
  753. /// <returns></returns>
  754. [HttpPost]
  755. public SRes CancelTaskVerify(CancelTaskRequest request)
  756. {
  757. lock (lockerCancelOrComplet)
  758. {
  759. return _sxService.CancelTaskVerify(request);
  760. }
  761. }
  762. /// <summary>
  763. /// 执行任务(开放wcs调用,前端不调用)
  764. /// </summary>
  765. /// <param name="request"></param>
  766. /// <returns></returns>
  767. [HttpPost]
  768. public SRes CarryTaskInfo(CancelTaskRequest request)
  769. {
  770. lock (lockerCarryTask)
  771. {
  772. return _sxService.CarryTaskInfo(request);
  773. }
  774. }
  775. [HttpPost]
  776. public SRes CancelTaskInfo(CancelTaskRequest request)
  777. {
  778. lock (lockerCarryTask)
  779. {
  780. var verifyres = _sxService.CancelTaskVerify(request);
  781. if (verifyres.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  782. {
  783. return verifyres;
  784. }
  785. foreach (var item in request.TaskNo)
  786. {
  787. var calres = _sxService.CancelTask(new CompleteTaskRequest() { TaskNum = item, WCSUpdateName = "wms" });
  788. if (calres.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  789. {
  790. return calres;
  791. }
  792. var forres = _sxService.ForceCancelTask(new ErrorTaskRequest() { TaskNo = item.ToString(), WareHouse = Const.SxWareHouse });
  793. if (forres.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  794. {
  795. return calres;
  796. }
  797. }
  798. return new SRes();
  799. }
  800. }
  801. /// <summary>
  802. /// 帘线工字轮入库反馈接口
  803. /// </summary>
  804. /// <param name="billcode"></param>
  805. /// <returns></returns>
  806. [HttpPost(Name = "CurtainLineStockInFeedBack")]
  807. public PushResponse CurtainLineStockInFeedBack(PushDate request)
  808. {
  809. var result = new PushResponse();
  810. request.Type = SxFackbeekType.InterfaceType_SX_CurtainStockIn.ToString();
  811. var list = _sxService.GetPushDatelistAuto(request);
  812. if (!list.Any())
  813. {
  814. return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  815. }
  816. if (list.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_CurtainStockIn.ToString()).ToList().Any())
  817. {
  818. var onefloor = list.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_CurtainStockIn.ToString()).ToList();
  819. SpoolPushRequest push = new SpoolPushRequest();
  820. var info = _mapper.Map<List<ListInfo>>(onefloor);
  821. push.list = info;
  822. push.STORE_CODE = "sxhouse";
  823. push.STORE_NAME = "时效立库";
  824. WmsServiceExportApiMq(push);
  825. var ids = onefloor.Select(p => p.Id).ToList();
  826. _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  827. {
  828. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  829. WhereExpression = it => ids.Contains(it.Id)
  830. });
  831. }
  832. return result;
  833. }
  834. /// <summary>
  835. /// 时效库出库装箱工字轮信息反馈接口
  836. /// </summary>
  837. /// <param name="request"></param>
  838. /// <returns></returns>
  839. [HttpPost]
  840. public PushResponse EnchaseStockOutFeedBack(PushDate request)
  841. {
  842. var res = new PushResponse();
  843. request.Type = SxFackbeekType.InterfaceType_SX_CurtainStockOut.ToString();
  844. var list = _sxService.GetPushDatelistAuto(request);
  845. ////if (!list.Any())
  846. ////{
  847. //// return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  848. ////}
  849. if (list.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_CurtainStockOut.ToString()).ToList().Any())
  850. {
  851. var onefloor = list.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_CurtainStockOut.ToString()).ToList();
  852. SXProductStockInFeedBackRequest push = new SXProductStockInFeedBackRequest();
  853. var info = _mapper.Map<List<SXProductStockInFeedBackRequestItem>>(onefloor);
  854. push.ListInfo = info;
  855. push.WareCode = onefloor.FirstOrDefault().WarehouseCode;
  856. push.WareName = "时效库";
  857. push.Type = "1";
  858. var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApiMq(push));
  859. var ids = onefloor.Select(p => p.Id).ToList();
  860. //if (resbody.success == true)
  861. //{
  862. _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  863. {
  864. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  865. WhereExpression = it => ids.Contains(it.Id)
  866. });
  867. //}
  868. //else
  869. //{
  870. // _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  871. // {
  872. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  873. // WhereExpression = it => ids.Contains(it.Id)
  874. // });
  875. //}
  876. }
  877. request.Type = SxFackbeekType.InterfaceType_SX_ErrorStockOut.ToString();
  878. var list1 = _sxService.GetPushDatelistAuto(request);
  879. ////if (!list.Any())
  880. ////{
  881. //// return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  882. ////}
  883. if (list1.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_ErrorStockOut.ToString()).ToList().Any())
  884. {
  885. var onefloor = list1.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_ErrorStockOut.ToString()).ToList();
  886. SXProductStockInFeedBackRequest push = new SXProductStockInFeedBackRequest();
  887. var info = _mapper.Map<List<SXProductStockInFeedBackRequestItem>>(onefloor);
  888. push.ListInfo = info;
  889. push.WareCode = onefloor.FirstOrDefault().WarehouseCode;
  890. push.WareName = "时效库";
  891. push.Type = "2";
  892. var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApiMq(push));
  893. var ids = onefloor.Select(p => p.Id).ToList();
  894. //if (resbody.success == true)
  895. //{
  896. _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  897. {
  898. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  899. WhereExpression = it => ids.Contains(it.Id)
  900. });
  901. //}
  902. //else
  903. //{
  904. // _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  905. // {
  906. // Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  907. // WhereExpression = it => ids.Contains(it.Id)
  908. // });
  909. //}
  910. }
  911. return res;
  912. }
  913. /// <summary>
  914. /// 工字轮装箱位置信息上传接口
  915. /// </summary>
  916. /// <param name="billcode"></param>
  917. /// <returns></returns>
  918. [HttpPost]
  919. public SRes EnchaseCoordPosFeedBack(string doccode)
  920. {
  921. //var list = _sxService.GetBillFeedbackList(p => p.BillCode == doccode);
  922. //var dtolist = _mapper.Map<List<EnchaseCoordPosFeedBackRequestItem>>(list);
  923. //var dto = new EnchaseCoordPosFeedBackRequest() { ListInfo = dtolist };
  924. //SRes resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dto));
  925. //return resbody;
  926. return null;
  927. }
  928. /// <summary>
  929. /// 库存改判
  930. /// </summary>
  931. /// <param name="reqDto"></param>
  932. /// <returns></returns>
  933. [HttpPost]
  934. public SRes StockChange(SxStockChangeRequest reqDto)
  935. {
  936. lock (lockerlockerStockChange)
  937. {
  938. return _sxService.StockChange(reqDto);
  939. }
  940. //return ConcurrencyReqControl<SxStockChangeRequest, SRes>(lockerlockerStockChange, "SxStockChange", reqDto.BillCode, reqDto, _sxService.StockChange);
  941. }
  942. /// <summary>
  943. /// 改判反馈接口
  944. /// </summary>
  945. /// <param name="request"></param>
  946. /// <returns></returns>
  947. [HttpPost]
  948. public SRes StockChangeFeedBack(string doccode)
  949. {
  950. //var list = _sxService.GetBillFeedbackList(p => p.BillCode == doccode);
  951. //var dtolist = _mapper.Map<List<StockChangeFeedBackRequestItem>>(list);
  952. //var dto = new StockChangeFeedBackRequest() { ListInfo = dtolist };
  953. //SRes resbody = JsonConvert.DeserializeObject<SRes>(WmsServiceExportApi(dto));
  954. //return resbody;
  955. return null;
  956. }
  957. /// <summary>
  958. /// 实时库存查询接口
  959. /// </summary>
  960. /// <param name="reqDto"></param>
  961. /// <returns></returns>
  962. [HttpPost]
  963. public CurStockListResponse GetCurStockList(CurStockListRequest request)
  964. {
  965. return _sxService.GetCurStockList(request);
  966. }
  967. /// <summary>
  968. /// 移库货位上报MES接口
  969. /// </summary>
  970. /// <param name="request"></param>
  971. /// <returns></returns>
  972. [HttpPost]
  973. public SRes MoveStockLocationFeedBack(PushDate request)
  974. {
  975. var res = new PushResponse();
  976. request.Type = SxFackbeekType.InterfaceType_SX_CellMove.ToString();
  977. var list = _sxService.GetPushDatelistAuto(request);
  978. if (!list.Any())
  979. {
  980. return new PushResponse() { ResCode = ResponseStatusCodeEnum.NoResult.GetHashCode(), ResMsg = ResponseStatusCodeEnum.NoResult.GetDescription() };
  981. }
  982. var onefloor = list.Where(p => p.TypeCode == SxFackbeekType.InterfaceType_SX_CellMove.ToString()).ToList();
  983. dto.request.sx.MoveStockLocationFeedBackRequest push = new dto.request.sx.MoveStockLocationFeedBackRequest();
  984. var info = _mapper.Map<List<MoveStockLocationFeedBackRequestItem>>(onefloor);
  985. push.ListInfo = info;
  986. push.WareCode = onefloor.FirstOrDefault().WarehouseCode;
  987. var resbody = JsonConvert.DeserializeObject<PushResponse>(WmsServiceExportApi(push));
  988. var ids = onefloor.Select(p => p.Id).ToList();
  989. if (resbody.success == true)
  990. {
  991. _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  992. {
  993. Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
  994. WhereExpression = it => ids.Contains(it.Id)
  995. });
  996. }
  997. else
  998. {
  999. _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
  1000. {
  1001. Columns = it => new BillPushinfo { PostResult = 2, PostQty = it.PostQty + 1, EditTime = DateTime.Now },
  1002. WhereExpression = it => ids.Contains(it.Id)
  1003. });
  1004. }
  1005. return res;
  1006. }
  1007. [HttpPost]
  1008. public SRes InitWareCell(int row, int col, int deot, int rowcount, int tun)
  1009. {
  1010. return _sxService.InitWareCell(row, col, deot, rowcount, tun);
  1011. }
  1012. [HttpPost]
  1013. public string StartJob(AutoDetailRequest req)
  1014. {
  1015. var res = new SRes();
  1016. var sysjob = _sxService.GetJobEntityByid(req.Id);
  1017. if (sysjob == null)
  1018. {
  1019. res.ResCode = 0;
  1020. res.ResMsg = "没有找到对应的定时任务";
  1021. return res.ToCamelCaseString();
  1022. }
  1023. JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
  1024. return res.ToCamelCaseString();
  1025. }
  1026. [HttpPost]
  1027. public string ExecuteJob(DetailCodeStrRequest reqEntity)
  1028. {
  1029. var res = new SRes();
  1030. if (string.IsNullOrEmpty(reqEntity.Code))
  1031. {
  1032. res.ResCode = 0;
  1033. res.ResMsg = "参数错误";
  1034. return res.ToCamelCaseString();
  1035. }
  1036. var jobEntity = _sxService.GetJobEntityByCode(reqEntity.Code);
  1037. if (jobEntity == null)
  1038. {
  1039. res.ResCode = 0;
  1040. res.ResMsg = "没有找到该编码";
  1041. return res.ToCamelCaseString();
  1042. }
  1043. var jobapilist = _sxService.GetJobapilist(jobEntity.Id);
  1044. if (jobapilist.Any())
  1045. {
  1046. foreach (var item in jobapilist)
  1047. {
  1048. Task.Run(() => { HttpUtil.PostRequest(item.ApiUrl, item.RequestBody); });
  1049. }
  1050. }
  1051. return res.ToCamelCaseString();
  1052. }
  1053. /// <summary>
  1054. /// 分页Job列表
  1055. /// </summary>
  1056. /// <param name="reqEntity"></param>
  1057. /// <returns></returns>
  1058. [HttpPost]
  1059. public List<dto.response.hj.SysJobDto> GetSysJobList(wms.dto.request.hj.GetSysJobListRequest reqEntity)
  1060. {
  1061. var list = _sxService.GetJobList();
  1062. var listdto = _mapper.Map<List<dto.response.hj.SysJobDto>>(list);
  1063. if (listdto != null && listdto.Any())
  1064. {
  1065. for (int i = 0; i < list.Count; i++)
  1066. {
  1067. listdto[i].JobExecuteStatus = GetExecuteStatus(new DetailCodeRequest() { Code = listdto[i].Code });
  1068. }
  1069. return listdto;
  1070. }
  1071. return new List<dto.response.hj.SysJobDto>();
  1072. }
  1073. /// <summary>
  1074. /// 获取执行状态
  1075. /// </summary>
  1076. /// <param name="reqEntity"></param>
  1077. /// <returns></returns>
  1078. [HttpPost]
  1079. public string GetExecuteStatus(DetailCodeRequest reqEntity)
  1080. {
  1081. var jobInfo = _sxService.GetJobEntityByCode(reqEntity.Code);
  1082. var jobs = JobScheduler.GetJobList(Const.JobGroupName).Result;
  1083. if (jobs != null)
  1084. {
  1085. var temp = jobs.Where(p => p.JobName == jobInfo.Code);
  1086. if (temp.Any())
  1087. {
  1088. return temp.First().JobStatus;
  1089. }
  1090. else
  1091. {
  1092. return "Stop";
  1093. }
  1094. }
  1095. else
  1096. {
  1097. return "Stop";
  1098. }
  1099. }
  1100. /// <summary>
  1101. /// 异常信息传输接口
  1102. /// </summary>
  1103. /// <param name="request"></param>
  1104. /// <returns></returns>
  1105. [HttpPost]
  1106. public SRes GetMesErrorInfo(SxErrorinfoRequest request)
  1107. {
  1108. return _sxService.GetMesErrorInfo(request);
  1109. }
  1110. /// <summary>
  1111. /// 更新箱号
  1112. /// </summary>
  1113. /// <param name="request"></param>
  1114. /// <returns></returns>
  1115. [HttpPost]
  1116. public SRes UpdateBoxNo(UpdateBoxNoRequest request)
  1117. {
  1118. return _sxService.UpdateBoxNo(request);
  1119. }
  1120. /// <summary>
  1121. /// 更新黑盘数量(MES调用)
  1122. /// </summary>
  1123. /// <param name="request"></param>
  1124. /// <returns></returns>
  1125. [HttpPost]
  1126. public SRes UpdateBlackCount(UpdateBlackCountReq request)
  1127. {
  1128. return _sxService.UpdateBlackCount(request);
  1129. }
  1130. /// <summary>
  1131. /// 更新箱号
  1132. /// </summary>
  1133. /// <param name="request"></param>
  1134. /// <returns></returns>
  1135. [HttpPost]
  1136. public SRes test(UpdateBoxNoRequest request)
  1137. {
  1138. return null; ;
  1139. }
  1140. #region 异常处理
  1141. /// <summary>
  1142. /// 强制取消任务
  1143. /// </summary>
  1144. /// <param name="request"></param>
  1145. /// <returns></returns>
  1146. [HttpPost]
  1147. public SRes ForceCancelTask(ErrorTaskRequest request)
  1148. {
  1149. lock (lockerForceCancelTask)
  1150. {
  1151. return _sxService.ForceCancelTask(request);
  1152. }
  1153. }
  1154. /// <summary>
  1155. /// 删除库存信息
  1156. /// </summary>
  1157. /// <param name="request"></param>
  1158. /// <returns></returns>
  1159. [HttpPost]
  1160. public SRes DeleteStockInfo(DetailCodeStrRequest request)
  1161. {
  1162. lock (lockerDeleteStockInfo)
  1163. {
  1164. return _sxService.DeleteStockInfo(request);
  1165. }
  1166. }
  1167. /// <summary>
  1168. /// 修改库存状态
  1169. /// </summary>
  1170. /// <param name="request"></param>
  1171. /// <returns></returns>
  1172. [HttpPost]
  1173. public SRes UpdateStockState(DetailCodeStr1Requestdto request)
  1174. {
  1175. lock (lockerUpdateStockState)
  1176. {
  1177. return _sxService.UpdateStockState(request);
  1178. }
  1179. }
  1180. /// <summary>
  1181. /// 修改货位状态
  1182. /// </summary>
  1183. /// <param name="request"></param>
  1184. /// <returns></returns>
  1185. [HttpPost]
  1186. public SRes UpdateCellState(DetailCodeStr1Requestdto request)
  1187. {
  1188. lock (lockerUpdateCellState)
  1189. {
  1190. return _sxService.UpdateCellState(request);
  1191. }
  1192. }
  1193. /// <summary>
  1194. /// 货位数据互换
  1195. /// </summary>
  1196. /// <param name="request"></param>
  1197. /// <returns></returns>
  1198. [HttpPost]
  1199. public SRes DataSwapCell(DataSwapCellStrRequest request)
  1200. {
  1201. lock (lockerDataSwapCell)
  1202. {
  1203. return _sxService.DataSwapCell(request);
  1204. }
  1205. }
  1206. /// <summary>
  1207. /// 补数据
  1208. /// </summary>
  1209. /// <param name="request"></param>
  1210. /// <returns></returns>
  1211. [HttpPost]
  1212. public SRes DataBasePatch(DataBasePatchRequest request)
  1213. {
  1214. lock (lockerDataBasePatch)
  1215. {
  1216. return _sxService.DataBasePatch(request);
  1217. }
  1218. }
  1219. /// <summary>
  1220. /// 补数据(异常排出口回库使用)
  1221. /// </summary>
  1222. /// <param name="request"></param>
  1223. /// <returns></returns>
  1224. [HttpPost]
  1225. public SRes DataBasePatch2(DataBasePatchRequest request)
  1226. {
  1227. lock (lockerDataBasePatch)
  1228. {
  1229. ApplyHunrRequest push = new ApplyHunrRequest() { SpoolNr = request.Code };
  1230. var spoolMaterialInfo = JsonConvert.DeserializeObject<SxSpoolMaterialInfoTransRequest>(WmsServiceExportApi(push));
  1231. if (!string.IsNullOrEmpty(spoolMaterialInfo.SpoolCode))
  1232. {
  1233. var temp = SpoolMaterialInfoTrans(spoolMaterialInfo);
  1234. if (temp.ResCode == 200)
  1235. {
  1236. return _sxService.DataBasePatch2(request);
  1237. }
  1238. else
  1239. {
  1240. return temp;
  1241. }
  1242. }
  1243. return null;
  1244. }
  1245. }
  1246. /// <summary>
  1247. /// 补数据
  1248. /// </summary>
  1249. /// <param name="request"></param>
  1250. /// <returns></returns>
  1251. [HttpPost]
  1252. public SRes DataBasePatch3(DataBasePatchRequest request)
  1253. {
  1254. lock (lockerDataBasePatch)
  1255. {
  1256. return _sxService.DataBasePatch3(request);
  1257. }
  1258. }
  1259. [HttpPost]
  1260. public SRes UpdatePurchState(UpdatePurchStateRequestdto request)
  1261. {
  1262. lock (lockerUpdatePuchState)
  1263. {
  1264. return _sxService.UpdatePurchState(request);
  1265. }
  1266. }
  1267. /// <summary>
  1268. /// 货位数据转移
  1269. /// </summary>
  1270. /// <param name="request"></param>
  1271. /// <returns></returns>
  1272. [HttpPost]
  1273. public SRes DataMoveCell(DataSwapCellStrRequest request)
  1274. {
  1275. lock (lockerDataMoveCell)
  1276. {
  1277. return _sxService.DataMoveCell(request);
  1278. }
  1279. }
  1280. /// <summary>
  1281. /// 机器人任务重复下发
  1282. /// </summary>
  1283. /// <param name="request"></param>
  1284. /// <returns></returns>
  1285. [HttpPost]
  1286. public SRes TaskRepeatSend(TaskRepeatRequest request)
  1287. {
  1288. lock (lockerTaskRepeatSend)
  1289. {
  1290. return _sxService.TaskRepeatSend(request);
  1291. }
  1292. }
  1293. /// <summary>
  1294. /// 修改任务状态
  1295. /// </summary>
  1296. /// <param name="request"></param>
  1297. /// <returns></returns>
  1298. [HttpPost]
  1299. public SRes UpdateTaskState(UpdateTaskStateRequest request)
  1300. {
  1301. lock (lockerUpdateTaskState)
  1302. {
  1303. return _sxService.UpdateTaskState(request);
  1304. }
  1305. }
  1306. /// <summary>
  1307. /// 取消预锁库存(用于出库)
  1308. /// </summary>
  1309. /// <param name="request"></param>
  1310. /// <returns></returns>
  1311. [HttpPost]
  1312. public SRes CancelPreStockinfo(CancelPreStockinfoRequest request)
  1313. {
  1314. lock (lockerCancelPreStockinfo)
  1315. {
  1316. return _sxService.CancelPreStockinfo(request);
  1317. }
  1318. }
  1319. /// <summary>
  1320. /// 获取扭转值范围
  1321. /// </summary>
  1322. /// <param name="request"></param>
  1323. /// <returns></returns>
  1324. [HttpPost]
  1325. public SRes<GetTorsRangeRes> GetTorsRange(DetailCodeRequest request)
  1326. {
  1327. return _sxService.GetTorsRange(request);
  1328. }
  1329. /// <summary>
  1330. /// 删除扭转绑定信息
  1331. /// </summary>
  1332. /// <param name="request"></param>
  1333. /// <returns></returns>
  1334. [HttpPost]
  1335. public SRes DeleteTorsBind(DetailCodeStrRequest request)
  1336. {
  1337. lock (lockerDeleteStockInfo)
  1338. {
  1339. return _sxService.DeleteTorsBind(request);
  1340. }
  1341. }
  1342. /// <summary>
  1343. /// 解锁工字轮锁定
  1344. /// </summary>
  1345. /// <param name="request"></param>
  1346. /// <returns></returns>
  1347. [HttpPost]
  1348. public SRes DeleteHwPre(DetailCodeStrRequest request)
  1349. {
  1350. lock (lockerDeleteStockInfo)
  1351. {
  1352. return _sxService.DeleteHwPre(request);
  1353. }
  1354. }
  1355. [HttpPost]
  1356. public SRes test1()
  1357. {
  1358. var sysconfcon = int.Parse(_sxService.GetSysConfigByCode("TaskRemoveHours").SContent) * (-1);
  1359. return new SRes() { ResMsg = sysconfcon.ToString() };
  1360. }
  1361. #endregion 异常处理
  1362. [HttpPost]
  1363. public SRes ErrorDateclearJob()
  1364. {
  1365. lock (lockerErrorDateclearJob)
  1366. {
  1367. return _sxService.ErrorDateclearJob();
  1368. }
  1369. }
  1370. /// <summary>
  1371. /// 流水数据归档
  1372. /// </summary>
  1373. /// <param name="request"></param>
  1374. /// <returns></returns>
  1375. [HttpPost]
  1376. public SRes FlowDataMoveJob(PalletizingPackStockOutRequest request)
  1377. {
  1378. lock (lockerFlowDataMoveJob)
  1379. {
  1380. _sxService.RemoveTaskData(request);
  1381. return _sxService.FlowDataMoveJob(request);
  1382. }
  1383. }
  1384. //public SRes<List<SBoxInfoRes>> GetSBoxInfoResList()
  1385. //{
  1386. // var res = new SRes<List<SBoxInfoRes>>() { ResDataList = new List<List<SBoxInfoRes>>() };
  1387. // return res;
  1388. //}
  1389. }
  1390. }