using log4net; using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFSoft.U8.Framework.BizBase; using UFSoft.U8.U8M.BFDispatcher; using UFSoft.U8.U8M.Common; using UFSoft.U8.U8M.DAC; using UFSoft.U8.U8M.DOSchema.SF; using UFSoft.U8.U8M.Exceptions; // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming // ReSharper disable StringLiteralTypo namespace UFIDA.U8.Framework.Api.ControlObject.U8M { /// /// 报工单 /// public class MoRoutingBill : IBaseBF { //日志组件 private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); /// /// 获取空数据源 /// /// /// /// private static async Task GetEmptyDs(IContextContainer callar, string cCardNum) { try { var ds = SFExecutor.BFMoRoutingBill_LoadData("LoadFirst", 0, "", cCardNum, callar); #region 清除数据集里的数据 if (ds.Tables.Contains("fc_MoRoutingBilldetail_ExtraDefine")) { ds.Tables["fc_MoRoutingBilldetail_ExtraDefine"].Clear(); } if (ds.Tables.Contains("fc_MoRoutingBill_ExtraDefine")) { ds.Tables["fc_MoRoutingBill_ExtraDefine"].Clear(); } ds.MoRoutingBillRes.Clear(); ds.MoRoutingBillDetail.Clear(); ds.MoRoutingBill.Clear(); #endregion return ds; } catch { await Task.Delay(1); throw; } } /// /// 填充DataSet数据 /// /// /// /// /// /// private static async Task GetVoucherDs(IContextContainer callar, string cCardNum, AutoDocNoGenerateParam docNoParam, Dictionary input) { var ds = await GetEmptyDs(callar, cCardNum); var head = ds.MoRoutingBill.NewMoRoutingBillRow(); ds.MoRoutingBill.AddMoRoutingBillRow(head); var docNo = U8MCommonExecutor.BFVoucher_GetVoucherID(cCardNum, docNoParam.Paramaters, false, callar); var be = new UFSoft.U8.SF.BE.MoRoutingBill(ds); be.cVouchType = cCardNum; be.cVouchCode = ""; var beHead = new BEHelper(be); beHead.SetValue(input); if (string.IsNullOrWhiteSpace(be.cVouchCode)) { be.cVouchCode = docNo; } var bodys = input["body"] as List> ?? $"{input["body"]}".ToObject>>(); for (var i = 0; i < bodys.Count; i++) { var body = bodys[i]; var detail = be.MoRoutingBillDetails[i]; var beBody = new BEHelper(detail); beBody.SetValue(body); } ds = (MoRoutingBillDs)be.DataObject; return ds; } /// /// 保存单据 /// /// /// /// /// /// public async Task> Save(BaseLogin baseLogin, string cCardNum, Dictionary input) { try { var callar = baseLogin.callar; var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum) { IsCurrentDocNoByHand = false }; var ds = GetVoucherDs(callar, cCardNum, docNoParam, input); if (ds == null) { throw new Exception("未能构建数据集"); } _logInfo.Debug($"单据编码:{cCardNum},开始保存"); var id = SFExecutor.BFMoRoutingBill_MoRoutingBillSave(ds.Result, docNoParam, callar); _logInfo.Debug($"单据编码:{cCardNum},保存完成,id:{id}"); return new BaseResult { bSuccess = true, message = "新增成功", result = $"{id}" }; } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (TargetInvocationException ex) { if (ex.InnerException is U8MReferenceBENotExistException) { _logInfo.Error(ex.InnerException.Message, ex.InnerException); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.InnerException.Message }; } else { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } } catch (Exception ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } } /// /// 保存单据(批量) /// /// /// /// /// public async Task> Save(BaseLogin baseLogin, string cCardNum, List> inputs) { var idList = new List(); try { foreach (var input in inputs) { var iRes = await Save(baseLogin, cCardNum, input); if (!iRes.bSuccess && idList.Count > 0) { await Delete(baseLogin, idList); return iRes; } else if (!iRes.bSuccess) { return iRes; } idList.Add(Convert.ToInt32(iRes.result)); } return new BaseResult { bSuccess = true, message = "新增成功", result = $"{string.Join(",", idList)}" }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } } /// /// 删除单据(单号)(批量) /// /// /// /// /// /// public async Task> Delete(BaseLogin baseLogin, string cCardNum, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要删除的数据"); var dataReader = SimpleDACObject.ExecuteReader($"SELECT MID FROM dbo.fc_MoRoutingBill WHERE cVouchCode IN ('{string.Join("','", inputs)}') AND cVouchType='{cCardNum}'"); var newInput = new List(); while (dataReader.Read()) { newInput.Add(int.Parse($"{dataReader[0]}")); } return await Delete(baseLogin, newInput); } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; } } /// /// 删除单据(ID)(批量) /// /// /// /// /// public async Task> Delete(BaseLogin baseLogin, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要删除的数据"); var ht = new Hashtable(); foreach (var input in inputs) { ht.Add(input, input); } var id = SFExecutor.BFMoRoutingBill_MoRoutingBillBatchDelete(ht, baseLogin.callar); return new BaseResult { bSuccess = true, message = "删除成功", result = $"{id}" }; } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; } } /// /// 审核单据(单号)(批量) /// /// /// /// /// /// public async Task> Verify(BaseLogin baseLogin, string cCardNum, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要审核的数据"); var dataReader = SimpleDACObject.ExecuteReader($"SELECT MID FROM dbo.fc_MoRoutingBill WHERE cVouchCode IN ('{string.Join("','", inputs)}') AND cVouchType='{cCardNum}'"); var newInput = new List(); while (dataReader.Read()) { newInput.Add(int.Parse($"{dataReader[0]}")); } return await Verify(baseLogin, newInput); } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; } } /// /// 审核单据(ID)(批量) /// /// /// /// /// public async Task> Verify(BaseLogin baseLogin, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要审核的数据"); var ht = new Dictionary(); foreach (var input in inputs) { ht.Add(input, $"{input}"); } var id = SFExecutor.BFMoRoutingBill_Verify(ht, baseLogin.callar); return new BaseResult { bSuccess = true, message = "审核成功", result = $"{id}" }; } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; } } /// /// 弃审单据(单号)(批量) /// /// /// /// /// /// public async Task> UnVerify(BaseLogin baseLogin, string cCardNum, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要弃审的数据"); var dataReader = SimpleDACObject.ExecuteReader($"SELECT MID FROM dbo.fc_MoRoutingBill WHERE cVouchCode IN ('{string.Join("','", inputs)}') AND cVouchType='{cCardNum}'"); var newInput = new List(); while (dataReader.Read()) { newInput.Add(int.Parse($"{dataReader[0]}")); } return await UnVerify(baseLogin, newInput); } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; } } /// /// 弃审单据(ID)(批量) /// /// /// /// /// public async Task> UnVerify(BaseLogin baseLogin, List inputs) { try { if (inputs == null || inputs.Count <= 0) throw new Exception("没有需要弃审的数据"); var ht = new Dictionary(); foreach (var input in inputs) { ht.Add(input, $"{input}"); } var id = SFExecutor.BFMoRoutingBill_UnVerify(ht, baseLogin.callar); return new BaseResult { bSuccess = true, message = "弃审成功", result = $"{id}" }; } catch (U8MReferenceBENotExistException ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); await Task.Delay(1); return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; } } } }