圣珀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

515 lines
21 KiB

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;
}
}