圣珀
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.
 
 
 

465 lines
17 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 UFSoft.UBF.Exceptions;
using UFSoft.UBF.Exceptions1;
using UFSoft.UBF.Service;
using UFSoft.UBF.Util.Context;
using www.ufida.org.EntityData;
namespace UFIDA.ISV.CreateMO
{
public class CustCreateMO
{
/// <summary>
/// 创建生产订单
/// </summary>
public OperationResult CreateU9MO(MO mo)
{
//MO-19070005 1304010018
OperationResult result = new OperationResult();
bool IsSuccess = false;
string MESSAGE = "";
bool flag = false;
#region 服务调用框架结构
////实例化代理类
UFIDAU9ISVMOICreateMO4ExternalClient client = new UFIDAU9ISVMOICreateMO4ExternalClient();
//服务返回结果
UFIDAU9ISVMOMOKeyDTOData[] returnItems;
//返回异常信息,目前还没有使用此属性
//上下文信息
object _context;
UFSoft.UBF.Exceptions.MessageBase[] messageBase = null;
try
{
//给上下文信息赋值
_context = CreateContextObj();
string ItemName = string.Empty;
string ItemUnit = string.Empty;
long CodeID = 0;
long BOMVersion = 0;
string VersionCode = string.Empty;
//测试时可以放开
//mo.code = "1131000000"; //1305040028 1303020289 1304010018
////mo.MO_MODocTypeCode = "SC02"; //SC02 SC03
//mo.MO_MODocTypeCode = "SC03"; //SC02 SC03
//mo.IsMRPorMPS = false; // MPS/MRP
//mo.MOQty = 1;
//mo.MRPQty = 1;
//mo.MOSourceDocType = 3;
//mo.BOMType = 0;
//mo.BOMAlternate = 0;
//mo.RoutingAlternate = 0;
//mo.DeptCode = "0802";
//mo.WhCode = "20";
//mo.BinCode = "ZP1-01";
////mo.StartDate = DateTime.Now;
//mo.StartDate = DateTime.Parse("2019-07-01");
//mo.CompleteDate = DateTime.Parse("2019-10-01");
if (string.IsNullOrWhiteSpace(mo.code))
{
IsSuccess = false;
result.MESSAGE = "料品编码不可为空!";
return result;
}
www.ufida.org.EntityData.UFIDAU9ISVMOMODTOData moDtoData = new www.ufida.org.EntityData.UFIDAU9ISVMOMODTOData();
//单据类型
moDtoData.m_docType = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_docType.m_code = mo.MO_MODocTypeCode;// "1";
//moDtoData.m_docType.m_name = "标准生产订单";
//生产部门
moDtoData.m_department = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_department.m_code = mo.DeptCode;// "0801";
//料品
moDtoData.m_itemMaster = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_itemMaster.m_code = mo.code;
////版本
//moDtoData.m_itemVersion = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//DataTable dt = Appconfig.GetItemMaster(mo.code);
//if (dt != null && dt.Rows.Count > 0)
//{
// foreach (DataRow row in dt.Rows)
// {
// CodeID = long.Parse(row["ID"].ToString());
// ItemName = row["Name"].ToString();
// ItemUnit = row["BOM_UNIT"].ToString();
// //BOMVersion = long.Parse(row["BOMVersion"].ToString());
// //VersionCode = row["VersionCode"].ToString();
// }
//}
//BOM版本
//moDtoData.m_bOMVersion = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//moDtoData.m_bOMVersion.m_code = "A1";
//moDtoData.m_bOMEffDate = DateTime.Parse("2016-08-01");
//生产数量
moDtoData.m_productQty = mo.MOQty;
//MRP数量
moDtoData.m_mRPQty = mo.MRPQty;
//BOM类型
moDtoData.m_bOMType = mo.BOMType;
//来源单据类型 3-手工生单
moDtoData.m_mOSourceDocType = 3;
//计划开工日期?
//moDtoData.m_actualStartDate = mo.StartDate.Value;
moDtoData.m_startDate = mo.StartDate.Value;
//20190805新增完工日期
//moDtoData.m_completeDate = mo.CompleteDate.Value;
//需求分类
moDtoData.m_demandCode = -1;
//CompleteInOrg 入库组织
//入库组织?
moDtoData.m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_org.m_code = ConfigurationManager.AppSettings["orgCode"].ToString();
moDtoData.m_org.m_iD = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString());
//货主组织
moDtoData.m_ownerOrg = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_ownerOrg.m_code = ConfigurationManager.AppSettings["orgCode"].ToString();
moDtoData.m_ownerOrg.m_iD = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString());
//工艺生产目的
//moDtoData.m_routingAlternate = mo.RoutingAlternate;
//生产订单批号
//moDtoData.m_productLotMaster = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//moDtoData.m_productLotNo = "";
////业务员
//moDtoData.m_businessPerson = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//moDtoData.m_businessPerson.m_code = "081201";
//ApplyQty 材料申请套数
//IsFlagForNewComp 是否是启用新完工模块创建
//IsFlagNewIssue 是否启用领料申请
//IsFlagNewNoIssueToConfirm 是否无申请材料出库
//IsFlagNewNoRecedeToConfirm 是否无申请材料退库
//IsFlagNewSFCTask 是否启用车间任务管理
//BFOpportunity 倒冲时机
//WFCurrentState 当前状态
//WFOriginalState 之前状态
//BusinessCreatedBy 业务制单人
//BusinessCreatedOn 业务制单日期
//BusinessType 业务类型
//DocState 状态
//IsFIClose 财务关闭
//IsFirmed 锁定
moDtoData.m_isFirmed = false;
//moDtoData.m_bOMECONo = mo.code;
//moDtoData.m_mOOperationDTOs
//库位、完工存储地点
List<UFIDAU9ISVMOMOOperationDTOData> molist = new List<UFIDAU9ISVMOMOOperationDTOData>();
////完工库位
UFIDAU9ISVMOMOOperationDTOData _moDtoData = new UFIDAU9ISVMOMOOperationDTOData();
//_moDtoData.m_completeBin = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//_moDtoData.m_completeBin.m_code = "LJE2-3-2"; //LJE2-3-2 //6-01
//完工存储地点
//_moDtoData.m_completeWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//_moDtoData.m_completeWh.m_code = "03";
//入库存储地点
moDtoData.m_sCVWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_sCVWh.m_code = mo.WhCode;// "03";
//入库库位
//moDtoData.m_sCVBin.m_code = ""; //20190219删除
if (!string.IsNullOrWhiteSpace(mo.BinCode))
{
moDtoData.m_sCVBin = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
moDtoData.m_sCVBin.m_code = mo.BinCode;// "LJE2-3-2"; //20190219删除 必须加入库库位
}
////IsCancel 终止
//_moDtoData.m_isCancel = false;
////UrgentRatio 紧迫系数
//_moDtoData.m_urgentRatio = 0;
////CostField 成本域
//moDtoData.m_costField = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
//moDtoData.m_costField.m_code = "03";
//molist.Add(_moDtoData);
//moDtoData.m_mOOperationDTOs = molist.ToArray();
//moDtoData.m_mOSrcRelationDTOs = new UFIDAU9ISVMOMOSrcRelationDTOData[]{};
//工艺生产BOM 0-主制造,1-委外
moDtoData.m_alternateType = 0;
List<UFIDAU9ISVMOMODTOData> moDtoList = new List<UFIDAU9ISVMOMODTOData>();
moDtoList.Add(moDtoData);
returnItems = client.Do(out messageBase, _context, moDtoList.ToArray());
foreach (UFIDAU9ISVMOMOKeyDTOData data in returnItems)
{
StringBuilder str = new StringBuilder();
str.AppendLine("创建MO");
str.AppendLine("当前时间:" + DateTime.Now);
str.AppendLine("工单:" + data.m_docNo);
str.AppendLine("返回错误信息:" + data.m_errMsg);
Appconfig.WriteLogFile(str.ToString(), "创建U9_MO");
if (!string.IsNullOrWhiteSpace(data.m_errMsg))
{
flag = false;
MESSAGE = data.m_errMsg;
}
else
{
flag = true;
}
IsSuccess = flag ? true : false;
if (string.IsNullOrWhiteSpace(MESSAGE))
{
MESSAGE = IsSuccess == true ? "创建MO订单成功" : "创建MO订单失败";
}
result.IsSuccess = IsSuccess;
result.MESSAGE = MESSAGE;
result.MOCode = data.m_docNo;
//DateTime.Now.AddDays(-1)
}
#region 创建MO订单
//if ((returnItems != null) && (returnItems.Length > 0))
//{
// flag = true;
// result.MOCode = returnItems[0].m_docNo;
//}
//else
//{
// flag = false;
//}
#endregion
}
catch (Exception ex)
{
//异常信息捕获
result.IsSuccess = false;
result.MESSAGE = MESSAGE = GetExceptionMessage(ex);
return result;
}
//finally
//{
// result.IsSuccess = IsSuccess;
// result.MESSAGE = MESSAGE;
//}
#endregion
return result;
}
#region 提取异常信息
/// <summary>
/// 提取异常信息
/// </summary>
/// <param name="ex"></param>
private 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 ThreadContext CreateContextObj()
{
// 实例化应用上下文对象
ThreadContext thContext = new ThreadContext();
System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
ns.Add("OrgID", ConfigurationManager.AppSettings["orgID"].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
}
public class OperationResult
{
/// <summary>
/// 结果状态,默认值false
/// </summary>
public bool IsSuccess { get; set; }
/// <summary>
///处理消息
/// </summary>
public string MESSAGE { get; set; }
/// <summary>
/// 输出生产订单
/// </summary>
public string MOCode { get; set; }
}
public class MO
{
/// <summary>
/// 单据类型 FG02-返工生产订单,SC02-标准生产订单,SC03-标准生产订单(必有BOM),SC04-标准生产订单,YF02-研发生产订单(BOM)
/// </summary>
public string MO_MODocTypeCode { get; set; }
/// <summary>
/// 订单号
/// </summary>
public string DocNo { get; set; }
/// <summary>
/// BOM类型 0-自制,1-委外
/// </summary>
public int BOMType { get; set; }
/// <summary>
///工艺生产BOM 0-主制造,1-委外
/// </summary>
public int RoutingAlternate { get; set; }
/// <summary>
///来源单据类型
/// </summary>
public int MOSourceDocType { get; set; }
/// <summary>
/// BOM生产目的 0-主制造,1-委外
/// </summary>
public int BOMAlternate { get; set; }
/// <summary>
/// 料品
/// </summary>
public string code { get; set; }
/// <summary>
/// 单位
/// </summary>
public string ProductUOM { get; set; }
/// <summary>
/// 生产数量
/// </summary>
public Decimal MOQty { get; set; }
/// <summary>
/// MRP数量
/// </summary>
public Decimal MRPQty { get; set; }
/// <summary>
/// MPS/MRP
/// </summary>
public bool IsMRPorMPS { get; set; }
/// <summary>
/// 计划开工日
/// </summary>
public Nullable<DateTime> StartDate { get; set; }
/// <summary>
/// 完工日期
/// </summary>
public Nullable<DateTime> CompleteDate { get; set; }
/// <summary>
/// 仓库
/// </summary>
public string WhCode { get; set; }
/// <summary>
/// 库位
/// </summary>
public string BinCode { get; set; }
/// <summary>
/// 部门编码
/// </summary>
public string DeptCode { get; set; }
}
}