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 } }