王 垚
2021-02-28 26e7644be352af722ea055d084b2e4a65efb382f
src/BLL/Demo.BillView/PRD/Pro_TlPush.cs
@@ -1,99 +1,177 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using Demo.Model.Model;
using Kingdee.BOS;
using Kingdee.BOS.Core.Attachment;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.DiffCompare;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.BarElement;
using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Core.Metadata.QueryElement;
using Kingdee.BOS.Core.Msg;
using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.Log;
using Kingdee.BOS.Msg;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.K3.SCM.Business;
using Kingdee.K3.SCM.Core.SCP;
using Kingdee.K3.SCM.ServiceHelper;
using Newtonsoft.Json.Linq;
using ZD.Cloud.Logger;
using ZD.Cloud.WebApi;
namespace Demo.BillView.PRD
{
    [Description("提料下推送货通知单")]
    [Kingdee.BOS.Util.HotUpdate]
    public class Pro_TlPush : AbstractBillPlugIn
    {
        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            string a;
            if ((a = e.BarItemKey.ToUpperInvariant()) != null)
            try
            {
                if (a == "TBPUSH")
                string a;
                if ((a = e.BarItemKey.ToUpperInvariant()) != null)
                {
                    // 获取父单据体
                    Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                    //DynamicObjectCollection entityRows = entity.DynamicProperty.GetValue(this.Model.DataObject) as DynamicObjectCollection;//获取父单据体行集合
                    DynamicObjectCollection entityRows = this.Model.GetEntityDataObject(entity);//获取父单据体行集合
                    // 1和2均可
                    // 取当前页面子单据体
                    //Entity subEntity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                    //DynamicObjectCollection rows = this.Model.GetEntityDataObject(subEntity);//获得子单据体行集合
                    string sql = $"select * from ";
                    JObject model = new JObject();
                    model.Add("FHDate", "");
                    model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
                    model.Add("FSupplierID", new JObject() { ["Fnumber"] = "" });
                    JArray Fentity = new JArray();
                    for (int i = 0; i < 10; i++)
                    if (a == "TBPUSH")
                    {
                        JObject FentityModel = new JObject();
                        // 获取父单据体
                        Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                                                                                        //DynamicObjectCollection entityRows = entity.DynamicProperty.GetValue(this.Model.DataObject) as DynamicObjectCollection;//获取父单据体行集合
                        DynamicObjectCollection entityRows = this.Model.GetEntityDataObject(entity);//获取父单据体行集合
                                                                                                    // 1和2均可
                                                                                                    // 取当前页面子单据体
                                                                                                    //Entity subEntity = this.View.BillBusinessInfo.GetEntity("FEntity");//标识
                                                                                                    //DynamicObjectCollection rows = this.Model.GetEntityDataObject(subEntity);//获得子单据体行集合
                                                                                                    //构建 model 主表
                        JObject model = new JObject();
                        model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = "SLD01_SYS" }); //单据类型
                        model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
                        model.Add("FStockOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); // 收料组织
                        model.Add("FPurOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); //采购组织
                        model.Add("FSupplierId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSupplierID") as DynamicObject)?["Number"].ToString() ?? "" }); //供应商
                        model.Add("FOwnerTypeIdHead", "BD_OwnerOrg");//  货主类型
                        model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主
                        FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //发料方式
                        Fentity.Add(FentityModel);
                        //model.Add("FPurchaserId", new JObject() { ["Fnumber"] = "" }); //采购员
                        //model.Add("FReceiverId", new JObject() { ["Fnumber"] = "" }); //收料员
                        //model.Add("FSupplyAddress", ""); //供货方地址
                        //model.Add("FConfirmerId", new JObject() { ["FUserID"] = "" }); // 确认人
                        //model.Add("FConfirmDate", "1900-01-01"); //确认日期
                        //model.Add("FSupplyId", new JObject() { ["Fnumber"] = "" }); // 供货方
                        //model.Add("FChargeId", new JObject() { ["Fnumber"] = "" }); // 收款方
                        //model.Add("FSettleId", new JObject() { ["Fnumber"] = "" }); // 结算方
                        //model.Add("FIsInsideBill", "false"); // 外部单据
                        //model.Add("FScanBox", "false"); // 序列号上传
                        //子表 数据模型
                        JArray Fentity = new JArray();
                        foreach (var item in entityRows)
                        {
                            JObject FentityModel = new JObject();
                            FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = (item["FHMaterID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 物料编码
                            FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 单位
                            FentityModel.Add("FPreDeliveryDate", this.Model.GetValue("FHDate").ToString()); //  预计到货日期
                            FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); // 计价单位
                            FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = (item["FUnitID"] as DynamicObject)?["Number"].ToString() ?? "" }); //  库存单位
                            FentityModel.Add("FActReceiveQty", item["FHQty"].ToString()); // 供应商送货数量
                            FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//  货主类型
                            FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" });//货主
                            FentityModel.Add("FSrcId", item["FHPOOrderInterID"].ToString());//  源单内码
                            FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//  源单类型
                            FentityModel.Add("FSrcBillNo", item["FHPOOrderBillNo"].ToString());//  源单单号
                            FentityModel.Add("FSRCENTRYID", item["FHPOOrderEntryID"].ToString());//  源单分录内码
                            FentityModel.Add("FORDERBILLNO", item["FHPOOrderBillNo"].ToString());//  源单单号
                            FentityModel.Add("FPOORDERENTRYID", item["FHPOOrderEntryID"].ToString());//  源单分录内码
                            FentityModel.Add("FTLId", this.View.Model.DataObject["Id"].ToString());//  提料源单内码
                            FentityModel.Add("FTLentryId", item["Id"].ToString());//  提料源单分录内码
                            FentityModel.Add("FTLOrderNo", this.Model.GetValue("FBillNo").ToString());//  提料源单分录内码
                            JArray Fentity2 = new JArray();
                            JObject FentityModel2 = new JObject();
                            FentityModel2.Add("FDetailEntity_Link_FRULEID", "a8c6b6e5-a8c0-4fc1-8592-6b76c2136cf9");
                            FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
                            FentityModel2.Add("FDetailEntity_Link_FSBillId", item["FHPOOrderInterID"].ToString());
                            FentityModel2.Add("FDetailEntity_Link_FSId", item["FHPOOrderEntryID"].ToString());
                            Fentity2.Add(FentityModel2);
                            FentityModel.Add("FDetailEntity_Link", Fentity2);
                            //单据转换关联关系
                            //FentityModel.Add("FAuxPropId", new JObject() { }); // 物料编码
                            //FentityModel.Add("FConfirmDeliQty", 0); // 物料编码
                            //FentityModel.Add("FConfirmDeliDate", "1900-01-01"); // 物料编码
                            //FentityModel.Add("FConfirmInfo", ""); // 物料编码
                            //FentityModel.Add("FDescription", ""); // 物料编码
                            //FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = "" }); // 物料编码
                            //FentityModel.Add("FLot", new JObject() { ["Fnumber"] = "" }); // 物料编码
                            //FentityModel.Add("FSupplierLot", ""); // 物料编码
                            //FentityModel.Add("FPrice", 0); // 物料编码
                            //FentityModel.Add("FTaxPrice", 0); // 物料编码
                            //FentityModel.Add("FDiscountRate", 0); // 物料编码
                            //FentityModel.Add("FEntryTaxRate", 0); // 物料编码
                            //FentityModel.Add("FStockBaseQty", 0); // 物料编码
                            //FentityModel.Add("FStockQty", 0); // 物料编码
                            //FentityModel.Add("FTaxCombination", new JObject() { ["Fnumber"] = "" }); // 物料编码
                            //FentityModel.Add("FPriceBaseQty", 0); // 物料编码
                            //FentityModel.Add("FStockInMaxQty", 0); // 物料编码
                            //FentityModel.Add("FBaseStockInMaxQty", 0); // 物料编码
                            //FentityModel.Add("FCheckInComing", "false"); // 物料编码
                            //FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = "" }); // 物料编码
                            //FentityModel.Add("FStockLocId", new JObject() { }); // 物料编码
                            //FentityModel.Add("FStockStatusId", new JObject() { ["Fnumber"] = "" }); // 物料编码
                            //FentityModel.Add("FProduceDate", "1900-01-01"); // 物料编码
                            //FentityModel.Add("FExpiryDate", "1900-01-01"); // 物料编码
                            Fentity.Add(FentityModel);
                        }
                        model.Add("FDetailEntity", Fentity); //明细信息
                        JObject _FentityModel = new JObject();
                        _FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" }); //  结算组织
                        _FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" }); //  结算币别
                        _FentityModel.Add("FPricePoint", 0); //  定价时点
                        //FPricePoint
                        model.Add("FinanceEntity ", _FentityModel);//财务信息
                        //model.Add("FinanceEntity ", new JObject() {
                        //"FSettleOrgId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FHPURCHASEORGID") as DynamicObject)?["Number"].ToString() ?? "" },
                        //"FSettleCurrId", new JObject() { ["Fnumber"] = (this.Model.GetValue("FSettleCurrId") as DynamicObject)?["Number"].ToString() ?? "" }
                        //});
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
                            ["NeedUpDateFields"] = new JArray(),
                            ["NeedReturnFields"] = new JArray(),
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                            //["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                            ["Model"] = model
                        };
                        var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
                        JObject saveObj = JObject.Parse(result);
                        string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                        if (saveIsSuc == "TRUE")
                        {
                            // 打开单据维护界面:以打开销售订单100001为例
                            // using Kingdee.BOS.Core.Bill;
                            string pageId = Guid.NewGuid().ToString();
                            BillShowParameter showParameter = new BillShowParameter();
                            showParameter.FormId = "SCP_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
                        {
                            LogHelper.Error(jsonRoot.ToString());
                            this.View.ShowErrMessage(jsonRoot.ToString());
                        }
                    }
                    model.Add("FEntity", Fentity);
                    JObject jsonRoot = new JObject()
                    {
                        ["Creator"] = "",
                        ["NeedUpDateFields"] = new JArray(),
                        ["NeedReturnFields"] = new JArray(),
                        ["IsDeleteEntry"] = "false",
                        ["SubSystemId"] = "",
                        ["IsVerifyBaseDataField"] = "false",
                        ["Model"] = model
                    };
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}