Kingdee 云星空 自定义查询产品BOM成本

using BHR.K3.Common.App;
using Kingdee.BOS;
using Kingdee.BOS.App;
using Kingdee.BOS.Business.Bill.Operation;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Log;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.ServiceHelper.Excel;
using Kingdee.BOS.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;

namespace K3.App.Service.PlugIn
{
    [Description("查询产品BOM成本")]
    //[Kingdee.BOS.Util.HotUpdate]
    /// <summary>
    ///  
    /// </summary>
   public class GETBOMCOSTPlugIn: AbstractDynamicFormPlugIn
    {
        private string Fmaterialid_Number = "";
        public override void ButtonClick(ButtonClickEventArgs e)
        {
            base.ButtonClick(e);
            LogObject log = new LogObject();
            if (e.Key.Equals("FREFRESH"))
            {
              //  EntityExport export = new EntityExport();
               // export.EntityKey = "F_BHR_BOMCOSTEntity";
                 //DynamicObject FBillINFO = this.View.Model.DataObject;//
                //long Fmaterialid_id = Convert.ToInt64((this.View.Model.GetValue("FBillMaterialId") as DynamicObject)["id"]);
                Fmaterialid_Number = (this.View.Model.GetValue("FBillMaterialId") as DynamicObject)["Number"].ToString();
               // var FBillMaterialId = FBillINFO["BillMaterialId"] as DynamicObject;
               // this.View.ShowMessage(JsonConvert.SerializeObject(FBillMaterialId["Number"]) + Fmaterialid_Number, MessageBoxType.Notice);
                
                Entity BomListEntity = View.BillBusinessInfo.GetEntity("F_BHR_BOMCOSTEntity");
                DynamicObjectCollection BomList = this.View.Model.GetEntityDataObject(BomListEntity);
                BomList.Clear();
                string sql = string.Format(GetConfigEntity.GetConfig("BHR_BOMITEM_SUPPLIERPRICE"), Fmaterialid_Number);
                var Qloglist = DBServiceHelper.ExecuteDynamicObject(Context, sql);
                //this.View.ShowMessage(JsonConvert.SerializeObject(Qloglist));
                if (Qloglist == null || Qloglist.Count == 0)
                    return;
                foreach (DynamicObject Dobj in Qloglist)
                {   //每一行的值定义成 DynamicObject类型
                    DynamicObject row = new DynamicObject(BomListEntity.DynamicObjectType);
                    #region 字段为基础资料时使用本方法赋值

                    row["F_BHR_PMATERIALID_Id"] = Convert.ToInt64(Dobj["FPMATERIALID"]);
                    BaseDataField PMATERIALFld = this.View.BusinessInfo.GetField("F_BHR_PMATERIALID") as BaseDataField;
                    DynamicObject[] PMATERIALID = AppServiceContext.ViewService.LoadFromCache(this.Context, new Object[] {
                        row["F_BHR_PMATERIALID_Id"] }, PMATERIALFld.RefFormDynamicObjectType);
                    if (PMATERIALID != null && PMATERIALID.Count() > 0)
                    {

                        row["F_BHR_PMATERIALID"] = PMATERIALID[0];
                    }

                    row["F_BHR_MATERIALID_Id"] = Convert.ToInt64(Dobj["FMATERIALID"]);
                    BaseDataField MATERIALIDFld = this.View.BusinessInfo.GetField("F_BHR_MATERIALID") as BaseDataField;
                    DynamicObject[] MATERIALID = AppServiceContext.ViewService.LoadFromCache(this.Context,
                        new Object[] { row["F_BHR_MATERIALID_Id"] }, MATERIALIDFld.RefFormDynamicObjectType);
                    if (PMATERIALID != null && PMATERIALID.Count() > 0)
                    {
                        row["F_BHR_MATERIALID"] = MATERIALID[0];
                    }
                    #endregion
                    //row["F_BHR_PMATERIALID"] = Dobj["FPMATERIALNO"];
                    // row["F_BHR_MATERIALID"] = Dobj["FMATERIALNO"];
                    // row["F_BHR_MATERIALNAME"] = Dobj["FMATERIALNAME"];
                    // row["F_BHR_SPECIFICATION"] = Dobj["FSPECIFICATION"];
                    row["F_BHR_FSEQ"] = Dobj["FSEQ"];
                    row["F_BHR_FREPLACEGROUP"] = Dobj["FREPLACEGROUP"];
                    row["F_BHR_FMATERIALTYPE"] = Dobj["FMATERIALTYPE"];
                    row["F_BHR_ERPCLSID"] = Dobj["FERPCLSID"];
                    row["F_BHR_FNUMERATOR"] = Dobj["FNUMERATOR"];
                    row["F_BHR_FDENOMINATOR"] = Dobj["FDENOMINATOR"];
                    row["F_BHR_FQTY"] = Dobj["FQTY"];
                    row["F_BHR_FPOSITIONNO"] = Dobj["FPOSITIONNO"];
                    row["F_BHR_FSUPPLIERNO"] =Dobj["FSUPPLIERNO"];
                    row["F_BHR_FSUPPLIERNAME"] = Dobj["FSUPPLIERNAME"];
                    row["F_BHR_FCYFORTYPE"] = Dobj["FCYFORTYPE"];
                    row["F_BHR_FCYFORPRICE"] = Dobj["FCYFORPRICE"];
                    row["F_BHR_FPRICE"] = Dobj["FPRICE"];
                    row["F_BHR_FTAXPRICE"] = Dobj["FTAXPRICE"];
                    row["F_BHR_FTAXAMOUNT"] = Dobj["FTAXAMOUNT"];
                    BomList.Add(row);
                }
                this.View.UpdateView("F_BHR_BOMCOSTEntity");
                /*记录操作日志*/
                log.Environment = OperatingEnvironment.BizOperate;
                log.OperateName = "查询BOM成本记录";
                log.ObjectTypeId = "FormId";  //操作的业务对象ID
                log.SubSystemId = this.View.OpenParameter.SubSystemId; //子系统Id
                log.Description = "查询BOM成本"+ Fmaterialid_Number;
                LogServiceHelper.WriteLog(this.Context, log);
            }
        }
        private FormMetadata FormMeta { get; set; }

        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey == "BHR_tbExport")
            {
                Entity BomListEntity = View.BillBusinessInfo.GetEntity("F_BHR_BOMCOSTEntity");
                DynamicObjectCollection BomList = this.View.Model.GetEntityDataObject(BomListEntity);
                var i = from a in BomList
                        select new
                        {
                            F_BHR_PMATERIALNO = (a["F_BHR_PMATERIALID"] as DynamicObject)["Number"] ,
                            F_BHR_FSEQ=a["F_BHR_FSEQ"],
                            F_BHR_FREPLACEGROUP=a["F_BHR_FREPLACEGROUP"],
                            F_BHR_FMATERIALTYPE = a["F_BHR_FMATERIALTYPE"],
                            F_BHR_MATERIALNO = (a["F_BHR_MATERIALID"] as DynamicObject)["Number"],
                            F_BHR_MATERIALNAME = (JsonConvert.DeserializeObject<List<JObject>>
                            (JsonConvert.SerializeObject((a["F_BHR_MATERIALID"] as DynamicObject)["Name"]))[0])["Value"] as object,
                            F_BHR_SPECIFICATION = (JsonConvert.DeserializeObject<List<JObject>>
                            (JsonConvert.SerializeObject((a["F_BHR_MATERIALID"] as DynamicObject)["Specification"]))[0])["Value"] as object,
                            F_BHR_ERPCLSID = a["F_BHR_ERPCLSID"],
                            F_BHR_BASEUNIT = ((JsonConvert.DeserializeObject<List<JObject>>
                            (JsonConvert.SerializeObject((a["F_BHR_MATERIALID"] as DynamicObject)["MaterialBase"]))[0])["BaseUnitId"])["Number"] as object,
                            F_BHR_FNUMERATOR = a["F_BHR_FNUMERATOR"],
                            F_BHR_FDENOMINATOR = a["F_BHR_FDENOMINATOR"],
                            F_BHR_FQTY = a["F_BHR_FQTY"],
                            F_BHR_FPOSITIONNO = a["F_BHR_FPOSITIONNO"],
                            F_BHR_FSUPPLIERNO = a["F_BHR_FSUPPLIERNO"],
                            F_BHR_FSUPPLIERNAME = a["F_BHR_FSUPPLIERNAME"],
                            F_BHR_FPRICE = a["F_BHR_FPRICE"],
                            F_BHR_FTAXPRICE = a["F_BHR_FTAXPRICE"],
                            F_BHR_FTAXAMOUNT = a["F_BHR_FTAXAMOUNT"]
                        };
                if (i == null)
                    return;
                DataTable dt = JsonConvert.DeserializeObject<DataTable>(JsonConvert.SerializeObject(i));// (DataTable)i;
                CustomLog.WriteOperaterLog(Context, "导出BOM成本", "ENG_BomQueryCost".ToUpper(), this.View.OpenParameter.SubSystemId, "BOMID:" + Fmaterialid_Number);
                #region 测试代码
                //var Ob = BomList.Select(t =>(t["F_BHR_PMATERIALID_C"]));
                //this.View.ShowMessage(JsonConvert.SerializeObject(dt));
                /* foreach (DynamicObject @object in BomList)
                 {
                     // DynamicObject row = new DynamicObject(new DynamicObjectType a);
                     DynamicObject obj = new DynamicObject(BomListEntity.DynamicObjectType);
                     BaseDataField bsdField = this.View.BusinessInfo.GetField("F_BHR_MATERIALID_C") as BaseDataField;
                     if (obj.DynamicObjectType.Properties.Contains(bsdField.NameProperty.PropertyName))
                     {
                         //obj[bsdField .NameProperty.PropertyName]    //obj[bsdField .NumberProperty.PropertyName]}
                         this.View.ShowMessage(JsonConvert.SerializeObject(obj[bsdField.NameProperty.PropertyName]));
                     }
                 }*/
                #endregion
                //生成文件名称
                string fileName = string.Format("{0}_{1}", View.BusinessInfo.GetForm().Name + "BOM成本", DateTime.Now.ToString("yyyyMMddHHmmssff"));//View.BusinessInfo.GetForm().Name
                string fileType = "xlsx";
                string[] illegalStrs = new string[] { "/", "\\" };
                foreach (var str1 in illegalStrs)
                {
                    fileName = fileName.Replace(str1, "");
                }

                fileName = PathUtils.GetValidFileName(fileName);
                string filePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, fileName);
                filePath += "." + fileType;//xlsx文件类型
                string outServicePath = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, fileName);
                outServicePath += "." + fileType;
                //
                //ExportExcelEntity.DynamicObjectCollectionTOExcel(i, "BOMCOST_ExcportTemplate_1", fileName, filePath)
                // this.View.ShowMessage();
                ExportExcelEntity.DataTableTOExcel(dt, "BOMCOST_ExcportTemplate_1", fileName, filePath);
                //下载文件
                DynamicFormShowParameter param = new DynamicFormShowParameter();
                param.FormId = "BOS_FileDownLoad";
                param.OpenStyle.ShowType = ShowType.Modal;
                param.CustomParams.Add("IsExportData", "true");
                param.CustomParams.Add("url", outServicePath);
                View.ShowForm(param);
            }
        }
        public class MultiLanguageText
        {
            /// <summary>
            /// 
            /// </summary>
            public int PkId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public int LocaleId { get; set; }
            /// <summary>
            /// 贴片半成品-塑壳适配器
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 贴片半成品-塑壳适配器,G0005,18W,12V1.5A
            /// </summary>
            public string Specification { get; set; }
        }
        private List<ExcelField> CreateMergeHeaderList(List<Appearance> formAp, string entityKey)
        {
            List<ExcelField> list = new List<ExcelField>();
            EntityAppearance entityAppearance = this.View.LayoutInfo.GetEntityAppearance(entityKey);
            if ((entityAppearance != null) && (entityAppearance.Entity != null))
            {
                using (List<Field>.Enumerator enumerator = entityAppearance.Entity.Fields.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Func<Appearance, bool> predicate = null;
                        Func<Appearance, bool> func2 = null;
                        Field i = enumerator.Current;
                        List<string> source = new List<string>();
                        if (predicate == null)
                        {
                            predicate = x => x.Key.EqualsIgnoreCase(i.Key);
                        }
                        Appearance appearance2 = entityAppearance.Layoutinfo.Appearances.FirstOrDefault<Appearance>(predicate);
                        if (appearance2 == null)
                        {
                            if (func2 == null)
                            {
                                func2 = x => x.Key.EqualsIgnoreCase(i.Key);
                            }
                            appearance2 = formAp.FirstOrDefault<Appearance>(func2);
                        }
                        source = appearance2.Caption[this.View.Context.UserLocale.LCID].Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
                        string item = i.Name[this.View.Context.UserLocale.LCID];
                        if (source.Count > 0)
                        {
                            item = source.Last<string>();
                            source.Remove(item);
                        }
                        Type type = i.GetType();
                        ExcelField field = new ExcelField
                        {
                            Caption = item,
                            FieldName = i.PropertyName,
                            Width = Convert.ToInt32(appearance2.Width.ToString()),
                            Profix = source,
                            Align = (((type == typeof(DecimalField)) || (type == typeof(IntegerField))) || (type == typeof(AmountField))) ? 1 : 0,
                            ColumnType = i.GetPropertyType(),
                            FieldKey = i.Key
                        };
                        list.Add(field);
                    }
                }
            }
            return list;
        }


        public override void BeforeExportDataNew(BeforeExportDataNewArgs e)
        {
            //
            base.BeforeExportDataNew(e);
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值