using Demo.Model.Model.PODemandPlan;
|
using Kingdee.BOS;
|
using Kingdee.BOS.Core.Bill.PlugIn;
|
using Kingdee.BOS.Core.DynamicForm;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
|
using Kingdee.BOS.Core.List;
|
using Kingdee.BOS.Core.Metadata.EntityElement;
|
using Kingdee.BOS.Orm.DataEntity;
|
using Kingdee.BOS.ServiceHelper;
|
using Kingdee.BOS.Util;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using ZD.Share.Common;
|
using Demo.Model.Model;
|
using Newtonsoft.Json.Linq;
|
using ZD.Cloud.WebApi;
|
using Kingdee.BOS.Core.Bill;
|
using Kingdee.BOS.Core.Metadata;
|
|
namespace Demo.BillView.PRD
|
{
|
[Description("[Excel导入生成收料通知单] 表单插件"), HotUpdate]
|
public class Pur_ReceiveByExcel : AbstractBillPlugIn
|
{
|
public override void BarItemClick(BarItemClickEventArgs e)
|
{
|
base.BarItemClick(e);
|
try
|
{
|
//匹配采购订单
|
if (e.BarItemKey.ToUpper() == "BTNFINDPUR")
|
{
|
var FID = this.View.Model.GetPKValue();
|
var FBillNo = this.View.Model.GetValue("BillNo");
|
string sql = $"/*dialect*/exec proc_jit_ExcelImport {FID},'{FBillNo}'";
|
List<string> sqlList = new List<string>();
|
DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
|
string errResult = string.Empty;
|
if (ds.Tables[0].Rows[0][0].ToString().Contains("失败_重复")) //弃除
|
{
|
foreach (DataRow dr in ds.Tables[1].Rows)
|
{
|
errResult += $"行号:{dr["FSEQ"]},物料编码{dr["FNUMBER"]}重复\r\n";
|
}
|
this.View.ShowErrMessage("操作失败,请先录入采购订单\r\n" + errResult);
|
this.View.Refresh();
|
return;
|
}
|
else if (ds.Tables[0].Rows[0][0].ToString().Contains("失败_数量"))
|
{
|
foreach (DataRow dr in ds.Tables[1].Rows)
|
{
|
errResult += $"物料编码{dr["FNUMBER"]},包装标识编码{dr["FBZNUMBER"]},采购订单可用数量:{Convert.ToInt32(dr["FRemainReceiveQty"])},小于订单总需求数量{Convert.ToInt32(dr["FQTY"])}\r\n";
|
}
|
this.View.ShowErrMessage("操作失败,请先录入采购订单\r\n" + errResult);
|
this.View.Refresh();
|
return;
|
}
|
else if (ds.Tables[0].Rows[0][0].ToString().Contains("失败"))
|
{
|
this.View.ShowErrMessage(ds.Tables[0].Rows[0][0].ToString());
|
return;
|
}
|
|
//需求model
|
List<pur_ReceiveExcelEntry> pur_ReceiveExcelEntry = ds.Tables[0].ToModelList<pur_ReceiveExcelEntry>();
|
//采购订单model
|
List<pur_PurchaseExcelEntry> pur_PurchaseExcelEntry = ds.Tables[1].ToModelList<pur_PurchaseExcelEntry>();
|
//记录结果集
|
List<pur_PoOrderExcelEntry> pur_PoOrderExcelEntry = new List<pur_PoOrderExcelEntry>();
|
foreach (var item in pur_ReceiveExcelEntry)
|
{
|
var FQty = item.FQTY;
|
//优先判断是否存在采购订单
|
var _pur_PurchaseExcelEntryOrder = pur_PurchaseExcelEntry.Where(x => x.FMaterialId == item.FMaterialId && x.FSupplierId == item.FSUPPLIERID && x.FBzbsId == item.FBzbsId && x.FRemainReceiveQty > 0 && x.FBILLNO == item.FPOORDERNO).ToList();
|
if (_pur_PurchaseExcelEntryOrder.Count > 0)
|
{
|
foreach (var _item in _pur_PurchaseExcelEntryOrder)
|
{
|
if (_item.FRemainReceiveQty >= FQty)
|
{
|
pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
|
{
|
FID = item.FID,
|
FSUPPLIERID = item.FSUPPLIERID,
|
FMATERIALID = item.FMaterialId,
|
FEXCELIMPORTSEQ = item.FSEQ,
|
FPoStockId = item.FSTOCKID,
|
FPOBzbsId = item.FBzbsId,
|
|
FPOORDERNO = _item.FBILLNO,
|
FACTQTY = FQty,
|
FPOCREATEDATE = _item.FCREATEDATE,
|
FDELIVERYDATE = _item.FDeliveryDate,
|
FPOORDERID = _item.FID,
|
FPOORDERENTRYID = _item.FENTRYID,
|
FPOORDERSEQ = _item.FSEQ,
|
FRECEIVABLEQTY = _item.FNeedQty
|
|
});
|
_item.FRemainReceiveQty -= FQty;
|
FQty = 0;
|
break;
|
}
|
else
|
{
|
pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
|
{
|
FID = item.FID,
|
FSUPPLIERID = item.FSUPPLIERID,
|
FMATERIALID = item.FMaterialId,
|
FEXCELIMPORTSEQ = item.FSEQ,
|
FPoStockId = item.FSTOCKID,
|
FPOBzbsId = item.FBzbsId,
|
|
FPOORDERNO = _item.FBILLNO,
|
FACTQTY = _item.FRemainReceiveQty,
|
FPOCREATEDATE = _item.FCREATEDATE,
|
FDELIVERYDATE = _item.FDeliveryDate,
|
FPOORDERID = _item.FID,
|
FPOORDERENTRYID = _item.FENTRYID,
|
FPOORDERSEQ = _item.FSEQ,
|
FRECEIVABLEQTY = _item.FNeedQty
|
});
|
FQty -= _item.FRemainReceiveQty;
|
_item.FRemainReceiveQty = 0;
|
}
|
}
|
}
|
//已满足需求 循环下一个物料
|
if (FQty == 0)
|
continue;
|
var _pur_PurchaseExcelEntry = pur_PurchaseExcelEntry.Where(x => x.FMaterialId == item.FMaterialId && x.FSupplierId == item.FSUPPLIERID && x.FBzbsId == item.FBzbsId && x.FRemainReceiveQty > 0).ToList();
|
foreach (var _item in _pur_PurchaseExcelEntry)
|
{
|
if (_item.FRemainReceiveQty >= FQty)
|
{
|
pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
|
{
|
FID = item.FID,
|
FSUPPLIERID = item.FSUPPLIERID,
|
FMATERIALID = item.FMaterialId,
|
FEXCELIMPORTSEQ = item.FSEQ,
|
FPoStockId = item.FSTOCKID,
|
FPOBzbsId = item.FBzbsId,
|
|
FPOORDERNO = _item.FBILLNO,
|
FACTQTY = FQty,
|
FPOCREATEDATE = _item.FCREATEDATE,
|
FDELIVERYDATE = _item.FDeliveryDate,
|
FPOORDERID = _item.FID,
|
FPOORDERENTRYID = _item.FENTRYID,
|
FPOORDERSEQ = _item.FSEQ,
|
FRECEIVABLEQTY = _item.FNeedQty
|
|
});
|
_item.FRemainReceiveQty -= FQty;
|
FQty = 0;
|
break;
|
}
|
else
|
{
|
pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
|
{
|
FID = item.FID,
|
FSUPPLIERID = item.FSUPPLIERID,
|
FMATERIALID = item.FMaterialId,
|
FEXCELIMPORTSEQ = item.FSEQ,
|
FPoStockId = item.FSTOCKID,
|
FPOBzbsId = item.FBzbsId,
|
|
FPOORDERNO = _item.FBILLNO,
|
FACTQTY = _item.FRemainReceiveQty,
|
FPOCREATEDATE = _item.FCREATEDATE,
|
FDELIVERYDATE = _item.FDeliveryDate,
|
FPOORDERID = _item.FID,
|
FPOORDERENTRYID = _item.FENTRYID,
|
FPOORDERSEQ = _item.FSEQ,
|
FRECEIVABLEQTY = _item.FNeedQty
|
});
|
FQty -= _item.FRemainReceiveQty;
|
_item.FRemainReceiveQty = 0;
|
}
|
}
|
}
|
//数据库插入
|
int fseq = 1;
|
foreach (var item in pur_PoOrderExcelEntry)
|
{
|
sql = $"INSERT INTO [jit_pur_PoOrderExcelEntry]([FID],[FSUPPLIERID],[FMATERIALID],FBzbsId,FSTOCKID,[FPOORDERNO],[FRECEIVABLEQTY],[FACTQTY],[FPOCREATEDATE],[FDELIVERYDATE],[FPOORDERID],[FPOORDERENTRYID],[FPOORDERSEQ],[FEXCELIMPORTSEQ],[FSEQ])VALUES('{item.FID}','{item.FSUPPLIERID}','{item.FMATERIALID}','{item.FPOBzbsId}','{item.FPoStockId}','{item.FPOORDERNO}','{item.FRECEIVABLEQTY}','{item.FACTQTY}','{item.FPOCREATEDATE}','{item.FDELIVERYDATE}','{item.FPOORDERID}','{item.FPOORDERENTRYID}','{item.FPOORDERSEQ}','{item.FEXCELIMPORTSEQ}','{fseq}')";
|
sqlList.Add(sql);
|
fseq++;
|
}
|
DBServiceHelper.ExecuteBatch(Context, sqlList);
|
this.View.Refresh();
|
this.View.ShowMessage("操作成功");
|
}
|
else if (e.BarItemKey.ToUpper() == "BTNPUSH")
|
{
|
btnPush();
|
}
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowErrMessage(ex.Message.ToString());
|
}
|
}
|
|
/// <summary>
|
/// 生成收料通知单(一对一)
|
/// </summary>
|
public void btnPush()
|
{
|
try
|
{
|
var FID = this.View.Model.GetPKValue();
|
string sql = string.Format(@"
|
/*dialect*/
|
SELECT T3.FNAME AS FTYPENAME,M.FBILLNO HBILLNO,B.FID HINTERID,B.FENTRYID HENTRYID,C.FID,C.FENTRYID, D.FBILLNO,B.FACTQTY HQTY,CD.FRECEIVEORGID,CDOO.FNUMBER AS FRECEIVENUMBER
|
,D.FSUPPLIERID,DS.FNUMBER AS FSUPPLIERNUMBER,D.FPURCHASEORGID,DOO.FNUMBER AS FPURCHASEORGNUMBER,CROO.FNUMBER AS FSETTLEORGNUMBER,
|
E.FPRICETIMEPOINT,E.FSETTLECURRID,EC.FNUMBER AS FSETTLECURRNUMBER,C.FMATERIALID,CM.FNUMBER AS FMATERIALNUMBER ,C.FUNITID
|
,CU.FNUMBER AS FUNITNUMBER,CR.FPRICE,CR.FTAXPRICE,CR.FTAXRATE,D.FPURCHASERID,isnull(T4.FNUMBER,'') AS FPURCHASERNUMBER,B.FSTOCKID,tst.FNUMBER AS FStockNumber,b.FBZBSID ,isnull(tpr.FNUMBER,'') as FBZNUMBER
|
FROM jit_pur_PoOrderExcelEntry B
|
JOIN jit_pur_ReceiveExcel M ON B.FID = M.FID
|
JOIN T_PUR_POORDERENTRY C ON B.FPOORDERENTRYID = C.FENTRYID
|
LEFT JOIN T_BD_MATERIAL CM ON C.FMATERIALID =CM.FMATERIALID
|
LEFT JOIN T_BD_UNIT CU ON C.FUNITID =CU.FUNITID
|
JOIN T_PUR_POORDERENTRY_D CD ON C.FENTRYID = CD.FENTRYID
|
LEFT JOIN T_ORG_ORGANIZATIONS CDOO ON CD.FRECEIVEORGID = CDOO.FORGID
|
JOIN T_PUR_POORDERENTRY_F CR ON C.FENTRYID = CR.FENTRYID
|
LEFT JOIN T_ORG_ORGANIZATIONS CROO ON CR.FSETTLEORGID = CROO.FORGID
|
LEFT JOIN T_PUR_POORDER D ON C.FID =D.FID
|
LEFT JOIN T_BAS_BILLTYPE T2 ON D.FBILLTYPEID = T2.FBILLTYPEID
|
LEFT JOIN T_BAS_BILLTYPE_L T3 ON T2.FBILLTYPEID = T3.FBILLTYPEID and FLOCALEID = 2052
|
LEFT JOIN V_BD_BUYER T4 ON D.FPURCHASERID =T4.FID
|
LEFT JOIN T_BD_SUPPLIER DS ON D.FSUPPLIERID = DS.FSUPPLIERID
|
LEFT JOIN T_ORG_ORGANIZATIONS DOO ON D.FPURCHASEORGID = DOO.FORGID
|
JOIN T_PUR_POORDERFIN E ON C.FID =E.FID
|
LEFT JOIN T_BD_CURRENCY EC ON E. FSETTLECURRID =EC.FCURRENCYID
|
join T_BD_STOCK tst on B.FSTOCKID =tst.FStockId
|
left join T_BAS_PREBDONE tpr on B.FBZBSID = tpr.FID
|
where b.fid = {0}
|
", FID);
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 0)
|
{
|
LogService.Write("sql:" + sql);
|
this.View.ShowErrMessage("未匹配数据或数据异常,请联系管理员");
|
return;
|
}
|
List<string> fmaterialIdList = new List<string>();
|
if (dt.Rows.Count > 0)
|
{
|
DataRow dr = dt.Rows[0];
|
JObject model = new JObject();
|
string fTypeName = "SLD01_SYS";//标准采购订单类型
|
string ywTypeName = "CG";//标准业务类型
|
if (dr["FTYPENAME"].ToString().Contains("委外"))
|
{
|
fTypeName = "SLD03_SYS";
|
ywTypeName = "WW";
|
}
|
if (dr["FTYPENAME"].ToString().Contains("资产"))
|
{
|
fTypeName = "SLD04_SYS";
|
ywTypeName = "ZCCG";
|
}
|
model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = fTypeName }); //单据类型
|
model.Add("FBusinessType", ywTypeName); //业务类型
|
model.Add("FBILLNO", dr["HBillNo"].ToString()); //单据编号
|
model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
|
model.Add("FStockOrgId", new JObject() { ["Fnumber"] = dr["FRECEIVENUMBER"].ToString() }); // 收料组织
|
model.Add("FPurOrgId", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() }); //采购组织
|
model.Add("FSupplierId", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() }); //供应商
|
model.Add("FPURCHASERID", new JObject() { ["Fnumber"] = dr["FPURCHASERNUMBER"].ToString() }); //采购员
|
model.Add("FOwnerTypeIdHead", "BD_Supplier");//货主类型
|
model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() });//货主 供应商
|
JArray Fentity = new JArray();
|
foreach (DataRow _dr in dt.Rows)
|
{
|
JObject FentityModel = new JObject();
|
FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = _dr["FMATERIALNUMBER"].ToString() }); // 物料编码
|
FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); // 单位
|
FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = _dr["FStockNumber"].ToString() }); // 仓库 FStockID
|
FentityModel.Add("FPreDeliveryDate", DateTime.Now.ToString("yyyy-MM-dd")); //预计到货日期
|
FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); // 计价单位
|
FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); // 库存单位
|
FentityModel.Add("F_TEZV_Base", new JObject() { ["Fnumber"] = _dr["FBZNUMBER"].ToString() }); // 包装标识
|
|
FentityModel.Add("FActReceiveQty", Convert.ToDecimal(_dr["HQTY"])); // 供应商送货数量(提料计划数量 - 已生成送货单数量)
|
FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//货主类型
|
FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
|
FentityModel.Add("FSrcId", _dr["FID"].ToString());//源单内码
|
FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//源单类型
|
FentityModel.Add("FSrcBillNo", _dr["FBILLNO"].ToString());//源单单号
|
FentityModel.Add("FSRCENTRYID", _dr["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FORDERBILLNO", _dr["FBILLNO"].ToString());//源单单号
|
FentityModel.Add("FPOORDERENTRYID", _dr["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FSRMENTRYID", _dr["HENTRYID"].ToString());//SRM hentryid
|
FentityModel.Add("FPrice", _dr["FPRICE"].ToString());//单价
|
FentityModel.Add("FTaxPrice", _dr["FTAXPRICE"].ToString());//含税单价
|
FentityModel.Add("FEntryTaxRate", _dr["FTAXRATE"].ToString());//税率
|
|
JArray Fentity2 = new JArray();
|
JObject FentityModel2 = new JObject();
|
FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
|
FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
|
FentityModel2.Add("FDetailEntity_Link_FSBillId", _dr["FID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FSId", _dr["FEntryID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQtyOld", Convert.ToDecimal(_dr["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQty", Convert.ToDecimal(_dr["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQtyOld", Convert.ToDecimal(_dr["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQty", Convert.ToDecimal(_dr["HQTY"]));
|
Fentity2.Add(FentityModel2);
|
FentityModel.Add("FDetailEntity_Link", Fentity2);
|
Fentity.Add(FentityModel);
|
}
|
model.Add("FDetailEntity", Fentity); //明细信息
|
JObject _FentityModel = new JObject();
|
_FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = dr["FSETTLEORGNUMBER"].ToString() }); // 结算组织
|
_FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = dr["FSETTLECURRNUMBER"].ToString() }); // 结算币别
|
_FentityModel.Add("FPricePoint", 0); // 定价时点
|
model.Add("FinanceEntity ", _FentityModel);//财务信息
|
JObject jsonRoot = new JObject()
|
{
|
["Creator"] = "",
|
["NeedUpDateFields"] = new JArray(),
|
["NeedReturnFields"] = new JArray(),
|
["IsDeleteEntry"] = "false",
|
["SubSystemId"] = "",
|
["IsVerifyBaseDataField"] = "false",
|
["Model"] = model
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc == "TRUE")
|
{
|
//this.View.ShowErrMessage(jsonRoot.ToString());
|
// 打开单据维护界面:以打开销售订单100001为例
|
// using Kingdee.BOS.Core.Bill;
|
string pageId = Guid.NewGuid().ToString();
|
BillShowParameter showParameter = new BillShowParameter();
|
showParameter.FormId = "PUR_ReceiveBill";
|
showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
|
showParameter.PageId = pageId;
|
showParameter.Status = OperationStatus.EDIT;
|
// 传入需要修改的销售订单内码,演示代码直接固定写死为100001
|
showParameter.PKey = saveObj["Result"]["Id"].ToString();
|
this.View.ShowForm(showParameter);
|
}
|
else
|
{
|
this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
this.View.ShowMessage("收料通知单生成失败:" + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
LogService.Write(jsonRoot.ToString());
|
return;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowMessage(ex.Message.ToString());
|
}
|
|
}
|
|
/// <summary>
|
/// 生成送货单(相同物料合并) 22-9-15 胡晶让更改为不合并
|
/// </summary>
|
/// <returns></returns>
|
public void btnPushold()
|
{
|
try
|
{
|
var FID = this.View.Model.GetPKValue();
|
string sql = string.Format(@"
|
/*dialect*/
|
SELECT T3.FNAME AS FTYPENAME,M.FBILLNO HBILLNO,B.FID HINTERID,B.FENTRYID HENTRYID,C.FID,C.FENTRYID, D.FBILLNO,B.FACTQTY HQTY,CD.FRECEIVEORGID,CDOO.FNUMBER AS FRECEIVENUMBER
|
,D.FSUPPLIERID,DS.FNUMBER AS FSUPPLIERNUMBER,D.FPURCHASEORGID,DOO.FNUMBER AS FPURCHASEORGNUMBER,CROO.FNUMBER AS FSETTLEORGNUMBER,
|
E.FPRICETIMEPOINT,E.FSETTLECURRID,EC.FNUMBER AS FSETTLECURRNUMBER,C.FMATERIALID,CM.FNUMBER AS FMATERIALNUMBER ,C.FUNITID
|
,CU.FNUMBER AS FUNITNUMBER,CR.FPRICE,CR.FTAXPRICE,CR.FTAXRATE,D.FPURCHASERID,isnull(T4.FNUMBER,'') AS FPURCHASERNUMBER,B.FSTOCKID,tst.FNUMBER AS FStockNumber,b.FBZBSID ,isnull(tpr.FNUMBER,'') as FBZNUMBER
|
FROM jit_pur_PoOrderExcelEntry B
|
JOIN jit_pur_ReceiveExcel M ON B.FID = M.FID
|
JOIN T_PUR_POORDERENTRY C ON B.FPOORDERENTRYID = C.FENTRYID
|
LEFT JOIN T_BD_MATERIAL CM ON C.FMATERIALID =CM.FMATERIALID
|
LEFT JOIN T_BD_UNIT CU ON C.FUNITID =CU.FUNITID
|
JOIN T_PUR_POORDERENTRY_D CD ON C.FENTRYID = CD.FENTRYID
|
LEFT JOIN T_ORG_ORGANIZATIONS CDOO ON CD.FRECEIVEORGID = CDOO.FORGID
|
JOIN T_PUR_POORDERENTRY_F CR ON C.FENTRYID = CR.FENTRYID
|
LEFT JOIN T_ORG_ORGANIZATIONS CROO ON CR.FSETTLEORGID = CROO.FORGID
|
LEFT JOIN T_PUR_POORDER D ON C.FID =D.FID
|
LEFT JOIN T_BAS_BILLTYPE T2 ON D.FBILLTYPEID = T2.FBILLTYPEID
|
LEFT JOIN T_BAS_BILLTYPE_L T3 ON T2.FBILLTYPEID = T3.FBILLTYPEID and FLOCALEID = 2052
|
LEFT JOIN V_BD_BUYER T4 ON D.FPURCHASERID =T4.FID
|
LEFT JOIN T_BD_SUPPLIER DS ON D.FSUPPLIERID = DS.FSUPPLIERID
|
LEFT JOIN T_ORG_ORGANIZATIONS DOO ON D.FPURCHASEORGID = DOO.FORGID
|
JOIN T_PUR_POORDERFIN E ON C.FID =E.FID
|
LEFT JOIN T_BD_CURRENCY EC ON E. FSETTLECURRID =EC.FCURRENCYID
|
join T_BD_STOCK tst on B.FSTOCKID =tst.FStockId
|
left join T_BAS_PREBDONE tpr on B.FBZBSID = tpr.FID
|
where b.fid = {0}
|
", FID);
|
DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
|
if (dt.Rows.Count == 0)
|
{
|
LogService.Write("sql:" + sql);
|
this.View.ShowErrMessage("未匹配数据或数据异常,请联系管理员");
|
return;
|
}
|
List<string> fmaterialIdList = new List<string>();
|
if (dt.Rows.Count > 0)
|
{
|
foreach (DataRow dr in dt.Rows)//只循环一次 代码结尾处有break语句
|
{
|
JObject model = new JObject();
|
string fTypeName = "SLD01_SYS";//标准采购订单类型
|
string ywTypeName = "CG";//标准业务类型
|
if (dr["FTYPENAME"].ToString().Contains("委外"))
|
{
|
fTypeName = "SLD03_SYS";
|
ywTypeName = "WW";
|
}
|
if (dr["FTYPENAME"].ToString().Contains("资产"))
|
{
|
fTypeName = "SLD04_SYS";
|
ywTypeName = "ZCCG";
|
}
|
model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = fTypeName }); //单据类型
|
model.Add("FBusinessType", ywTypeName); //业务类型
|
model.Add("FBILLNO", dr["HBillNo"].ToString()); //单据编号
|
model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
|
model.Add("FStockOrgId", new JObject() { ["Fnumber"] = dr["FRECEIVENUMBER"].ToString() }); // 收料组织
|
model.Add("FPurOrgId", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() }); //采购组织
|
model.Add("FSupplierId", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() }); //供应商
|
model.Add("FPURCHASERID", new JObject() { ["Fnumber"] = dr["FPURCHASERNUMBER"].ToString() }); //采购员
|
model.Add("FOwnerTypeIdHead", "BD_Supplier");//货主类型
|
model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() });//货主 供应商
|
JArray Fentity = new JArray();
|
//一个物料一行明细 数量进行合并
|
//FSRCID FSRCFORMID FSRCBILLNO FSRCENTRYID ()合并格式
|
//100739 PUR_PurchaseOrder POORD059762, POORD058791 103923
|
//fmaterialIdList = dt.AsEnumerable().Select(d => d.Field<int>("FMATERIALID").ToString()).Distinct().ToList();//物料集合
|
//foreach (var fmaterialId in fmaterialIdList)
|
//进行分组(物料+包装标识)
|
var query = from p in dt.AsEnumerable()
|
group p by new { FMATERIALID = p.Field<int>("FMATERIALID"), FBZBSID = p.Field<int>("FBZBSID") } into m
|
select new
|
{
|
FMATERIALID = m.Key.FMATERIALID,
|
FBZBSID = m.Key.FBZBSID
|
};
|
foreach (var _query in query.AsEnumerable())
|
{
|
var dataRows = dt.Select("FMATERIALID = " + _query.FMATERIALID + " and FBZBSID = " + _query.FBZBSID);
|
if (dataRows.Count() == 1)
|
{
|
var item = dataRows[0];
|
JObject FentityModel = new JObject();
|
FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = item["FMATERIALNUMBER"].ToString() }); // 物料编码
|
FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 单位
|
FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = item["FStockNumber"].ToString() }); // 仓库 FStockID
|
FentityModel.Add("FPreDeliveryDate", DateTime.Now.ToString("yyyy-MM-dd")); //预计到货日期
|
FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 计价单位
|
FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 库存单位
|
FentityModel.Add("F_TEZV_Base", new JObject() { ["Fnumber"] = item["FBZNUMBER"].ToString() }); // 包装标识
|
|
FentityModel.Add("FActReceiveQty", Convert.ToDecimal(item["HQTY"])); // 供应商送货数量(提料计划数量 - 已生成送货单数量)
|
FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//货主类型
|
FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
|
FentityModel.Add("FSrcId", item["FID"].ToString());//源单内码
|
FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//源单类型
|
FentityModel.Add("FSrcBillNo", item["FBILLNO"].ToString());//源单单号
|
FentityModel.Add("FSRCENTRYID", item["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FORDERBILLNO", item["FBILLNO"].ToString());//源单单号
|
FentityModel.Add("FPOORDERENTRYID", item["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FSRMENTRYID", item["HENTRYID"].ToString());//SRM hentryid
|
FentityModel.Add("FPrice", item["FPRICE"].ToString());//单价
|
FentityModel.Add("FTaxPrice", item["FTAXPRICE"].ToString());//含税单价
|
FentityModel.Add("FEntryTaxRate", item["FTAXRATE"].ToString());//税率
|
|
JArray Fentity2 = new JArray();
|
JObject FentityModel2 = new JObject();
|
FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
|
FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
|
FentityModel2.Add("FDetailEntity_Link_FSBillId", item["FID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FSId", item["FEntryID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQtyOld", Convert.ToDecimal(item["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQty", Convert.ToDecimal(item["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQtyOld", Convert.ToDecimal(item["HQTY"]));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQty", Convert.ToDecimal(item["HQTY"]));
|
Fentity2.Add(FentityModel2);
|
FentityModel.Add("FDetailEntity_Link", Fentity2);
|
Fentity.Add(FentityModel);
|
}
|
else
|
{
|
var fqtySum = dataRows.Sum(x => x.Field<decimal>("HQTY"));//数量合计
|
var fBillNosList = dataRows.Select(x => x["FBILLNO"].ToString()).Distinct().ToList();//采购订单单号 去重复
|
var fBillNos = string.Join(",", fBillNosList);//采购订单单号
|
var fEntryIDList = dataRows.Select(x => x["FENTRYID"].ToString()).Distinct().ToList();//源单分录内码
|
|
var item = dataRows[0];
|
JObject FentityModel = new JObject();
|
FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = item["FMATERIALNUMBER"].ToString() }); // 物料编码
|
FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 单位
|
FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = item["FStockNumber"].ToString() }); // 仓库 FStockID
|
FentityModel.Add("FPreDeliveryDate", DateTime.Now.ToString("yyyy-MM-dd")); //预计到货日期
|
FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 计价单位
|
FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 库存单位
|
FentityModel.Add("F_TEZV_Base", new JObject() { ["Fnumber"] = item["FBZNUMBER"].ToString() }); // 包装标识
|
|
FentityModel.Add("FActReceiveQty", fqtySum); // 供应商送货数量
|
FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//货主类型
|
FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
|
FentityModel.Add("FSrcId", item["FID"].ToString());//源单内码
|
FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//源单类型
|
FentityModel.Add("FSrcBillNo", fBillNos);//源单单号
|
FentityModel.Add("FSRCENTRYID", item["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FORDERBILLNO", item["FBILLNO"].ToString());//源单单号
|
FentityModel.Add("FPOORDERENTRYID", item["FENTRYID"].ToString());//源单分录内码
|
FentityModel.Add("FSRMENTRYID", item["HENTRYID"].ToString());//SRM hentryid
|
FentityModel.Add("FPrice", item["FPRICE"].ToString());//单价
|
FentityModel.Add("FTaxPrice", item["FTAXPRICE"].ToString());//含税单价
|
FentityModel.Add("FEntryTaxRate", item["FTAXRATE"].ToString());//税率
|
|
JArray Fentity2 = new JArray();
|
foreach (var list in fEntryIDList) //循环采购订单单号
|
{
|
var rows = dt.Select("FMATERIALID = " + _query.FMATERIALID + " and FENTRYID = '" + list + "'");
|
var _fqtySum = rows.Sum(x => x.Field<decimal>("HQTY"));//数量合计
|
var _item = rows[0];
|
|
JObject FentityModel2 = new JObject();
|
FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
|
FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
|
FentityModel2.Add("FDetailEntity_Link_FSBillId", _item["FID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FSId", _item["FEntryID"].ToString());
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQtyOld", Convert.ToDecimal(_fqtySum));
|
FentityModel2.Add("FDetailEntity_Link_FBaseUnitQty", Convert.ToDecimal(_fqtySum));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQtyOld", Convert.ToDecimal(_fqtySum));
|
FentityModel2.Add("FDetailEntity_Link_FStockBaseQty", Convert.ToDecimal(_fqtySum));
|
|
Fentity2.Add(FentityModel2);
|
}
|
FentityModel.Add("FDetailEntity_Link", Fentity2);
|
Fentity.Add(FentityModel);
|
}
|
}
|
model.Add("FDetailEntity", Fentity); //明细信息
|
JObject _FentityModel = new JObject();
|
_FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = dr["FSETTLEORGNUMBER"].ToString() }); // 结算组织
|
_FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = dr["FSETTLECURRNUMBER"].ToString() }); // 结算币别
|
_FentityModel.Add("FPricePoint", 0); // 定价时点
|
model.Add("FinanceEntity ", _FentityModel);//财务信息
|
JObject jsonRoot = new JObject()
|
{
|
["Creator"] = "",
|
["NeedUpDateFields"] = new JArray(),
|
["NeedReturnFields"] = new JArray(),
|
["IsDeleteEntry"] = "false",
|
["SubSystemId"] = "",
|
["IsVerifyBaseDataField"] = "false",
|
["Model"] = model
|
};
|
CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
|
var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
|
JObject saveObj = JObject.Parse(result);
|
string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
|
if (saveIsSuc == "TRUE")
|
{
|
//this.View.ShowErrMessage(jsonRoot.ToString());
|
// 打开单据维护界面:以打开销售订单100001为例
|
// using Kingdee.BOS.Core.Bill;
|
string pageId = Guid.NewGuid().ToString();
|
BillShowParameter showParameter = new BillShowParameter();
|
showParameter.FormId = "PUR_ReceiveBill";
|
showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
|
showParameter.PageId = pageId;
|
showParameter.Status = OperationStatus.EDIT;
|
// 传入需要修改的销售订单内码,演示代码直接固定写死为100001
|
showParameter.PKey = saveObj["Result"]["Id"].ToString();
|
this.View.ShowForm(showParameter);
|
}
|
else
|
{
|
this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
this.View.ShowMessage("收料通知单生成失败:" + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
|
LogService.Write(jsonRoot.ToString());
|
return;
|
}
|
break;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
this.View.ShowMessage(ex.Message.ToString());
|
}
|
|
}
|
|
}
|
}
|