PTService.cs 90 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913
  1. using AutoMapper;
  2. using SqlSugar;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq.Expressions;
  6. using System.Text;
  7. using wms.dto;
  8. using wms.dto.response;
  9. using wms.dto.response.pt;
  10. using wms.service.IService;
  11. using wms.sqlsugar;
  12. using wms.sqlsugar.model;
  13. using wms.sqlsugar.model.pt;
  14. using wms.util.Check;
  15. using wms.util.Ext;
  16. using System.Linq;
  17. using Newtonsoft.Json;
  18. using Microsoft.Extensions.Logging;
  19. using wms.util;
  20. using wms.dto.request.pt;
  21. using wms.dataservice.IDataSetvice;
  22. using wms.dataservice;
  23. using wms.dto.request.pt.dto;
  24. using wms.dto.response.pt.dto;
  25. using wms.util.Http;
  26. using wms.dataservice.DataService;
  27. using NPOI.SS.Formula.Functions;
  28. using wms.dto.request;
  29. using wms.dto.request.share;
  30. using Org.BouncyCastle.Asn1.Ocsp;
  31. using Castle.Core.Internal;
  32. using WCS.Entity;
  33. using wms.dto.request.hj;
  34. namespace wms.service.Service
  35. {
  36. public class PTService : IPTService
  37. {
  38. private readonly IMapper _mapper;
  39. private readonly ILogger<PTService> _logger;
  40. private readonly IPTDataService _iptDataService;
  41. public PTService(IMapper mapper, ILogger<PTService> logger, IPTDataService iptDataService)
  42. {
  43. _mapper = mapper;
  44. _logger = logger;
  45. _iptDataService = iptDataService;
  46. }
  47. Repository<ptBaseContainer> _ptbaseContInfo => new Repository<ptBaseContainer>();
  48. Repository<ptSysConfig> _sysconfigrepository => new Repository<ptSysConfig>();
  49. Repository<ptBaseMater> _materrepository => new Repository<ptBaseMater>();
  50. RepositoryTask<ptWCS_TaskInfo> _ptwcsTaskinfo => new RepositoryTask<ptWCS_TaskInfo>();
  51. Repository<ptBaseWarehouse> _baseWareHouserepository => new Repository<ptBaseWarehouse>();
  52. Repository<ptBaseWareLocation> _baseWareLocationrepository => new Repository<ptBaseWareLocation>();
  53. Repository<ptBillDocsinfo> _docrepository => new Repository<ptBillDocsinfo>();
  54. Repository<ptBillPushinfo> _ptbillPushinfo => new Repository<ptBillPushinfo>();
  55. RepositoryTask<ptWCS_TaskOld> _ptwcsTaskold => new RepositoryTask<ptWCS_TaskOld>();
  56. Repository<ptSysJob> _sysJobrepository => new Repository<ptSysJob>();
  57. Repository<ptSysJobApiRelation> _sysJobApirepository => new Repository<ptSysJobApiRelation>();
  58. Repository<ptBillInvFlow> _ptBillInvFlow => new Repository<ptBillInvFlow>();
  59. Repository<ptBillInvnow> _ptbillInvnow => new Repository<ptBillInvnow>();
  60. Repository<ptBillInvinit> _ptbillInvinit => new Repository<ptBillInvinit>();
  61. RepositoryTask<ptWCS_TaskDtl> _ptwcsTaskdtl => new RepositoryTask<ptWCS_TaskDtl>();
  62. Repository<ptBillMesmiddle> _ptbillmes => new Repository<ptBillMesmiddle>();
  63. //Repository<ptBillPboxrule> _ptBillLocationMap => new Repository<ptBillPboxrule>();
  64. ITenant _db => SqlSugarHelper.Db;//处理事务
  65. /// <summary>
  66. /// 获取配置内容信息
  67. /// </summary>
  68. /// <param name="code">配置表code值</param>
  69. /// <returns></returns>
  70. public string GetSysConfigContentByCode(string code)
  71. {
  72. //先读缓存
  73. var cacheContent = RedisHelper.Get("sys_config" + code);
  74. if (!string.IsNullOrEmpty(cacheContent))
  75. {
  76. return cacheContent;
  77. }
  78. var sysconf = _sysconfigrepository.GetSingle(p => p.Code == code);
  79. if (sysconf == null)
  80. {
  81. throw new Exception("数据表没有配置" + code);
  82. }
  83. var content = sysconf.SContent;
  84. string sysname = sysconf.Default1;//所属系统mes/erp
  85. RedisHelper.Set("sys_config" + code, content + "|" + sysname);
  86. return content;
  87. }
  88. /// <summary>
  89. /// 获取配置信息
  90. /// </summary>
  91. /// <param name="code"></param>
  92. /// <returns></returns>
  93. public ptSysConfig GetSysConfigByCode(string code)
  94. {
  95. //Repository<dynamic> _billdtrepository = new Repository<dynamic>();
  96. return _sysconfigrepository.GetSingle(p => p.Code == code);
  97. }
  98. /// <summary>
  99. /// 获取物料信息
  100. /// </summary>
  101. /// <param name="code"></param>
  102. /// <returns></returns>
  103. public ptBaseMater GetBaseMaterByExpression(Expression<Func<ptBaseMater, bool>> WhereExpression)
  104. {
  105. return _materrepository.GetSingle(WhereExpression);
  106. }
  107. /// <summary>
  108. /// 获取配置信息
  109. /// </summary>
  110. /// <param name="code"></param>
  111. /// <returns></returns>
  112. public ptSysConfig GetSysConfigByExpression(Expression<Func<ptSysConfig, bool>> WhereExpression)
  113. {
  114. return _sysconfigrepository.GetSingle(WhereExpression);
  115. }
  116. /// <summary>
  117. /// 获取反馈信息
  118. /// </summary>
  119. /// <param name="code"></param>
  120. /// <returns></returns>
  121. public List<ptBillPushinfo> GetBillFeedbackList()
  122. {
  123. return _ptbillPushinfo.GetList(p => p.PostResult != 1 && p.PostQty <= 5).OrderBy(p => p.AddTime).Take(1).ToList();
  124. }
  125. public bool UpdatePuchinfoModelColumns(UpdateModelColumns<ptBillPushinfo> updateModel)
  126. {
  127. return _ptbillPushinfo.Update(updateModel.Columns, updateModel.WhereExpression);
  128. }
  129. /// <summary>
  130. /// 更新SysConfig表字段
  131. /// </summary>
  132. /// <param name="updateModel"></param>
  133. /// <returns></returns>
  134. public bool UpdateSysConfigModelColumns(UpdateModelColumns<ptSysConfig> updateModel)
  135. {
  136. return _sysconfigrepository.Update(updateModel.Columns, updateModel.WhereExpression);
  137. }
  138. public bool SyncMaterInfo(List<PTSyncMaterInfoResponseItem> ResData)
  139. {
  140. foreach (var item in ResData)
  141. {
  142. if (_materrepository.IsAny(p => p.Code == item.MatCode))
  143. {
  144. _materrepository.UpdateModelColumns(p => new ptBaseMater() { IsHold = item.IsHold, HoldDuration = item.HoldDuration },
  145. p => p.Code == item.MatCode);
  146. }
  147. else
  148. {
  149. var model = _mapper.Map<ptBaseMater>(item);
  150. _materrepository.Insert(model);
  151. }
  152. }
  153. return true;
  154. }
  155. public SRes PurchaseBillTrans(PurchaseBillTransReqest request)
  156. {
  157. var result = new SRes();
  158. if (string.IsNullOrEmpty(request.BillCode))
  159. {
  160. result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  161. result.ResMsg = "单号" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();
  162. return result;
  163. }
  164. if (!request.ListInfo.Any())
  165. {
  166. result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
  167. result.ResMsg = ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
  168. return result;
  169. }
  170. var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == request.WareCode);
  171. if (warehouse == null)
  172. {
  173. result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
  174. result.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
  175. return result;
  176. }
  177. //存单据
  178. var doc = _docrepository.GetSingle(p => p.DocsNo == request.BillCode);
  179. if (doc == null)
  180. {
  181. var docsinfo = new ptBillDocsinfo()
  182. {
  183. DocsNo = request.BillCode,
  184. WarehouseId = warehouse.Id,
  185. ReqNo = request.ReqId,
  186. Type = request.BillType,
  187. StateNum = DocState.DocState_Create.GetHashCode(),
  188. IsStop = 0,
  189. JsonContent = JsonConvert.SerializeObject(request.ListInfo),
  190. DownQty = request.ListInfo.Count,
  191. AddWho = "wms",
  192. EditWho = "wms"
  193. };
  194. var code = InsertBillInvinit(request, warehouse);
  195. if (code.ResCode == ResponseStatusCodeEnum.Sucess.GetHashCode())
  196. {
  197. _docrepository.Insert(docsinfo);
  198. }
  199. else
  200. {
  201. result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  202. result.ResMsg = "明细存储失败";
  203. return result;
  204. }
  205. }
  206. else
  207. {
  208. _docrepository.UpdateModelColumns(p => new ptBillDocsinfo()
  209. {
  210. JsonContent = JsonConvert.SerializeObject(request.ListInfo),
  211. EditTime = DateTime.Now
  212. }, p => p.DocsNo == request.BillCode);
  213. }
  214. return result;
  215. }
  216. private SRes InsertBillInvinit(PurchaseBillTransReqest request, ptBaseWarehouse warehouse)
  217. {
  218. var result = new SRes();
  219. List<ptBillInvinit> invlist = new List<ptBillInvinit>();
  220. //明细存条码表
  221. foreach (var item in request.ListInfo)
  222. {
  223. //var mater = _materrepository.GetSingle(p => p.Code == item.MatCode);
  224. //if (mater == null)
  225. //{
  226. // result.ResCode = ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetHashCode();
  227. // result.ResMsg = item.MatCode + ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetDescription();
  228. // return result;
  229. //}
  230. var invinit = new ptBillInvinit()
  231. {
  232. WarehouseId = warehouse.Id,
  233. ContGrpBarCode = item.RFID,
  234. ContGrpId = GetId(),
  235. BoxBarCode = item.RFID,
  236. BoilerNo = item.BoilerNo,
  237. PackNo = item.PackNo,
  238. BatchNo = item.Batch,
  239. CLBarCode = item.MatBarCode,
  240. CaQty = item.Carbon,
  241. ProductTime = item.ProductDate,
  242. BrandNo = item.Brand,
  243. ExecStd = item.ExecStandard,
  244. LicenceCode = item.Licence,
  245. TolWQty = item.Weight,
  246. HoldDuration = item.HoldDuration,
  247. Describe = item.Describe,
  248. InvStateCode = InvState.InvEcecState_BuildUp.ToString(),
  249. InvBarCode = item.MatBarCode,
  250. ExecStateCode = InvLockState.InvState_Lock.ToString(),
  251. InDocsNo = request.BillCode,
  252. InDocsRowNo = request.BillCode,
  253. MatId = 1111,
  254. MatCode = item.MatCode,
  255. RFIDBarCode = item.RFID,
  256. HWTypeCode = "",
  257. ExecDocsNo = request.BillCode,
  258. ExecDocsRowNo = request.BillCode,
  259. ExecDocsTypeCode = request.BillType,
  260. HWBarCode = item.RFID,
  261. RodBarCode = item.RodBar,
  262. InvInOut = 1,
  263. ExecWho = "",
  264. MatName = "",
  265. Size = 1,
  266. SuppCode = request.SupCode,
  267. SuppName = request.SupName
  268. };
  269. invlist.Add(_mapper.Map<ptBillInvinit>(invinit));
  270. }
  271. _ptbillInvinit.InsertRange(invlist);
  272. return result;
  273. }
  274. public SRes PurchaseBillTransFeedBack(PurchaseBillTransFeedBackRequest reqDto)
  275. {
  276. var result = new SRes();
  277. return result;
  278. }
  279. /// <summary>
  280. /// 放行单传输
  281. /// </summary>
  282. /// <param name="reqDto"></param>
  283. /// <returns></returns>
  284. public ErpUnlockStockResponse ErpUnlockStock(ErpUnlockStockRequest reqDto)
  285. {
  286. var result = new ErpUnlockStockResponse() { ListInfo = new List<ErpUnlockStockResponseItem>()};
  287. if (!reqDto.ListInfo.Any())
  288. {
  289. result.ResCode = ResponseStatusCodeEnum.DocDetailNotExist.GetHashCode();
  290. result.ResMsg = reqDto.BillCode + ResponseStatusCodeEnum.DocDetailNotExist.GetDescription();
  291. return result;
  292. }
  293. var inv = _ptbillInvnow.GetList(p => p.InDocsNo == reqDto.BillCode && p.ExecStateCode == InvLockState.InvState_Lock.ToString() && p.InvStateCode == InvState.InvEcecState_In.ToString());
  294. if (!inv.Any())
  295. {
  296. result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  297. result.ResMsg = reqDto.BillCode + "不存在库存明细";
  298. return result;
  299. }
  300. foreach (var item in reqDto.ListInfo)
  301. {
  302. if (inv.Where(p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode).Any())
  303. {
  304. var stock = inv.Where(p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode).First();
  305. var flow = _mapper.Map<ptBillInvFlow>(stock);
  306. flow.Id = GetId();
  307. flow.ExecStateCode = item.State == "Normal" ? InvLockState.InvState_Normal.ToString() : InvLockState.InvState_Lock.ToString();
  308. flow.EditTime = DateTime.Now;
  309. flow.AddTime = DateTime.Now;
  310. try
  311. {
  312. _db.BeginTran();
  313. _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()
  314. {
  315. ExecStateCode = item.State == "Normal" ? InvLockState.InvState_Normal.ToString() : InvLockState.InvState_Lock.ToString(),
  316. EditTime = DateTime.Now
  317. }, p => p.ContGrpBarCode == item.RFID && p.CLBarCode == item.MatBarCode);
  318. _ptBillInvFlow.Insert(flow);
  319. _db.CommitTran();
  320. var erpUnlockStock = new ErpUnlockStockResponseItem()
  321. {
  322. RFID = item.RFID,
  323. MatBarCode = item.MatBarCode,
  324. ResState = "S",
  325. ResDesc = ""
  326. };
  327. result.ListInfo.Add(_mapper.Map<ErpUnlockStockResponseItem>(erpUnlockStock));
  328. }
  329. catch (Exception ex)
  330. {
  331. _db.RollbackTran();
  332. var erpUnlockStock = new ErpUnlockStockResponseItem()
  333. {
  334. RFID = item.RFID,
  335. MatBarCode = item.MatBarCode,
  336. ResState = "E",
  337. ResDesc = "放行失败"
  338. };
  339. result.ListInfo.Add(_mapper.Map<ErpUnlockStockResponseItem>(erpUnlockStock));
  340. }
  341. }
  342. else
  343. {
  344. var unlockStock = new ErpUnlockStockResponseItem()
  345. {
  346. RFID = item.RFID,
  347. MatBarCode = item.MatBarCode,
  348. ResState = "E",
  349. ResDesc = "未找到该RFID条码"
  350. };
  351. result.ListInfo.Add(_mapper.Map<ErpUnlockStockResponseItem>(unlockStock));
  352. continue;
  353. }
  354. }
  355. return result;
  356. }
  357. /// <summary>
  358. /// 车间自动叫料出库
  359. /// </summary>
  360. /// <param name="request"></param>
  361. /// <returns></returns>
  362. public SRes WcsProductionOutRequest(WcsProductionOutRequest request)
  363. {
  364. var result = new SRes();
  365. var equip = _sysconfigrepository.GetList(p => p.SType == Const.Type);
  366. var syscom = equip.Where(p => p.Code == request.Endquip).First();
  367. if (!string.IsNullOrEmpty(syscom.Default1))
  368. {
  369. _sysconfigrepository.UpdateSetColumnsTrue(p => new ptSysConfig()
  370. {
  371. Default1 = "",
  372. EditTime = DateTime.Now
  373. }, p => p.Code == request.Endquip);
  374. }
  375. var mesRequest = _ptbillmes.GetList();
  376. foreach (var item in mesRequest)
  377. {
  378. }
  379. //添加单据
  380. //var doc = _docrepository.GetSingle(p => p.DocsNo == mesRequest.BillCode);
  381. //if (doc == null)
  382. //{
  383. // var docsinfo = new ptBillDocsinfo()
  384. // {
  385. // DocsNo = mesRequest.BillCode,
  386. // WarehouseId = 1685164446336552960,
  387. // ReqNo = GetId().ToString(),
  388. // TypeNum = PtDocType.DocType_PT_ProductionStockOut.ToString(),
  389. // StateNum = DocState.DocState_Create.GetHashCode(),
  390. // IsStop = 0,
  391. // JsonContent = JsonConvert.SerializeObject(mesRequest),
  392. // AddWho = "wms",
  393. // EditWho = "wms"
  394. // };
  395. // _docrepository.Insert(docsinfo);
  396. //}
  397. //else
  398. //{
  399. // _docrepository.UpdateModelColumns(p => new ptBillDocsinfo()
  400. // {
  401. // JsonContent = JsonConvert.SerializeObject(mesRequest),
  402. // EditTime = DateTime.Now
  403. // }, p => p.DocsNo == mesRequest.BillCode);
  404. //}
  405. //申请出库
  406. //var res = ApplyProductionStockOut(_mapper.Map<ProductionStockOutRequest>(mesRequest));
  407. return result;
  408. }
  409. /// <summary>
  410. /// 生产领料出库
  411. /// </summary>
  412. /// <param name="reqDto"></param>
  413. /// <returns></returns>
  414. public SRes ProductionStockOut(ProductionStockOutRequest reqDto)
  415. {
  416. var result = new SRes();
  417. var ware = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode);
  418. if (ware == null)
  419. {
  420. result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
  421. result.ResMsg = reqDto.WareCode + ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
  422. return result;
  423. }
  424. if (string.IsNullOrEmpty(reqDto.BillCode) || string.IsNullOrEmpty(reqDto.MatCode))
  425. {
  426. result.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  427. result.ResMsg = "单号与物料编码不可为空";
  428. return result;
  429. }
  430. var mesRequest = new ptBillMesmiddle()
  431. {
  432. BillCode = reqDto.BillCode,
  433. PackNo = reqDto.PackNo,
  434. MatCode = reqDto.MatCode,
  435. MatBarCode = reqDto.MatBarCode,
  436. BoilerNo = reqDto.BoilerNo,
  437. WareCode = reqDto.WareCode
  438. };
  439. _ptbillmes.Insert(mesRequest);
  440. //添加单据
  441. var doc = _docrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);
  442. if (doc == null)
  443. {
  444. var docsinfo = new ptBillDocsinfo()
  445. {
  446. DocsNo = reqDto.BillCode,
  447. WarehouseId = ware.Id,
  448. ReqNo = GetId().ToString(),
  449. Type = PtDocType.DocType_PT_ProductionStockOut.ToString(),
  450. StateNum = DocState.DocState_Create.GetHashCode(),
  451. IsStop = 0,
  452. JsonContent = JsonConvert.SerializeObject(reqDto),
  453. AddWho = "wms",
  454. EditWho = "wms"
  455. };
  456. _docrepository.Insert(docsinfo);
  457. }
  458. else
  459. {
  460. _docrepository.UpdateModelColumns(p => new ptBillDocsinfo()
  461. {
  462. JsonContent = JsonConvert.SerializeObject(reqDto),
  463. EditTime = DateTime.Now
  464. }, p => p.DocsNo == reqDto.BillCode);
  465. }
  466. //申请出库
  467. var res = ApplyProductionStockOut(reqDto);
  468. return result;
  469. }
  470. /// <summary>
  471. /// 申请出库
  472. /// </summary>
  473. /// <param name="request"></param>
  474. /// <returns></returns>
  475. private SRes ApplyProductionStockOut(ProductionStockOutRequest request)
  476. {
  477. var res = new SRes();
  478. //考虑巷道剩余空轮数量
  479. var locationlist = from loc in _baseWareLocationrepository.GetList(p => p.IsStop == 0 && p.StateNum == LocationState.LocationState_Full.GetHashCode())
  480. join stock in _ptbillInvnow.GetList(p => p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString())
  481. on loc.ContGrpBarCode equals stock.ContGrpBarCode
  482. orderby stock.ProductTime
  483. select new
  484. {
  485. stock.MatCode,
  486. stock.InvBarCode,
  487. stock.BoilerNo,
  488. stock.RodBarCode,
  489. stock.Grade,
  490. stock.PackNo,
  491. stock.InvStateCode,
  492. stock.ProductTime,
  493. loc.Col,
  494. loc.Layer,
  495. loc.Shelf,
  496. loc.Depth,
  497. loc.Code,
  498. loc.Tunnel,
  499. loc.WarehouseCode,
  500. loc.ContGrpBarCode,
  501. loc.Id,
  502. loc.StateNum,
  503. };
  504. if (!string.IsNullOrEmpty(request.MatCode))
  505. {
  506. locationlist = locationlist.Where(p => p.MatCode == request.MatCode);
  507. }
  508. if (!string.IsNullOrEmpty(request.MatBarCode))
  509. {
  510. locationlist = locationlist.Where(p => p.InvBarCode == request.MatBarCode);
  511. }
  512. if (!string.IsNullOrEmpty(request.BoilerNo))
  513. {
  514. locationlist = locationlist.Where(p => p.BoilerNo == request.BoilerNo);
  515. }
  516. if (!string.IsNullOrEmpty(request.PackNo))
  517. {
  518. locationlist = locationlist.Where(p => p.PackNo == request.PackNo);
  519. }
  520. if (locationlist == null || !locationlist.Any())
  521. {
  522. res.ResCode = ResponseStatusCodeEnum.NotEnoughStock.GetHashCode();
  523. res.ResMsg = request.MatCode + "|" + request.BoilerNo + ResponseStatusCodeEnum.NotEnoughStock.GetDescription();
  524. return res;
  525. }
  526. if (string.IsNullOrEmpty(request.BoilerNo))
  527. {
  528. //多个炉号业务处理
  529. if (locationlist.GroupBy(p => p.BoilerNo).Count() > 1)
  530. {
  531. var loca = locationlist.OrderBy(p => p.ProductTime).GroupBy(p => p.BoilerNo);
  532. if (true)
  533. {
  534. //多个炉号的生产时间在同一天的
  535. //locationlist = locationlist.Where(p => p.BoilerNo == loca.Select(it => it.BoilerNo).First()).OrderBy(p => p.PackNo);
  536. }
  537. else
  538. {
  539. var locations = locationlist.OrderBy(p => p.ProductTime).GroupBy(p => p.BoilerNo).First();
  540. locationlist = locationlist.Where(p => p.BoilerNo == locations.Select(it => it.BoilerNo).First()).OrderBy(p => p.PackNo);
  541. }
  542. }
  543. }
  544. //出库任务
  545. var temploc = locationlist.First();
  546. var outstation = "";
  547. if (temploc.Tunnel == 1 || temploc.Tunnel == 2)
  548. {
  549. outstation = "";
  550. }
  551. else if (temploc.Tunnel == 3 || temploc.Tunnel == 4)
  552. {
  553. outstation = "";
  554. }
  555. else if (temploc.Tunnel == 5 || temploc.Tunnel == 6)
  556. {
  557. outstation = "";
  558. }
  559. else if (temploc.Tunnel == 7 || temploc.Tunnel == 8)
  560. {
  561. outstation = "";
  562. }
  563. var sotck = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == temploc.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString() && p.ExecStateCode == InvLockState.InvState_Normal.ToString());
  564. try
  565. {
  566. _db.BeginTran();
  567. //货位表
  568. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockOut.GetHashCode() }, p => p.Id == temploc.Id);
  569. //库存表
  570. _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_OutGoing.ToString(), EditTime = DateTime.Now }, p => p.Id == sotck.Id);
  571. var invflow = _mapper.Map<ptBillInvFlow>(sotck);
  572. invflow.InvStateCode = InvState.InvEcecState_OutGoing.ToString();
  573. invflow.AddTime = DateTime.Now;
  574. invflow.Id = IdFactory.NewId();
  575. _ptBillInvFlow.Insert(invflow);
  576. //添加出库任务
  577. CreateStockOutTask(new PtCreateStockOutTaskRequest()
  578. {
  579. ContGrpBarCode = temploc.ContGrpBarCode,
  580. CellNo = temploc.Code,
  581. EquCode = outstation,
  582. Qty = sotck.LengthQty,
  583. Tunnel = temploc.Tunnel.ToString(),
  584. WarehouseCode = temploc.WarehouseCode,
  585. MatCode = request.MatCode,
  586. InvBarCode = request.MatBarCode,
  587. BusType = PtTaskBusType.TaskBusType_PT_ProductionStockOut.GetDescription(),
  588. DocNo = request.BillCode
  589. });
  590. _db.CommitTran();
  591. }
  592. catch (Exception ex)
  593. {
  594. _db.RollbackTran();
  595. _logger.LogInformation(ex.ToString());
  596. res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
  597. res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription();
  598. return res;
  599. }
  600. return res;
  601. }
  602. private SRes<ptWCS_TaskInfo> CreateStockOutTask(PtCreateStockOutTaskRequest reqDto)
  603. {
  604. var res = new SRes<ptWCS_TaskInfo>();
  605. var wcstask = new ptWCS_TaskInfo()
  606. {
  607. Type = TaskType.OutDepot,
  608. Status = TaskStatus.NewBuild,
  609. Priority = 0,
  610. Device = "SRM" + reqDto.Tunnel,
  611. SrmStation = reqDto.EquCode,
  612. AddrFrom = reqDto.CellNo,
  613. AddrTo = reqDto.EquCode,
  614. LastInteractionPoint = "",
  615. BarCode = reqDto.ContGrpBarCode,
  616. Length = reqDto.Qty,
  617. AddTime = DateTime.Now,
  618. StartTime = DateTime.Now,
  619. DocID = int.Parse(reqDto.DocNo),
  620. PalletType = 1,
  621. ProdLine = 0,
  622. AddWho = "wms",
  623. WarehouseCode = reqDto.WarehouseCode,
  624. Enabled = true,
  625. Tunnel = reqDto.Tunnel,
  626. BusType = reqDto.BusType,
  627. MatCode = reqDto.MatCode,
  628. MaterialCode = reqDto.MatCode,
  629. InvBarCode = reqDto.InvBarCode
  630. };
  631. try
  632. {
  633. _db.BeginTran();
  634. var task = _ptwcsTaskinfo.InsertReturnEntity(wcstask);
  635. var taskold = _mapper.Map<ptWCS_TaskOld>(task);
  636. _ptwcsTaskold.InsertableSplitTable(taskold);
  637. var taskdetail = new ptWCS_TaskDtl()
  638. {
  639. ID = Guid.NewGuid(),
  640. CurPoint = reqDto.CellNo,
  641. AddTime = DateTime.Now,
  642. AddWho = "wms",
  643. Enabled = true,
  644. ParentTaskCode = task.ID,
  645. Desc = reqDto.CellNo + "生产领料出库",
  646. };
  647. _ptwcsTaskdtl.InsertableSplitTable(taskdetail);
  648. _db.CommitTran();
  649. res.ResData = task;
  650. }
  651. catch (Exception ex)
  652. {
  653. _db.RollbackTran();
  654. res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
  655. res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription();
  656. _logger.LogInformation("保存任务异常:" + ex.ToString());
  657. return res;
  658. }
  659. return res;
  660. }
  661. public SRes ProductionFeedBack(ProductionFeedBackRequest reqDto)
  662. {
  663. var result = new SRes();
  664. return result;
  665. }
  666. public SRes StockChange(PtStockChangeRequest reqDto)
  667. {
  668. var result = new SRes();
  669. return result;
  670. }
  671. public SRes ProductionBack(ProductionBackRequest reqDto)
  672. {
  673. var result = new SRes();
  674. return result;
  675. }
  676. public PTGetCurStockListResponse GetCurStockList(PtGetCurStockListRequest reqDto)
  677. {
  678. var result = new PTGetCurStockListResponse() { list = new List<PtResDataItem>() };
  679. int count = 0;
  680. var stock = _ptbillInvnow.Context.Queryable<ptBillInvnow, ptBaseMater>((inv, mater) => new object[]
  681. {
  682. JoinType.Left, inv.MatCode == mater.Code
  683. })
  684. .Where((inv, mater) => inv.InvStateCode == InvState.InvEcecState_In.ToString())
  685. .WhereIF(string.IsNullOrEmpty(reqDto.MatCode), (inv, mater) => inv.MatCode.Contains(reqDto.MatCode))
  686. .WhereIF(string.IsNullOrEmpty(reqDto.MatName), (inv, mater) => inv.MatName.Contains(reqDto.MatName))
  687. .WhereIF(string.IsNullOrEmpty(reqDto.BoilerNo), (inv, mater) => inv.BoilerNo.Contains(reqDto.BoilerNo))
  688. .WhereIF(string.IsNullOrEmpty(reqDto.RFID), (inv, mater) => inv.ContGrpBarCode.Contains(reqDto.RFID))
  689. .WhereIF(string.IsNullOrEmpty(reqDto.MatBarCode), (inv, mater) => inv.InvBarCode.Contains(reqDto.MatBarCode))
  690. .WhereIF(string.IsNullOrEmpty(reqDto.Batch), (inv, mater) => inv.BatchNo.Contains(reqDto.Batch))
  691. .Select((inv, mater) => new PtResDataItem()
  692. {
  693. RFID = inv.ContGrpBarCode,
  694. RodBar = inv.RodBarCode,
  695. BoilerNo = inv.BoilerNo,
  696. MatBarCode = inv.InvBarCode,
  697. PackNo = inv.PackNo,
  698. Batch = inv.BatchNo,
  699. Carbon = inv.CaQty,
  700. ProductDate = inv.ProductTime,
  701. Brand = inv.BrandNo,
  702. Describe = inv.Describe,
  703. ExecStandard = inv.ExecStd,
  704. Licence = inv.LicenceCode,
  705. PackWeight = inv.TolWQty,
  706. FigureNo = mater.FigureNo,
  707. ComCode = mater.ComCode,
  708. ComName = mater.ComName,
  709. CalcUnit = mater.CalcUnit,
  710. StockUnit = mater.StockUnit,
  711. Weight = mater.Weight,
  712. WeightUnit = mater.WeightUnit,
  713. IsHold = mater.IsHold,
  714. HoldDuration = inv.HoldDuration,
  715. LocCell = inv.PutCol.ToString(),
  716. LocLayer = inv.PutLayer.ToString(),
  717. LocRow = inv.PutRow.ToString(),
  718. LocCode = inv.PutRow.ToString() + inv.PutCol.ToString() + inv.PutLayer.ToString(),
  719. WareCode = "pthouse"
  720. })
  721. .ToPageList(reqDto.PageIndex, reqDto.PageSize, ref count);
  722. result.TotalCount = stock.Count();
  723. result.list = stock;
  724. return result;
  725. }
  726. /// <summary>
  727. /// 采购入库任务
  728. /// </summary>
  729. /// <param name="request"></param>
  730. /// <returns></returns>
  731. public SRes PtPurchaseTask(PtUnboundRequest request)
  732. {
  733. var result = new SRes();
  734. try
  735. {
  736. var stock = new ptBillInvnow()
  737. {
  738. WarehouseId = 1685164446336552960,
  739. ContGrpBarCode = "Test" + DateTime.Now.ToString("hhmmssfff"),
  740. ContGrpId = GetId(),
  741. InvStateCode = InvState.InvEcecState_BuildUp.ToString(),
  742. ExecStateCode = InvLockState.InvState_Lock.ToString()
  743. };
  744. var task = new ptWCS_TaskInfo()
  745. {
  746. Status = TaskStatus.NewBuild,
  747. Type = TaskType.EnterDepot,
  748. Priority = 0,
  749. Device = request.Equip,
  750. SrmStation = request.Equip,
  751. AddrFrom = request.Equip,
  752. BarCode = "",
  753. StartTime = DateTime.Now,
  754. AddTime = DateTime.Now,
  755. EditTime = DateTime.Now,
  756. AddWho = "wms",
  757. EditWho = "wms",
  758. WarehouseCode = Const.PtWareHouse,
  759. WorkBench = request.Equip,
  760. AddrTo = "",
  761. Tunnel = "",
  762. PalletType = 1,
  763. MaterialCode = "",
  764. BusType = PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription()
  765. };
  766. _db.BeginTran();
  767. _ptbillInvnow.Insert(stock);
  768. var wcs = _ptwcsTaskinfo.InsertReturnEntity(task);
  769. var wcsold = _mapper.Map<ptWCS_TaskOld>(wcs);
  770. _ptwcsTaskold.InsertableSplitTable(wcsold);
  771. var taskdetail = new ptWCS_TaskDtl()
  772. {
  773. ID = Guid.NewGuid(),
  774. CurPoint = request.Equip,
  775. AddTime = DateTime.Now,
  776. AddWho = "wms",
  777. Enabled = true,
  778. ParentTaskCode = wcs.ID,
  779. Desc = wcs.BusType
  780. };
  781. _ptwcsTaskdtl.InsertReturnEntity(taskdetail);
  782. _db.CommitTran();
  783. }
  784. catch (Exception ex)
  785. {
  786. _db.RollbackTran();
  787. result.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
  788. result.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
  789. return result;
  790. }
  791. return result;
  792. }
  793. /// <summary>
  794. /// 生成库存
  795. /// </summary>
  796. /// <param name="request"></param>
  797. /// <returns></returns>
  798. public SRes InsertStockInfo(string code)
  799. {
  800. var result = new SRes();
  801. //查询条码表
  802. var barcode = _ptbillInvinit.GetSingle(p => p.ContGrpBarCode == code);
  803. if (barcode == null)
  804. {
  805. result.ResCode = ResponseStatusCodeEnum.BaseBarcodeNotExist.GetHashCode();
  806. result.ResMsg = code + ResponseStatusCodeEnum.BaseBarcodeNotExist.GetDescription();
  807. return result;
  808. }
  809. var invlist = _ptbillInvnow.GetList(p => p.ContGrpBarCode.StartsWith("Test"));
  810. if (!invlist.Any())
  811. {
  812. result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  813. result.ResMsg = code + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  814. return result;
  815. }
  816. var inv = invlist.First();
  817. var stock = _mapper.Map<ptBillInvnow>(barcode);
  818. stock.AddTime = DateTime.Now;
  819. stock.EditTime = DateTime.Now;
  820. try
  821. {
  822. _db.BeginTran();
  823. _ptbillInvnow.DeleteById(inv.Id);
  824. _ptbillInvnow.Insert(stock);
  825. _ptBillInvFlow.Insert(_mapper.Map<ptBillInvFlow>(stock));
  826. _db.CommitTran();
  827. }
  828. catch (Exception ex)
  829. {
  830. _db.RollbackTran();
  831. result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  832. result.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  833. return result;
  834. }
  835. return result;
  836. }
  837. private long GetId()
  838. {
  839. return IdFactory.NewId();
  840. }
  841. public SRes<int> Unbounding(PtUnboundRequest request)
  842. {
  843. var res = new SRes<int>() { ResCode = 500 };
  844. var task = _ptwcsTaskinfo.GetList(p => p.AddrFrom == request.Equip && p.Status < TaskStatus.Finish);
  845. if (task.Any())
  846. {
  847. res.ResCode = ResponseStatusCodeEnum.IsTaskNotUnbounding.GetHashCode();
  848. res.ResMsg = ResponseStatusCodeEnum.IsTaskNotUnbounding.GetDescription();
  849. return res;
  850. }
  851. var equip = _baseWareLocationrepository.GetSingle(p => p.Code == request.Equip);
  852. if (equip == null)
  853. {
  854. res.ResCode = ResponseStatusCodeEnum.EquipInfoNotExist.GetHashCode();
  855. res.ResMsg = ResponseStatusCodeEnum.EquipInfoNotExist.GetDescription();
  856. return res;
  857. }
  858. var stock = _iptDataService.GetStockByEquip(request.Equip);
  859. if (stock.Any())
  860. {
  861. _baseWareLocationrepository.UpdateSetColumnsTrue(p => new ptBaseWareLocation()
  862. {
  863. ContGrpId = Const.Zero,
  864. ContGrpBarCode = "",
  865. EditTime = DateTime.Now
  866. }, p => request.Equip == p.Code);
  867. _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()
  868. {
  869. InvStateCode = InvState.InvEcecState_Out.ToString(),
  870. EditTime = DateTime.Now
  871. }, p => stock.Contains(p.HWBarCode));
  872. res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
  873. }
  874. else
  875. {
  876. res.ResMsg = ResponseStatusCodeEnum.StockNotExist.GetDescription();
  877. }
  878. return res;
  879. }
  880. public SRes<PtDocumentsdetailList> GetDocumentDetailListByDocsNo(PtDocumentsRequest request)
  881. {
  882. var res = new SRes<PtDocumentsdetailList>() { ResDataList = new List<PtDocumentsdetailList>() };
  883. var list = _iptDataService.GetDocumentDetailListByDocsNo(request);
  884. res.ResDataList = list.Item1;
  885. res.ToCount = list.Item2;
  886. res.PageIndex = request.PageIndex;
  887. res.PageSize = request.PageSize;
  888. res.PageNumber = Math.Ceiling((decimal)res.ToCount / res.PageSize);
  889. return res;
  890. }
  891. public SRes<PtDocumentsResponse> GetPageDocumentsList(PtDocumentsRequest request)
  892. {
  893. var res = new SRes<PtDocumentsResponse>() { ResDataList = new List<PtDocumentsResponse>() };
  894. if (request.TypeCode == null)
  895. {
  896. res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  897. res.ResMsg = "单据类型" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();
  898. return res;
  899. }
  900. var list = _iptDataService.GetPageDocumentsList(request);
  901. res.ResDataList = list.Item1;
  902. res.ToCount = list.Item2;
  903. res.PageIndex = request.PageIndex;
  904. res.PageSize = request.PageSize;
  905. res.PageNumber = Math.Ceiling((decimal)res.ToCount / res.PageSize);
  906. return res;
  907. }
  908. public string ManualTask(PtManualTaskRequest request)
  909. {
  910. var res = new SRes();
  911. if (!request.Location.Any())
  912. {
  913. res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  914. res.ResMsg = "货位" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();
  915. return res.ToCamelCaseString();
  916. }
  917. try
  918. {
  919. foreach (var item in request.Location)
  920. {
  921. var location = _baseWareLocationrepository.GetSingle(p => p.Code == item);
  922. if (location == null)
  923. {
  924. res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
  925. res.ResMsg = item + ResponseStatusCodeEnum.WareLocationCodeNotExist.GetDescription();
  926. return res.ToCamelCaseString();
  927. }
  928. if (location.StateNum != LocationState.LocationState_Full.GetHashCode())
  929. {
  930. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  931. res.ResMsg = item + ResponseStatusCodeEnum.Fail.GetDescription() + "货位状态不满足出库条件";
  932. return res.ToCamelCaseString();
  933. }
  934. if (location.IsStop == Const.One)
  935. {
  936. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  937. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription() + item + "被禁用";
  938. return res.ToCamelCaseString();
  939. }
  940. var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == location.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());
  941. if (stock == null)
  942. {
  943. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  944. res.ResMsg = ResponseStatusCodeEnum.StockNotExist.GetDescription();
  945. return res.ToCamelCaseString();
  946. }
  947. if (stock.InvStateCode != InvState.InvEcecState_In.ToString())
  948. {
  949. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  950. res.ResMsg = item + "组盘状态不是已入库";
  951. return res.ToCamelCaseString();
  952. }
  953. ptWCS_TaskInfo ptwcsTask = new ptWCS_TaskInfo();
  954. ptwcsTask.Status = TaskStatus.NewBuild;
  955. ptwcsTask.Type = TaskType.OutDepot;
  956. ptwcsTask.Priority = 0;
  957. ptwcsTask.Device = "SRM" + location.Tunnel;
  958. ptwcsTask.SrmStation = request.EndPoint;
  959. ptwcsTask.AddrFrom = item;
  960. ptwcsTask.BarCode = stock.ContGrpBarCode;
  961. ptwcsTask.StartTime = DateTime.Now;
  962. ptwcsTask.AddTime = DateTime.Now;
  963. ptwcsTask.EditTime = DateTime.Now;
  964. ptwcsTask.AddWho = "wms";
  965. ptwcsTask.WarehouseCode = location.WarehouseCode;
  966. ptwcsTask.Enabled = true;
  967. ptwcsTask.WorkBench = request.EndPoint;
  968. ptwcsTask.AddrTo = request.EndPoint;
  969. ptwcsTask.Floor = 2;
  970. ptwcsTask.Tunnel = location.Tunnel.ToString();
  971. ptwcsTask.PalletType = 1;
  972. ptwcsTask.Length = stock.LengthQty;
  973. ptwcsTask.MaterialCode = stock.MatCode;
  974. ptwcsTask.OutType = OutTypeEnum.全自动手动出库任务;
  975. ptwcsTask.BusType = request.BusType;
  976. _db.BeginTran();
  977. var wcs = _ptwcsTaskinfo.InsertReturnEntity(ptwcsTask);
  978. var wcstaskold = _mapper.Map<ptWCS_TaskOld>(wcs);
  979. _ptwcsTaskold.InsertableSplitTable(wcstaskold);
  980. var taskdtl = new ptWCS_TaskDtl()
  981. {
  982. ID = Guid.NewGuid(),
  983. CurPoint = item,
  984. AddTime = DateTime.Now,
  985. AddWho = "wms",
  986. Enabled = true,
  987. ParentTaskCode = wcs.ID,
  988. Desc = wcs.OutType.ToString(),
  989. };
  990. _ptwcsTaskdtl.InsertableSplitTable(taskdtl);
  991. _db.CommitTran();
  992. _baseWareLocationrepository.UpdateSetColumnsTrue(p => new ptBaseWareLocation()
  993. {
  994. StateNum = LocationState.LocationState_StockOut.GetHashCode(),
  995. EditTime = DateTime.Now
  996. }, p => p.Code == item);
  997. _ptbillInvnow.UpdateSetColumnsTrue(p => new ptBillInvnow()
  998. {
  999. InvStateCode = InvState.InvEcecState_OutGoing.ToString(),
  1000. EditTime = DateTime.Now
  1001. }, p => p.ContGrpBarCode == stock.ContGrpBarCode);
  1002. var flow = _mapper.Map<ptBillInvFlow>(stock);
  1003. flow.Id = IdFactory.NewId();
  1004. flow.InvStateCode = InvState.InvEcecState_OutGoing.ToString();
  1005. flow.EditTime = DateTime.Now;
  1006. _ptBillInvFlow.Insert(flow);
  1007. }
  1008. }
  1009. catch (Exception ex)
  1010. {
  1011. _db.RollbackTran();
  1012. _logger.LogInformation("出库异常:" + ex.Message);
  1013. res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
  1014. res.ResMsg = ResponseStatusCodeEnum.DataSaveErr.GetDescription();
  1015. return res.ToCamelCaseString();
  1016. }
  1017. return res.ToCamelCaseString();
  1018. }
  1019. public SRes WareCellInit(int row, int col, int deot, int rowcount, int tun)
  1020. {
  1021. var res = new SRes();
  1022. for (int i = 0; i < row; i++)
  1023. {
  1024. string shlf = "8";
  1025. if (row == 2)
  1026. {
  1027. if (i == 0)
  1028. {
  1029. shlf = shlf + "L";
  1030. }
  1031. else
  1032. {
  1033. shlf = shlf + "R";
  1034. }
  1035. }
  1036. for (int j = 0; j < deot; j++)
  1037. {
  1038. for (int k = 0; k < col; k++)
  1039. {
  1040. var code = new ptBaseWareLocation()
  1041. {
  1042. Code = (rowcount + i).ToString() + "-" + (k + 1).ToString() + "-" + (j + 1).ToString() + "-" + shlf + "-" + "01",
  1043. Tunnel = tun,
  1044. IsStop = 0,
  1045. Name = (rowcount + i).ToString() + "行" + (k + 1).ToString() + "列" + (j + 1).ToString() + "层" + shlf + "货架" + 1 + "深度",
  1046. WarehouseId = 1685164446336552960,
  1047. WarehouseCode = "pthouse",
  1048. WareAreaId = 1685164446352102710,
  1049. StateNum = 1,
  1050. TypeNum = 1,
  1051. Size = 1,
  1052. Row = (rowcount + i),
  1053. Col = (k + 1),
  1054. Layer = (j + 1),
  1055. Depth = 1,
  1056. SCRel = "",
  1057. ContGrpId = 0,
  1058. ContGrpBarCode = "",
  1059. AddWho = "wms",
  1060. EditWho = "wms",
  1061. Shelf = shlf,
  1062. Sort = j * col + (k + 1),
  1063. };
  1064. _baseWareLocationrepository.Insert(code);
  1065. }
  1066. }
  1067. }
  1068. return res;
  1069. }
  1070. public string PdaGroupStock(PtGroupInTaskRequest request)
  1071. {
  1072. var res = new SRes();
  1073. if (!request.RFIDBarCode.Any())
  1074. {
  1075. res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  1076. res.ResMsg = "RFID" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();
  1077. return res.ToCamelCaseString();
  1078. }
  1079. foreach (var item in request.RFIDBarCode)
  1080. {
  1081. var code = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item);
  1082. if (code == null)
  1083. {
  1084. var initbarcode = InsertContInfo(item);
  1085. if (initbarcode == false)
  1086. {
  1087. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1088. res.ResMsg = "同步" + ResponseStatusCodeEnum.Fail.GetDescription();
  1089. return res.ToCamelCaseString();
  1090. }
  1091. }
  1092. var bar = _ptbaseContInfo.GetSingle(p => p.ContBarCode == item);
  1093. //var mater = _materrepository.GetSingle(p => p.Code == barcode.MatCode);
  1094. //if (mater == null)
  1095. //{
  1096. // res.ResCode = ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetHashCode();
  1097. // res.ResMsg = item + ResponseStatusCodeEnum.BaseMaterCodeNotExist.GetDescription();
  1098. // return res.ToCamelCaseString();
  1099. //}
  1100. var stock = _ptbillInvnow.GetSingle(p => p.ContGrpBarCode == item);
  1101. if (stock != null)
  1102. {
  1103. res.ResCode = ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetHashCode();
  1104. res.ResMsg = item + ResponseStatusCodeEnum.GroupStockDetailMaterialBarCodeExist.GetDescription();
  1105. return res.ToCamelCaseString();
  1106. }
  1107. var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First();
  1108. if (task != null)
  1109. {
  1110. res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();
  1111. res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();
  1112. return res.ToCamelCaseString();
  1113. }
  1114. try
  1115. {
  1116. ptBillInvnow container = new ptBillInvnow();
  1117. container.ContGrpId = GetId();
  1118. container.ContGrpBarCode = item;
  1119. container.BoxBarCode = item;
  1120. container.InvStateCode = InvState.InvEcecState_BuildUp.ToString();
  1121. container.InvBarCode = item;
  1122. container.ExecStateCode = InvLockState.InvState_Normal.ToString();
  1123. container.InDocsNo = "";
  1124. container.InDocsRowNo = "";
  1125. container.WarehouseId = bar.WarehouseId;
  1126. //container.MatId = mater.Id;
  1127. //container.MatCode = mater.Code;
  1128. container.TolWQty = bar.WidthQty;
  1129. container.NetWQty = bar.LengthQty;
  1130. container.TareWQty = bar.WeightQty;
  1131. container.LengthQty = bar.LengthQty;
  1132. container.RFIDBarCode = item;
  1133. //container.HWTypeCode = mater.SpoolType;
  1134. container.SolderQty = bar.HighQty;
  1135. container.ExecDocsNo = "";
  1136. container.ExecDocsRowNo = "";
  1137. container.ExecDocsTypeCode = "";
  1138. container.HWBarCode = item;
  1139. container.InvInOut = 1;
  1140. container.ExecWho = "人工组盘";
  1141. //container.MatName = mater.Name;
  1142. container.Size = 1;
  1143. _db.BeginTran();
  1144. if (_ptbillInvnow.Insert(container))
  1145. {
  1146. _ptBillInvFlow.Insert(_mapper.Map<ptBillInvFlow>(container));
  1147. }
  1148. _db.CommitTran();
  1149. }
  1150. catch (Exception ex)
  1151. {
  1152. _db.RollbackTran();
  1153. _logger.LogInformation("组盘异常:" + item + ex.Message);
  1154. res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
  1155. res.ResMsg = item + ResponseStatusCodeEnum.DataSaveErr.GetDescription();
  1156. return res.ToCamelCaseString();
  1157. }
  1158. }
  1159. return res.ToCamelCaseString();
  1160. }
  1161. public string PdaInsterInTask(PtGroupInTaskRequest request)
  1162. {
  1163. var res = new SRes();
  1164. if (!request.RFIDBarCode.Any())
  1165. {
  1166. res.ResCode = ResponseStatusCodeEnum.ErrParamNotNull.GetHashCode();
  1167. res.ResMsg = "RFID" + ResponseStatusCodeEnum.ErrParamNotNull.GetDescription();
  1168. return res.ToCamelCaseString();
  1169. }
  1170. try
  1171. {
  1172. if (request.BusType == 1)
  1173. {
  1174. foreach (var item in request.RFIDBarCode)
  1175. {
  1176. var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1177. if (stock == null)
  1178. {
  1179. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1180. res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1181. return res.ToCamelCaseString();
  1182. }
  1183. var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First();
  1184. if (task != null)
  1185. {
  1186. res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();
  1187. res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();
  1188. return res.ToCamelCaseString();
  1189. }
  1190. //分解入库任务
  1191. var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_QualityStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode });
  1192. if (!it)
  1193. {
  1194. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1195. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1196. return res.ToCamelCaseString();
  1197. }
  1198. }
  1199. }
  1200. else if (request.BusType == 2)
  1201. {
  1202. foreach (var item in request.RFIDBarCode)
  1203. {
  1204. var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1205. if (stock == null)
  1206. {
  1207. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1208. res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1209. return res.ToCamelCaseString();
  1210. }
  1211. var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First();
  1212. if (task != null)
  1213. {
  1214. res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();
  1215. res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();
  1216. return res.ToCamelCaseString();
  1217. }
  1218. //分解入库任务
  1219. var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_AnewStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode });
  1220. if (!it)
  1221. {
  1222. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1223. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1224. return res.ToCamelCaseString();
  1225. }
  1226. }
  1227. }
  1228. else if (request.BusType == 3)
  1229. {
  1230. foreach (var item in request.RFIDBarCode)
  1231. {
  1232. var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1233. if (stock == null)
  1234. {
  1235. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1236. res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1237. return res.ToCamelCaseString();
  1238. }
  1239. var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First();
  1240. if (task != null)
  1241. {
  1242. res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();
  1243. res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();
  1244. return res.ToCamelCaseString();
  1245. }
  1246. //分解入库任务
  1247. var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_OtherStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode });
  1248. if (!it)
  1249. {
  1250. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1251. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1252. return res.ToCamelCaseString();
  1253. }
  1254. }
  1255. }
  1256. else if (request.BusType == 4)
  1257. {
  1258. foreach (var item in request.RFIDBarCode)
  1259. {
  1260. var stock = _ptbillInvnow.GetSingle(p => p.RFIDBarCode == item && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1261. if (stock == null)
  1262. {
  1263. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1264. res.ResMsg = item + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1265. return res.ToCamelCaseString();
  1266. }
  1267. var task = _ptwcsTaskold.AsQueryable().Where(p => p.BarCode == item && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).First();
  1268. if (task != null)
  1269. {
  1270. res.ResCode = ResponseStatusCodeEnum.WcsTaskExist.GetHashCode();
  1271. res.ResMsg = item + ResponseStatusCodeEnum.WcsTaskExist.GetDescription();
  1272. return res.ToCamelCaseString();
  1273. }
  1274. //分解入库任务
  1275. var it = InsertTaskIn(new PtTaskRsponse() { BusType = TaskBusType.TaskBusType_HJ_PurchaseSpoolStockIn.GetDescription(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, StartPoint = request.Equip, Size = 1, Remark = stock.MatCode });
  1276. if (!it)
  1277. {
  1278. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1279. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1280. return res.ToCamelCaseString();
  1281. }
  1282. }
  1283. }
  1284. else
  1285. {
  1286. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1287. res.ResMsg = "RFID:" + string.Join(',', request.RFIDBarCode) + "业务类型错误";
  1288. return res.ToCamelCaseString();
  1289. }
  1290. }
  1291. catch (Exception ex)
  1292. {
  1293. _logger.LogInformation("任务下发失败:" + ex.Message);
  1294. res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1295. res.ResMsg = ResponseStatusCodeEnum.Fail.GetDescription();
  1296. return res.ToCamelCaseString();
  1297. }
  1298. return res.ToCamelCaseString();
  1299. }
  1300. private bool InsertTaskIn(PtTaskRsponse request)
  1301. {
  1302. var bar = _ptbaseContInfo.GetSingle(p => p.ContBarCode == request.ContGrpBarCode);
  1303. if (bar == null)
  1304. {
  1305. return false;
  1306. }
  1307. var ware = _baseWareHouserepository.GetSingle(p => p.Id == bar.WarehouseId);
  1308. if (ware == null)
  1309. {
  1310. return false;
  1311. }
  1312. try
  1313. {
  1314. ptWCS_TaskInfo billTask = new ptWCS_TaskInfo();
  1315. billTask.Status = TaskStatus.NewBuild;
  1316. billTask.Type = TaskType.EnterDepot;
  1317. billTask.Priority = 0;
  1318. billTask.Device = "srm";
  1319. billTask.SrmStation = request.StartPoint;
  1320. billTask.AddrFrom = request.StartPoint;
  1321. billTask.BarCode = request.ContGrpBarCode;
  1322. billTask.StartTime = DateTime.Now;
  1323. billTask.AddWho = "wms";
  1324. billTask.WarehouseCode = ware.Code;
  1325. billTask.Enabled = true;
  1326. billTask.WorkBench = request.StartPoint;
  1327. billTask.AddrTo = "";
  1328. //billTask.Floor = 2;
  1329. billTask.Tunnel = "";
  1330. billTask.PalletType = 1;
  1331. billTask.AddTime = DateTime.Now;
  1332. billTask.EditTime = DateTime.Now;
  1333. billTask.MaterialCode = request.Remark;
  1334. billTask.MatCode = request.Remark;
  1335. billTask.BusType = request.BusType;
  1336. _db.BeginTran();
  1337. var wcs = _ptwcsTaskinfo.InsertReturnEntity(billTask);
  1338. var taskold = _mapper.Map<ptWCS_TaskOld>(wcs);
  1339. _ptwcsTaskold.InsertableSplitTable(taskold);
  1340. var taskdetail = new ptWCS_TaskDtl()
  1341. {
  1342. ID = Guid.NewGuid(),
  1343. CurPoint = request.StartPoint,
  1344. AddTime = DateTime.Now,
  1345. AddWho = "wms",
  1346. Enabled = true,
  1347. ParentTaskCode = wcs.ID,
  1348. Desc = request.StartPoint + "pda入库",
  1349. };
  1350. _ptwcsTaskdtl.InsertableSplitTable(taskdetail);
  1351. _db.CommitTran();
  1352. }
  1353. catch (Exception ex)
  1354. {
  1355. _db.RollbackTran();
  1356. return false;
  1357. }
  1358. return true;
  1359. }
  1360. private bool InsertContInfo(string code)
  1361. {
  1362. try
  1363. {
  1364. ptBaseContainer barcode = new ptBaseContainer();
  1365. barcode.ContBarCode = code;
  1366. barcode.TypeCode = ContainerType.ContainerType_RFID.ToString();
  1367. barcode.PrintQty = 1;
  1368. //barcode.WarehouseId = 1668442390064664576;
  1369. barcode.Name = code;
  1370. // barcode.WeightQty = 158;
  1371. _ptbaseContInfo.Insert(barcode);
  1372. }
  1373. catch (Exception ex)
  1374. {
  1375. return false;
  1376. }
  1377. return true;
  1378. }
  1379. /// <summary>
  1380. /// 分配巷道
  1381. /// </summary>
  1382. /// <param name="reqEntity"></param>
  1383. /// <returns></returns>
  1384. public SRes<string> GetPtTunnelPriorityList(GetTunnelPriorityListRequest reqEntity)
  1385. {
  1386. var result = new SRes<string>();
  1387. var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqEntity.TaskNum).SplitTable(p => p.Take(1)).First();
  1388. if (wcstask == null)
  1389. {
  1390. result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
  1391. result.ResMsg = reqEntity.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
  1392. return result;
  1393. }
  1394. //先处理库存
  1395. var p = InsertStockInfo(reqEntity.Memo1);
  1396. if (p.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
  1397. {
  1398. result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
  1399. result.ResMsg = "库存更新" + ResponseStatusCodeEnum.Fail.GetDescription();
  1400. return result;
  1401. }
  1402. //获取任务数占用最少的
  1403. var wcstasks = _ptwcsTaskold.AsQueryable().Where(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish).SplitTable(p => p.Take(1)).ToList();
  1404. var tunnelcountlist = new List<TunnelCountTemp>();
  1405. var runningtasks = wcstasks.Where(p => p.Tunnel != "0" && p.Tunnel != "" && p.Tunnel != null);
  1406. if (runningtasks.Any())
  1407. {
  1408. tunnelcountlist = (from task in runningtasks.GroupBy(p => p.Tunnel)
  1409. select new TunnelCountTemp
  1410. {
  1411. Tunnel = task.Key,
  1412. Count = task.Count()
  1413. }).ToList();
  1414. }
  1415. //获取库位所有巷道列表
  1416. var alltunnels = _baseWareLocationrepository.GetList().Select(p => p.Tunnel).Distinct();
  1417. foreach (var item in alltunnels)
  1418. {
  1419. if (!tunnelcountlist.Where(p => p.Tunnel == item.ToString()).Any())
  1420. {
  1421. tunnelcountlist.Add(new TunnelCountTemp()
  1422. {
  1423. Tunnel = item.ToString(),
  1424. Count = 0
  1425. });
  1426. }
  1427. }
  1428. var tasktunnelcountlist = tunnelcountlist.OrderBy(p => p.Count).ToList();
  1429. var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == wcstask.WarehouseCode);
  1430. //获取已占用库位最少的货架
  1431. var threshold = 5; //int.Parse(ConfigUtil.GetConfiguration["Threshold"]);//阈值
  1432. //获取所有有货的货位
  1433. var locationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseId == warehouse.Id && p.Size >= wcstask.Height && p.StateNum == LocationState.LocationState_Full.GetHashCode() && p.IsStop == 0);
  1434. //获取所有可用货位的数量
  1435. var shelflocationcount = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Size >= wcstask.Height && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode() && p.IsStop == 0).GroupBy(p => new { p.Tunnel, p.Shelf }).Select(p => new { Tunnel = p.Key.Tunnel, Shelf = p.Key.Shelf, LocationCount = p.Select(q => q.Id).Count() });
  1436. if (locationsreturn == null || !locationsreturn.Any())
  1437. {
  1438. result.ResData = string.Join(",", tasktunnelcountlist.OrderBy(p => p.Count).Select(p => p.Tunnel));
  1439. }
  1440. else
  1441. {
  1442. var grouplocationtunnels = (from location in locationsreturn.GroupBy(p => p.Tunnel)
  1443. select new TunnelCountTemp
  1444. {
  1445. Tunnel = location.Key.ToString(),
  1446. Count = location.Count(),
  1447. Proportion = location.Count() / (shelflocationcount.Where(p => p.Tunnel == location.Key).Any() ? decimal.Parse(shelflocationcount.Where(p => p.Tunnel == location.Key).Sum(p => p.LocationCount).ToString()) : 1)
  1448. }).ToList().OrderBy(p => p.Count).ToList();
  1449. foreach (var item in alltunnels)
  1450. {
  1451. if (!grouplocationtunnels.Where(p => p.Tunnel == item.ToString()).Any())
  1452. {
  1453. grouplocationtunnels.Add(new TunnelCountTemp()
  1454. {
  1455. Tunnel = item.ToString(),
  1456. Count = 0,
  1457. Proportion = 0
  1458. });
  1459. }
  1460. }
  1461. grouplocationtunnels = grouplocationtunnels.OrderBy(p => p.Proportion).ToList();
  1462. var sorttunnels = grouplocationtunnels.OrderBy(p => p.Proportion).Select(p => p.Tunnel).ToList();
  1463. for (var i = 0; i < grouplocationtunnels.Count - 1; i++)
  1464. {
  1465. if (tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i].Tunnel).First().Count - threshold > tasktunnelcountlist.Where(p => p.Tunnel == grouplocationtunnels[i + 1].Tunnel).First().Count)
  1466. {
  1467. sorttunnels[i] = grouplocationtunnels[i + 1].Tunnel;
  1468. sorttunnels[i + 1] = grouplocationtunnels[i].Tunnel;
  1469. i++;
  1470. }
  1471. else
  1472. {
  1473. sorttunnels[i] = grouplocationtunnels[i].Tunnel;
  1474. }
  1475. }
  1476. result.ResData = string.Join(",", sorttunnels);
  1477. }
  1478. //删除没有空闲货位的货架
  1479. var arrresultTunnels = result.ResData.Split(',');
  1480. var emptylocationsreturn = _baseWareLocationrepository.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Size >= wcstask.Height && p.StateNum == LocationState.LocationState_Empty.GetHashCode() && p.IsStop == 0);
  1481. var resultTunenls = new List<string>();
  1482. foreach (var sorttunnel in arrresultTunnels)
  1483. {
  1484. //获取巷道的入库任务数
  1485. var tunneltaskcount = _ptwcsTaskold.GetList(p => p.WarehouseCode == wcstask.WarehouseCode && p.Type == TaskType.EnterDepot && p.Status < TaskStatus.Finish && p.Height >= wcstask.Height && p.Tunnel == wcstask.Tunnel).Count();
  1486. int left = 0;
  1487. if (emptylocationsreturn.Where(p => p.Tunnel == int.Parse(sorttunnel)).Count() - tunneltaskcount > left)
  1488. {
  1489. resultTunenls.Add(sorttunnel);
  1490. }
  1491. result.ResData = string.Join(",", resultTunenls);
  1492. }
  1493. //根据配置过滤禁用的巷道
  1494. var disabletunnels = _sysconfigrepository.GetList(p => p.SType == "InStop" && !string.IsNullOrEmpty(p.SContent));
  1495. if (disabletunnels != null && disabletunnels.Any())
  1496. {
  1497. var resultTunenlsNew = new List<string>();
  1498. var resultTunenlsTemp = result.ResData.Split(',');
  1499. foreach (var tun in resultTunenlsTemp)
  1500. {
  1501. if (!disabletunnels.Select(p => p.Default1).Contains(tun))
  1502. {
  1503. resultTunenlsNew.Add(tun);
  1504. }
  1505. }
  1506. result.ResData = string.Join(",", resultTunenlsNew);
  1507. }
  1508. return result;
  1509. }
  1510. public SRes<PtApplyStockInLocResponse> PtApplyStockInLoc(PtApplyStockInLocRequest reqEntity)
  1511. {
  1512. var res = ApplyStockInLocTemp(reqEntity);
  1513. if (string.IsNullOrEmpty(res.ResData.CellNo))
  1514. {
  1515. return res;
  1516. }
  1517. try
  1518. {
  1519. _db.BeginTran();
  1520. //更新货位
  1521. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_StockIn.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
  1522. p => p.Code == res.ResData.CellNo);
  1523. _db.CommitTran();
  1524. }
  1525. catch (Exception ex)
  1526. {
  1527. _db.RollbackTran();
  1528. _logger.LogInformation(ex.ToString());
  1529. }
  1530. return res;
  1531. }
  1532. private SRes<PtApplyStockInLocResponse> ApplyStockInLocTemp(PtApplyStockInLocRequest reqEntity)
  1533. {
  1534. var res = new SRes<PtApplyStockInLocResponse>()
  1535. {
  1536. ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(),
  1537. ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(),
  1538. ResData = new PtApplyStockInLocResponse()
  1539. };
  1540. var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqEntity.TaskNum).SplitTable(tabs => tabs.Take(1)).First(); ;
  1541. if (wcstask == null)
  1542. {
  1543. res.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
  1544. res.ResMsg = ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
  1545. return res;
  1546. }
  1547. if (wcstask.Type == TaskType.OutDepot)
  1548. {
  1549. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  1550. res.ResMsg = "该任务是出库任务,不能分配货位;wms任务号" + wcstask.ID;
  1551. return res;
  1552. }
  1553. if (!string.IsNullOrEmpty(wcstask.AddrTo) && wcstask.AddrTo != "srm")
  1554. {
  1555. res.ResData.TunnelNum = wcstask.Tunnel;
  1556. res.ResData.CellNo = wcstask.AddrTo;
  1557. res.ResData.Row = wcstask.AddrTo.Split('-')[0] != null ? int.Parse(wcstask.AddrTo.Split('-')[0]) : 0;
  1558. res.ResData.Colomn = wcstask.AddrTo.Split('-')[1] != null ? int.Parse(wcstask.AddrTo.Split('-')[1]) : 0;
  1559. res.ResData.Layer = wcstask.AddrTo.Split('-')[2] != null ? int.Parse(wcstask.AddrTo.Split('-')[2]) : 0;
  1560. return res;
  1561. }
  1562. if (reqEntity.TunnelNum <= 0)
  1563. {
  1564. res.ResCode = ResponseStatusCodeEnum.NotTunnelNum.GetHashCode();
  1565. res.ResMsg = ResponseStatusCodeEnum.NotTunnelNum.GetDescription();
  1566. return res;
  1567. }
  1568. var warehouse = _baseWareHouserepository.GetFirst(p => p.Code == wcstask.WarehouseCode);
  1569. if (warehouse == null)
  1570. {
  1571. res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
  1572. res.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
  1573. return res;
  1574. }
  1575. //验证库存
  1576. var stock = _ptbillInvnow.GetFirst(p => p.HWBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1577. if (stock == null)
  1578. {
  1579. res.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1580. res.ResMsg = ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1581. return res;
  1582. }
  1583. var locell = new PtApplyLocRequest()
  1584. {
  1585. MaterialId = stock.MatId,
  1586. MaterialCode = stock.MatCode,
  1587. Size = stock.Size,
  1588. TunnelNum = reqEntity.TunnelNum,
  1589. WarehuoseId = warehouse.Id,
  1590. IsMove = wcstask.Type == TaskType.TransferDepot
  1591. };
  1592. //预留货位数量
  1593. var emptyLoc = _baseWareLocationrepository.GetList(p => p.IsStop == 0
  1594. && p.StateNum == LocationState.LocationState_Empty.GetHashCode()
  1595. && p.TypeNum == LocationType.LocationType_StorageLocation.GetHashCode()
  1596. && p.Tunnel == locell.TunnelNum
  1597. && p.WarehouseId == locell.WarehuoseId
  1598. && p.Size == locell.Size
  1599. );
  1600. //判断是否移库
  1601. if (!locell.IsMove && (emptyLoc == null || emptyLoc.Count < 2))
  1602. {
  1603. res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
  1604. res.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();
  1605. return res;
  1606. }
  1607. if (!emptyLoc.Any() || emptyLoc == null)
  1608. {
  1609. res.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
  1610. res.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();
  1611. return res;
  1612. }
  1613. var loc = emptyLoc.First();
  1614. res.ResData.TunnelNum = loc.Tunnel.ToString();
  1615. res.ResData.CellNo = loc.Code;
  1616. res.ResData.Row = loc.Row;
  1617. res.ResData.Colomn = loc.Col;
  1618. res.ResData.Layer = loc.Layer;
  1619. return res;
  1620. }
  1621. public SRes<int> PtCompleteTask(CompleteTaskRequest reqDto)
  1622. {
  1623. var result = new SRes<int>()
  1624. {
  1625. ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(),
  1626. ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(),
  1627. ResData = reqDto.TaskNum
  1628. };
  1629. var task = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqDto.TaskNum).SplitTable(tabs => tabs.Take(1)).First();
  1630. if (task == null)
  1631. {
  1632. result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
  1633. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
  1634. return result;
  1635. }
  1636. if (task.Type == TaskType.EnterDepot)
  1637. {
  1638. //库存,货位
  1639. try
  1640. {
  1641. var warehouse = _baseWareHouserepository.GetSingle(p => p.Code == task.WarehouseCode);
  1642. var stock = _ptbillInvnow.GetFirst(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1643. if (stock == null)
  1644. {
  1645. result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1646. result.ResMsg = task.BarCode + "没有已组盘的信息";
  1647. return result;
  1648. }
  1649. _db.BeginTran();
  1650. int row = int.Parse(task.AddrTo.Split('-')[0]);
  1651. int col = int.Parse(task.AddrTo.Split('-')[1]);
  1652. int layer = int.Parse(task.AddrTo.Split('-')[2]);
  1653. //更新库存
  1654. _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { InvStateCode = InvState.InvEcecState_In.ToString(), PutRow = row, PutCol = col, PutLayer = layer, OneInTime = DateTime.Now, EditTime = DateTime.Now, ExecStateCode = InvLockState.InvState_Lock.ToString() },
  1655. p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
  1656. _ptbillInvinit.Delete(p => p.ContGrpBarCode == stock.ContGrpBarCode);
  1657. //更新货位
  1658. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = stock.ContGrpBarCode, ContGrpId = stock.ContGrpId, EditTime = DateTime.Now },
  1659. p => p.Code.Contains(task.AddrTo));
  1660. var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());
  1661. foreach (var item in stocklist)
  1662. {
  1663. item.Id = IdFactory.NewId();
  1664. item.AddTime = DateTime.Now;
  1665. }
  1666. _ptBillInvFlow.InsertRange(_mapper.Map<List<ptBillInvFlow>>(stocklist));
  1667. var list = new List<ptBillPushinfo>();
  1668. string pushtype = "";
  1669. if (task.BusType == PtTaskBusType.TaskBusType_PT_PurchaseStockIn.GetDescription())
  1670. {
  1671. pushtype = PtFackbeekType.InterfaceType_PT_PurchaseStockIn.ToString();
  1672. }
  1673. //回调数据
  1674. foreach (var item in stocklist)
  1675. {
  1676. list.Add(new ptBillPushinfo
  1677. {
  1678. DocsNo = stock.InDocsNo,
  1679. TypeCode = pushtype,
  1680. RFIDBarCode = stock.ContGrpBarCode,
  1681. HWBarCode = stock.RodBarCode,
  1682. CLBarCode = item.CLBarCode,
  1683. WarehouseId = warehouse.Id,
  1684. WarehouseCode = warehouse.Code,
  1685. WareCellId = 0,
  1686. WareCellCode = task.AddrTo,
  1687. MatId = item.MatId,
  1688. MatCode = item.MatCode,
  1689. MatName = item.MatName,
  1690. ReqNo = Guid.NewGuid().ToString()
  1691. });
  1692. }
  1693. _ptbillPushinfo.InsertRange(list);
  1694. _db.CommitTran();
  1695. }
  1696. catch (Exception ex)
  1697. {
  1698. _db.RollbackTran();
  1699. result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();
  1700. result.ResMsg = task.ID + "完成任务异常";
  1701. _logger.LogInformation("完成任务异常" + ex.ToString());
  1702. }
  1703. }
  1704. else if (task.Type == TaskType.OutDepot)
  1705. {
  1706. //库存删除
  1707. var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == task.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString());
  1708. if (stocklist == null || !stocklist.Any())
  1709. {
  1710. result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1711. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1712. return result;
  1713. }
  1714. var flowlist = _mapper.Map<List<ptBillInvFlow>>(stocklist);
  1715. foreach (var item in flowlist)
  1716. {
  1717. item.Id = IdFactory.NewId();
  1718. item.InvStateCode = InvState.InvEcecState_Out.ToString();
  1719. item.AddTime = DateTime.Now;
  1720. item.Memo = "任务完成";
  1721. }
  1722. try
  1723. {
  1724. _db.BeginTran();
  1725. _ptbillInvnow.Delete(p => stocklist.Select(p => p.Id).ToList().Contains(p.Id));
  1726. _ptbillInvinit.Delete(p => p.ContGrpBarCode == task.BarCode);
  1727. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
  1728. p => p.StateNum == LocationState.LocationState_StockOut.GetHashCode() && p.ContGrpId == flowlist.First().ContGrpId && p.Code.Contains(task.AddrFrom));
  1729. _ptBillInvFlow.InsertRange(flowlist);
  1730. _db.CommitTran();
  1731. }
  1732. catch (Exception ex)
  1733. {
  1734. _db.RollbackTran();
  1735. _logger.LogInformation(ex.ToString());
  1736. result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();
  1737. result.ResMsg = task.ID + "完成任务异常";
  1738. }
  1739. }
  1740. else if (task.Type == TaskType.TransferDepot)
  1741. {
  1742. var fromcell = _baseWareLocationrepository.GetFirst(p => p.Code == task.AddrFrom);
  1743. var grcontid = fromcell.ContGrpId;
  1744. var grcontcode = fromcell.ContGrpBarCode;
  1745. var fromcellno = fromcell.Code;
  1746. var tocellno = task.AddrTo;
  1747. try
  1748. {
  1749. _db.BeginTran();
  1750. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now }, p => p.Code.Contains(fromcellno));
  1751. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Full.GetHashCode(), ContGrpBarCode = grcontcode, ContGrpId = grcontid, EditTime = DateTime.Now }, p => p.Code.Contains(tocellno));
  1752. int row = int.Parse(tocellno.Split('-')[0]);
  1753. int col = int.Parse(tocellno.Split('-')[1]);
  1754. int layer = int.Parse(tocellno.Split('-')[2]);
  1755. _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = row, PutCol = col, PutLayer = layer }, p => p.ContGrpId == grcontid && p.InvStateCode == InvState.InvEcecState_In.ToString());
  1756. var stock = _ptbillInvnow.GetFirst(p => p.ContGrpId == grcontid && p.ContGrpBarCode == grcontcode && p.InvStateCode == InvState.InvEcecState_In.ToString());
  1757. //流水表
  1758. var flow = _mapper.Map<ptBillInvFlow>(stock);
  1759. flow.Id = IdFactory.NewId();
  1760. flow.AddTime = DateTime.Now;
  1761. flow.Memo = grcontcode + "移库(" + fromcellno + "至" + tocellno + ")";
  1762. _ptBillInvFlow.Insert(flow);
  1763. //推送表
  1764. _db.CommitTran();
  1765. }
  1766. catch (Exception ex)
  1767. {
  1768. _db.RollbackTran();
  1769. result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();
  1770. result.ResMsg = task.ID + "完成任务异常";
  1771. _logger.LogInformation("完成任务异常" + ex.ToString());
  1772. }
  1773. }
  1774. return result;
  1775. }
  1776. public SRes<int> PtSrmPickOutCompleted(PtSrmPickOutCompletedRequest reqDto)
  1777. {
  1778. var result = new SRes<int>()
  1779. {
  1780. ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(),
  1781. ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(),
  1782. ResData = reqDto.TaskNum
  1783. };
  1784. var wcstask = _ptwcsTaskold.AsQueryable().Where(p => p.ID == reqDto.TaskNum).SplitTable(tabs => tabs.Take(1)).First(); ;
  1785. if (wcstask == null)
  1786. {
  1787. result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
  1788. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
  1789. return result;
  1790. }
  1791. if (wcstask.Type != TaskType.OutDepot)
  1792. {
  1793. result.ResCode = ResponseStatusCodeEnum.OnlyStockOutAvil.GetHashCode();
  1794. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.OnlyStockOutAvil.GetDescription();
  1795. return result;
  1796. }
  1797. if (wcstask.Status >= TaskStatus.Finish)
  1798. {
  1799. result.ResCode = ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetHashCode();
  1800. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.WcsTaskStateIsComplete.GetDescription();
  1801. return result;
  1802. }
  1803. try
  1804. {
  1805. _db.BeginTran();
  1806. //更新库存
  1807. _ptbillInvnow.UpdateModelColumns(p => new ptBillInvnow() { PutRow = 0, PutCol = 0, PutLayer = 0 }, p => p.InvStateCode == InvState.InvEcecState_OutGoing.ToString() && p.ContGrpBarCode == wcstask.BarCode);
  1808. var stocklist = _ptbillInvnow.GetList(p => p.ContGrpBarCode == wcstask.BarCode && p.InvStateCode == InvState.InvEcecState_OutGoing.ToString());
  1809. if (stocklist == null || !stocklist.Any())
  1810. {
  1811. result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
  1812. result.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription();
  1813. return result;
  1814. }
  1815. var flowlist = _mapper.Map<List<ptBillInvFlow>>(stocklist);
  1816. foreach (var item in flowlist)
  1817. {
  1818. item.Id = IdFactory.NewId();
  1819. item.AddTime = DateTime.Now;
  1820. item.Memo = "堆垛机出库放货完成";
  1821. }
  1822. //货位
  1823. _baseWareLocationrepository.UpdateModelColumns(p => new ptBaseWareLocation() { StateNum = LocationState.LocationState_Empty.GetHashCode(), ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
  1824. p => p.ContGrpBarCode == wcstask.BarCode && p.Code.Contains(wcstask.AddrFrom));
  1825. _ptBillInvFlow.InsertRange(flowlist);
  1826. _db.CommitTran();
  1827. }
  1828. catch (Exception ex)
  1829. {
  1830. _db.RollbackTran();
  1831. _logger.LogInformation(ex.ToString());
  1832. result.ResCode = ResponseStatusCodeEnum.InnerServerErr.GetHashCode();
  1833. result.ResMsg = wcstask.ID + "堆垛机出库放货完成异常";
  1834. }
  1835. return result;
  1836. }
  1837. public SRes GetSyncMaterInfo(PtSyncMaterInfoListRequest ResData)
  1838. {
  1839. var res = new SRes();
  1840. if (!string.IsNullOrEmpty(ResData.MatCode))
  1841. {
  1842. ResData.UpdatedTime = DateTime.Now.ToString();
  1843. if (_materrepository.IsAny(p => p.Code == ResData.MatCode))
  1844. {
  1845. _materrepository.UpdateModelColumns(p => new ptBaseMater() { IsHold = ResData.IsHold, HoldDuration = ResData.HoldDuration, Name = ResData.MatName, EditTime = DateTime.Now, Description = ResData.Describe },
  1846. p => p.Code == ResData.MatCode);
  1847. }
  1848. else
  1849. {
  1850. var model = _mapper.Map<ptBaseMater>(ResData);
  1851. model.AddTime = DateTime.Now;
  1852. model.WarehouseId = 263682712;
  1853. _materrepository.Insert(model);
  1854. }
  1855. }
  1856. return res;
  1857. }
  1858. }
  1859. }