纽威
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.
 
 
 
 
 

312 lines
13 KiB

using ICSSoft.Common;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ICSSoft.Entity;
using UFSoft.UBF.Util.Context;
using System.ServiceModel;
using www.ufida.org.EntityData;
using UFSoft.UBF.Exceptions1;
using UFSoft.UBF.Service;
using ICSSoft.APIApproveCompRpt;
using ICSSoft.APIDeleteCompRpt;
using ICSSoft.APICloseCompRpt;
using ICSSoft.DataProject;
namespace ICSSoft.APICreateCompRpt
{
public class CreateCompRpt
{
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"];
private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"];
/// <summary>
/// 创建完工报告(外部通过API调用)
/// </summary>
/// <param name="infos"></param>
/// <returns></returns>
public string Create(List<ICSManufactureReceiveDoc> infos)
{
string msg = "";
DataSet ds = null;
UFIDAU9ISVMOICreateCompRptSrvClient client = new UFIDAU9ISVMOICreateCompRptSrvClient();
//服务返回结果
UFIDAU9ISVMOCompRptKeyDTOData[] returnItem;
//返回异常信息,目前还没有使用此属性
UFSoft.UBF.Exceptions.MessageBase[] returnMsg;
//上下文信息
object context;
//传入 参数
UFIDAU9ISVMOCompRptDTOData[] compRptDTOs;
try
{
if (infos == null || infos.Count == 0)
{
throw new Exception("传入数据不能为空!");
}
string OrgID = "";
string orgsql = @"select ID from Base_Organization
where Code='{0}'";
orgsql = string.Format(orgsql, infos[0].WorkPoint);
DataTable orgdt = DBHelper.Query(orgsql, connString);
if (orgdt.Rows.Count != 0)
{
OrgID = orgdt.Rows[0]["ID"].ToString();
}
else
{
throw new Exception("传入的组织编码有误!");
}
//给上下文信息赋值
context = CreateContextObj(OrgID);
//给传入参数赋值
compRptDTOs = GetDataNew(infos, OrgID);
//服务调用
(client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
(client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
returnItem = client.Do(out returnMsg, context, compRptDTOs);
List<string> DocNoList = new List<string>();
foreach (UFIDAU9ISVMOCompRptKeyDTOData data in returnItem)
{
if (data.m_operateResult == false)
{
throw new Exception(data.m_errorMsg);
}
DocNoList.Add(data.m_docNo);
}
bool ApproveResult = false;
ApproveCompRpt custApproveComRpt = new ApproveCompRpt();
ApproveResult = custApproveComRpt.Approve(DocNoList, OrgID);
if (ApproveResult == false)
{
bool DeleteResult = false;
DeleteCompRpt delete = new DeleteCompRpt();
DeleteResult = delete.Delete(DocNoList, OrgID);
}
else
{
bool CloseResult = false;
CloseCompRpt CloseSV = new CloseCompRpt();
CloseResult = CloseSV.Close(DocNoList, OrgID);
if (CloseResult == true)
{
string strDocNOList = "";
foreach (string DocNo in DocNoList)
{
if (strDocNOList == "")
{
strDocNOList = "'" + DocNo + "'";
}
else
{
strDocNOList += ",'" + DocNo + "'";
}
}
string sql = @"select DISTINCT a.ID as ID,a.ID as IDs,a.DocNo as MRCVCode,c.Code AS cDepCode,d.Name AS cDepName
,e.Code AS cWhCode,f.Name AS cWhName
,g.DocNo as MOCode ,a.CreatedBy as CreateUser ,a.CreatedOn as CreateDateTime
,a.ApproveBy as Checker ,a.ApproveOn as CheckDateTime
from MO_CompleteRpt a
left join CBO_Department c on c.ID=a.HandleDept
left join CBO_Department_Trl d on d.ID=c.ID
left join CBO_Wh e on e.ID=a.RcvWh
left join CBO_Wh_Trl f on f.ID=e.ID
left join MO_MO g on g.ID=a.MO
WHERE A.DocNo in({0}) AND a.Org='{1}'";
sql = string.Format(sql, strDocNOList, OrgID);
DataTable mdt = DBHelper.Query(sql, connString);
sql = @"select DISTINCT a.ID as IDs, b.ID as DetailID,b.LineNum as Sequence,c.Code as InvCode ,
b.RcvQtyByWhUOM as Quantity ,0 as Amount,a.MO as MODetailID,
isnull(d.Code,'') ProjectCode,isnull(e.Code,'') cBatch,'' version ,'' brand,
'' as cFree1,
'' as cFree2,
'' as cFree3,
'' as cFree4,
'' as cFree5,
'' as cFree6,
'' as cFree7,
'' as cFree8,
'' as cFree9,
'' as cFree10
from MO_CompleteRpt a
left join MO_CompleteRptRcvLine b on b.CompleteRpt=a.ID
left join CBO_ItemMaster c on c.ID=a.Item
left join CBO_Project d on d.ID=a.Project
left join Lot_LotMaster e on e.ID=a.ProductLotMaster
WHERE A.DocNo in({0}) AND a.Org='{1}'";
sql = string.Format(sql, strDocNOList, OrgID);
DataTable cdt = DBHelper.Query(sql, connString);
DataTable tempdt1 = mdt.Copy();
tempdt1.TableName = "tempdt1";
ds.Tables.Add(tempdt1);
DataTable tempdt2 = cdt.Copy();
tempdt2.TableName = "tempdt2";
ds.Tables.Add(tempdt2);
}
else
{
throw new Exception("完工报告关闭失败,创建的完工报告已删除!");
}
}
}
catch (Exception ex)
{
log.Error(GetExceptionMessage(ex));
throw new Exception(GetExceptionMessage(ex));
}
msg = JSON.DataSetToJson(ds, "details", "IDs");
return msg;
}
private static long GetTypeID(string docTypeCode, string OrgID)
{
string sql = @"select ID from MO_CompleteRpt where DocNo='" + docTypeCode + "' AND Org='" + OrgID + "' ";
DataTable dt = DBHelper.Query(sql, connString);
if (dt.Rows.Count > 0)
{
return long.Parse(dt.Rows[0][0].ToString());
}
else
{
return 0;
}
}
#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("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[] GetDataNew(List<ICSManufactureReceiveDoc> CompRptList, string OrgID)
{
List<UFIDAU9ISVMOCompRptDTOData> datas = new List<UFIDAU9ISVMOCompRptDTOData>();
foreach (ICSManufactureReceiveDoc item in CompRptList)
{
foreach (ICSManufactureReceiveDocs line in item.details)
{
UFIDAU9ISVMOCompRptDTOData data = new UFIDAU9ISVMOCompRptDTOData();
if (line.Quantity != 0)
{
data.m_completeQty = line.Quantity;
}
data.m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_org.m_iD = long.Parse(OrgID);
data.m_completeDocType = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_completeDocType.m_code = "1";
//data.m_completeDocType.m_iD = GetTypeID(docTypeCode);
data.m_mO = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_mO.m_code = line.InvCode;
data.m_handlePerson = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_handlePerson.m_code = item.User;
data.m_handleDept = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_handleDept.m_code = item.DepCode;
data.m_rcvWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
data.m_rcvWh.m_iD = GetWHID(item.WHCode, OrgID);
data.m_completeDate = DateTime.Now;
data.m_actualRcvTime = DateTime.Now;
datas.Add(data);
}
}
return datas.ToArray();
}
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 = DBHelper.Query(sql, connString);
string _WHCode = string.Empty;
if (_dtWH != null && _dtWH.Rows.Count > 0)
{
_WHCode = _dtWH.Rows[0][0].ToString();
WHID = long.Parse(_WHCode);
}
return WHID;
}
#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
}
}