using System; using System.Collections.Generic; using www.ufida.org.EntityData; using System.ServiceModel; using UFSoft.UBF.Service; using UFSoft.UBF.Util.Context; using System.Configuration; using ICS.WCF.Base; using System.Data; using System.Text; using System.Linq; using UFIDA.U9.ISV.CreatePriceList; //using UFIDA.U9.ISV.CreatePriceList; namespace UFIDA.ISV.CreatePoSrvSub { //采购订单 public class CustCallUFIDAISVCreatePoSrvSub { //无来源采购 DataTable dtPro; public string orgID = ""; public OperationResult CustCreatePo(List poInfoList)//List { StringBuilder strlog1 = new StringBuilder(); OperationResult RET = new OperationResult(); #region 服务调用框架结构 //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient try { List rtnpos = new List(); UFIDAU9ISVPOICreatePOSRVClient client = new UFIDAU9ISVPOICreatePOSRVClient(); //服务返回结果 UFIDAU9PMPOPurchaseOrderData[] returnItems; //返回异常信息,目前还没有使用此属性 UFSoft.UBF.Exceptions1.MessageBase[] returnMsg; //上下文信息 object context; //传入 参数 UFIDAU9PMDTOsOBAPurchaseOrderDTOData[] pOList; //给上下文信息赋值 //给传入参数赋值 pOList = SetPoDtos(poInfoList); //服务调用 context = CreateContextObj(orgID); (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue; (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue; returnItems = client.Do(out returnMsg, context, pOList); foreach (UFIDAU9PMPOPurchaseOrderData returnInfo in returnItems) { rtnPoinfo rtnpo = new rtnPoinfo(); rtnpo.DocNo = returnInfo.m_docNo; rtnpo.DocID = returnInfo.m_iD; string[] str = GetOperatorByID(returnInfo.PurOper); if (str != null) { rtnpo.OperatorCode = str[0]; rtnpo.OperatorName = str[1]; } rtnpo.OrgCode = poInfoList[0].OrgCode; List lines = new List(); foreach (UFIDAU9PMPOPOLineData poline in returnInfo.m_pOLines) { try { string pro = null; if (string.IsNullOrEmpty(poline.Project.ToString()) || poline.Project == -1) { if (Appconfig.getPRProject(poline.m_pRID, poline.m_pRLineID) != null) { pro = Appconfig.getPRProject(poline.m_pRID, poline.m_pRLineID).Rows[0][0].ToString(); long num = 0; if (long.TryParse(pro, out num)) { Appconfig.setPOProject(returnInfo.m_docNo, poline.m_docLineNo, num);//修改行和计划行项目号 } } } bool IsToatl = Appconfig.setTotalMny(returnInfo.m_docNo, poline.m_docLineNo);//修改加工费合计 rtnPoLine rtnpoline = new rtnPoLine(); rtnpoline.SrcPOID = long.Parse(poline.m_descFlexSegments.m_privateDescSeg26); rtnpoline.lineID = poline.m_iD; rtnpoline.LineNo = poline.m_docLineNo; rtnpoline.srcDocNo = poline.m_srcDocInfo.m_srcDocNo; rtnpoline.srcLineNo = poline.m_srcDocInfo.m_srcDocLineNo; rtnpoline.reqQty = poline.m_reqQtyTU; //ReqUOMKey rtnpoline.proCode = Appconfig.GetProjectCode(poline.Project); rtnpoline.ProcessPrice = poline.m_descFlexSegments.m_privateDescSeg13;//加工费 rtnpoline.TotalProcessPrice = poline.m_descFlexSegments.m_privateDescSeg16;//材料费 lines.Add(rtnpoline); } catch { } } rtnpo.rtnLines = lines.ToArray(); rtnpos.Add(rtnpo); } string m; ////创建厂商价目表和厂商价格调整单 ////如果不是单一资源(供应商料品对应关系唯一),供应商不存在则创建厂商价目表,料品不存在则创建厂商价格调整单 // CustCallUFIDAISVCreatePriceListSrvSub price = new CustCallUFIDAISVCreatePriceListSrvSub(); // foreach (Pohead head in poInfoList) // { // List datas = new List(); // foreach (PoLine line in head.lines) // { // //去重复 // bool s = false; // foreach (UFIDAU9CustCustCreatePriceListSRVPriceDTOData b in datas) // { // if (b.m_itemCode == line.ItemCode) // { // s = true; // } // } // if (s) // { // continue; // } // #region 20190510修改 判断是否单一资源 // string _sql_ = @"SELECT * FROM CBO_SupplierItem // WHERE ItemInfo_ItemCode = '{0}' AND Effective_IsEffective = 1"; // _sql_ = string.Format(_sql_, line.ItemCode); // DataTable _dtCount = DBhlper.Query(_sql_, Appconfig.GetU9ConnStr()); // if (_dtCount == null || _dtCount.Rows.Count == 0) // { // continue; // } // string _sql = @"SELECT DISTINCT a.Price,a.ItemInfo_ItemCode,c.SupplierInfo_Supplier FROM PPR_PurPriceLine a // LEFT JOIN PPR_PurPriceList b ON a.PurPriceList=b.ID // LEFT JOIN CBO_SupplierItem c ON c.SupplierInfo_Supplier=b.Supplier // WHERE a.ItemInfo_ItemCode='{0}' // AND a.Active=1 // AND a.FromDategetdate() "; // _sql = string.Format(_sql, line.ItemCode); // DataTable _dt = DBhlper.Query(_sql, Appconfig.GetU9ConnStr()); // if (_dt != null && _dt.Rows.Count > 0) // { // if (_dt.Rows.Count == 1) // { // decimal _price = decimal.Parse(_dt.Rows[0][0].ToString()); // if (_price > line.OrderPriceTC || _price < line.OrderPriceTC) // { // UFIDAU9CustCustCreatePriceListSRVPriceDTOData data = new UFIDAU9CustCustCreatePriceListSRVPriceDTOData(); // data.m_itemCode = line.ItemCode; // data.m_price = line.OrderPriceTC.ToString(); // data.m_suppCode = head.supplierCode; // data.m_tCCode = head.TCCode; // data.m_tUom = line.TradeUOM; // if (head.DocTypeCode == "PO12" || head.DocTypeCode == "PO14" || head.DocTypeCode == "PO16" || head.DocTypeCode == "PO20") // { // data.m_isWW = "B"; // } // else // { // data.m_isWW = "A"; // } // datas.Add(data); // } // } // } // else // { // UFIDAU9CustCustCreatePriceListSRVPriceDTOData data = new UFIDAU9CustCustCreatePriceListSRVPriceDTOData(); // data.m_itemCode = line.ItemCode; // data.m_price = line.OrderPriceTC.ToString(); // data.m_suppCode = head.supplierCode; // data.m_tCCode = head.TCCode; // data.m_tUom = line.TradeUOM; // if (head.DocTypeCode == "PO12" || head.DocTypeCode == "PO14" || head.DocTypeCode == "PO16" || head.DocTypeCode == "PO20") // { // data.m_isWW = "B"; // } // else // { // data.m_isWW = "A"; // } // datas.Add(data); // } // #endregion // } // if (datas.Count > 0) // { // #region 20190424新增 创建价目调整单 // m = price.CustCreateRCV(datas); // StringBuilder str = new StringBuilder(); // str.AppendLine("创建价表传输数据:"); // foreach (var item in datas) // { // str.AppendLine("料号:" + item.m_itemCode); // str.AppendLine("价格:" + item.m_price); // str.AppendLine("供应商:" + item.m_suppCode); // str.AppendLine("交易币种:" + item.m_tCCode); // str.AppendLine("单位:" + item.m_tUom); // str.AppendLine("单据类型:" + item.m_isWW); // str.AppendLine("当前时间:" + DateTime.Now); // } // str.AppendLine("创建价表调接口返回:" + m.ToString()); // Appconfig.WriteLogFile(str.ToString(), "logCreatePo"); // #endregion // } // else // { // Appconfig.WriteLogFile("创建价表:传入数据所有料品都是非单一资源或未生效,传入数据不能为空!", "logCreatePo"); // } // } return RET; } catch (Exception ex) { try { Appconfig.WriteLogFile("创建采购订单" + "\r\n异常:\r\n" + GetExceptionMessage(ex) + "\r\n" + ex.Source + ex.Message + ex.TargetSite + ex.StackTrace + ex.Data, "logCreatePo"); } catch { } //异常信息捕获 List rtnpos = new List(); rtnPoinfo rtnpo = new rtnPoinfo(); rtnpo.Message = GetExceptionMessage(ex); rtnpos.Add(rtnpo); return RET; } #endregion } #region 给传入参数赋值 private UFIDAU9PMDTOsOBAPurchaseOrderDTOData[] SetPoDtos(List poInfoList) { List pOList = new List(); foreach (Pohead poInfoHead in poInfoList) { string orgsql = @"select ID from Base_Organization where Code='{0}' "; orgsql = string.Format(orgsql, poInfoHead.OrgCode); DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr()); if (orgdt.Rows.Count == 0) { throw new Exception("组织编码不存在!"); } else { orgID = orgdt.Rows[0]["ID"].ToString(); } UFIDAU9PMDTOsOBAPurchaseOrderDTOData poHead = new UFIDAU9PMDTOsOBAPurchaseOrderDTOData(); #region poHead.m_docNo = poInfoHead.PurchaseOrder; poHead.m_documentType = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //单据类型 poHead.m_documentType.m_code = poInfoHead.DocTypeCode; //poHead.pur = 2; poHead.m_businessDate = TimestampToDateTime(poInfoHead.DocDate); if (!string.IsNullOrEmpty(poInfoHead.TCCode)) { poHead.m_tC = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //交易币种 poHead.m_tC.m_code = poInfoHead.TCCode; } poHead.m_aC = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //核算币种 poHead.m_aC.m_code = "C001"; poHead.m_supplier = new UFIDAU9CBOSCMSupplierSupplierMISCInfoData(); poHead.m_supplier.m_code = poInfoHead.supplierCode; //供应商 poHead.m_bizType = poInfoHead.bizType;//标准采购 //业务类型 //poHead.m_aAIStatus = 2; //poHead.m_priceList = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //CooperateStep //poHead.m_priceList.m_iD = -1; poHead.m_cooperateStep = -1;//抛转阶段 poHead.m_isPriceIncludeTax = poInfoHead.isPriceIncludeTax; //价格是否含税 poHead.m_createdOn = DateTime.Now; poHead.m_createdBy = ConfigurationManager.AppSettings["userCode"].ToString(); poHead.m_accountOrg = new UFIDAU9BaseDTOsIDCodeNameDTOData(); poHead.m_accountOrg.m_code = poInfoHead.OrgCode;// ConfigurationManager.AppSettings["orgCode"].ToString(); poHead.m_isCentralizePO = false; //是否集中采购 poHead.m_isDecompose = false; //是否分解 poHead.m_isDecomposePO = false; //是否分解采购 poHead.sysState = 0;//系统版本号 poHead.m_sysVersion = 0;//系统版本号 //poHead.m_prePayLine.ID=new UFSoft.UBF.Business.BusinessEntity.EntityKey(); = -1; poHead.m_cooperateType = -1; poHead.m_rtnType = -1; poHead.m_modifyOperType = -1; poHead.m_matchLayer = 3; //私有段 poHead.m_descFlexField = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData(); //poHead.m_descFlexField.m_privateDescSeg1 = poInfoHead.YPK; if (poInfoHead.DocTypeCode == "PO14" || poInfoHead.DocTypeCode == "PO20") { poHead.m_maxPrepayPercentEditable = true; poHead.m_prepayPolicyEditable = true; } #endregion int num = 0; Dictionary dit = new Dictionary(); List poLines = new List(); string log = ""; for (int i = 0; i < poInfoHead.lines.Length; i++) { PoLine poInfoLine = poInfoHead.lines[i];//核准数量-转PO数量 string srcCode = poInfoLine.srcDocPRNo + poInfoLine.srcDocPRLineNo.ToString(); log += "来源信息:" + srcCode + " " + poInfoLine.PurchaseOrder + " " + poInfoLine.PurchaseOrderSeq + " " + poInfoLine.ReqQty; string sql = @"select TotalToPOQtyTU,ApprovedQtyTU from PR_PRLine as A inner join [PR_PR] as A1 on (A.[PR] = A1.[ID]) inner JOIN Base_Organization c ON A1.Org=c.ID where A.[DocLineNo]='" + poInfoLine.srcDocPRLineNo + "' and A1.[DocNo]='" + poInfoLine.srcDocPRNo + "' and c.Code='" + poInfoHead.OrgCode + "'"; //ApprovedQtyTU DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); if (dt == null || dt.Rows.Count == 0) { throw new Exception("该请购单在系统中已不存在!"); } else { string toQty = string.IsNullOrEmpty(dt.Rows[0][0].ToString()) ? "0" : dt.Rows[0][0].ToString(); string appQty = string.IsNullOrEmpty(dt.Rows[0][1].ToString()) ? "0" : dt.Rows[0][1].ToString(); if (!dit.ContainsKey(srcCode)) dit.Add(srcCode, decimal.Parse(toQty)); dit[srcCode] += poInfoLine.ReqQty; if (dit[srcCode] > decimal.Parse(appQty)) { throw new Exception("来源请购单:" + poInfoLine.srcDocPRNo + " 行:" + poInfoLine.srcDocPRLineNo.ToString() + " 已转数量:" + toQty + " +此次下单数量:" + (dit[srcCode] - decimal.Parse(toQty)).ToString() + " 不允许大于核准数量:" + appQty + " " + log); } } sql = @"select A.[Status] 状态1, A1.[Status] as 状态2 from PR_PR as A inner join [PR_PRLine] as A1 on (A.[ID] = A1.[PR]) inner JOIN Base_Organization c ON A.Org=c.ID where 1=1 and A.[DocNo] = '{0}' and A1.DocLineNo='{1}' and c.Code='" + poInfoHead.OrgCode + "'"; sql = string.Format(sql, poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo); dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); if (dt.Rows[0]["状态1"].ToString() != "2" || dt.Rows[0]["状态2"].ToString() != "2") { throw new Exception("单号:" + poInfoLine.srcDocPRNo + "\n行号:" + poInfoLine.srcDocPRLineNo + "\n状态异常,U9中必须核准状态才准许转采购!请于 U9中确认。"); } #region 行 poLine UFIDAU9PMDTOsOBAPOLineDTOData poLine = getPoLine(poInfoLine, i, orgID); poLines.Add(poLine); num = i; #endregion } poHead.m_pOLines = poLines.ToArray(); pOList.Add(poHead); } return pOList.ToArray(); } #endregion #region 提取异常信息 /// /// 提取异常信息 /// /// private 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 ThreadContext CreateContextObj(string OrgID) { // 实例化应用上下文对象 ThreadContext thContext = new ThreadContext(); System.Collections.Generic.Dictionary ns = new Dictionary(); //ns.Add("OrgID", ConfigurationManager.AppSettings["orgID"].ToString()); ns.Add("OrgID", long.Parse(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 #region 时间戳方法 private DateTime TimestampToDateTime(long timestamp) { DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = timestamp * 10000000; TimeSpan nowTimeSpan = new TimeSpan(lTime); DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan); return resultDateTime; } #endregion #region 通过ID查找采购员Code,Name public string[] GetOperatorByID(long id) { string[] str = new string[2]; string sql = @"select A.Code,B.Name from CBO_Operators A left join CBO_Operators_Trl B on A.ID=B.ID where A.ID=" + id + ""; DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); //string[] str = new string[2]; if (dt == null || dt.Rows.Count == 0) { str = null; } else { str[0] = dt.Rows[0][0].ToString(); str[1] = dt.Rows[0][1].ToString(); } return str; } #endregion #region 赋值行 public UFIDAU9PMDTOsOBAPOLineDTOData getPoLine(PoLine poInfoLine, int i, string orgid) { string project11 = null; string PubDescSeg18 = null; dtPro = Appconfig.getPRProject11(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo); if (dtPro != null && dtPro.Rows.Count > 0) { project11 = dtPro.Rows[0][0].ToString(); PubDescSeg18 = dtPro.Rows[0][1].ToString(); } UFIDAU9PMDTOsOBAPOLineDTOData poLine = new UFIDAU9PMDTOsOBAPOLineDTOData(); //if (Appconfig.GetUOMCode(poInfoLine.TradeUOM).Rows.Count == 0 || Appconfig.GetUOMCode(poInfoLine.TradeUOM)==null) //{ // throw new Exception("ERP中不存在该单位" + poInfoLine.TradeUOM); //} //string uom = Appconfig.GetUOMCode(poInfoLine.TradeUOM).Rows[0][0].ToString(); //poLine.m_systemPriceTC = poInfoLine.Price;//系统价 poLine.m_docLineNo = (i + 1) * 10; //行号 poLine.m_srcDocType = 1; //来源单据类型 1表示请购单 poLine.m_itemInfo = new UFIDAU9CBOSCMItemItemInfoData(); //料号信息 poLine.m_itemInfo.m_itemCode = poInfoLine.ItemCode; poLine.m_itemInfo.m_itemGrade = -1; poLine.m_itemInfo.m_itemPotency = -1;//IsPUCanChange poLine.m_isPUCanChange = true; //poLine.m_isPresent = false; //是否赠品 if (poInfoLine.OrderPriceTC == 0) { poLine.m_isPresent = true; } poLine.m_kITRcvMode = -1; //成套发货标志 poLine.m_reqQtyTU = poInfoLine.ReqQty; //需求数量 if (!string.IsNullOrEmpty(poInfoLine.TradeUOM)) { poLine.m_reqUOM = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //需求计量单位 poLine.m_reqUOM.m_code = poInfoLine.TradeUOM; poLine.m_tradeUOM = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //采购计量单位 poLine.m_tradeUOM.m_code = poInfoLine.TradeUOM; } poLine.m_purQtyTU = poInfoLine.ReqQty; //采购数量 if (!string.IsNullOrEmpty(poInfoLine.ValuationUnit)) { poLine.m_priceUOM = new UFIDAU9BaseDTOsIDCodeNameDTOData();//计价单位 poLine.m_priceUOM.m_code = poInfoLine.ValuationUnit; } poLine.m_pRNO = poInfoLine.srcDocPRNo; poLine.m_isPresent = poInfoLine.IsPersent; DataTable dt = Appconfig.GetPRDocID(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo); if (dt == null || dt.Rows.Count < 1) { throw new Exception("ERP中不存在该请购单行的数据,请检查是否被删除.单号:" + poInfoLine.srcDocPRNo + ",行号:" + poInfoLine.srcDocPRLineNo); } poLine.m_pRLineID = long.Parse(dt.Rows[0][1].ToString()); poLine.m_pRID = long.Parse(dt.Rows[0][0].ToString()); //poLine.m_supplierConfirmQtyTU = 2; //确认数量 poLine.m_supplierConfirmQtyPU = poInfoLine.ValuationQty;//确认数量 poLine.m_descFlexSegments = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData(); poLine.m_descFlexSegments.m_privateDescSeg1 = TimestampToDateTime(poInfoLine.SupConfirmDate).ToString();//供应商确认日期 if (!string.IsNullOrEmpty(project11)) { poLine.m_descFlexSegments.m_pubDescSeg11 = project11; } //20200810 请购单行18传给采购单行18 poLine.m_descFlexSegments.m_pubDescSeg18 = PubDescSeg18; //20200319新增行上存储物供传来的长整型 poLine.m_descFlexSegments.m_privateDescSeg26 = poInfoLine.SrcPOID.ToString(); if (!string.IsNullOrEmpty(poInfoLine.ProCode)) { poLine.m_project = new UFIDAU9BaseDTOsIDCodeNameDTOData(); long m = 0; if (long.TryParse(Appconfig.GetProjectID(poInfoLine.ProCode), out m)) poLine.m_project.m_iD = m; //throw new Exception("ERP中不存在该项目号:" + poInfoLine.ProCode); } poLine.m_demondCode = -1; //需求分类 poLine.m_isSpilted = false; //已分割 poLine.m_isRefill = false; //替代件 poLine.m_isPriceModify = true; //价格可改 poLine.m_priceSource = 1; //价格来源 #region 20190410注释 //20190417 //poLine.m_netFinallyPriceFC = poInfoLine.NetFinallyPriceAC; //poLine.m_netMnyAC = poInfoLine.NetMnyAC; if (poInfoLine.OrderPriceTC > 0) { poLine.m_orderPriceTC = poInfoLine.OrderPriceTC; //定价 poLine.m_srcDocFinallyPriceTC = poInfoLine.OrderPriceTC; poLine.m_finallyPriceTC = poInfoLine.OrderPriceTC; //最终价 单价(含税) } //poLine.m_totalMnyTC = poInfoLine.OrderTotalTC;//价税合计 if (poInfoLine.OrderTotalTC > 0) { poLine.m_netMnyTC = poInfoLine.OrderTotalTC;//价税合计 } #endregion poLine.m_createdOn = DateTime.Now; poLine.m_createdBy = ConfigurationManager.AppSettings["userCode"].ToString(); if (poInfoLine.TaxRate > 0) { poLine.m_taxRate = poInfoLine.TaxRate; //税率 } poLine.m_srcDocInfo = new UFIDAU9CBOSCMPropertyTypesSrcDocInfoData(); //poLine.m_srcDocInfo.m_srcDocBusiType = -1; poLine.m_srcDocInfo.SrcDocOrg_SKey = new UFSoft.UBF.Business.BusinessEntity.EntityKey(); poLine.m_srcDocInfo.SrcDocOrg_SKey.ID = long.Parse(orgid);// long.Parse(ConfigurationManager.AppSettings["orgID"].ToString()); // = 1001604180010013; //poLine.m_srcDocInfo.m_srcDocVer = 1; poLine.m_srcDocInfo.m_srcDocNo = poInfoLine.srcDocPRNo; //来源单据号 poLine.m_srcDocInfo.m_srcDoc = new UFIDAU9BasePropertyTypesBizEntityKeyData(); //poLine.m_srcDocInfo.m_srcDocLineNo = poInfoLine.srcDocPRLineNo; //来源单据行号C:\Users\Administrator\Desktop\WCF\UFIDA.U9.ZHC\UFIDA.ISV.CreatePoSrvSub\CustCallUFIDAISVCreatePoSrvSub.cs poLine.m_srcDocInfo.m_srcDoc.m_entityID = long.Parse(Appconfig.GetPRDocID(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo).Rows[0][0].ToString()); poLine.m_srcDocInfo.m_srcDoc.m_entityType = "UFIDA.U9.PR.PurchaseRequest.PR"; poLine.m_srcDocInfo.m_srcDocLineNo = poInfoLine.srcDocPRLineNo; //来源单据行号 poLine.m_srcDocInfo.m_srcDocLine = new UFIDAU9BasePropertyTypesBizEntityKeyData(); poLine.m_srcDocInfo.m_srcDocLine.m_entityID = long.Parse(Appconfig.GetPRDocID(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo).Rows[0][1].ToString()); poLine.m_srcDocInfo.m_srcDocLine.m_entityType = "UFIDA.U9.PR.PurchaseRequest.PRLine"; poLine.m_demondCode = -1; //需求分类 UFIDAU9PMDTOsOBAPOShipLineDTOData pOShipline = new www.ufida.org.EntityData.UFIDAU9PMDTOsOBAPOShipLineDTOData(); #region 计划行 pOShipline.m_srcDocType = 1; pOShipline.m_srcDocInfo = new UFIDAU9CBOSCMPropertyTypesSrcDocInfoData(); pOShipline.m_srcDocInfo.m_srcDocBusiType = -1; pOShipline.m_srcDocInfo.SrcDocOrg_SKey = new UFSoft.UBF.Business.BusinessEntity.EntityKey(); pOShipline.m_srcDocInfo.SrcDocOrg_SKey.ID = long.Parse(orgid);// long.Parse(ConfigurationManager.AppSettings["orgID"].ToString()); // = 1001604180010013; pOShipline.m_srcDocInfo.m_srcDocVer = 1; pOShipline.m_srcDocInfo.m_srcDocNo = poInfoLine.srcDocPRNo; //来源单据号 pOShipline.m_srcDocInfo.m_srcDoc = new UFIDAU9BasePropertyTypesBizEntityKeyData(); pOShipline.m_srcDocInfo.m_srcDoc.m_entityID = long.Parse(Appconfig.GetPRDocID(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo).Rows[0][0].ToString()); pOShipline.m_srcDocInfo.m_srcDoc.m_entityType = "UFIDA.U9.PR.PurchaseRequest.PR"; pOShipline.m_srcDocInfo.m_srcDocLineNo = poInfoLine.srcDocPRLineNo; //来源单据行号 pOShipline.m_srcDocInfo.m_srcDocLine = new UFIDAU9BasePropertyTypesBizEntityKeyData(); pOShipline.m_srcDocInfo.m_srcDocLine.m_entityID = long.Parse(Appconfig.GetPRDocID(poInfoLine.srcDocPRNo, poInfoLine.srcDocPRLineNo).Rows[0][1].ToString()); pOShipline.m_srcDocInfo.m_srcDocLine.m_entityType = "UFIDA.U9.PR.PurchaseRequest.PRLine"; //pOShipline.m_srcDocInfo.m_srcDocTransType = new UFIDAU9BasePropertyTypesBizEntityKeyData(); //原单据类型 //pOShipline.m_srcDocInfo.m_srcDocTransType.m_entityID = 1001604181460401; //pOShipline.m_srcDocInfo.m_srcDocTransType.m_entityType = "UFIDA.U9.PR.PurchaseRequest.PRDocType"; //pOShipline.m_subLineNo = 10; pOShipline.m_rcvShipBy = 2; // 收发货依据 pOShipline.m_demondCode = -1; //需求分类 if (poInfoLine.RequireDate > 0) { pOShipline.m_deliveryDate = TimestampToDateTime(poInfoLine.RequireDate); // 要求交货日 pOShipline.m_preMaturityDate = TimestampToDateTime(poInfoLine.RequireDate); pOShipline.m_planArriveDate = TimestampToDateTime(poInfoLine.RequireDate); pOShipline.m_needPODate = TimestampToDateTime(poInfoLine.RequireDate); } //else //{ // pOShipline.m_deliveryDate = DateTime.Now.AddMonths(1); // 要求交货日 // pOShipline.m_preMaturityDate = DateTime.Now.AddMonths(1); // pOShipline.m_planArriveDate = DateTime.Now.AddMonths(1); // pOShipline.m_needPODate = DateTime.Now.AddMonths(1); //} pOShipline.m_centralizedPurType = -1; //集中采购类型 if (!string.IsNullOrEmpty(poInfoLine.ProCode)) { pOShipline.m_project = new UFIDAU9BaseDTOsIDCodeNameDTOData(); long m = 0; if (long.TryParse(Appconfig.GetProjectID(poInfoLine.ProCode), out m)) pOShipline.m_project.m_iD = m; } pOShipline.m_descFlexSegments = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData(); if (!string.IsNullOrEmpty(project11)) { pOShipline.m_descFlexSegments.m_pubDescSeg11 = project11; } #endregion //poLine.m_pOShiplines = new UFIDAU9PMDTOsOBAPOShipLineDTOData[1]; List ships = new List(); ships.Add(pOShipline); poLine.m_pOShiplines = ships.ToArray(); //poLine.m_pOShiplines[0].m_project = new UFIDAU9BaseDTOsIDCodeNameDTOData(); //poLine.m_pOShiplines[0].m_project.m_code = poInfoLine.ProCode; return poLine; } #endregion #region 去重&叠加相同数量的料号 public List selectItemCode(List pOLines) { for (int i = 0; i < pOLines.Count; i++) { for (int j = pOLines.Count - 1; j > i; j--) { if (pOLines[i].ItemCode.ToString() == pOLines[j].ItemCode.ToString()) { pOLines[i].ReqQty += pOLines[j].ReqQty; pOLines.RemoveAt(j); } } } return pOLines; } #endregion #region 获取最小采购量 public int getMinPR(string itemCode) { string sql = @"select A1.[DescFlexField_PrivateDescSeg12] as PurchaseBatchQty from [CBO_ItemMaster] as A1 where A1.Code='" + itemCode + "'"; DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr()); if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString())) { return int.Parse(dt.Rows[0][0].ToString()); } else { return -1; } } #endregion #region 汇总因最小采购量的拆行 public List scatterLines(PoLine[] pOLines1) { List pOLines = new List(pOLines1); List lines = selectItemCode(pOLines); int j = lines.Count; for (int i = j - 1; i > -1; i--) { int min = getMinPR(lines[i].ItemCode); if (min == 0 || min == -1) { lines.Remove(lines[i]); continue; } int num = int.Parse(lines[i].ReqQty.ToString()); int num1 = num / min; int num2 = (num1 + 1) * min - num; //if(num1==0) //{ // continue; //} lines[i].ReqQty = num2; lines[i].ProCode = ""; lines[i].ValuationQty = num2; } return lines; } #endregion } #region 上下文类信息 public class contextInfo { private long _OrgID; private string _OrgCode; private long _UserID; private string _UserCode; private DateTime _Datetime; private string _CultureName; private string _EnterpriseID; /// /// 组织ID /// public long OrgID { get { return _OrgID; } set { _OrgID = value; } } /// /// 组织编码 /// public string OrgCode { get { return _OrgCode; } set { _OrgCode = value; } } /// /// 操作员ID /// public long UserID { get { return _UserID; } set { _UserID = value; } } /// /// 操作员编码 /// public string UserCode { get { return _UserCode; } set { _UserCode = value; } } /// /// 时间 /// public DateTime Datetime { get { return _Datetime; } set { _Datetime = value; } } /// /// 语言 /// public string CultureName { get { return _CultureName; } set { _CultureName = value; } } /// /// 企业ID号 /// public string EnterpriseID { get { return _EnterpriseID; } set { _EnterpriseID = value; } } public contextInfo() { CultureName = "zh_CN"; Datetime = DateTime.Now; } } #endregion #region 表头类 public class Pohead { /// 单据类型 public string DocTypeCode { get; set; } /// 单据日期 public long DocDate { get; set; } /// 采购单单据号 public string PurchaseOrder { get; set; } /// 交易币种 public string TCCode { get; set; } /// 供应商 public string supplierCode { get; set; } /// 价格是否含税 public bool isPriceIncludeTax { get; set; } public PoLine[] lines { get; set; } /// 采购单单据类型 public int bizType; //组织 public string OrgCode { get; set; } } #endregion #region 表体类 public class PoLine { public long SrcPOID { get; set; } // 采购订单号 public string PurchaseOrder { get; set; } // 采购订单行号 public int PurchaseOrderSeq { get; set; } /// 料号 public string ItemCode { get; set; } /// 单位 public string TradeUOM { get; set; } /// 数量 public decimal ReqQty { get; set; } /// 价格 public decimal OrderPriceTC { get; set; } /// 金额 public decimal OrderTotalTC { get; set; } /// 税率 public decimal TaxRate { get; set; } //来源请购单单号 public string srcDocPRNo { get; set; } //来源请购单单行号 public int srcDocPRLineNo { get; set; } /// 供应商交期 public long RequireDate { get; set; } /// 供应商确认日期 public long SupConfirmDate { get; set; } /// 计价单位 public string ValuationUnit { get; set; } /// 计价数量 public decimal ValuationQty { get; set; } // 项目号 public string ProCode { get; set; } //是否分割 public int IsSpilt { get; set; } //是否赠品 public bool IsPersent { get; set; } } #endregion #region 返回信息类 public class rtnPoinfo { public string DocNo { get; set; } public string Message { get; set; } public long DocID { get; set; } public string OperatorCode { get; set; } public string OperatorName { get; set; } public string OrgCode { get; set; } public rtnPoLine[] rtnLines { get; set; } } public class rtnPoLine { //20200319新增长整形字段最后再返回给物供 public long SrcPOID { get; set; } public int LineNo { get; set; } public long lineID { get; set; } public string srcDocNo { get; set; } public int srcLineNo { get; set; } public decimal reqQty { get; set; } public string tc { get; set; } public string proCode { get; set; } public string ProcessPrice { get; set; }//加工费 public string TotalProcessPrice { get; set; }//材料费 } public class OperationResult { public bool IsSuccess { get; set; } public string MESSAGE { get; set; } public string SuppCode { get; set; } } #endregion }