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-拼接外购入库实体
|
/// <summary>
|
/// 入库发送K3-拼接外购入库实体
|
/// </summary>
|
/// <param name="opNo">入库单号</param>
|
/// <returns></returns>
|
public List<K3_PurchaseReceiptEntity> GetPurchaseReceiptData(string opNo)
|
{
|
Log.Info("开始拼接K3外购入库实体,入库单:" + opNo, "");
|
List<K3_PurchaseReceiptEntity> K3purchaseReceiptList = new List<K3_PurchaseReceiptEntity>();//K3对接,外购入库
|
|
DataTable dt = CreateDAL<TN_WM_INCREASE_INVENTORYDAL>().GetIncreaseData(opNo);
|
if (dt.Rows.Count == 0) return K3purchaseReceiptList;
|
|
TN_AB_STOCKEntity stockentity = CreateDAL<TN_WM_MONGODAL>().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<TN_WMS_ITEMDAL>().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<PurchaseReceipt_Page1> lstPage1 = new List<PurchaseReceipt_Page1>();
|
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<PurchaseReceipt_Page2> lstPage2 = new List<PurchaseReceipt_Page2>();
|
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接口,发送数据
|
/// <summary>
|
/// 入库发送K3-外购入库
|
/// </summary>
|
/// <param name="opNo">入库单号</param>
|
/// <returns></returns>
|
public OperateResult sendK3_Purchase_Receipt(List<K3_PurchaseReceiptEntity> 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<K3_ReturnResultEntity>(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-拼接销售出库实体
|
/// <summary>
|
/// 出库发送K3-拼接销售出库实体
|
/// </summary>
|
/// <param name="opNo">出库单号</param>
|
/// <returns></returns>
|
public List<K3_SalesDeliveryEntity> GetSalesDeliveryData(string opNo)
|
{
|
Log.Info("开始拼接K3销售出库实体,出库单:" + opNo, "");
|
List<K3_SalesDeliveryEntity> K3SalesDeliveryList = new List<K3_SalesDeliveryEntity>();//K3对接,销售出库
|
|
DataTable dt = CreateDAL<TN_WM_REDUCE_INVENTORYDAL>().GetReduceData(opNo);
|
if (dt.Rows.Count == 0) return K3SalesDeliveryList;
|
|
TN_AB_STOCKEntity stockentity = CreateDAL<TN_WM_MONGODAL>().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<TN_WMS_ITEMDAL>().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<SalesDelivery_Page1> lstPage1 = new List<SalesDelivery_Page1>();
|
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<SalesDelivery_Page2> lstPage2 = new List<SalesDelivery_Page2>();
|
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接口,发送数据
|
/// <summary>
|
/// 出库发送K3-销售出库
|
/// </summary>
|
/// <param name="opNo">出库单号</param>
|
/// <returns></returns>
|
public OperateResult sendK3_Sales_Delivery(List<K3_SalesDeliveryEntity> 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<K3_ReturnResultEntity>(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数据
|
/// <summary>
|
/// 根据授权码,获取K3Token数据
|
/// </summary>
|
/// <returns></returns>
|
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_ReturnResultEntity>(K3_TokenId);
|
if (K3TokenIdEntity.StatusCode != "200")
|
{
|
return OperateResult.Error(K3TokenIdEntity.Message);
|
}
|
K3_ReturnTokenEntity TokenId = JsonConvert.DeserializeObject<K3_ReturnTokenEntity>(K3TokenIdEntity.Data.ToString());
|
|
if (!string.IsNullOrEmpty(TokenId.Token))
|
{
|
return OperateResult.Succeed("", TokenId.Token);
|
}
|
return OperateResult.Error("未获取到K3有效的TokenId!");
|
}
|
#endregion
|
}
|
}
|