using Kingdee.CDP.WebApi.SDK; using NewPdaSqlServer.entity; using NewPdaSqlServer.util; using SqlSugar; using NewPdaSqlServer.DB; using System.Text; using NewPdaSqlServer.Dto; using Microsoft.AspNetCore.Mvc; using MES.Service.Models; namespace MES.Service.service.Kingdee; public class ErpKcManager : Repository { public bool QueryStocks(Inventory inventory) { List erpKc = GetErpInventory(inventory); // 检查返回结果是否为空 if (erpKc == null || erpKc.Count == 0) { throw new NotImplementedException("返回结果为空"); } else { var baseObjects = MapErpCABtoWomcab(erpKc); return UseTransaction(db => { return SaveData(db, baseObjects) ? 1 : 0; }) > 0; } } #region 1.获取即时库存 public List GetErpInventory(Inventory inventory) { //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。 //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。 //读取配置,初始化SDK K3CloudApi client = new K3CloudApi(); //用于记录结果 StringBuilder Info = new StringBuilder(); //业务对象标识 string formId = "STK_Inventory"; DateTime dt = DateTime.Now; //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例 //string fieldKeys = "FCod,FFileId,FRelevantObject"; //string FilterString = "FID='-2146304'"; string fieldKeys = "FMaterialId.FNumber,FMtoNo,FStockId,FLot.FNumber,FStockUnitId.FNumber,FBaseUnitId.FNumber,FStockStatusId.FName,FBASEQTY,FMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM,FStockOrgId"; string FilterString = string.Format(@"FMaterialId.FNumber like '%{0}%' and FStockId.FNumber like '%{1}%' and FBaseQty>0", inventory.ItemNo,inventory.DepotCode); string OrderString = ""; int TopRowCount = 0; int StartRow = 0; int Limit = 0; var param = new QueryParam() { FormId = formId, FieldKeys = fieldKeys, FilterString = FilterString, OrderString = OrderString, TopRowCount = TopRowCount, StartRow = StartRow, Limit = Limit }; //调用接口 var result = client.ExecuteBillQuery(param.ToJson()); return result.Select(s => { var entity = new ErpKc { FMaterialId = s[0]?.ToString(), FMtoNo = s[1]?.ToString(), FStockId = s[2]?.ToString(), FLot = s[3]?.ToString(), FStockUnitId = s[4]?.ToString(), FBaseUnitId = s[5]?.ToString(), FStockStatusId = s[6]?.ToString(), FBASEQTY = s[7]?.ToString() , FSTOREURNOM = s[8]?.ToString(), FSTOREURNUM = s[9]?.ToString(), FStockOrgId = s[10]?.ToString() }; return entity; }).ToList(); } #endregion private List MapErpCABtoWomcab(List dtoList) { var ErpMesKcList = new List(); foreach (var dto in dtoList) { var kc = new ErpMesKc { FNumber = dto.FMaterialId, FQty = Convert.ToDecimal(dto.FBASEQTY), FBaseUnit=dto.FBaseUnitId, FStockUnit=dto.FStockUnitId, FStockId=dto.FStockId, CreateDate=DateTime.Now, FBatchno=dto.FLot, FMtono=dto.FMtoNo, FStockStatus=dto.FStockStatusId, FStoreUrnom= Convert.ToDecimal(dto.FSTOREURNOM), FStoreUrnum= Convert.ToDecimal(dto.FSTOREURNUM), FStockOrgId = Convert.ToDecimal(dto.FStockOrgId) }; ErpMesKcList.Add(kc); } return ErpMesKcList; } // 插入或更新数据的方法 private bool SaveData(SqlSugarScope db, List kcc) { Db.Deleteable() .ExecuteCommand(); var save = base.InsertRange(kcc); if (save) return true; throw new NotImplementedException("插入失败"); } }