using HH.WMS.Common;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.Common;
using HH.WMS.DAL.InStock;
using HH.WMS.DAL.OutStock;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Algorithm;
using HH.WMS.Entitys.Basic;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.Interface
{
public class InfK3Request : DapperBaseBLL
{
#region 入库发送K3-拼接外购入库实体
///
/// 入库发送K3-拼接外购入库实体
///
/// 入库单号
///
public List GetPurchaseReceiptData(string opNo)
{
Log.Info("开始拼接K3外购入库实体,入库单:" + opNo, "");
List K3purchaseReceiptList = new List();//K3对接,外购入库
DataTable dt = CreateDAL().GetIncreaseData(opNo);
if (dt.Rows.Count == 0) return K3purchaseReceiptList;
TN_AB_STOCKEntity stockentity = CreateDAL().GetStockentity("CN_S_STOCK_CODE", dt.Rows[0]["CN_S_STOCK_CODE"].ToString());//获取仓库名称
if (stockentity == null) return K3purchaseReceiptList;
for (int i = 0; i < dt.Rows.Count; i++)
{
string itemCode = dt.Rows[i]["CN_S_ITEM_CODE"].ToString();
AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(itemCode);
Log.Info("获取物料 " + itemCode + " 实体:" + (itemenity != null), "");
if (itemenity == null) return K3purchaseReceiptList;
#region 拼接K3对接实体
K3_PurchaseReceiptEntity k3PurchaseReceipt = new K3_PurchaseReceiptEntity();
PurchaseReceipt_Page1 page1 = new PurchaseReceipt_Page1();
page1.FBillNo = opNo; //单号
page1.Fdate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//日期
page1.FPOStyle = new { FNumber = "P002", FName = "赊购" }; //采购方式 固定值
page1.FSupplyID = new { FNumber = dt.Rows[i]["CN_S_VENDOR_NO"].ToString(), FName = dt.Rows[i]["CN_S_VENDOR_NAME"].ToString() }; ; //供应商
page1.FPOMode = new { FNumber = "PTCG", FName = "普通采购" }; //采购模式 固定值
page1.FSManagerID = new { FNumber = Constants.K3ManagerCode, FName = Constants.K3ManagerName };//保管
page1.FFManagerID = new { FNumber = Constants.K3ManagerCode, FName = Constants.K3ManagerName };//验收
page1.FROB = 1; //红蓝单标志
page1.FStatus = 1; //审核标志
page1.FCancellation = 0; //作废标志
List lstPage1 = new List();
lstPage1.Add(page1);
PurchaseReceipt_Data pData = new PurchaseReceipt_Data();
pData.Page1 = lstPage1;
PurchaseReceipt_Page2 page2 = new PurchaseReceipt_Page2();
page2.FUnitID = new { FNumber = "01", FName = dt.Rows[i]["CN_S_MEASURE_UNIT"].ToString() }; //单位
page2.FItemID = new { FNumber = itemenity.CN_S_BOOK_CODE, FName = itemenity.CN_S_BOOK_NAME }; //物料编码
page2.FDCStockID1 = new { FNumber ="22", FName = "其他仓" }; //收料仓库
page2.FQty = dt.Rows[i]["CN_F_QUANTITY"].ToString();
page2.Fauxqty = dt.Rows[i]["CN_F_QUANTITY"].ToString();
page2.FChkPassItem = null; //检验是否良品
page2.FPlanMode = null; //计划模式
List lstPage2 = new List();
lstPage2.Add(page2);
pData.Page2 = lstPage2;
k3PurchaseReceipt.Data = pData;
K3purchaseReceiptList.Add(k3PurchaseReceipt);
#endregion
}
Log.Info("已拼接K3外购入库实体", JsonConvert.SerializeObject(K3purchaseReceiptList));
return K3purchaseReceiptList;
}
#endregion
#region 入库发送K3-调用K3接口,发送数据
///
/// 入库发送K3-外购入库
///
/// 入库单号
///
public OperateResult sendK3_Purchase_Receipt(List K3purchaseReceiptList)
{
try
{
Log.Info("调用K3接口,发送数据", JsonConvert.SerializeObject(K3purchaseReceiptList));
OperateResult Result = new OperateResult();
//与K3对接
if (K3purchaseReceiptList.Any())
{
#region 与K3对接
string postOmsData = JsonConvert.SerializeObject(K3purchaseReceiptList);
var TokenEntity = GetK3TokenId();
Log.Info("调用K3接口,获取Token实体", JsonConvert.SerializeObject(TokenEntity));
if (!TokenEntity.Success)
{
return OperateResult.Error(TokenEntity.Msg);
}
string resultEntity = WebApiManager.HttpK3_Post("K3API/Purchase_Receipt/Save?Token=" + TokenEntity.Data.ToString(), postOmsData);
Log.Info("调用K3接口,返回结果", JsonConvert.SerializeObject(resultEntity));
if (string.IsNullOrEmpty(resultEntity))
{
return OperateResult.Error("K3发送入库接口未调通!");
}
K3_ReturnResultEntity K3result = JsonConvert.DeserializeObject(resultEntity);
if (K3result.StatusCode != "200")
{
return OperateResult.Error("K3返回报错:" + K3result.Message);
}
#endregion
}
return OperateResult.Succeed("", "");
}
catch (Exception ex)
{
return OperateResult.Error("K3调用抛异常:" + ex.Message);
}
}
#endregion
#region 出库发送K3-拼接销售出库实体
///
/// 出库发送K3-拼接销售出库实体
///
/// 出库单号
///
public List GetSalesDeliveryData(string opNo)
{
Log.Info("开始拼接K3销售出库实体,出库单:" + opNo, "");
List K3SalesDeliveryList = new List();//K3对接,销售出库
DataTable dt = CreateDAL().GetReduceData(opNo);
if (dt.Rows.Count == 0) return K3SalesDeliveryList;
TN_AB_STOCKEntity stockentity = CreateDAL().GetStockentity("CN_S_STOCK_CODE", dt.Rows[0]["CN_S_STOCK_CODE"].ToString());//获取仓库名称
if (stockentity == null) return K3SalesDeliveryList;
for (int i = 0; i < dt.Rows.Count; i++)
{
string itemCode = dt.Rows[i]["CN_S_ITEM_CODE"].ToString();
AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(itemCode);
Log.Info("获取物料 " + itemCode + " 实体:" + (itemenity != null), "");
if (itemenity == null) return K3SalesDeliveryList;
#region 拼接K3对接实体
K3_SalesDeliveryEntity k3SalesDelivery = new K3_SalesDeliveryEntity();
SalesDelivery_Data pData = new SalesDelivery_Data();
SalesDelivery_Page1 page1 = new SalesDelivery_Page1();
page1.FBillNo = opNo; //单号
page1.FCancellation = 0; //作废标志
page1.Fdate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //日期
page1.FSManagerID = new { FNumber = Constants.K3ManagerCode, FName = Constants.K3ManagerName };//保管
page1.FFManagerID = new { FNumber = Constants.K3ManagerCode, FName = Constants.K3ManagerName };//验收
page1.FMarketingStyle = new { FNumber = "XSLX01", FName = "销售出库类型" };
page1.FROB = 1;
page1.FSaleStyle = new { FNumber = "FXF02", FName = "赊销" };
page1.FStatus = 1;
page1.FSupplyID = null;
List lstPage1 = new List();
lstPage1.Add(page1);
pData.Page1 = lstPage1;
SalesDelivery_Page2 page2 = new SalesDelivery_Page2();
page2.FDCStockID1 = new { FNumber = "22", FName = "其他仓" };
page2.FItemID = new { FNumber = itemenity.CN_S_BOOK_CODE, FName = itemenity.CN_S_BOOK_NAME };
page2.FPlanMode = null;
page2.FUnitID = new { FNumber = "01", FName = dt.Rows[i]["CN_S_MEASURE_UNIT"].ToString() };
page2.FQty = dt.Rows[i]["CN_F_QUANTITY"].ToString();
page2.Fauxqty = dt.Rows[i]["CN_F_QUANTITY"].ToString();
List lstPage2 = new List();
lstPage2.Add(page2);
pData.Page2 = lstPage2;
k3SalesDelivery.Data = pData;
K3SalesDeliveryList.Add(k3SalesDelivery);
#endregion
}
Log.Info("已拼接K3销售出库实体", JsonConvert.SerializeObject(K3SalesDeliveryList));
return K3SalesDeliveryList;
}
#endregion
#region 出库发送K3-调用K3接口,发送数据
///
/// 出库发送K3-销售出库
///
/// 出库单号
///
public OperateResult sendK3_Sales_Delivery(List SalesDeliveryList)
{
try
{
Log.Info("调用K3接口,发送数据", JsonConvert.SerializeObject(SalesDeliveryList));
OperateResult Result = new OperateResult();
//与K3对接
if (SalesDeliveryList.Any())
{
#region 与K3对接
string postOmsData = JsonConvert.SerializeObject(SalesDeliveryList);
var TokenEntity = GetK3TokenId();
Log.Info("调用K3接口,获取Token实体", JsonConvert.SerializeObject(TokenEntity));
if (!TokenEntity.Success)
{
return OperateResult.Error(TokenEntity.Msg);
}
string resultEntity = WebApiManager.HttpK3_Post("K3API/Sales_Delivery/Save?Token=" + TokenEntity.Data.ToString(), postOmsData);
Log.Info("调用K3接口,返回结果", JsonConvert.SerializeObject(resultEntity));
if (string.IsNullOrEmpty(resultEntity))
{
return OperateResult.Error("K3发送出库接口未调通!");
}
K3_ReturnResultEntity K3result = JsonConvert.DeserializeObject(resultEntity);
if (K3result.StatusCode != "200")
{
return OperateResult.Error("K3返回报错:" + K3result.Message);
}
#endregion
}
return OperateResult.Succeed("", "");
}
catch (Exception ex)
{
return OperateResult.Error("K3调用抛异常:" + ex.Message);
}
}
#endregion
#region 获取K3Token数据
///
/// 根据授权码,获取K3Token数据
///
///
public OperateResult GetK3TokenId()
{
string K3_AuthorityId = System.Configuration.ConfigurationManager.AppSettings["K3_AuthorityId"].ToString();
string K3_TokenId = WebApiManager.HttpK3_Get("/K3API/Token/Create?authorityCode=" + K3_AuthorityId);
if (string.IsNullOrEmpty(K3_TokenId))
{
return OperateResult.Error("K3获取Token接口未调通!");
}
K3_ReturnResultEntity K3TokenIdEntity = JsonConvert.DeserializeObject(K3_TokenId);
if (K3TokenIdEntity.StatusCode != "200")
{
return OperateResult.Error(K3TokenIdEntity.Message);
}
K3_ReturnTokenEntity TokenId = JsonConvert.DeserializeObject(K3TokenIdEntity.Data.ToString());
if (!string.IsNullOrEmpty(TokenId.Token))
{
return OperateResult.Succeed("", TokenId.Token);
}
return OperateResult.Error("未获取到K3有效的TokenId!");
}
#endregion
}
}