|
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<ErpBOM>
|
{
|
|
#region 获取BOM
|
public bool QueryErpBOM()
|
{
|
List<ErpBom> 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<ErpBOM> kcc)
|
{
|
Db.Deleteable<ErpBOM>()
|
.ExecuteCommand();
|
|
var save = base.InsertRange(kcc);
|
if (save) return true;
|
throw new NotImplementedException("插入失败");
|
}
|
|
public List<ErpBom> 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<ErpBOM> MapErpBOMtoMes(List<ErpBom> dtoList)
|
{
|
var ErpMesBomList = new List<ErpBOM>();
|
|
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
|
|
}
|