using Kingdee.CDP.WebApi.SDK; using MES.Service.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using NewPdaSqlServer.DB; using NewPdaSqlServer.Dto; using NewPdaSqlServer.entity; using NewPdaSqlServer.util; using Newtonsoft.Json; using SqlSugar; using System.Text; namespace MES.Service.service.Kingdee; public class ErpBOMManager : Repository { #region 获取BOM public bool QueryErpBOM() { List bom = GetErpBOM(); // 检查返回结果是否为空 if (bom == null || bom.Count == 0) { throw new NotImplementedException("返回结果为空"); } else { var baseObjects = MapErpBOMtoMes(bom); return UseTransaction(db => { return SaveBOMData(db, baseObjects) ? 1 : 0; }) > 0; } } private bool SaveBOMData(SqlSugarScope db, List kcc) { Db.Deleteable() .ExecuteCommand(); var save = base.InsertRange(kcc); if (save) return true; throw new NotImplementedException("插入失败"); } public List GetErpBOM() { //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。 //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。 //读取配置,初始化SDK K3CloudApi client = new K3CloudApi(); //用于记录结果 StringBuilder Info = new StringBuilder(); //业务对象标识 string formId = "ENG_BOM"; DateTime dt = DateTime.Now; //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例 //string fieldKeys = "FCod,FFileId,FRelevantObject"; //string FilterString = "FID='-2146304'"; string fieldKeys = "FITEMPPROPERTY ,FMATERIALID ,FITEMNAME ,FTreeEntity_FENTRYID ,FCHILDITEMNAME ,FNUMERATOR , FDENOMINATOR"; var filterString = new[] { new { FieldName = "FITEMPPROPERTY", Compare = "29", Value = "3", Left = "(", Right = ")", Logic = 0 } }; var param = new QueryParams() { FormId = formId, FieldKeys = fieldKeys, FilterString = filterString }; //调用接口 var result = client.ExecuteBillQuery(param.ToJson()); return result.Select(s => { var entity = new ErpBom { FITEMPPROPERTY = s[0]?.ToString(), FMATERIALID = s[1]?.ToString(), FITEMNAME = s[2]?.ToString(), FENTRYID = s[3]?.ToString(), FCHILDITEMNAME = s[4]?.ToString(), FNUMERATOR = s[5]?.ToString(), FDENOMINATOR = s[6]?.ToString() }; return entity; }).ToList(); } private class QueryParams :BaseEntify { public string FormId { get; set; } public string FieldKeys { get; set; } public object[] FilterString { get; set; } } private List MapErpBOMtoMes(List dtoList) { var ErpMesBomList = new List(); foreach (var dto in dtoList) { var kc = new ErpBOM { ID = Guid.NewGuid(), ItemProperty = dto.FITEMPPROPERTY, ItemId = Convert.ToInt32(dto.FMATERIALID), ItemName = dto.FITEMNAME, ChildItemId = Convert.ToInt32(dto.FENTRYID), ChildItemName = dto.FCHILDITEMNAME, Numerator = Convert.ToDecimal(dto.FNUMERATOR), Denominator = Convert.ToDecimal(dto.FDENOMINATOR) }; ErpMesBomList.Add(kc); } return ErpMesBomList; } #endregion }