ERPServer.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. using Microsoft.Extensions.Logging;
  2. using NXWMS.DataAccess.Entity;
  3. using NXWMS.Model.AppModels.Result.ERP;
  4. using NXWMS.Model.AppModels.Result.Instock;
  5. using NXWMS.Model.Common;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. namespace NXWMS.Service.ERP
  11. {
  12. [AutoInject(typeof(IService.NXWMS.IERPServer), InjectType.Scope)]
  13. public class ERPServer : IService.NXWMS.IERPServer
  14. {
  15. private ErpHttpClient _client;
  16. public ERPServer(ErpHttpClient httpClient)
  17. {
  18. this._client = httpClient;
  19. }
  20. #region 基础信息
  21. public async Task<IEnumerable<BAS_CUSTOMER>> GetERPCustomersAsync()
  22. {
  23. const string Url = "/api/Customer/Query";
  24. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Customer>>(Url, new NX.ERP.Model.Request.Customer());
  25. return list.ConvertAll(m =>
  26. {
  27. return new BAS_CUSTOMER()
  28. {
  29. CUSTOMER_CODE = m.CustomerCode,
  30. CUSTOMER_NAME = m.CustomerName,
  31. CONTRACT = m.Contract,
  32. CONTRACT_PHONE = m.ContractPhone,
  33. ADDRESS = m.Address,
  34. USED_FLAG = 1,
  35. DEL_FLAG = 0
  36. };
  37. });
  38. }
  39. public async Task<IEnumerable<BAS_BIN>> GetERPERPpBinsAsync()
  40. {
  41. const string Url = "/api/Position/Query";
  42. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Bin>>(Url, new NX.ERP.Model.Request.Bin());
  43. return list.ConvertAll(m =>
  44. {
  45. return new BAS_BIN()
  46. {
  47. BIN_CODE = m.BinCode,
  48. BIN_NAME = m.BinName,
  49. WAREHOUSE_CODE = m.WarehouseCode,
  50. REGION_CODE = m.RegionCode,
  51. AREA_CODE = "0",
  52. SHELF_CODE = "-1",
  53. USED_FLAG = 1,
  54. DEL_FLAG = 0
  55. };
  56. });
  57. }
  58. public async Task<IEnumerable<BAS_MATERIEL>> GetERPMaterielsAsync()
  59. {
  60. const string Url = "/api/Material/Query";
  61. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Material>>(Url, new NX.ERP.Model.Request.Material());
  62. return list.ConvertAll(m =>
  63. {
  64. return new BAS_MATERIEL()
  65. {
  66. MATERIEL_CODE = m.MaterialCode,
  67. MATERIEL_NAME = m.MaterialName,
  68. MAX_STOCK = m.MaxStock,
  69. MIN_STOCK = m.MinStock,
  70. UNIT_CODE = m.UnitCode,
  71. MATERIEL_TYPE = m.MaterialTypeCode,
  72. SPECS_MODEL=m.SpecsModel,
  73. USED_FLAG = 1,
  74. DEL_FLAG = 0
  75. };
  76. });
  77. }
  78. public async Task<IEnumerable<BAS_MATERIEL_TYPE>> GetERPMaterielTypesAsync()
  79. {
  80. const string Url = "/api/MaterialType/Query";
  81. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.MaterialType>>(Url, new NX.ERP.Model.Request.MaterialType());
  82. return list.ConvertAll(m =>
  83. {
  84. return new BAS_MATERIEL_TYPE()
  85. {
  86. MATERIEL_TYPE_CODE = m.MaterialTypeCode,
  87. MATERIEL_TYPE_NAME = m.MaterialTypeName,
  88. USED_FLAG = 1,
  89. DEL_FLAG = 0
  90. };
  91. });
  92. }
  93. public async Task<IEnumerable<BAS_SUPPLIER>> GetERPSuppliersAsync()
  94. {
  95. const string Url = "/api/Supplier/Query";
  96. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Supplier>>(Url, new NX.ERP.Model.Request.Supplier());
  97. return list.ConvertAll(m =>
  98. {
  99. return new BAS_SUPPLIER()
  100. {
  101. SUPPLIER_CODE = m.SupplierCode,
  102. SUPPLIER_NAME = m.SupplierName,
  103. CONTRACT = m.Contract,
  104. CONTRACT_PHONE = m.ContractPhone,
  105. USED_FLAG = 1,
  106. DEL_FLAG = 0
  107. };
  108. });
  109. }
  110. public async Task<IEnumerable<BAS_UNIT>> GetERPUnitsAsync()
  111. {
  112. const string Url = "/api/Unit/Query";
  113. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Unit>>(Url, new NX.ERP.Model.Request.Unit());
  114. return list.ConvertAll(m =>
  115. {
  116. return new BAS_UNIT()
  117. {
  118. UNIT_CODE = m.UnitCode,
  119. UNIT_NAME = m.UnitName,
  120. USED_FLAG = 1,
  121. DEL_FLAG = 0
  122. };
  123. });
  124. }
  125. public async Task<IEnumerable<BAS_WAREHOUSE>> GetERPWareHousesAsync()
  126. {
  127. const string Url = "/api/WareHouse/Query";
  128. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Warehouse>>(Url, new NX.ERP.Model.Request.Warehouse());
  129. return list.ConvertAll(m =>
  130. {
  131. return new BAS_WAREHOUSE()
  132. {
  133. WAREHOUSE_CODE = m.WarehouseCode,
  134. WAREHOUSE_NAME = m.WarehouseName,
  135. USED_FLAG = 1,
  136. DEL_FLAG = 0
  137. };
  138. });
  139. }
  140. #endregion
  141. #region 上游单据
  142. public async Task<IEnumerable<(WMS_IN_ARRIVAL, IEnumerable<WMS_IN_ARRIVAL_DTL>)>> GetArrival(string Code = null)
  143. {
  144. const string Url = "/api/Arrival/Query";
  145. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.Purchase.Arrival>>(Url, new NX.ERP.Model.Request.Arrival() { ArrivalNo = Code });
  146. var result = new List<(WMS_IN_ARRIVAL, IEnumerable<WMS_IN_ARRIVAL_DTL>)>();
  147. foreach (var item in list)
  148. {
  149. var arr = new WMS_IN_ARRIVAL()
  150. {
  151. ARRIVAL_NO = item.ArrivalNo,
  152. ARRIVAL_TYPE = "1",
  153. ARRIVAL_STATUS = 0,
  154. ERP_ID = item.ArrivalNo,
  155. };
  156. var detail = item.ArrivalDtlLst.ToList().ConvertAll(m =>
  157. {
  158. return new WMS_IN_ARRIVAL_DTL()
  159. {
  160. MATERIEL_CODE = m.MaterialCode,
  161. BATCH_NO = m.BatchNo,
  162. ARRIVAL_QTY = m.Qty,
  163. SUPPLIER_CODE = item.SupplierCode,
  164. RECEIPT_QTY = m.RealQuantity,
  165. ERP_DTL_ID = m.ArrivalDtlId
  166. };
  167. });
  168. result.Add((arr, detail));
  169. }
  170. return result;
  171. }
  172. public async Task<IDictionary<WMS_OUT_INVOICE, IEnumerable<WMS_OUT_INVOICE_DTL>>> GetOutInvoice()
  173. {
  174. const string Url = "/api/ProductOrder/QueryDetails";
  175. var list = await this._client.HttpPostAsync<List<NX.ERP.Model.MOM.MomDetail>>(Url, new NX.ERP.Model.Request.MomOrder());
  176. var result = new Dictionary<WMS_OUT_INVOICE, IEnumerable<WMS_OUT_INVOICE_DTL>>();
  177. foreach (var item in list)
  178. {
  179. var arr = new WMS_OUT_INVOICE()
  180. {
  181. INVOICE_NO = item.ProductOrderNo,
  182. INVOICE_TYPE = "2",
  183. INVOICE_STATUS = 0,
  184. DATA_VERSION = 0,
  185. ERP_ID = item.ProductOrderNo,
  186. };
  187. var detail = item.ProductAllocateOrderLst.ToList().ConvertAll(m =>
  188. {
  189. return new WMS_OUT_INVOICE_DTL()
  190. {
  191. MATERIEL_CODE = m.MaterialCode,
  192. INVOICE_DEMAND_QTY = m.Qty,
  193. INVOICE_DTL_STATUS = 0,
  194. INSPECTION_RESULT = "OK",
  195. ERP_DTL_ID = m.AllocateId,
  196. };
  197. });
  198. result.Add(arr, detail);
  199. }
  200. return result;
  201. }
  202. #endregion
  203. #region 出库
  204. #endregion
  205. #region 入库
  206. public string MaterialStoreOut(NX.ERP.Model.Request.MaterialStoreOut materialStore)
  207. {
  208. return "";
  209. }
  210. public async Task<int> PuStockIn(Inbound inbound)
  211. {
  212. var _inbound = new NX.ERP.BLL.Model.Inbound()
  213. {
  214. InboundDate = inbound.InboundDate,
  215. InboundNo = inbound.InboundNo,
  216. InboundType = NX.ERP.BLL.Model.InboundType.PurchaseIn,
  217. SourceName = inbound.SourceName,
  218. SourceNo = inbound.SourceNo,
  219. WarehouseCode = inbound.WarehouseCode,
  220. InboundDtlLst = inbound.InboundDetail.ToList().ConvertAll(m =>
  221. {
  222. return new NX.ERP.BLL.Model.InboundDetail()
  223. {
  224. BinCode = m.BinCode,
  225. MaterialCode = m.MaterialCode,
  226. Qty = m.Qty,
  227. SourceDtlId = m.SourceDtlId
  228. };
  229. })
  230. };
  231. const string Url = "/api/Store/StoreIn";
  232. var list = await this._client.HttpPostAsync<NX.ERP.BLL.Model.StoreResult>(Url, _inbound);
  233. return list.ID;
  234. }
  235. //public Task<string> PuStockIn(WmsInReceiptResult wmsInReceipt)
  236. //{
  237. //var _storeIn = new NX.ERP.BLL.Model.Inbound();
  238. //_storeIn.InboundNo = wmsInReceipt.RECEIPT_NO;
  239. //_storeIn.InboundDate = wmsInReceipt.RECEIPT_TIME;
  240. //_storeIn.InboundType =NX.ERP.BLL.Model.InboundType.productIn;
  241. //_storeIn.SourceName = "采购到货单";
  242. //_storeIn.WarehouseCode = "2";
  243. //_storeIn.SourceNo = wmsInReceipt.ARRIVAL_NO;
  244. //_storeIn.InboundDtlLst = wmsInReceipt.WmsInReceiptDtlList.ConvertAll(m => {
  245. // return new NX.ERP.BLL.Model.InboundDetail
  246. // {
  247. // BinCode=m.b
  248. // };
  249. //});
  250. //}
  251. #endregion
  252. }
  253. }