public async Task <ActionResult> SapCooperSendOut(string SapMOrderNumber, string SapMOrderProcessNumber) { var param = new SapCooperSendInput { SapMOrderNumber = SapMOrderNumber, SapMOrderProcessNumber = SapMOrderProcessNumber, Direction = SapCooperSendInput.SapCooperSendDirection.SendOut }; bool result = await this.cooperateAppService.SapCooperSendOut(param); return(View("CooperateTest", (object)result.ToString())); }
public async Task <bool> ReceiveHandOverBillLines(int billId, int[] lineIds) { var currentUser = await this.GetCurrentUserAsync(); List <int> receivedBillLineIds = new List <int>(); //接口执行成功的交接单行 List <dynamic> createCooperateParamList = new List <dynamic>(); //交接单行外协送出接口相关参数列表 using (var uow = this.UnitOfWorkManager.Begin()) { var bill = await this._handOverBillRepository.GetAll() .Include(b => b.BillLines) .FirstAsync(b => b.Id == billId); if (bill.BillState != HandOverBillState.Published) { throw new UserFriendlyException($"交接单[{billId}]状态为[{bill.BillState.GetDescription()}],不可执行接收操作!"); } var billLines = bill.BillLines.Where(l => lineIds.Contains(l.Id)).ToList(); foreach (var line in billLines) { if (line.LineState != HandOverBillLineState.Pending) { continue; } if (line.OrderInfo.SourceName == OrderSourceNames.SAP) { //SAP订单交接行, 构建对应接口参数 if (line.IsSapSendOut() && !line.NextProcess.IsEmpty()) { createCooperateParamList.Add(new { LineId = line.Id, CreateErpOrdersInput = new SapCooperSendInput { SapMOrderNumber = line.OrderInfo.OrderNumber, SapMOrderProcessNumber = line.NextProcess.ProcessNumber, /*SAP送出时,执行下个道序相关接口*/ Direction = SapCooperSendInput.SapCooperSendDirection.SendOut, HandOverQuantity = line.HandOverQuantity, } }); } //else if (line.IsSapSendBack()) //{ // createCooperateParamList.Add(new // { // LineId = line.Id, // CreateErpOrdersInput = new SapCooperSendInput // { // SapMOrderNumber = line.OrderInfo.OrderNumber, // SapMOrderProcessNumber = line.CurrentProcess.ProcessNumber, /*SAP送回时,执行当前道序(以及之前所有本次外协道序)相关接口*/ // Direction = SapCooperSendInput.SapCooperSendDirection.SendBack, // HandOverQuantity = line.HandOverQuantity, // } // }); //} else { //直接标识为成功 receivedBillLineIds.Add(line.Id); } } else { //非SAP订单交接行, 直接标识为成功 receivedBillLineIds.Add(line.Id); } } uow.Complete(); } //执行SAP外协接口(送出/送回) foreach (var param in createCooperateParamList) { try { bool result = true; SapCooperSendInput cooperInput = param.CreateErpOrdersInput; if (cooperInput.Direction == SapCooperSendInput.SapCooperSendDirection.SendOut) { result = await _cooperateAppService.SapCooperSendOut(cooperInput); } //else if (cooperInput.Direction == SapCooperSendInput.SapCooperSendDirection.SendBack) //{ // result = await _cooperateAppService.SapCooperSendBack(cooperInput); //} if (result) { receivedBillLineIds.Add(param.LineId); } } catch (Exception ex) { //确保其中任意一个交接行执行失败时,不想影响后续交接行的继续执行 Logger.Error("交接单接收失败!", ex); } } //更新接收成功行状态 using (var uow = this.UnitOfWorkManager.Begin()) { var bill = await this._handOverBillRepository.GetAll() .Include(b => b.BillLines) .FirstAsync(b => b.Id == billId); var billLines = bill.BillLines.Where(l => receivedBillLineIds.Contains(l.Id)).ToList(); foreach (var line in billLines) { //外协成功,更新交接单行状态 line.LineState = HandOverBillLineState.Received; line.OperatorUserId = currentUser.Id; line.OperatorUserName = currentUser.Surname; line.OperatorDate = DateTime.Now; await this._handOverBillLineRepository.UpdateAsync(line); } await this.CurrentUnitOfWork.SaveChangesAsync(); //提交一次UOW,刷新bill数据 bool isAllComplete = await this.checkBillCompleted(bill); uow.Complete(); return(isAllComplete); } }