|
|
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 {
/// <summary>
/// 创建完工报告
/// </summary>
/// <param name="qty"></param>
/// <param name="docTypeCode"></param>
/// <param name="moCode"></param>
/// <param name="Recer"></param>
/// <param name="RecDept"></param>
/// <returns></returns>
public OperationResult CustCreateCompRpt(List<CompRpt> CompRptList)//List<rtnPoinfo>
{ #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<CompRpt> CompRptList, string OrgID) { List<UFIDAU9ISVMOCompRptDTOData> datas = new List<UFIDAU9ISVMOCompRptDTOData>(); List<UFIDAU9ISVMOCompRptRcvLineDTOData> rptrcvlinelist = new List<UFIDAU9ISVMOCompRptRcvLineDTOData>(); 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<UFIDAU9ISVMOCompRptRcvLineDTOData> rcvLineList = new List<UFIDAU9ISVMOCompRptRcvLineDTOData>(); 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();
}
/// <summary>
/// 创建完工报告
/// </summary>
/// <param name="qty"></param>
/// <param name="docTypeCode"></param>
/// <param name="moCode"></param>
/// <param name="Recer"></param>
/// <param name="RecDept"></param>
/// <returns></returns>
public static ReturnValue2 CustCreateCompRpt_bak20200306(decimal qty, string docTypeCode, string moCode, string Recer, string RecDept)//List<rtnPoinfo>
{ #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 提取异常信息
/// <summary>
/// 提取异常信息
/// </summary>
/// <param name="ex"></param>
private static string GetExceptionMessage(Exception ex) { string faultMessage = "未知错误,请查看ERP日志!";
System.TimeoutException timeoutEx = ex as System.TimeoutException; if (timeoutEx != null) { faultMessage = "访问服务超时,请修改配置信息!"; } else { FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>; 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 给上下文信息赋值
/// <summary>
/// 给上下文信息赋值
/// </summary>
/// <returns></returns>
private static ThreadContext CreateContextObj(string OrgID) { // 实例化应用上下文对象
ThreadContext thContext = new ThreadContext();
System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>(); 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<UFIDAU9ISVMOCompRptDTOData> datas = new List<UFIDAU9ISVMOCompRptDTOData>(); 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<rtnPoinfo>
{ 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<rtnPoinfo>
{ /// <summary>
/// 结果状态,默认值false
/// </summary>
public bool IsSuccess { get; set; }
/// <summary>
///处理消息
/// </summary>
public string MESSAGE { get; set; }
/// <summary>
/// 完工报告编码
/// </summary>
public string DocNo { get; set; } /// <summary>
/// 组织ID
/// </summary>
public string OrgID { get; set; }
public UFIDAU9ISVMOCompRptKeyDTOData[] poheadList; }
}
|