using ICS.WCF.Base; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.ServiceModel; using System.Text; using System.Threading.Tasks; //using UFIDA.ISV.ApproveCompRpt; //using UFIDA.ISV.CloseCompRptSV; //using UFIDA.ISV.DeleteCompRptSV; using UFSoft.UBF.Service; using UFSoft.UBF.Util.Context; using www.ufida.org.EntityData; namespace UFIDA.ISV.CreateCompRpt { public class CustCreateCompRptSrvSub { /// /// 创建完工报告 /// /// /// /// /// /// /// public OperationResult CustCreateCompRpt(List CompRptList)//List { #region 入口日志 StringBuilder begionstr = new StringBuilder(); begionstr.AppendLine("日志记录开始"); foreach (var item in CompRptList) { bool isLotCheck = Appconfig.WHLotCheckState(item.WHCode, item.OrgCode); if (isLotCheck == false) { item.Batch = ""; } begionstr.AppendLine("工单:" + item.moCode); begionstr.AppendLine("数量:" + item.qty); begionstr.AppendLine("单据类型:" + item.docTypeCode); begionstr.AppendLine("操作员:" + item.Recer); begionstr.AppendLine("仓库:" + item.WHCode); begionstr.AppendLine("部门:" + item.RecDept); begionstr.AppendLine("供应商编码:" + item.VenderCode); begionstr.AppendLine("供应商名称:" + item.VenderName); begionstr.AppendLine("组织编码:" + item.OrgCode); begionstr.AppendLine("物料编码:" + item.ItemCode); begionstr.AppendLine("传入批次:" + item.Batch); begionstr.AppendLine("备注:" + item.Memo); } Appconfig.WriteLogFile(begionstr.ToString(), "创建完工报告"); #endregion #region 服务调用框架结构 //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient UFIDAU9ISVMOICreateCompRptSrvClient client = new UFIDAU9ISVMOICreateCompRptSrvClient(); //服务返回结果 UFIDAU9ISVMOCompRptKeyDTOData[] returnItem; //返回异常信息,目前还没有使用此属性 UFSoft.UBF.Exceptions.MessageBase[] returnMsg; //上下文信息 object context; //传入 参数 UFIDAU9ISVMOCompRptDTOData[] compRptDTOs; try { OperationResult result = new OperationResult(); if (CompRptList == null || CompRptList.Count == 0) { result.MESSAGE = "请传入数据"; result.IsSuccess = false; return result; } string OrgID = ""; string orgsql = @"select ID from Base_Organization where Code='{0}'"; orgsql = string.Format(orgsql, CompRptList[0].OrgCode); DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr()); if (orgdt.Rows.Count != 0) { OrgID = orgdt.Rows[0]["ID"].ToString(); } else { result.MESSAGE = "传入的组织编码有误!"; result.IsSuccess = false; return result; } //给上下文信息赋值 context = CreateContextObj(OrgID); //给传入参数赋值 compRptDTOs = GetDataNew(CompRptList, OrgID); //服务调用 (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue; (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue; returnItem = client.Do(out returnMsg, context, compRptDTOs); result.poheadList = returnItem; StringBuilder str = new StringBuilder(); str.AppendLine("创建完工报告"); foreach (var item in CompRptList) { str.AppendLine("工单:" + item.moCode); str.AppendLine("数量:" + item.qty); str.AppendLine("单据类型:" + item.docTypeCode); str.AppendLine("操作员:" + item.Recer); str.AppendLine("仓库:" + item.WHCode); str.AppendLine("部门:" + item.RecDept); str.AppendLine("组织编码" + item.OrgCode); str.AppendLine("物料编码:" + item.ItemCode); str.AppendLine("传入批次:" + item.Batch); str.AppendLine("备注:" + item.Memo); } str.AppendLine("结果:" + "True"); Appconfig.WriteLogFile(str.ToString(), "创建完工报告"); result.OrgID = OrgID; result.DocNo = returnItem[0].m_docNo; result.IsSuccess = true; result.MESSAGE = "完工报告创建成功"; return result; } catch (Exception ex) { OperationResult result = new OperationResult(); StringBuilder str = new StringBuilder(); str.AppendLine("创建完工报告异常"); //异常信息捕获 //ReturnValue2 value = new ReturnValue2(); result.IsSuccess = false; result.MESSAGE = GetExceptionMessage(ex); foreach (var item in CompRptList) { str.AppendLine("工单:" + item.moCode); str.AppendLine("数量:" + item.qty); str.AppendLine("单据类型:" + item.docTypeCode); str.AppendLine("操作员:" + item.Recer); str.AppendLine("部门:" + item.RecDept); str.AppendLine("仓库:" + item.WHCode); str.AppendLine("物料编码:" + item.ItemCode); str.AppendLine("传入批次:" + item.Batch); str.AppendLine("备注:" + item.Memo); str.AppendLine("错误消息:" + result.MESSAGE); } str.AppendLine("结果:" + "false"); Appconfig.WriteLogFile(str.ToString(), "创建完工报告异常"); //return value; return result; } #endregion } private static UFIDAU9ISVMOCompRptDTOData[] GetDataNew(List CompRptList, string OrgID) { List datas = new List(); List rptrcvlinelist = new List(); foreach (var item in CompRptList) { UFIDAU9ISVMOCompRptDTOData data = new UFIDAU9ISVMOCompRptDTOData(); if (item.qty != 0) { data.m_completeQty = item.qty; data.m_completeQtyCoUOM = item.qty; data.m_completeQtyWhUOM = item.qty; data.m_eligibleQtyCoUOM = item.qty; data.m_reworkingQtyCoUOM = item.qty; } data.m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_org.m_iD = long.Parse(OrgID); long LotMaster = 0; if (!string.IsNullOrWhiteSpace(item.Batch)) { //创建批号 string lotID = ""; UFIDA.ISV.CreateLotMaster.CustCreateLotMaster createLot = new CreateLotMaster.CustCreateLotMaster(); UFIDA.ISV.CreateLotMaster.CustCreateLotMaster.OperationResule result = createLot.CustCreateRCVLotMaster(item.WHCode, item.ItemCode, item.Batch, OrgID, ref lotID); if (result.IsSuccess) { LotMaster = long.Parse(lotID); } else { throw new Exception("批号生成失败,完工报告生成失败!"); } } data.m_docNo = item.DocNO; data.m_completeDocType = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_completeDocType.m_code = item.docTypeCode; data.m_completeDocType.m_iD = GetTypeID(item.docTypeCode, OrgID); data.m_mO = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_mO.m_code = item.moCode; data.m_handlePerson = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_handlePerson.m_code = item.Recer; data.m_handleDept = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_handleDept.m_code = item.RecDept; data.m_rcvWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_rcvWh.m_iD = GetWHID(item.WHCode, OrgID); data.m_completeDate = DateTime.Now; data.m_actualRcvTime = DateTime.Now; List rcvLineList = new List(); UFIDAU9ISVMOCompRptRcvLineDTOData rcvLine = new UFIDAU9ISVMOCompRptRcvLineDTOData(); if (LotMaster != 0) { rcvLine.m_rcvLotNo = item.Batch; rcvLine.m_rcvLotMaster = long.Parse(LotMaster.ToString()); } rcvLine.m_storageType = 4; rcvLine.m_grade = -1; rcvLine.m_element = -1; rcvLine.m_descFlexField = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData(); rcvLine.m_descFlexField.m_privateDescSeg1 = item.Memo; rcvLine.m_descFlexField.m_privateDescSeg2 = item.VenderCode; rcvLine.m_descFlexField.m_privateDescSeg3 = item.VenderName; rcvLineList.Add(rcvLine); data.m_completeRptRcvLines = rcvLineList.ToArray(); datas.Add(data); } return datas.ToArray(); } /// /// 创建完工报告 /// /// /// /// /// /// /// public static ReturnValue2 CustCreateCompRpt_bak20200306(decimal qty, string docTypeCode, string moCode, string Recer, string RecDept)//List { #region 服务调用框架结构 //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient UFIDAU9ISVMOICreateCompRptSrvClient client = new UFIDAU9ISVMOICreateCompRptSrvClient(); //服务返回结果 UFIDAU9ISVMOCompRptKeyDTOData[] returnItem; //返回异常信息,目前还没有使用此属性 UFSoft.UBF.Exceptions.MessageBase[] returnMsg; //上下文信息 object context; //传入 参数 UFIDAU9ISVMOCompRptDTOData[] compRptDTOs; try { //给上下文信息赋值 context = CreateContextObj(""); //给传入参数赋值 compRptDTOs = GetData(qty, docTypeCode, moCode, Recer, RecDept); //服务调用 (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue; (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue; returnItem = client.Do(out returnMsg, context, compRptDTOs); ReturnValue2 value = new ReturnValue2(); value.poheadList = returnItem; StringBuilder str = new StringBuilder(); str.AppendLine("创建完工报告"); str.AppendLine("单号:" + returnItem[0].m_docNo); str.AppendLine("工单:" + moCode); str.AppendLine("数量:" + qty); str.AppendLine("单据类型:" + docTypeCode); str.AppendLine("操作员:" + Recer); str.AppendLine("部门:" + RecDept); str.AppendLine("结果:" + "True"); Appconfig.WriteLogFile(str.ToString(), "创建完工报告"); //使实际入库时间为null foreach (UFIDAU9ISVMOCompRptKeyDTOData data in returnItem) { string sql = @"update MO_CompleteRpt set ActualRcvTime=NULL from MO_CompleteRpt where DocNo='" + data.m_docNo + "'"; DBhlper.Query(sql, Appconfig.GetU9ConnStr()); } return value; } catch (Exception ex) { StringBuilder str = new StringBuilder(); str.AppendLine("创建完工报告"); str.AppendLine("工单:" + moCode); str.AppendLine("数量:" + qty); str.AppendLine("单据类型:" + docTypeCode); str.AppendLine("操作员:" + Recer); str.AppendLine("部门:" + RecDept); str.AppendLine("错误:" + GetExceptionMessage(ex)); str.AppendLine("错误:" + "False"); Appconfig.WriteLogFile(str.ToString(), "创建完工报告"); //异常信息捕获 ReturnValue2 value = new ReturnValue2(); value.Mes = GetExceptionMessage(ex); return value; } #endregion } #region 提取异常信息 /// /// 提取异常信息 /// /// private static string GetExceptionMessage(Exception ex) { string faultMessage = "未知错误,请查看ERP日志!"; System.TimeoutException timeoutEx = ex as System.TimeoutException; if (timeoutEx != null) { faultMessage = "访问服务超时,请修改配置信息!"; } else { FaultException faultEx = ex as FaultException; if (faultEx == null) { faultMessage = ex.Message; } else { ServiceException serviceEx = faultEx.Detail; if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message) && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase)) { // 错误信息在faultEx.Message中,请提取, // 格式为"Fault:料品不能为空,请录入\n 在....." int startIndex = serviceEx.Message.IndexOf(":"); int endIndex = serviceEx.Message.IndexOf("\n"); if (endIndex == -1) endIndex = serviceEx.Message.Length; if (endIndex > 0 && endIndex > startIndex + 1) { faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1); } else { faultMessage = serviceEx.Message; } } } } return faultMessage; } #endregion #region 给上下文信息赋值 /// /// 给上下文信息赋值 /// /// private static ThreadContext CreateContextObj(string OrgID) { // 实例化应用上下文对象 ThreadContext thContext = new ThreadContext(); System.Collections.Generic.Dictionary ns = new Dictionary(); ns.Add("OrgID", OrgID); ns.Add("OrgCode", ConfigurationManager.AppSettings["orgCode"].ToString()); ns.Add("UserID", ConfigurationManager.AppSettings["userID"].ToString()); ns.Add("UserCode", ConfigurationManager.AppSettings["userCode"].ToString()); ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString()); ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString()); ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString()); thContext.nameValueHas = ns; return thContext; } #endregion private static UFIDAU9ISVMOCompRptDTOData[] GetData(decimal qty, string docTypeCode, string moCode, string Recer, string RecDept) { List datas = new List(); UFIDAU9ISVMOCompRptDTOData data = new UFIDAU9ISVMOCompRptDTOData(); if (qty != 0) { data.m_completeQty = qty; } data.m_completeDocType = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_completeDocType.m_code = docTypeCode; //data.m_completeDocType.m_iD = GetTypeID(docTypeCode); data.m_mO = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_mO.m_code = moCode; data.m_handlePerson = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_handlePerson.m_code = Recer; data.m_handleDept = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); data.m_handleDept.m_code = RecDept; //data.m_completeDate =DateTime. ; datas.Add(data); //data.m_actualRcvTime=; return datas.ToArray(); } private static long GetTypeID(string docTypeCode, string OrgID) { string sql = @"SELECT A.[ID] as [ID], A.[Code] as [Code] FROM MO_CompleteRptDocType as A left join [MO_CompleteRptDocType_Trl] as A1 on (A1.SysMlFlag = 'zh-CN') and (A.[ID] = A1.[ID]) left join [Base_Organization] as A4 on (A.[Org] = A4.[ID]) WHERE ((A.[Code] = '"+ docTypeCode + "' and (1 = 1)) and (A4.[ID] = '" + OrgID + "')) "; DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); if (dt.Rows.Count > 0) { return long.Parse(dt.Rows[0][0].ToString()); } else { return 0; } } public static long GetWHID(string WHCode, string OrgID) { long WHID = 0; string sql = @" SELECT ID FROM CBO_Wh WHERE Code='" + WHCode + "' AND Org='" + OrgID + "' "; sql = string.Format(sql); DataTable _dtWH = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); string _WHCode = string.Empty; if (_dtWH != null && _dtWH.Rows.Count > 0) { _WHCode = _dtWH.Rows[0][0].ToString(); WHID = long.Parse(_WHCode); } return WHID; } } public class ReturnValue2//List { public string Mes; public UFIDAU9ISVMOCompRptKeyDTOData[] poheadList; } public class CompRpt { public string DocNO { get; set; } public decimal qty { get; set; } public string docTypeCode { get; set; } public string moCode { get; set; } public string Recer { get; set; } public string RecDept { get; set; } public string ItemCode { get; set; } public string WHCode { get; set; } public bool NeedTransferIN { get; set; } public string OrgCode { get; set; } public string Batch { get; set; } public string Memo { get; set; } public string VenderCode { get; set; } public string VenderName { get; set; } } public class OperationResult//List { /// /// 结果状态,默认值false /// public bool IsSuccess { get; set; } /// ///处理消息 /// public string MESSAGE { get; set; } /// /// 完工报告编码 /// public string DocNo { get; set; } /// /// 组织ID /// public string OrgID { get; set; } public UFIDAU9ISVMOCompRptKeyDTOData[] poheadList; } }