FJService.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. using AutoMapper;
  2. using Microsoft.Extensions.Logging;
  3. using Newtonsoft.Json;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq.Expressions;
  8. using System.Text;
  9. using wms.dataservice.IDataSetvice;
  10. using wms.dto;
  11. using wms.dto.request.fj;
  12. using wms.dto.response;
  13. using wms.dto.response.fj;
  14. using wms.service.IService;
  15. using wms.sqlsugar;
  16. using wms.sqlsugar.model;
  17. using wms.sqlsugar.model.fj;
  18. using wms.util.Ext;
  19. using System.Linq;
  20. using WCS.Entity.fj;
  21. using wms.util.Check;
  22. namespace wms.service.Service
  23. {
  24. public class FJService : IFJService
  25. {
  26. private readonly IMapper _mapper;
  27. private readonly ILogger<FJService> _logger;
  28. private readonly IFJDataService _IFJDataService;
  29. public FJService(IMapper mapper, ILogger<FJService> logger, IFJDataService IFJDataService)
  30. {
  31. _mapper = mapper;
  32. _logger = logger;
  33. _IFJDataService = IFJDataService;
  34. }
  35. Repository<fjSysConfig> _sysconfigrepository => new Repository<fjSysConfig>();
  36. ITenant _db => SqlSugarHelper.Db;//处理事务
  37. Repository<BaseContinfo> _baseContinfo => new Repository<BaseContinfo>();
  38. RepositoryTask<WCS_TaskInfo> _taskrepository => new RepositoryTask<WCS_TaskInfo>();
  39. Repository<BillInvnow> _billInvnowrepository => new Repository<BillInvnow>();
  40. Repository<BillInvinit> _billInvinitrepository => new Repository<BillInvinit>();
  41. Repository<BaseMatinfo> _basematerrepository => new Repository<BaseMatinfo>();
  42. Repository<BillSpoolTrans> _billSpoolTransrepository => new Repository<BillSpoolTrans>();
  43. Repository<BillBominfo> _billBominfoRepository => new Repository<BillBominfo>();
  44. Repository<BillBomsetinfo> _billBomsetinfoRepository => new Repository<BillBomsetinfo>();
  45. Repository<BillBomsetgrp> _billBomsetgrpRepository => new Repository<BillBomsetgrp>();
  46. Repository<BillDocsinfo> _billdocrepository => new Repository<BillDocsinfo>();
  47. RepositoryTask<WCS_TaskOld> _wcstaskoldrepository => new RepositoryTask<WCS_TaskOld>();
  48. Repository<BillInvflow> _billInvflow => new Repository<BillInvflow>();
  49. Repository<BillPushinfo> _billPushinforepository => new Repository<BillPushinfo>();
  50. Repository<BaseWarecell> _basewarecellrepository => new Repository<BaseWarecell>();
  51. Repository<BaseWarehouse> _basewarehouserepository => new Repository<BaseWarehouse>();
  52. RepositoryTask<WCS_TaskDtl> _taskdetailrepository => new RepositoryTask<WCS_TaskDtl>();
  53. Repository<BillMachinfo> _basemachinforepository => new Repository<BillMachinfo>();
  54. /// <summary>
  55. /// 获取配置内容信息
  56. /// </summary>
  57. /// <param name="code">配置表code值</param>
  58. /// <returns></returns>
  59. public string GetSysConfigContentByCode(string code)
  60. {
  61. //先读缓存
  62. var cacheContent = RedisHelper.Get("sys_config" + code);
  63. if (!string.IsNullOrEmpty(cacheContent))
  64. {
  65. return cacheContent;
  66. }
  67. var sysconf = _sysconfigrepository.GetSingle(p => p.Code == code);
  68. if (sysconf == null)
  69. {
  70. throw new Exception("数据表没有配置" + code);
  71. }
  72. var content = sysconf.SContent;
  73. string sysname = sysconf.Default1;//所属系统mes/erp
  74. RedisHelper.Set("sys_config" + code, content + "|" + sysname);
  75. return content;
  76. }
  77. /// <summary>
  78. /// 获取配置信息
  79. /// </summary>
  80. /// <param name="code"></param>
  81. /// <returns></returns>
  82. public fjSysConfig GetSysConfigByCode(string code)
  83. {
  84. //Repository<dynamic> _billdtrepository = new Repository<dynamic>();
  85. return _sysconfigrepository.GetSingle(p => p.Code == code);
  86. }
  87. /// <summary>
  88. /// 获取配置信息
  89. /// </summary>
  90. /// <param name="code"></param>
  91. /// <returns></returns>
  92. public fjSysConfig GetSysConfigByExpression(Expression<Func<fjSysConfig, bool>> WhereExpression)
  93. {
  94. return _sysconfigrepository.GetSingle(WhereExpression);
  95. }
  96. /// <summary>
  97. /// 获取反馈信息
  98. /// </summary>
  99. /// <param name="code"></param>
  100. /// <returns></returns>
  101. public List<BillPushinfo> GetBillPushinfoList(Expression<Func<BillPushinfo, bool>> WhereExpression)
  102. {
  103. return _billPushinforepository.GetList(WhereExpression);
  104. }
  105. ///// <summary>
  106. ///// 获取单据信息
  107. ///// </summary>
  108. ///// <param name="code"></param>
  109. ///// <returns></returns>
  110. //public fjBillDocument GetBillDocumentList(Expression<Func<fjBillDocument, bool>> WhereExpression)
  111. //{
  112. // return _billdtrepository.Context.Queryable<fjBillDocument, fjSysConfig>((doc, conf) => new object[] {
  113. // JoinType.Left, doc.BState == conf.Code
  114. // }).Where((doc, conf) => doc.Status == 0)
  115. // .Select((bc, bm) => bc).First();
  116. //}
  117. /// <summary>
  118. /// 更新SysConfig表字段
  119. /// </summary>
  120. /// <param name="updateModel"></param>
  121. /// <returns></returns>
  122. public bool UpdateSysConfigModelColumns(UpdateModelColumns<fjSysConfig> updateModel)
  123. {
  124. return _sysconfigrepository.Update(updateModel.Columns, updateModel.WhereExpression);
  125. }
  126. /// <summary>
  127. /// 更新BillPushinfo表字段
  128. /// </summary>
  129. /// <param name="updateModel"></param>
  130. /// <returns></returns>
  131. public bool UpdateBillPushinfoModelColumns(UpdateModelColumns<BillPushinfo> updateModel)
  132. {
  133. return _billPushinforepository.Update(updateModel.Columns, updateModel.WhereExpression);
  134. }
  135. public bool SyncMaterInfo(List<FJSyncMaterInfoResponseItem> ResData)
  136. {
  137. foreach (var item in ResData)
  138. {
  139. item.UpdatedTime = DateTime.Now;
  140. if (_basematerrepository.IsAny(p => p.Code == item.MatCode))
  141. {
  142. _basematerrepository.UpdateModelColumns(p => new BaseMatinfo() { IsHold = item.IsHold, HoldDuration = item.HoldDuration, Name = item.MatName, EditTime = DateTime.Now, Description = item.Describe },
  143. p => p.Code == item.MatCode);
  144. }
  145. else
  146. {
  147. var model = _mapper.Map<BaseMatinfo>(item);
  148. model.AddTime = DateTime.Now;
  149. _basematerrepository.Insert(model);
  150. }
  151. }
  152. return true;
  153. }
  154. public bool SyncMachineInfo(List<SyncMachineInfoResponseItem> ResData)
  155. {
  156. foreach (var item in ResData)
  157. {
  158. if (_basemachinforepository.IsAny(p => p.MachNo == item.MacCode))
  159. {
  160. _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { GrpCode = item.MacGroup, Direction = item.Direction,Station = item.LocCode,EditTime = DateTime.Now },
  161. p => p.MachNo == item.MacCode);
  162. }
  163. else
  164. {
  165. var model = _mapper.Map<BillMachinfo>(item);
  166. _basemachinforepository.Insert(model);
  167. }
  168. }
  169. return true;
  170. }
  171. /// <summary>
  172. /// 投料信息接收
  173. /// </summary>
  174. /// <param name="reqDto"></param>
  175. /// <returns></returns>
  176. public SRes WetFormulaInfo(WetFormulaInfoRequest reqDto)
  177. {
  178. var res = new SRes();
  179. //保存表Bill_BomInfo
  180. foreach (var item in reqDto.FeedList)
  181. {
  182. if (_billBominfoRepository.IsAny(p => p.Code == reqDto.FeedCode && p.MatCode == item.MatCode))
  183. {
  184. var mat = _basematerrepository.GetSingle(p => p.Code == item.MatCode);
  185. _billBominfoRepository.UpdateModelColumns(p => new BillBominfo() { MatCode = item.MatCode,MatId = mat.Id, Name = item.MatCode, HWCountQty = item.Count, EditTime = DateTime.Now },
  186. p => p.Code == reqDto.FeedCode && p.MatCode == item.MatCode);
  187. }
  188. else
  189. {
  190. var mat = _basematerrepository.GetSingle(p => p.Code == item.MatCode);
  191. if (mat == null)
  192. {
  193. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  194. res.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  195. return res;
  196. }
  197. var model = new BillBominfo() {
  198. Code = reqDto.FeedCode,
  199. Name = reqDto.FeedCode,
  200. MatCode = item.MatCode,
  201. MatId = mat.Id,
  202. AddTime = DateTime.Now,
  203. AddWho = "wms",
  204. EditTime = DateTime.Now,
  205. EditWho = "wms",
  206. IsStop = 0,
  207. HWCountQty = item.Count,
  208. ProMatCode = reqDto.MaterialCode
  209. };
  210. model.AddTime = DateTime.Now;
  211. _billBominfoRepository.Insert(model);
  212. }
  213. }
  214. return res;
  215. }
  216. /// <summary>
  217. /// 帘线工单信息传输
  218. /// </summary>
  219. /// <param name="reqDto"></param>
  220. /// <returns></returns>
  221. public SRes CurtainProductionOrder(CurtainProductionOrderRequest reqDto)
  222. {
  223. var res = new SRes();
  224. var stack = _billBomsetgrpRepository.GetModelByExpression(p => p.ProMaterCode == reqDto.MatCode && p.BomCode == reqDto.FeedCode);
  225. if (stack == null)
  226. {
  227. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  228. res.ResMsg = reqDto.BillCode + "该单据配方没有垛型信息,请先配置垛型";
  229. return res;
  230. }
  231. if (reqDto.BillState == CurtainBillState.初始化.ToString() || reqDto.BillState == CurtainBillState.已排产.ToString())
  232. {
  233. var doc = _billdocrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);
  234. if (doc == null)
  235. {
  236. doc = new BillDocsinfo();
  237. doc.WarehouseId = 0;
  238. doc.ReqNo = reqDto.BillCode;
  239. doc.DocsNo = reqDto.BillCode;
  240. doc.TypeNum = DocType.DocType_FJ_CurtainProduction.GetHashCode();
  241. doc.StateNum = DocState.DocState_Create.GetHashCode();
  242. doc.JsonContent = JsonConvert.SerializeObject(reqDto);
  243. doc.DownQty = 1;
  244. doc.IsStop = 0;
  245. doc.BomCode = reqDto.FeedCode;
  246. doc.ProMaterCode = reqDto.MatCode;
  247. doc.SetGrpCode = stack.Code;
  248. doc.WorkOrder = reqDto.WorkOrder;
  249. var docinsert = _billdocrepository.Insert(doc);
  250. if (!docinsert)
  251. {
  252. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  253. res.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  254. return res;
  255. }
  256. }
  257. _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { ProBillCode = reqDto.BillCode, ProWorkOrder = reqDto.WorkOrder, ProSetGrpCode = stack.Code, EditTime = DateTime.Now }, p => reqDto.WbList.Contains(p.MachNo));
  258. }
  259. else if (reqDto.BillState == CurtainBillState.生产中.ToString())
  260. {
  261. int state = DocState.DocState_Execute.GetHashCode();
  262. _billdocrepository.UpdateModelColumns(p => new BillDocsinfo() { StateNum = state }, p => p.DocsNo == reqDto.BillCode);
  263. _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { BillCode = reqDto.BillCode, WorkOrder = reqDto.WorkOrder, SetGrpCode = stack.Code, EditTime = DateTime.Now }, p => reqDto.WbList.Contains(p.MachNo));
  264. }
  265. else if (reqDto.BillState == CurtainBillState.生产结束.ToString()|| reqDto.BillState == CurtainBillState.计划关闭.ToString())
  266. {
  267. int state = DocState.DocState_Complete.GetHashCode();
  268. _billdocrepository.UpdateModelColumns(p => new BillDocsinfo() { StateNum = state }, p => p.DocsNo == reqDto.BillCode);
  269. }
  270. return res;
  271. }
  272. /// <summary>
  273. /// 湿拉工单启动验证
  274. /// </summary>
  275. /// <param name="reqDto"></param>
  276. /// <returns></returns>
  277. public SRes CurtainOrderStartCheck(CurtainOrderStartCheckRequest reqDto)
  278. {
  279. var res = new SRes();
  280. var doc = _billdocrepository.GetList(p => p.WorkOrder == reqDto.BillCode);
  281. if (doc == null || !doc.Any())
  282. {
  283. res.ResCode = 0;
  284. res.ResMsg = reqDto.BillCode + "工单不存在";
  285. return res;
  286. }
  287. if (doc.Where(p=> string.IsNullOrEmpty(p.BomCode)).Any())
  288. {
  289. res.ResCode = 0;
  290. res.ResMsg = reqDto.BillCode + "帘线工序工单没有配置垛型信息,请先配置垛型";
  291. return res;
  292. }
  293. //foreach (var item in doc)
  294. //{
  295. // _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { BillCode = item.DocsNo, WorkOrder = item.WorkOrder, SetGrpCode = item.SetGrpCode, EditTime = DateTime.Now }, p => p.ProBillCode == item.DocsNo);
  296. //}
  297. return res;
  298. }
  299. /// <summary>
  300. /// 湿拉工字轮/芯股信息传输接口
  301. /// </summary>
  302. /// <param name="reqDto"></param>
  303. /// <returns></returns>
  304. public SRes SpoolMaterialInfoTrans(SpoolMaterialInfoTransRequest reqDto)
  305. {
  306. var res = new SRes();
  307. var container = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.SpoolCode);
  308. if (container == null)
  309. {
  310. var insertcon = new BaseContinfo()
  311. {
  312. ContBarCode = reqDto.SpoolCode,
  313. Name = reqDto.SpoolCode,
  314. TypeCode = ContainerType.ContainerType_Spool.ToString(),
  315. PrintQty = 1,
  316. IsStop = 0,
  317. WarehouseId = 0,
  318. WeightQty = 0,
  319. AddWho = "wms",
  320. AddTime = DateTime.Now
  321. };
  322. //新加载具信息
  323. if (!_baseContinfo.Insert(insertcon))
  324. {
  325. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  326. res.ResMsg = "工字轮载具初始化失败";
  327. return res;
  328. }
  329. }
  330. var mater = _basematerrepository.GetSingle(p => p.Code == reqDto.MatCode);
  331. if (mater == null)
  332. {
  333. res.ResCode = ResponseStatusCodeEnum.MaterInfoNotExist.GetHashCode();
  334. res.ResMsg = ResponseStatusCodeEnum.MaterInfoNotExist.GetDescription();
  335. return res;
  336. }
  337. BillSpoolTrans billSpoolTrans = new BillSpoolTrans();
  338. billSpoolTrans.ConBarCode = reqDto.SpoolCode;
  339. billSpoolTrans.BillCode = reqDto.BillCode;
  340. billSpoolTrans.WorkOrder = reqDto.WorkOrder;
  341. billSpoolTrans.AddTime = DateTime.Now;
  342. var stock = _billInvnowrepository.GetSingle(p => p.ContGrpBarCode == reqDto.SpoolCode);
  343. if (stock != null && stock.InvStateCode == InvState.InvEcecState_In.ToString())
  344. {
  345. billSpoolTrans.ErrType = 1;
  346. billSpoolTrans.Memo = "该工字轮条码号已在库中,请检查RFID号是否重复";
  347. }
  348. if (stock != null && stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
  349. {
  350. billSpoolTrans.ErrType = 1;
  351. billSpoolTrans.Memo = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
  352. }
  353. //条码验证
  354. var barstock = _billInvnowrepository.GetSingle(p => p.InvBarCode == reqDto.MatBarCode);
  355. if (barstock != null && barstock.InvStateCode == InvState.InvEcecState_In.ToString())
  356. {
  357. billSpoolTrans.ErrType = 1;
  358. billSpoolTrans.Memo = "该材料号已在库中,请检查是否重复";
  359. }
  360. if (barstock != null && barstock.ContGrpBarCode != reqDto.SpoolCode)
  361. {
  362. billSpoolTrans.ErrType = 1;
  363. billSpoolTrans.Memo = reqDto.MatBarCode + "该材料号已经绑定" + barstock.ContGrpBarCode + ",请检查是否重复";
  364. }
  365. var barinfo = _billInvinitrepository.GetSingle(p => p.InvBarCode == reqDto.MatBarCode);
  366. if (barinfo == null)
  367. {
  368. barinfo = new BillInvinit()
  369. {
  370. InvBarCode = reqDto.MatBarCode,
  371. WarehouseId = 0,
  372. ContGrpId = IdFactory.NewId(),
  373. ContGrpBarCode = reqDto.SpoolCode,
  374. ExecStateCode = InvLockState.InvState_Normal.ToString(),
  375. ExecDocsNo = reqDto.WorkOrder,
  376. ExecDocsRowNo = reqDto.MatBarCode,
  377. ExecDocsTypeCode = DocType.DocType_HJ_CopperProductStockIn.GetHashCode().ToString(),
  378. InvInOut = InvInOutType.In.GetHashCode(),
  379. ExecWho = "MES",
  380. EditTime = DateTime.Now,
  381. InvStateCode = InvState.InvEcecState_BuildUp.ToString(),
  382. InDocsNo = reqDto.BillCode,
  383. InDocsRowNo = reqDto.MatBarCode,
  384. SuppCode = "",
  385. MatId = mater.Id,
  386. MatCode = mater.Code,
  387. MatName = mater.Name,
  388. LengthQty = reqDto.Length,
  389. TareWQty = reqDto.Weight,
  390. ProductTime = reqDto.ProductDate,
  391. RFIDBarCode = "",
  392. ProductLineNo = "",
  393. Grade = reqDto.Grade,
  394. HWBarCode = "",
  395. HWTypeCode = reqDto.SpoolType,//工字轮类型
  396. IsFast = reqDto.IsFast,
  397. IsRework = false,
  398. CLBarCode = reqDto.MatBarCode,
  399. Size = 1,
  400. AddTime = DateTime.Now,
  401. BackReason = "",
  402. IsBack = reqDto.IsBack,
  403. SilkTypeCode = reqDto.SilkType,
  404. IsCore = reqDto.BusType == "2",
  405. };
  406. _billInvinitrepository.InsertReturnEntity(barinfo);
  407. //_billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
  408. }
  409. return res;
  410. }
  411. /// <summary>
  412. /// 分配分拣库
  413. /// </summary>
  414. /// <returns></returns>
  415. public bool AllocationWarehouseSort(AllocationWarehouseSortRequest reqDto)
  416. {
  417. var list = _billSpoolTransrepository.AsQueryable().Where(p => p.WarehouseSort == 0).Take(reqDto.TaskCount).ToList();
  418. foreach (var item in list)
  419. {
  420. var maclist = _basemachinforepository.AsQueryable().Where(p => p.WorkOrder == item.WorkOrder);
  421. var warelist = maclist.Select(p => p.WarehouseCode).Distinct();
  422. if (!warelist.Any())
  423. {
  424. _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans()
  425. {
  426. ErrType = 1,
  427. ErrMsg = "没有配置机台信息",
  428. EditTime = DateTime.Now
  429. }, p => p.ConBarCode == item.ConBarCode);
  430. }
  431. else if (warelist.Count() == 1)
  432. {
  433. int sort = int.Parse(warelist.First().Substring(0, 1));
  434. _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans()
  435. {
  436. WarehouseSort = sort,
  437. Direct = warelist.First().Substring(1, 1),
  438. EditTime = DateTime.Now
  439. }, p => p.ConBarCode == item.ConBarCode);
  440. }
  441. else
  442. {
  443. var waretemplist = maclist.Select(p => new { p.WarehouseCode,p.WorkOrder,p.BillCode}).Distinct();
  444. var warehouselist = _basewarehouserepository.GetList().Select(p => p.Code);
  445. foreach (var warehouse in warehouselist)
  446. {
  447. var stackdetaillist = _billBomsetinfoRepository.AsQueryable();
  448. getMatProport(item.MatCode, warehouse);
  449. }
  450. //根据垛型及库存比例分配
  451. //找出该物料类型在每个库所要求的所有量
  452. //找出该物料库存在当前库所有
  453. }
  454. }
  455. return true;
  456. }
  457. /// <summary>
  458. /// 二次扫码分配输送地址
  459. /// </summary>
  460. /// <param name="reqDto"></param>
  461. /// <returns></returns>
  462. public SRes AllocationConveyorSort(AllocationConveyorSortRequest reqDto)
  463. {
  464. var res = new SRes();
  465. var baritem = _billSpoolTransrepository.GetFirst(p => p.ConBarCode == reqDto.BarCode);
  466. //判断当前库是否有mix垛型
  467. var mixrow = _billBomsetinfoRepository.AsQueryable().Where(p => p.IsMixRow == 1);
  468. if (mixrow == null || !mixrow.Any())
  469. {
  470. var matcodelist = _billBomsetinfoRepository.AsQueryable();
  471. var curmatrate = matcodelist.Where(p => p.MatCode == baritem.MatCode).Count() / matcodelist.Count();
  472. //需要的总量
  473. }
  474. else
  475. {
  476. }
  477. var translist = _billSpoolTransrepository.AsQueryable().Where(p => p.WarehouseCode == baritem.WarehouseCode).ToList();
  478. foreach (var item in translist.GroupBy(p=>p.ConveyorSort))
  479. {
  480. }
  481. return res;
  482. }
  483. public decimal getMatProport(string matcode, string warehousecode)
  484. {
  485. //计算此仓库所有该物料的量
  486. //每的单子(每盘的数量)*预计盘数
  487. var stackdetaillist = _billBomsetinfoRepository.AsQueryable();
  488. return 0;
  489. }
  490. /// <summary>
  491. /// 帘线领料出库
  492. /// </summary>
  493. /// <param name="reqDto"></param>
  494. /// <returns></returns>
  495. public SRes CurtainProductionStockOut(CurtainProductionStockOutRequest reqDto)
  496. {
  497. var res = new SRes();
  498. var warehosue = _basewarehouserepository.GetSingle(p => p.Code == reqDto.WareCode);
  499. if (warehosue == null)
  500. {
  501. res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
  502. res.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
  503. return res;
  504. }
  505. var doc = _billdocrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);
  506. if (doc == null)
  507. {
  508. doc = new BillDocsinfo();
  509. doc.WarehouseId = warehosue.Id;
  510. //保存单据信息
  511. doc.ReqNo = reqDto.ReqId;
  512. doc.DocsNo = reqDto.BillCode;
  513. doc.TypeNum = DocType.DocType_FJ_CurtainProductionStockOut.GetHashCode();
  514. doc.StateNum = DocState.DocState_Create.GetHashCode();
  515. doc.JsonContent = JsonConvert.SerializeObject(reqDto);
  516. doc.DownQty = 1;
  517. var docinsert = _billdocrepository.Insert(doc);
  518. if (!docinsert)
  519. {
  520. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  521. res.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  522. return res;
  523. }
  524. }
  525. return res;
  526. }
  527. public SRes ProductionBack(FjProductionBackRequest reqDto)
  528. {
  529. var res = new SRes();
  530. return res;
  531. }
  532. public SRes ProductionLeftFeedBack(string doccode)
  533. {
  534. var res = new SRes();
  535. return res;
  536. }
  537. public SRes ErrorMaterialStockOut(FjErrorMaterialStockOutRequest reqDto)
  538. {
  539. var res = new SRes();
  540. return res;
  541. }
  542. public SRes BGradeMaterialStockOut(BGradeMaterialStockOutRequest reqDto)
  543. {
  544. var res = new SRes();
  545. return res;
  546. }
  547. public SRes StockChange(FjStockChangeRequest reqDto)
  548. {
  549. var res = new SRes();
  550. return res;
  551. }
  552. public SRes ManualBuildStockTrans(ManualBuildStockTransRequest reqDto)
  553. {
  554. var res = new SRes();
  555. return res;
  556. }
  557. public SRes BomInfoTrans(BomInfoTransRequest reqDto)
  558. {
  559. var res = new SRes();
  560. return res;
  561. }
  562. /// <summary>
  563. /// 实时库存查询接口
  564. /// </summary>
  565. /// <param name="reqDto"></param>
  566. /// <returns></returns>
  567. public GetFJCurStockListResponse GetCurStockList(GetFJCurStockListRequest reqDto)
  568. {
  569. var res = new GetFJCurStockListResponse()
  570. {
  571. ResData = new List<FJResDataItem>()
  572. {
  573. }
  574. };
  575. int totalCount = 0;
  576. var list = _billInvnowrepository.Context.Queryable<BillInvnow>()
  577. .Where(p => p.InvStateCode == InvState.InvEcecState_In.ToString())
  578. .WhereIF(!string.IsNullOrEmpty(reqDto.MatCode), p => p.MatCode.Contains(reqDto.MatCode))
  579. .WhereIF(!string.IsNullOrEmpty(reqDto.MatName), p => p.MatName.Contains(reqDto.MatName))
  580. .ToPageList(reqDto.PageIndex, reqDto.PageSize, ref totalCount)
  581. .Select(p => new FJResDataItem
  582. {
  583. MatCode = p.MatCode,
  584. MatName = p.MatName,
  585. MatBarCode = p.CLBarCode,
  586. Describe = "",
  587. LocCell = p.PutCol.ToString(),
  588. LocLayer = p.PutLayer.ToString(),
  589. LocRow = p.PutRow.ToString(),
  590. LocCode = p.PutRow.ToString() + p.PutCol.ToString() + p.PutLayer.ToString(),
  591. ConBarCode = p.ContGrpBarCode,
  592. HWBarCode = p.HWBarCode,
  593. UpdatedTime = p.EditTime,
  594. }
  595. );
  596. res.TotalCount = totalCount;
  597. res.ResData = list.ToList();
  598. return res;
  599. }
  600. }
  601. }