SxController.cs 57 KB

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