|
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<ErpMesKc>
|
{
|
public bool QueryStocks(Inventory inventory)
|
{
|
List<ErpKc> 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<ErpKc> 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<ErpMesKc> MapErpCABtoWomcab(List<ErpKc> dtoList)
|
{
|
var ErpMesKcList = new List<ErpMesKc>();
|
|
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<ErpMesKc> kcc)
|
{
|
Db.Deleteable<ErpMesKc>()
|
.ExecuteCommand();
|
|
var save = base.InsertRange(kcc);
|
if (save) return true;
|
throw new NotImplementedException("插入失败");
|
}
|
|
}
|