SxController.cs 55 KB

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