FJService.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  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<fjBillDocument> _docrepository => new Repository<fjBillDocument>();
  36. Repository<fjSysConfig> _sysconfigrepository => new Repository<fjSysConfig>();
  37. Repository<fjBaseMater> _materrepository => new Repository<fjBaseMater>();
  38. Repository<fjBillTask> _billTaskrepository => new Repository<fjBillTask>();
  39. Repository<fjBaseWarehouse> _baseWareHouserepository => new Repository<fjBaseWarehouse>();
  40. Repository<fjBillBarcode> _billBarcoderepository => new Repository<fjBillBarcode>();
  41. Repository<fjBillFeedbackPush> _billFbackPushrepository => new Repository<fjBillFeedbackPush>();
  42. Repository<fjBillBomInfo> _fjBillBomInfoRepository => new Repository<fjBillBomInfo>();
  43. Repository<fjBillWetStack> _fjBillWetStackRepository => new Repository<fjBillWetStack>();
  44. ITenant _db => SqlSugarHelper.Db;//处理事务
  45. Repository<BaseContinfo> _baseContinfo => new Repository<BaseContinfo>();
  46. RepositoryTask<WCS_TaskInfo> _taskrepository => new RepositoryTask<WCS_TaskInfo>();
  47. Repository<BillInvnow> _billInvnowrepository => new Repository<BillInvnow>();
  48. Repository<BillInvinit> _billInvinitrepository => new Repository<BillInvinit>();
  49. Repository<BaseMatinfo> _basematerrepository => new Repository<BaseMatinfo>();
  50. Repository<BillSpoolTrans> _billSpoolTransrepository => new Repository<BillSpoolTrans>();
  51. Repository<BillBominfo> _billBominfoRepository => new Repository<BillBominfo>();
  52. Repository<BillBomsetinfo> _billBomsetinfoRepository => new Repository<BillBomsetinfo>();
  53. Repository<BillDocsinfo> _billdocrepository => new Repository<BillDocsinfo>();
  54. RepositoryTask<WCS_TaskOld> _wcstaskoldrepository => new RepositoryTask<WCS_TaskOld>();
  55. Repository<BillInvflow> _billInvflow => new Repository<BillInvflow>();
  56. Repository<BillPushinfo> _billPushinforepository => new Repository<BillPushinfo>();
  57. Repository<BaseWarecell> _basewarecellrepository => new Repository<BaseWarecell>();
  58. Repository<BaseWarehouse> _basewarehouserepository => new Repository<BaseWarehouse>();
  59. RepositoryTask<WCS_TaskDtl> _taskdetailrepository => new RepositoryTask<WCS_TaskDtl>();
  60. Repository<BillMachinfo> _basemachinforepository => new Repository<BillMachinfo>();
  61. /// <summary>
  62. /// 添加单据
  63. /// </summary>
  64. /// <returns></returns>
  65. public bool Add(fjBillDocument data1)
  66. {
  67. try
  68. {
  69. _db.BeginTran();
  70. _docrepository.Insert(data1);
  71. _db.CommitTran();
  72. }
  73. catch (Exception)
  74. {
  75. _db.RollbackTran();
  76. throw;
  77. }
  78. return true;
  79. }
  80. /// <summary>
  81. /// 获取配置内容信息
  82. /// </summary>
  83. /// <param name="code">配置表code值</param>
  84. /// <returns></returns>
  85. public string GetSysConfigContentByCode(string code)
  86. {
  87. //先读缓存
  88. var cacheContent = RedisHelper.Get("sys_config" + code);
  89. if (!string.IsNullOrEmpty(cacheContent))
  90. {
  91. return cacheContent;
  92. }
  93. var sysconf = _sysconfigrepository.GetSingle(p => p.Code == code);
  94. if (sysconf == null)
  95. {
  96. throw new Exception("数据表没有配置" + code);
  97. }
  98. var content = sysconf.SContent;
  99. string sysname = sysconf.Default1;//所属系统mes/erp
  100. RedisHelper.Set("sys_config" + code, content + "|" + sysname);
  101. return content;
  102. }
  103. /// <summary>
  104. /// 获取配置信息
  105. /// </summary>
  106. /// <param name="code"></param>
  107. /// <returns></returns>
  108. public fjSysConfig GetSysConfigByCode(string code)
  109. {
  110. //Repository<dynamic> _billdtrepository = new Repository<dynamic>();
  111. return _sysconfigrepository.GetSingle(p => p.Code == code);
  112. }
  113. /// <summary>
  114. /// 获取物料信息
  115. /// </summary>
  116. /// <param name="code"></param>
  117. /// <returns></returns>
  118. public fjBaseMater GetBaseMaterByExpression(Expression<Func<fjBaseMater, bool>> WhereExpression)
  119. {
  120. return _materrepository.GetSingle(WhereExpression);
  121. }
  122. /// <summary>
  123. /// 获取配置信息
  124. /// </summary>
  125. /// <param name="code"></param>
  126. /// <returns></returns>
  127. public fjSysConfig GetSysConfigByExpression(Expression<Func<fjSysConfig, bool>> WhereExpression)
  128. {
  129. return _sysconfigrepository.GetSingle(WhereExpression);
  130. }
  131. /// <summary>
  132. /// 获取单据信息
  133. /// </summary>
  134. /// <param name="code"></param>
  135. /// <returns></returns>
  136. public fjBillDocument GetBillDocumentByExpression(Expression<Func<fjBillDocument, bool>> WhereExpression)
  137. {
  138. return _docrepository.GetSingle(WhereExpression);
  139. }
  140. /// <summary>
  141. /// 获取反馈信息
  142. /// </summary>
  143. /// <param name="code"></param>
  144. /// <returns></returns>
  145. public List<fjBillFeedbackPush> GetBillFeedbackList(Expression<Func<fjBillFeedbackPush, bool>> WhereExpression)
  146. {
  147. return _billFbackPushrepository.GetList(WhereExpression);
  148. }
  149. ///// <summary>
  150. ///// 获取单据信息
  151. ///// </summary>
  152. ///// <param name="code"></param>
  153. ///// <returns></returns>
  154. //public fjBillDocument GetBillDocumentList(Expression<Func<fjBillDocument, bool>> WhereExpression)
  155. //{
  156. // return _billdtrepository.Context.Queryable<fjBillDocument, fjSysConfig>((doc, conf) => new object[] {
  157. // JoinType.Left, doc.BState == conf.Code
  158. // }).Where((doc, conf) => doc.Status == 0)
  159. // .Select((bc, bm) => bc).First();
  160. //}
  161. /// <summary>
  162. /// 更新SysConfig表字段
  163. /// </summary>
  164. /// <param name="updateModel"></param>
  165. /// <returns></returns>
  166. public bool UpdateSysConfigModelColumns(UpdateModelColumns<fjSysConfig> updateModel)
  167. {
  168. return _sysconfigrepository.Update(updateModel.Columns, updateModel.WhereExpression);
  169. }
  170. /// <summary>
  171. /// 更新hjBillFeedbackPush表字段
  172. /// </summary>
  173. /// <param name="updateModel"></param>
  174. /// <returns></returns>
  175. public bool UpdateBillFeedbackPushModelColumns(UpdateModelColumns<fjBillFeedbackPush> updateModel)
  176. {
  177. return _billFbackPushrepository.Update(updateModel.Columns, updateModel.WhereExpression);
  178. }
  179. public SRes<bool> DeleteDoc(Expression<Func<fjBillDocument, bool>> whereExpression)
  180. {
  181. var res = new SRes<bool>();
  182. res.ResData = _docrepository.Delete(whereExpression);
  183. return res;
  184. }
  185. public bool SyncMaterInfo(List<FJSyncMaterInfoResponseItem> ResData)
  186. {
  187. foreach (var item in ResData)
  188. {
  189. if (_materrepository.IsAny(p => p.Code == item.MatCode))
  190. {
  191. _materrepository.UpdateModelColumns(p => new fjBaseMater() { IsHold = item.IsHold, HoldDuration = item.HoldDuration },
  192. p => p.Code == item.MatCode);
  193. }
  194. else
  195. {
  196. var model = _mapper.Map<fjBaseMater>(item);
  197. _materrepository.Insert(model);
  198. }
  199. }
  200. return true;
  201. }
  202. public bool SyncMachineInfo(List<SyncMachineInfoResponseItem> ResData)
  203. {
  204. foreach (var item in ResData)
  205. {
  206. if (_basemachinforepository.IsAny(p => p.MachNo == item.MacCode))
  207. {
  208. _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { GrpCode = item.MacGroup, Direction = item.Direction,Station = item.LocCode,EditTime = DateTime.Now },
  209. p => p.MachNo == item.MacCode);
  210. }
  211. else
  212. {
  213. var model = _mapper.Map<BillMachinfo>(item);
  214. _basemachinforepository.Insert(model);
  215. }
  216. }
  217. return true;
  218. }
  219. /// <summary>
  220. /// 帘线工单信息传输
  221. /// </summary>
  222. /// <param name="reqDto"></param>
  223. /// <returns></returns>
  224. public SRes CurtainProductionOrder(CurtainProductionOrderRequest reqDto)
  225. {
  226. var res = new SRes();
  227. var doc = _billdocrepository.GetSingle(p => p.DocsNo == reqDto.BillCode);
  228. if (doc == null)
  229. {
  230. doc = new BillDocsinfo();
  231. doc.WarehouseId = 0;
  232. doc.ReqNo = reqDto.BillCode;
  233. doc.DocsNo = reqDto.BillCode;
  234. doc.TypeNum = DocType.DocType_FJ_CurtainProduction.GetHashCode();
  235. doc.StateNum = DocState.DocState_Create.GetHashCode();
  236. doc.JsonContent = JsonConvert.SerializeObject(reqDto);
  237. doc.DownQty = 1;
  238. doc.IsStop = 0;
  239. var docinsert = _billdocrepository.Insert(doc);
  240. if (!docinsert)
  241. {
  242. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  243. res.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  244. return res;
  245. }
  246. }
  247. _basemachinforepository.UpdateModelColumns(p => new BillMachinfo() { BillCode = reqDto.BillCode, WorkOrder = reqDto.WorkOrder, PlanQty = reqDto.PlanQty, EditTime = DateTime.Now }, p => reqDto.WbList.Contains(p.MachNo));
  248. return res;
  249. }
  250. /// <summary>
  251. /// 工单启动验证
  252. /// </summary>
  253. /// <param name="reqDto"></param>
  254. /// <returns></returns>
  255. public SRes CurtainOrderStartCheck(CurtainOrderStartCheckRequest reqDto)
  256. {
  257. var res = new SRes();
  258. var wetStack = _billBominfoRepository.GetSingle(p => p.BillCode == reqDto.BillCode);
  259. if (wetStack == null)
  260. {
  261. res.ResCode = 0;
  262. res.ResMsg = reqDto.BillCode + "没有配置垛型信息,请先配置垛型";
  263. return res;
  264. }
  265. return res;
  266. }
  267. /// <summary>
  268. /// 湿拉工字轮/芯股信息传输接口
  269. /// </summary>
  270. /// <param name="reqDto"></param>
  271. /// <returns></returns>
  272. public SRes SpoolMaterialInfoTrans(SpoolMaterialInfoTransRequest reqDto)
  273. {
  274. var res = new SRes();
  275. var container = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.SpoolCode);
  276. if (container == null)
  277. {
  278. var insertcon = new BaseContinfo()
  279. {
  280. ContBarCode = reqDto.SpoolCode,
  281. Name = reqDto.SpoolCode,
  282. TypeCode = ContainerType.ContainerType_Spool.ToString(),
  283. PrintQty = 1,
  284. IsStop = 0,
  285. WarehouseId = 0,
  286. WeightQty = 0,
  287. AddWho = "wms",
  288. AddTime = DateTime.Now
  289. };
  290. //新加载具信息
  291. if (!_baseContinfo.Insert(insertcon))
  292. {
  293. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  294. res.ResMsg = "工字轮载具初始化失败";
  295. return res;
  296. }
  297. }
  298. var mater = _basematerrepository.GetSingle(p => p.Code == reqDto.MatCode);
  299. if (mater == null)
  300. {
  301. res.ResCode = ResponseStatusCodeEnum.MaterInfoNotExist.GetHashCode();
  302. res.ResMsg = ResponseStatusCodeEnum.MaterInfoNotExist.GetDescription();
  303. return res;
  304. }
  305. BillSpoolTrans billSpoolTrans = new BillSpoolTrans();
  306. billSpoolTrans.ConBarCode = reqDto.SpoolCode;
  307. billSpoolTrans.BillCode = reqDto.BillCode;
  308. billSpoolTrans.WorkOrder = reqDto.WorkOrder;
  309. billSpoolTrans.AddTime = DateTime.Now;
  310. var stock = _billInvnowrepository.GetSingle(p => p.ContGrpBarCode == reqDto.SpoolCode);
  311. if (stock != null && stock.InvStateCode == InvState.InvEcecState_In.ToString())
  312. {
  313. billSpoolTrans.ErrType = 1;
  314. billSpoolTrans.Memo = "该工字轮条码号已在库中,请检查RFID号是否重复";
  315. }
  316. if (stock != null && stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
  317. {
  318. billSpoolTrans.ErrType = 1;
  319. billSpoolTrans.Memo = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
  320. }
  321. //条码验证
  322. var barstock = _billInvnowrepository.GetSingle(p => p.InvBarCode == reqDto.MatBarCode);
  323. if (barstock != null && barstock.InvStateCode == InvState.InvEcecState_In.ToString())
  324. {
  325. billSpoolTrans.ErrType = 1;
  326. billSpoolTrans.Memo = "该材料号已在库中,请检查是否重复";
  327. }
  328. if (barstock != null && barstock.ContGrpBarCode != reqDto.SpoolCode)
  329. {
  330. billSpoolTrans.ErrType = 1;
  331. billSpoolTrans.Memo = reqDto.MatBarCode + "该材料号已经绑定" + barstock.ContGrpBarCode + ",请检查是否重复";
  332. }
  333. var barinfo = _billInvinitrepository.GetSingle(p => p.InvBarCode == reqDto.MatBarCode);
  334. if (barinfo == null)
  335. {
  336. barinfo = new BillInvinit()
  337. {
  338. InvBarCode = reqDto.MatBarCode,
  339. WarehouseId = 0,
  340. ContGrpId = IdFactory.NewId(),
  341. ContGrpBarCode = reqDto.SpoolCode,
  342. ExecStateCode = InvLockState.InvState_Normal.ToString(),
  343. ExecDocsNo = reqDto.WorkOrder,
  344. ExecDocsRowNo = reqDto.MatBarCode,
  345. ExecDocsTypeCode = DocType.DocType_HJ_CopperProductStockIn.GetHashCode().ToString(),
  346. InvInOut = InvInOutType.In.GetHashCode(),
  347. ExecWho = "MES",
  348. EditTime = DateTime.Now,
  349. InvStateCode = InvState.InvEcecState_BuildUp.ToString(),
  350. InDocsNo = reqDto.BillCode,
  351. InDocsRowNo = reqDto.MatBarCode,
  352. SuppCode = "",
  353. MatId = mater.Id,
  354. MatCode = mater.Code,
  355. MatName = mater.Name,
  356. LengthQty = reqDto.Length,
  357. TareWQty = reqDto.Weight,
  358. ProductTime = reqDto.ProductDate,
  359. RFIDBarCode = "",
  360. ProductLineNo = "",
  361. Grade = reqDto.Grade,
  362. HWBarCode = "",
  363. HWTypeCode = reqDto.SpoolType,//工字轮类型
  364. IsFast = reqDto.IsFast,
  365. IsRework = false,
  366. CLBarCode = reqDto.MatBarCode,
  367. Size = 1,
  368. AddTime = DateTime.Now,
  369. BackReason = "",
  370. IsBack = reqDto.IsBack,
  371. SilkTypeCode = reqDto.SilkType,
  372. IsCore = reqDto.BusType == "2",
  373. };
  374. _billInvinitrepository.InsertReturnEntity(barinfo);
  375. _billSpoolTransrepository.InsertReturnEntity(billSpoolTrans);
  376. }
  377. return res;
  378. }
  379. /// <summary>
  380. /// 分配分拣库
  381. /// </summary>
  382. /// <returns></returns>
  383. public bool AllocationWarehouseSort(AllocationWarehouseSortRequest reqDto)
  384. {
  385. var list = _billSpoolTransrepository.AsQueryable().Where(p => p.WarehouseSort == 0).Take(reqDto.TaskCount).ToList();
  386. foreach (var item in list)
  387. {
  388. var maclist = _basemachinforepository.AsQueryable().Where(p => p.WorkOrder == item.WorkOrder);
  389. var warelist = maclist.Select(p => p.WarehouseCode).Distinct();
  390. if (!warelist.Any())
  391. {
  392. _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans()
  393. {
  394. ErrType = 1,
  395. ErrMsg = "没有配置机台信息",
  396. EditTime = DateTime.Now
  397. }, p => p.ConBarCode == item.ConBarCode);
  398. }
  399. else if (warelist.Count() == 1)
  400. {
  401. int sort = int.Parse(warelist.First().Substring(0, 1));
  402. _billSpoolTransrepository.UpdateModelColumns(p => new BillSpoolTrans()
  403. {
  404. WarehouseSort = sort,
  405. Direct = warelist.First().Substring(1, 1),
  406. EditTime = DateTime.Now
  407. }, p => p.ConBarCode == item.ConBarCode);
  408. }
  409. else
  410. {
  411. var waretemplist = maclist.Select(p => new { p.WarehouseCode,p.WorkOrder,p.BillCode, p.PlanQty }).Distinct();
  412. var warehouselist = _basewarehouserepository.GetList().Select(p => p.Code);
  413. foreach (var warehouse in warehouselist)
  414. {
  415. var stackdetaillist = _billBomsetinfoRepository.AsQueryable().Where(p => p.WarehouseCode == warehouse);
  416. getMatProport(item.MatCode, warehouse);
  417. }
  418. //根据垛型及库存比例分配
  419. //找出该物料类型在每个库所要求的所有量
  420. //找出该物料库存在当前库所有
  421. }
  422. }
  423. return true;
  424. }
  425. /// <summary>
  426. /// 二次扫码分配输送地址
  427. /// </summary>
  428. /// <param name="reqDto"></param>
  429. /// <returns></returns>
  430. public SRes AllocationConveyorSort(AllocationConveyorSortRequest reqDto)
  431. {
  432. var res = new SRes();
  433. var baritem = _billSpoolTransrepository.GetFirst(p => p.ConBarCode == reqDto.BarCode);
  434. //判断当前库是否有mix垛型
  435. var mixrow = _billBomsetinfoRepository.AsQueryable().Where(p => p.IsMixRow == 1 && p.WarehouseCode == baritem.WarehouseCode);
  436. if (mixrow == null || !mixrow.Any())
  437. {
  438. var matcodelist = _billBomsetinfoRepository.AsQueryable().Where(p => p.WarehouseCode == baritem.WarehouseCode);
  439. var curmatrate = matcodelist.Where(p => p.MatCode == baritem.MatCode).Count() / matcodelist.Count();
  440. //需要的总量
  441. }
  442. else
  443. {
  444. }
  445. var translist = _billSpoolTransrepository.AsQueryable().Where(p => p.WarehouseCode == baritem.WarehouseCode).ToList();
  446. foreach (var item in translist.GroupBy(p=>p.ConveyorSort))
  447. {
  448. }
  449. return res;
  450. }
  451. public decimal getMatProport(string matcode, string warehousecode)
  452. {
  453. //计算此仓库所有该物料的量
  454. //每的单子(每盘的数量)*预计盘数
  455. var stackdetaillist = _billBomsetinfoRepository.AsQueryable().Where(p => p.WarehouseCode == warehousecode);
  456. return 0;
  457. }
  458. /// <summary>
  459. /// 帘线领料出库
  460. /// </summary>
  461. /// <param name="reqDto"></param>
  462. /// <returns></returns>
  463. public SRes CurtainProductionStockOut(CurtainProductionStockOutRequest reqDto)
  464. {
  465. var res = new SRes();
  466. var warehosue = _baseWareHouserepository.GetSingle(p => p.Code == reqDto.WareCode);
  467. if (warehosue == null)
  468. {
  469. res.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
  470. res.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
  471. return res;
  472. }
  473. var doc = _docrepository.GetSingle(p => p.DocNo == reqDto.BillCode);
  474. if (doc == null)
  475. {
  476. doc = new fjBillDocument();
  477. doc.WarehouseId = warehosue.Id;
  478. //保存单据信息
  479. doc.ReqNo = reqDto.ReqId;
  480. doc.DocNo = reqDto.BillCode;
  481. doc.TypeCode = DocType.DocType_FJ_CurtainProductionStockOut.ToString();
  482. doc.StateCode = DocState.DocState_Create.ToString();
  483. doc.ContentJson = JsonConvert.SerializeObject(reqDto);
  484. doc.DownQty = 1;
  485. var docinsert = _docrepository.Insert(doc);
  486. if (!docinsert)
  487. {
  488. res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
  489. res.ResMsg = ResponseStatusCodeEnum.ErrParam.GetDescription();
  490. return res;
  491. }
  492. }
  493. return res;
  494. }
  495. public SRes ProductionBack(FjProductionBackRequest reqDto)
  496. {
  497. var res = new SRes();
  498. return res;
  499. }
  500. public SRes ProductionLeftFeedBack(string doccode)
  501. {
  502. var res = new SRes();
  503. return res;
  504. }
  505. public SRes ErrorMaterialStockOut(FjErrorMaterialStockOutRequest reqDto)
  506. {
  507. var res = new SRes();
  508. return res;
  509. }
  510. public SRes BGradeMaterialStockOut(BGradeMaterialStockOutRequest reqDto)
  511. {
  512. var res = new SRes();
  513. return res;
  514. }
  515. public SRes StockChange(FjStockChangeRequest reqDto)
  516. {
  517. var res = new SRes();
  518. return res;
  519. }
  520. public SRes ManualBuildStockTrans(ManualBuildStockTransRequest reqDto)
  521. {
  522. var res = new SRes();
  523. return res;
  524. }
  525. public SRes BomInfoTrans(BomInfoTransRequest reqDto)
  526. {
  527. var res = new SRes();
  528. return res;
  529. }
  530. }
  531. }