| | |
| | | using WHTest; |
| | | using System.Net; |
| | | using SqlSugar; |
| | | using static HH.WCS.Mobox3.pinggao.models.SapRoot.GYSDto; |
| | | using System.Web.Services.Protocols; |
| | | |
| | | namespace HH.WCS.Mobox3.pinggao.api |
| | | { |
| | |
| | | return simpleResults; |
| | | } |
| | | /// <summary> |
| | | /// sap-wmsg供应商息添加SimpleResult |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static Orderback.Root GYS_In(GYSDto.Root model) |
| | | { |
| | | var orderResponse = new Orderback.Root |
| | | { |
| | | ROOT = new Orderback.ROOT |
| | | { |
| | | ITEM = new List<Orderback.ITEM> { } |
| | | |
| | | } |
| | | }; |
| | | |
| | | List<Orderback.ITEM> tEMs = new List<Orderback.ITEM>(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | try |
| | | { |
| | | db.BeginTran(); |
| | | foreach (var item in model.ROOT.GYSXX) |
| | | { |
| | | Orderback.ITEM iTEM = new Orderback.ITEM(); |
| | | |
| | | |
| | | //创建入库单主子表 |
| | | var po = WMSHelper.GetGYSBMOrder(item.JBXX.GYSBM); |
| | | if (po == null) |
| | | { |
| | | po = new TN_Supplier { S_GYSBM= item.JBXX.GYSBM , S_MDMBM = item.JBXX.MDMBM, }; |
| | | po.Details = new List<TN_Supplier_detial>(); |
| | | if (item.GYSHB.Count > 0) |
| | | { |
| | | item.GYSHB.ForEach(a => |
| | | { |
| | | po.Details.Add(new TN_Supplier_detial |
| | | { |
| | | S_DO_GYSBM = a.GYSBM, |
| | | S_CGZZ = a.CGZZ, |
| | | S_HB = a.HB, |
| | | |
| | | }); |
| | | //} |
| | | }); |
| | | db.Insertable<TN_Supplier>(po).ExecuteCommand(); |
| | | db.Insertable<TN_Supplier_detial>(po.Details).ExecuteCommand(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | db.Deleteable<TN_Supplier>().Where(it => it.S_GYSBM == po.S_GYSBM).ExecuteCommand(); |
| | | db.Deleteable<TN_Supplier_detial>().Where(it => it.S_DO_GYSBM == po.S_GYSBM).ExecuteCommand(); |
| | | //iTEM.SCDDH = item.JBXX.GYSBM; |
| | | //iTEM.MSGCODE = "1"; |
| | | //iTEM.MSGDESP = $"{item.JBXX.GYSBM}已存在"; |
| | | //tEMs.Add(iTEM); |
| | | } |
| | | iTEM.SCDDH = item.JBXX.GYSBM; |
| | | iTEM.MSGCODE = "0"; |
| | | iTEM.MSGDESP = $"成功"; |
| | | tEMs.Add(iTEM); |
| | | } |
| | | orderResponse.ROOT.ITEM = tEMs; |
| | | db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Orderback.ITEM iTEM = new Orderback.ITEM(); |
| | | iTEM.SCDDH = ""; |
| | | iTEM.GC = ""; |
| | | iTEM.MSGCODE = "1"; |
| | | iTEM.MSGDESP = e.Message; |
| | | tEMs.Add(iTEM); |
| | | orderResponse.ROOT.ITEM = tEMs; |
| | | db.RollbackTran(); |
| | | return orderResponse; |
| | | throw; |
| | | } |
| | | return orderResponse; |
| | | } |
| | | /// <summary> |
| | | /// sap-wms生产订单信息添加SimpleResult |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | |
| | | iTEM.SCDDH = item.SCDDH; |
| | | iTEM.GC = item.GC; |
| | | iTEM.MSGCODE = "1"; |
| | | iTEM.MSGDESP = $"{item.SCDDH}不存在"; |
| | | iTEM.MSGDESP = $"{item.SCDDH}已存在"; |
| | | tEMs.Add(iTEM); |
| | | } |
| | | iTEM.SCDDH = item.SCDDH; |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static SimpleResult Mater_In(MaterDto.Root model) |
| | | internal static WLReturnRoot.Root Mater_In(MaterDto.Root model) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | result.resultMsg = "成功"; |
| | | try |
| | | var response = new WLReturnRoot.Root |
| | | { |
| | | db.BeginTran(); |
| | | List<TN_Material> list = new List<TN_Material>(); |
| | | foreach (var item in model.ROOT.ITEM) |
| | | ROOT = new WLReturnRoot.ROOT |
| | | { |
| | | ITEM = new List<WLReturnRoot.ITEM> |
| | | { |
| | | |
| | | } |
| | | } |
| | | }; |
| | | db.BeginTran(); |
| | | List<WLReturnRoot.ITEM> list = new List<WLReturnRoot.ITEM>(); |
| | | foreach (var item in model.ROOT.ITEM) |
| | | { |
| | | try |
| | | { |
| | | |
| | | var result = new WLReturnRoot.ITEM(); |
| | | |
| | | var materlist = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == item.WLBM).First(); |
| | | if (materlist == null) |
| | | { |
| | |
| | | tN_Material.S_CPZ = item.CPZ; |
| | | tN_Material.S_CPZMS = item.CPZMS; |
| | | tN_Material.S_ITEM_NAME = item.VTEXT; |
| | | list.Add(tN_Material); |
| | | db.Insertable<TN_Material>(tN_Material).ExecuteCommand(); |
| | | result.MSGDESP = "成功"; |
| | | result.MSGCODE = 0; |
| | | result.GCBM = item.GCBM; |
| | | result.WLBM = item.WLBM; |
| | | list.Add(result); |
| | | } |
| | | |
| | | else |
| | | { |
| | | materlist.S_ITEM_CODE = item.WLBM; |
| | | materlist.S_GCBM = item.GCBM; |
| | | materlist.S_WLZBM = item.WLZBM; |
| | | materlist.S_WLZMS = item.WLZMS; |
| | | materlist.S_WLLX = item.WLLX; |
| | | materlist.S_WLMS = item.WLMS; |
| | | materlist.S_WLCMS = item.WLCMS; |
| | | materlist.S_DWBM = item.DWBM; |
| | | materlist.S_DWMS = item.DWMS; |
| | | materlist.S_JBM = item.JBM; |
| | | materlist.S_CPZ = item.CPZ; |
| | | materlist.S_CPZMS = item.CPZMS; |
| | | materlist.S_ITEM_NAME = item.VTEXT; |
| | | db.Updateable<TN_Material>(materlist).ExecuteCommand(); |
| | | result.MSGDESP = "成功"; |
| | | result.MSGCODE = 0; |
| | | result.GCBM = item.GCBM; |
| | | result.WLBM = item.WLBM; |
| | | list.Add(result); |
| | | } |
| | | } |
| | | db.Insertable<TN_Material>(list).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | catch (Exception e) |
| | | { |
| | | var result = new WLReturnRoot.ITEM(); |
| | | result.MSGDESP = e.Message; |
| | | result.MSGCODE = 1; |
| | | result.GCBM = item.GCBM; |
| | | result.WLBM = item.WLBM; |
| | | list.Add(result); |
| | | db.RollbackTran(); |
| | | throw; |
| | | } |
| | | } |
| | | response.ROOT.ITEM = list; |
| | | //db.Insertable<TN_Material>(list).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | db.RollbackTran(); |
| | | throw; |
| | | } |
| | | return result; |
| | | |
| | | return response; |
| | | } |
| | | |
| | | |
| | |
| | | var po = WMSHelper.GetInboundOrder(itemwlpz.HEAD.WLPZH); |
| | | if (po == null) |
| | | { |
| | | |
| | | |
| | | #region MyRegion |
| | | po = new TN_Inbound_Order { S_NO = itemwlpz.HEAD.WLPZH, S_WLPZND = itemwlpz.HEAD.ND, S_FACTORY = itemwlpz.ITEM[0].GC, S_IN_TYPE = "内采入库", S_BS_TYPE = itemwlpz.HEAD.YDLX }; |
| | | po.Details = new List<TN_Inbound_Detail>(); |
| | |
| | | { |
| | | itemwlpz.ITEM.ForEach(a => |
| | | { |
| | | //if (a.ITEM1.Select(s => s.XLH).Count() > 0)//判断序列号是否为多个 |
| | | //{ |
| | | // foreach (var item in a.ITEM1.Select(s => s.XLH)) |
| | | // { |
| | | // po.Details.Add(new TN_Inbound_Detail |
| | | // { |
| | | // S_IO_NO = model.ROOT.WLPZ.HEAD.WLPZBH, |
| | | // N_ROW_NO = po.Details.Count + 1, |
| | | // S_ITEM_CODE = a.WLH, |
| | | // F_QTY = a.SL, |
| | | // S_ITEM_STATE = "物料", |
| | | // S_ITEM_NAME = "物料", |
| | | // F_ACC_B_QTY = 0, |
| | | // S_KCDD = a.KCDD, |
| | | // S_UOM = a.JBJLDW,//计量单位 |
| | | // S_SERIAL_NO = item, |
| | | // S_BATCH_NO = a.PC, |
| | | // }); |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | |
| | | po.Details.Add(new TN_Inbound_Detail |
| | | { |
| | | S_IO_NO = itemwlpz.HEAD.WLPZH, |
| | |
| | | { |
| | | var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).FirstOrDefault(); |
| | | poq.F_QTY = a.SL; |
| | | |
| | | db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand(); |
| | | } |
| | | else |
| | |
| | | N_ROW_NO = a.WLPZHXM, |
| | | S_ITEM_CODE = a.WLBM, |
| | | F_QTY = a.SL, |
| | | S_ITEM_STATE = "物料", |
| | | S_ITEM_STATE = "正常", |
| | | S_ITEM_NAME = "物料", |
| | | S_CKPZKJND = a.CKPZND, |
| | | F_ACC_B_QTY = 0, |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | result.resultMsg = "成功"; |
| | | result.WLPZBH = itemwlpz.HEAD.WLPZH; |
| | | result.WLPZND = itemwlpz.HEAD.ND; |
| | |
| | | catch (Exception e) |
| | | { |
| | | var result = new SimpleResult(); |
| | | |
| | | result.resultMsg = "失败"; |
| | | result.WLPZBH = ""; |
| | | result.WLPZND = "0"; |
| | |
| | | S_START_AREA = locinfo.S_AREA_CODE, |
| | | S_START_WH = locinfo.S_WH_CODE, |
| | | S_END_LOC = model.start, |
| | | //S_BS_NO = model.arrival_no, |
| | | S_BS_NO = model.MaterList[0].arrival_no, |
| | | N_TYPE = 1, |
| | | S_TYPE = WMSTask.GetTypeStr(1), |
| | | S_OP_DEF_CODE = "", |
| | |
| | | internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model) |
| | | { |
| | | var result = new SimpleResult(); |
| | | |
| | | |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | try |
| | | { |
| | | |
| | | |
| | | result.resultMsg = "成功"; |
| | | result.resultCode = 0; |
| | | if (string.IsNullOrEmpty(model.arrival_no)) |
| | |
| | | result.resultCode = 1; |
| | | return result; |
| | | } |
| | | |
| | | //人工分拣 容器货品表数量、分配量升降 |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == model.arrival_no).First(); |
| | |
| | | return result; |
| | | |
| | | } |
| | | |
| | | |
| | | //根据不同出库类型 回调sap |
| | | if (po.S_OUT_TYPE == "冲销出库") |
| | | { |
| | | result = await CXAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | result = await CXAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | } |
| | | else |
| | | if (po.S_OUT_TYPE == "出库")//普通出库 |
| | | { |
| | | |
| | | result = await AddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | result = await AddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "计划外发料出库") |
| | | { |
| | | result = await jhwtlAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | } |
| | | else if (po.S_OUT_TYPE == "成本中心出库") |
| | | { |
| | | result = await CBAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start); |
| | | } |
| | | |
| | | |
| | | //通用接口 对容器货品的删减 和生成回库单 都要用的接口 |
| | | result = await TYAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE); |
| | | return result; |
| | | result = await TYAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE); |
| | | #region 升降量 |
| | | |
| | | bool adds = true; |
| | | |
| | | //var itemlist = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).ToList(); |
| | | if (model.MaterList.Count > 0) |
| | | { |
| | | var url = Settings.MoboxSeverUrl + "inventory/AddChange"; |
| | | //仓库量表升量 |
| | | var req = new AddChangeModel { op_type = 4 }; |
| | | //库区量表升量 |
| | | var req2 = new AddChangeModel { op_type = 7 }; |
| | | model.MaterList.ForEach(a => |
| | | { |
| | | LogHelper.Info($"填充数据"); |
| | | LogHelper.Info($"减仓库量表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); |
| | | req.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = po.S_WH_CODE, |
| | | item_code = a.item_code, |
| | | item_name = "", |
| | | qty = a.qty |
| | | }); |
| | | LogHelper.Info($"减库区量表数据 库区{po.S_AREA_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}"); |
| | | req2.item_info.Add(new AddChangeModel.itemModel |
| | | { |
| | | wh_code = po.S_WH_CODE, |
| | | area_code = po.S_AREA_CODE, |
| | | item_code = a.item_code, |
| | | item_name = "", |
| | | qty = a.qty |
| | | }); |
| | | }); |
| | | var reqData = JsonConvert.SerializeObject(req); |
| | | var AppKey = Settings.AppKey; |
| | | var AppSecret = Settings.AppSecret; |
| | | var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); |
| | | //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); |
| | | LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}"); |
| | | var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime); |
| | | LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}"); |
| | | var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify); |
| | | if (!string.IsNullOrEmpty(res)) |
| | | { |
| | | LogHelper.Info($"mobox 仓库降量接口返回 {res}"); |
| | | var moboxres = JsonConvert.DeserializeObject<moboxres>(res); |
| | | if (moboxres.err_code != 0) |
| | | { |
| | | adds = false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"mobox 仓库降量接口返回为空"); |
| | | |
| | | } |
| | | var reqData2 = JsonConvert.SerializeObject(req2); |
| | | var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(); |
| | | //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2); |
| | | LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}"); |
| | | var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2); |
| | | LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}"); |
| | | var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2); |
| | | if (!string.IsNullOrEmpty(res2)) |
| | | { |
| | | LogHelper.Info($"mobox 库区降量接口返回 {res2}"); |
| | | var moboxres = JsonConvert.DeserializeObject<moboxres>(res); |
| | | if (moboxres.err_code != 0) |
| | | { |
| | | adds = false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"mobox 库区降量接口返回为空"); |
| | | |
| | | } |
| | | if (adds) addOnShelves(po, model.cntr_code, 2); |
| | | |
| | | } |
| | | else LogHelper.Info($"托盘{model.cntr_code}无需要升降量的物料"); |
| | | db.CommitTran(); |
| | | #endregion |
| | | return result; |
| | | |
| | | } |
| | | catch (Exception e) |
| | | {result.resultMsg=e.Message; |
| | | db.RollbackTran(); |
| | | return result; |
| | | throw; |
| | | } |
| | | } |
| | | |
| | | } |
| | | public static async Task<SimpleResult> TYAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE) |
| | | public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | var result = new SimpleResult(); |
| | | |
| | | try |
| | |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | |
| | | //分拣单 |
| | | //var popp = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First(); |
| | | |
| | | //回参物料信息 |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | |
| | | if (cntr.Count() > 0) |
| | | { |
| | | db.BeginTran(); |
| | | //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开 |
| | | var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code && a.N_BS_ROW_NO == item.N_ROW_NO).First();//&& a.S_BATCH_NO == item.S_BATCH_NO |
| | | //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开&& a.N_BS_ROW_NO == item.N_ROW_NO |
| | | var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code ).First();//&& a.S_BATCH_NO == item.S_BATCH_NO |
| | | if (cir != null) |
| | | { |
| | | cir.F_QTY -= item.qty; |
| | |
| | | } |
| | | db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | |
| | | db.CommitTran(); |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | db.RollbackTran(); |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("物料信息绑定到满容器上" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | //} |
| | | |
| | | |
| | | |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> CBAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> CBAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | |
| | |
| | | //回参物料信息 |
| | | List<CBcenterBackDto.HEADItem> iTEMs = new List<CBcenterBackDto.HEADItem>(); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | string GZRQ = ""; |
| | | string PZZDRQ = ""; |
| | | if (po.BUDAT != null) |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | if (po.BLDAT != null) |
| | | { |
| | | PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); |
| | | |
| | | } |
| | | foreach (var item in MaterList) |
| | | { |
| | | var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); |
| | | CBcenterBackDto.HEADItem ckbitem = new CBcenterBackDto.HEADItem(); |
| | | ckbitem.WLBH = item.item_code; |
| | | ckbitem.KEY = arrival_no; |
| | | |
| | | ckbitem.SL = item.qty; |
| | | ckbitem.CBZX = po.S_CBZX; |
| | | ckbitem.WLBH = item.item_code; |
| | | ckbitem.SL = item.qty; |
| | | ckbitem.KCDD = podetail?.S_KCDD; |
| | | ckbitem.LRZX = po.S_LRZX; |
| | | ckbitem.ZZKM = po.S_ZZKM; |
| | | ckbitem.GC = po.S_FACTORY; |
| | | ckbitem.GZRY = po.S_CREATOR_NAME; |
| | | ckbitem.PZRQ = DateTime.Now.ToString(); |
| | | ckbitem.GZRY = po.UNAME; |
| | | |
| | | ckbitem.KCDD = podetail?.S_KCDD; |
| | | ckbitem.PC = podetail?.S_BATCH_NO; |
| | | ckbitem.PZRQ = PZZDRQ; |
| | | ckbitem.GZRQ = GZRQ; |
| | | |
| | | |
| | | List<CBcenterBackDto.ITEM> listitem1 = new List<CBcenterBackDto.ITEM>(); |
| | | |
| | | CBcenterBackDto.ITEM listitem1 = new CBcenterBackDto.ITEM(); |
| | | // List<CBcenterBackDto.ITEM> listitem1 = new List<CBcenterBackDto.ITEM>(); |
| | | //string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | //var serialNos = string.Join(",", CntrItemRels |
| | | // .Where(s => s.S_ITEM_CODE == item.item_code) |
| | | // .Select(s => s.S_SERIAL_NO)); |
| | | //string[] xlhValues = serialNos.Split(','); |
| | | string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | foreach (var xlhValue in xlhValues) |
| | | { |
| | | CBcenterBackDto.ITEM newItem = new CBcenterBackDto.ITEM { XLH = xlhValue }; |
| | | listitem1.Add(newItem); |
| | | } |
| | | // string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | listitem1.XLH= podetail?.S_SERIAL_NO.Split(',').ToList(); |
| | | //foreach (var xlhValue in xlhValues) |
| | | //{ |
| | | // CBcenterBackDto.ITEM newItem = new CBcenterBackDto.ITEM { XLH = xlhValue }; |
| | | // listitem1.Add(newItem); |
| | | //} |
| | | ckbitem.ITEM = listitem1; |
| | | iTEMs.Add(ckbitem); |
| | | |
| | |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"成本中心出库xml数据{xml}"); |
| | | // 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | string responseXml = ""; |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求并接收响应 |
| | | HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | //// 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | //string responseXml = ""; |
| | | //using (HttpClient client = new HttpClient()) |
| | | //{ |
| | | // // 发送 POST 请求并接收响应 |
| | | // HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | // responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | |
| | | } |
| | | //} |
| | | |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM2_CBZX service = new ZSCM2_CBZX(); |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZfmScm2CbzxMm001 request = new ZfmScm2CbzxMm001(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"成本中心出库SAP回调"); |
| | | // 调用Web Service |
| | | ZfmScm2CbzxMm001Response responses = service.ZfmScm2CbzxMm001(request); |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("SAP返回结果: " + responses.Output); |
| | | |
| | | // 解析Output中的凭证号等信息 |
| | | |
| | | #endregion |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responseXml.ToString()); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString()); |
| | | |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | |
| | | foreach (var item in MaterList) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLBM = item.item_code; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | materialVoucher.F_QTY = item.qty; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | //MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | //materialVoucher.S_NO = po.S_NO; |
| | | //materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | //materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; |
| | | //materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | //materialVoucher.STATUS = 0; |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | db.CommitTran(); |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | db.RollbackTran(); |
| | | LogHelper.Info("计划外退料回调报错" + ex.Message); |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("成本中心回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | | throw; |
| | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | //} |
| | | /// <summary> |
| | | /// 计划外退料回调 |
| | | /// </summary> |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> jhwtlAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> jhwtlAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | try |
| | |
| | | { |
| | | HEAD = new JHWBackDto.HEAD |
| | | { |
| | | //KEY = "KeyExample", |
| | | //GZRQ = "2023-04-01", |
| | | //PZZDRQ = "2023-04-02", |
| | | //YHM = "Username", |
| | | //PZTTWB = "HeaderText", |
| | | //YDLX = "MovementType", |
| | | //TSKCBS = "SpecialStock" |
| | | |
| | | |
| | | KEY = po.S_NO, |
| | | GZRQ = GZRQ, |
| | | PZZDRQ = PZZDRQ, |
| | |
| | | }; |
| | | //回参物料信息 |
| | | List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>(); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); |
| | | JHWBackDto.ITEM ckbitem = new JHWBackDto.ITEM(); |
| | | ckbitem.WLBH = item.item_code; |
| | | ckbitem.GC = po.S_FACTORY; |
| | | |
| | | //ckbitem.PH = podetail?.S_PH; |
| | | |
| | | //ckbitem.TSKCBS = podetail?.S_TSKCBS; |
| | | ckbitem.XSDD = podetail?.S_XSDD; |
| | | ckbitem.XSDDHXM = podetail?.S_XSDDXMBH; |
| | |
| | | ckbitem.WBS = podetail?.S_WBS; |
| | | ckbitem.KCDD = podetail?.S_KCDD; |
| | | ckbitem.PC = podetail?.S_BATCH_NO; |
| | | |
| | | JHWBackDto.ITEM1 listitem1 = new JHWBackDto.ITEM1(); |
| | | //string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | //var serialNos = string.Join(",", CntrItemRels |
| | |
| | | //db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | #region wms-sap回调 |
| | | //类转json |
| | | |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | //json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"出计划外发料出库xml数据{xml}"); |
| | | LogHelper.Info($"计划外发料出库xml数据{xml}"); |
| | | // 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | string responseXml = ""; |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求并接收响应 |
| | | HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | //string responseXml = ""; |
| | | //using (HttpClient client = new HttpClient()) |
| | | //{ |
| | | // // 发送 POST 请求并接收响应 |
| | | // HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | // responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | |
| | | } |
| | | //} |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW(); |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZscmScflJhw request = new ZscmScflJhw(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"计划外SAP回调"); |
| | | // 调用Web Service |
| | | ZscmScflJhwResponse responses = service.ZscmScflJhw(request); |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("SAP返回结果: " + responses.Output); |
| | | |
| | | // 解析Output中的凭证号等信息 |
| | | |
| | | #endregion |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responseXml.ToString()); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString()); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString()); |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | foreach (var item in MaterList) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLBM = item.item_code; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | materialVoucher.F_QTY = item.qty; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | db.CommitTran(); |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | db.RollbackTran(); |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("计划外退料回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | //} |
| | | /// <summary> |
| | | /// 通用冲销回调 |
| | | /// </summary> |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> CXAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> CXAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | |
| | | var result = new SimpleResult(); |
| | | |
| | | |
| | |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | |
| | | string GZRQ = ""; |
| | | if (po.BUDAT != null) |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | |
| | | //来源冲销凭证对应的物料凭证信息 |
| | | //var poIn = db.Queryable<TN_Inbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == po.S_BS_NO).First(); |
| | | //根据入库查看凭证编号信息 |
| | |
| | | { |
| | | ROOT = new CXCkBackDto.ROOT |
| | | { |
| | | HEAD = new CXCkBackDto.HEAD |
| | | HEAD = new List<CXCkBackDto.HEAD> |
| | | { |
| | | WLPZ = po.S_WLPZ, |
| | | WLPZNF = po.S_WLPZNF, |
| | | WLPZXM = MaterList[0].N_ROW_NO, |
| | | GZRQ = "2025-03-20", |
| | | SRRQ = "2025-03-19", |
| | | GZRY = "过账人员姓名" |
| | | |
| | | //GZRQ = GZRQ, |
| | | //SRRQ = PZZDRQ, |
| | | //WLPZ = po.S_WLPZ, |
| | | //WLPZNF = po.S_WLPZNF, |
| | | //WLPZXM = MaterList[0].N_ROW_NO, |
| | | |
| | | //GZRY = po.UNAME |
| | | } |
| | | } |
| | | }; |
| | | //回参物料信息 |
| | | //List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | //foreach (var item in MaterList) |
| | | //{ |
| | | List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>(); |
| | | //出库单详情 |
| | | var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO).ToList(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD(); |
| | | hEAD.GZRQ = GZRQ; |
| | | hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd"); |
| | | |
| | | // db.BeginTran(); |
| | | // //出库记录 |
| | | // var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First(); |
| | | // OutboundRecord outboundRecord = new OutboundRecord(); |
| | | // outboundRecord.S_WLPZBH = pz.S_WLPZBH; |
| | | // outboundRecord.S_WLPZND = pz.S_WLPZND; |
| | | //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.item_code && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH; |
| | | //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.item_code&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND; |
| | | |
| | | // outboundRecord.S_NO = arrival_no; |
| | | // outboundRecord.S_WLBM = item.item_code; |
| | | // outboundRecord.S_SL = item.qty; |
| | | // outboundRecord.S_CNTR_CODE = cntr_code; |
| | | // records.Add(outboundRecord); |
| | | //hEAD.WLPZ = porecord.First()?.S_WLPZBH; |
| | | //hEAD.WLPZNF = porecord.First()?.S_WLPZND; |
| | | |
| | | //} |
| | | //db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | hEAD.WLPZ = po.S_WLPZ; |
| | | hEAD.WLPZNF = po.S_WLPZND; |
| | | hEAD.WLPZXM = item.N_ROW_NO; |
| | | hEAD.GZRY = po.UNAME; |
| | | listhead.Add(hEAD); |
| | | } |
| | | myRoot.ROOT.HEAD = listhead; |
| | | |
| | | #region wms-sap回调 |
| | | |
| | | |
| | | |
| | | //类转json |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | //json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"冲销出库回调xml数据{xml}"); |
| | | // 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | string responseXml = ""; |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求并接收响应 |
| | | HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | |
| | | } |
| | | ZSCM2_CXPZ service = new ZSCM2_CXPZ(); |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"通用冲销SAP回调"); |
| | | // 调用Web Service |
| | | ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request); |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("通用冲销SAP返回结果: " + responses.Output); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responseXml.ToString()); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString()); |
| | | var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString()); |
| | | var resmeg = ""; |
| | | int rescode = 0; |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | if (data!=null) |
| | | { |
| | | List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | foreach (var item in data.ROOT.ITEM) |
| | | { |
| | | if (item.MSGCODE == 0) |
| | | { |
| | | |
| | | var onr = MaterList.Where(s => s.N_ROW_NO == item.WLPZHXM).First(); |
| | | |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLPZBH = item?.WLPZBH; |
| | | materialVoucher.S_WLPZND = item?.WLPZND; |
| | | materialVoucher.S_WLPZHXM = item?.WLPZHXM; |
| | | |
| | | materialVoucher.S_YWLPZBH = item?.YWLPZBH; |
| | | materialVoucher.S_YWLPZND = item?.YWLPZND; |
| | | materialVoucher.S_YWLPZHXM = item?.YWLPZHXM; |
| | | materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | materialVoucher.F_QTY = onr.qty; |
| | | //materialVoucher.STATUS = 0; |
| | | resmeg += item?.MSGDESP; |
| | | materiallist.Add(materialVoucher); |
| | | |
| | | |
| | | } |
| | | else { |
| | | rescode = 1; |
| | | } |
| | | |
| | | |
| | | } |
| | | if (materiallist.Count()>0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materiallist).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | result.resultMsg = resmeg; |
| | | result.resultCode = rescode; |
| | | #endregion |
| | | |
| | | db.CommitTran(); |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | db.RollbackTran(); |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("通用冲销回调报错" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 普通回调接口 |
| | |
| | | /// <param name="cntr_code"></param> |
| | | /// <param name="start"></param> |
| | | /// <returns></returns> |
| | | public static async Task<SimpleResult> AddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | public static async Task<SimpleResult> AddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start) |
| | | { |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | //using (var db = new SqlHelper<object>().GetInstance()) |
| | | //{ |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | var result = new SimpleResult(); |
| | | CkBcakDto.Root myRoot = new CkBcakDto.Root |
| | | { |
| | | ROOT = new CkBcakDto.ROOT |
| | | { |
| | | WLPZ = new CkBcakDto.WLPZ |
| | | { |
| | | ZLSH = "流水号值", |
| | | YWLX = "业务类型值", |
| | | GZRQ = DateTime.Now.ToString("yyyy-MM-dd"), // 假设日期格式为"年-月-日" |
| | | GZRY = "过账人员值", |
| | | ITEM = new List<CkBcakDto.ITEM> |
| | | { |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | try |
| | | { |
| | | //库位信息 |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First(); |
| | | //出库单详情 |
| | | var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First(); |
| | | string GZRQ = ""; |
| | | string PZZDRQ = ""; |
| | | if (po.BUDAT != null) |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | if (po.BLDAT != null) |
| | | { |
| | | PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd"); |
| | | |
| | | //出库回调入参 |
| | | } |
| | | CkBcakDto.Root myRoot = new CkBcakDto.Root |
| | | { |
| | | ROOT = new CkBcakDto.ROOT |
| | | { |
| | | WLPZ = new CkBcakDto.WLPZ |
| | | { |
| | | KEY = po.S_NO, |
| | | ZYWLX = "业务类型值", |
| | | PZRQ = PZZDRQ, |
| | | GZRQ = GZRQ, // 假设日期格式为"年-月-日" |
| | | GZRY = po.UNAME, |
| | | ITEM = new List<CkBcakDto.ITEM> |
| | | { |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | //出库回调入参 |
| | | |
| | | //回参物料信息 |
| | | List<CkBcakDto.ITEM> iTEMs = new List<CkBcakDto.ITEM>(); |
| | | List<OutboundRecord> records = new List<OutboundRecord>(); |
| | | //回参物料信息 |
| | | List<CkBcakDto.ITEM> iTEMs = new List<CkBcakDto.ITEM>(); |
| | | foreach (var item in MaterList) |
| | | { |
| | | // 插入到托盘明细表 |
| | | //var cntr = ContainerHelper.GetCntrItemRel(cntr_code); |
| | | //var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList(); |
| | | //if (cntr.Count() > 0) |
| | | //{ |
| | | |
| | | db.BeginTran(); |
| | | //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开 |
| | | //var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code && a.S_BATCH_NO == item.S_BATCH_NO && a.N_ROW_NO == item.N_ROW_NO).First(); |
| | | //if (cir != null) |
| | | //{ |
| | | //cir.F_QTY -= item.qty; |
| | | //cir.F_ALLOC_QTY -= item.qty; |
| | | //cir.T_MODIFY = DateTime.Now; |
| | | //if (cir.F_QTY == 0) |
| | | //{ |
| | | // db.Deleteable(cir).ExecuteCommand(); |
| | | //} |
| | | //else |
| | | //{ |
| | | // db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand(); |
| | | // //添加回库作业 |
| | | |
| | | //var wmsTask = new WMSTask |
| | | // { |
| | | // S_CNTR_CODE = cntr_code, |
| | | // S_CODE = WMSHelper.GenerateTaskNo(), |
| | | // S_START_LOC = start, |
| | | // S_START_AREA = startinfo.S_AREA_CODE, |
| | | // S_START_WH = startinfo.S_WH_CODE, |
| | | // S_END_LOC = startinfo.S_CODE, |
| | | // N_TYPE = 1, |
| | | // S_TYPE = WMSTask.GetTypeStr(1), |
| | | // S_OP_DEF_CODE = "", |
| | | // S_OP_DEF_NAME = "pda入库" |
| | | // }; |
| | | // if (WMSHelper.CreateWmsTask(wmsTask)) |
| | | // { |
| | | // LocationHelper.LockLoc(start, 1); |
| | | // result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}"; |
| | | // } |
| | | |
| | | |
| | | |
| | | //} |
| | | |
| | | |
| | | var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault(); |
| | | CkBcakDto.ITEM ckbitem = new CkBcakDto.ITEM(); |
| | |
| | | ckbitem.GC = po.S_FACTORY; |
| | | ckbitem.KCDD = podetail?.S_KCDD; |
| | | |
| | | List<CkBcakDto.ITEM1> listitem1 = new List<CkBcakDto.ITEM1>(); |
| | | CkBcakDto.ITEM1 listitem1 = new CkBcakDto.ITEM1(); |
| | | //var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE == item.item_code&&a.N_ROW_NO==item.N_ROW_NO).ToList(); |
| | | ////string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | //var serialNos = string.Join(",", CntrItemRels |
| | | // .Where(s => s.S_ITEM_CODE == item.item_code) |
| | | // .Select(s => s.S_SERIAL_NO)); |
| | | string[] xlhValues = item.S_SERIAL_NO.Split(','); |
| | | foreach (var xlhValue in xlhValues) |
| | | { |
| | | CkBcakDto.ITEM1 newItem = new CkBcakDto.ITEM1 { XLH = xlhValue }; |
| | | listitem1.Add(newItem); |
| | | } |
| | | listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList(); |
| | | //foreach (var xlhValue in xlhValues) |
| | | //{ |
| | | // CkBcakDto.ITEM1 newItem = new CkBcakDto.ITEM1 { XLH = xlhValue }; |
| | | // listitem1.Add(newItem); |
| | | //} |
| | | ckbitem.ITEM1 = listitem1; |
| | | iTEMs.Add(ckbitem); |
| | | |
| | | //} |
| | | //else |
| | | //{ |
| | | // db.RollbackTran(); |
| | | // result.resultCode = 1; |
| | | // result.resultMsg = $"物料不存在{item.item_code}"; |
| | | // LogHelper.Info($"物料不存在{item.item_code}"); |
| | | // return result; |
| | | //} |
| | | //var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First(); |
| | | //OutboundRecord outboundRecord = new OutboundRecord(); |
| | | //outboundRecord.S_WLPZBH = pz.S_WLPZBH; |
| | | //outboundRecord.S_WLPZND = pz.S_WLPZND; |
| | | |
| | | //outboundRecord.S_NO = arrival_no; |
| | | //outboundRecord.S_WLBM = item.item_code; |
| | | //outboundRecord.S_SL = item.qty; |
| | | //outboundRecord.S_CNTR_CODE = cntr_code; |
| | | //records.Add(outboundRecord); |
| | | //} |
| | | //else |
| | | //{ |
| | | // result.resultCode = 1; |
| | | // result.resultMsg = $"获取托盘信息失败{cntr_code}"; |
| | | // LogHelper.Info($"获取托盘信息失败{cntr_code}"); |
| | | // return result; |
| | | //} |
| | | } |
| | | //db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | #region wms-sap回调 |
| | | //类转json |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | myRoot.ROOT.WLPZ.ITEM = iTEMs; |
| | | //db.Insertable<OutboundRecord>(records).ExecuteCommand(); |
| | | #region wms-sap回调 |
| | | //类转json |
| | | var json = JsonConvert.SerializeObject(myRoot.ROOT); |
| | | //json转xml |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | |
| | | LogHelper.Info($"出库xml数据{xml}"); |
| | | // 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | string responseXml = ""; |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求并接收响应 |
| | | HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | LogHelper.Info($"出库xml数据{xml}"); |
| | | //// 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | //string responseXml = ""; |
| | | //using (HttpClient client = new HttpClient()) |
| | | //{ |
| | | // // 发送 POST 请求并接收响应 |
| | | // HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | // responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | |
| | | } |
| | | //} |
| | | ZSCM2_SCFL service = new ZSCM2_SCFL(); |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZscmScfl request = new ZscmScfl(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"出库SAP回调"); |
| | | // 调用Web Service |
| | | ZscmScflResponse responses = service.ZscmScfl(request); |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("出库SAP返回结果: " + responses.Output); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responseXml.ToString()); |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString()); |
| | | var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString()); |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | foreach (var item in MaterList) |
| | | { |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | materialVoucher.S_WLBM = item.item_code; |
| | | materialVoucher.S_WLH = item.N_ROW_NO; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | materialVoucher.F_QTY = item.qty; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | } |
| | | ////添加凭证记录表 |
| | | //result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | //result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | //MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | //materialVoucher.S_NO = po.S_NO; |
| | | //materialVoucher.S_TYPE = po.S_OUT_TYPE; |
| | | //materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH; |
| | | //materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | //materialVoucher.STATUS = 0; |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | db.CommitTran(); |
| | | //db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | db.RollbackTran(); |
| | | //db.RollbackTran(); |
| | | LogHelper.Info("普通出库回调" + |
| | | "" + ex.Message); |
| | | Console.WriteLine(ex.Message); |
| | |
| | | return result; |
| | | } |
| | | |
| | | } |
| | | //} |
| | | |
| | | |
| | | |
| | |
| | | |
| | | try |
| | | { |
| | | |
| | | if (MaterList.Count()<1) |
| | | { |
| | | throw new Exception("累计码盘数量物料数据为空"); |
| | | } |
| | | foreach (var item in MaterList) |
| | | { |
| | | var allInfolist = db.Queryable<TN_Inbound_Detail>() |
| | |
| | | } |
| | | else |
| | | { |
| | | //2.插入新的容器物料信息(容器号不变) |
| | | cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = item.S_BATCH_NO, S_SERIAL_NO = item.S_SERIAL_NO, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no }; |
| | | //2.插入新的容器物料信息(容器号不变S_SERIAL_NO = item.S_SERIAL_NO,) |
| | | cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM=info.S_UOM, S_BATCH_NO = item.S_BATCH_NO, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no }; |
| | | db.Insertable<CntrItemRel>(cir).ExecuteCommand(); |
| | | } |
| | | var count = db.Queryable<CntrItemRel>().Count(a => a.S_CNTR_CODE == cntr.S_CODE); |
| | |
| | | else |
| | | { |
| | | //var az = db.Queryable<AZInventory>().ToList(); |
| | | var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(), S_FACTORY = po.S_FACTORY, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO }; |
| | | var po1 = new TN_Outbound_Order { S_NO = WMSHelper.GenerateShippNo(),UNAME=po.UNAME, S_FACTORY = po.S_FACTORY,S_CBZX=po.S_CBZX,S_ZZKM=po.S_ZZKM,S_LRZX=po.S_LRZX, BLDAT = po.BLDAT, BUDAT=po.BUDAT, S_OUT_TYPE = po.S_OUT_TYPE, S_BS_TYPE = po.S_BS_TYPE, S_AREA_CODE = po.S_AREA_CODE, S_BS_NO = po.S_NO }; |
| | | |
| | | po1.Details = new List<TN_Outbound_Detail>(); |
| | | if (po.Details.Count() > 0) |
| | |
| | | S_DO_NO = po1.S_NO, |
| | | S_AREA_CODE = "HJQ", |
| | | N_ROW_NO = a.N_ROW_NO, |
| | | S_KCDD = a.S_KCDD, |
| | | S_ITEM_CODE = a.S_ITEM_CODE, |
| | | S_ITEM_NAME = a.S_ITEM_NAME, |
| | | S_UOM = a.S_UOM, |
| | | F_QTY = a.F_QTY - a.F_ACC_D_QTY, |
| | | S_BATCH_NO = a.S_BATCH_NO, |
| | | S_SERIAL_NO = a.S_SERIAL_NO, |
| | |
| | | //var db = new SqlHelper<object>().GetInstance(); |
| | | using (var db = new SqlHelper<object>().GetInstance()) |
| | | { |
| | | |
| | | LogHelper.Info($"进来了"); |
| | | bool resu = false; |
| | | try |
| | | { |
| | | db.BeginTran(); |
| | | |
| | | var po = db.Queryable<TN_Inbound_Order>().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First(); |
| | | |
| | | LogHelper.Info($"进来了2"); |
| | | #region MyRegion |
| | | if (po.Details.Count > 0) |
| | | { |
| | |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM_NC service = new ZSCM_NC(); |
| | | // 添加语言设置(中文) |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZscmNc request = new ZscmNc(); |
| | |
| | | if (data.ROOT.ITEM.MSGCODE == 0) |
| | | { |
| | | materialVoucher.S_NO = model.S_NO; |
| | | materialVoucher.S_TYPE = po.S_BS_TYPE; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | |
| | | JHWBackDto.ITEM ckbitem = new JHWBackDto.ITEM(); |
| | | ckbitem.WLBH = item.S_ITEM_CODE; |
| | | ckbitem.GC = po.S_FACTORY; |
| | | |
| | | //ckbitem.PH = podetail?.S_PH; |
| | | |
| | | // ckbitem.TSKCBS = podetail?.S_TSKCBS; |
| | | ckbitem.XSDD = podetail?.S_XSDD; |
| | | ckbitem.XSDDHXM = podetail?.S_XSDDXMBH; |
| | | ckbitem.SL = item.F_QTY; |
| | | ckbitem.DW = podetail?.S_UOM; |
| | | ckbitem.DDH = podetail?.S_DDH; |
| | | //ckbitem.PH = podetail?.S_PH; |
| | | // ckbitem.TSKCBS = podetail?.S_TSKCBS; |
| | | //ckbitem.DDHXM = (podetail?.N_ROW_NO); |
| | | ckbitem.WBS = podetail?.S_WBS; |
| | | ckbitem.KCDD = podetail?.S_KCDD; |
| | |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW(); |
| | | // 添加语言设置(中文) |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZscmScflJhw request = new ZscmScflJhw(); |
| | |
| | | #region sap回调 |
| | | // 创建Web Service代理类实例 |
| | | ZSCM_WC service = new ZSCM_WC(); |
| | | |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234"); |
| | | // 准备请求参数 |
| | | ZscmWc request = new ZscmWc(); |
| | |
| | | else if (po.S_IN_TYPE == "冲销入库") |
| | | { |
| | | |
| | | var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First(); |
| | | |
| | | //var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First(); |
| | | string GZRQ = ""; |
| | | LogHelper.Info($"冲销入库入库{po.BUDAT}"); |
| | | if (po.BUDAT != null) |
| | | { |
| | | GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd"); |
| | | } |
| | | |
| | | //出库回调入参 |
| | | CXCkBackDto.Root roots = new CXCkBackDto.Root |
| | | { |
| | | ROOT = new CXCkBackDto.ROOT |
| | | { |
| | | HEAD = new CXCkBackDto.HEAD |
| | | HEAD = new List<CXCkBackDto.HEAD> |
| | | { |
| | | WLPZ = materpz.S_WLPZ, |
| | | WLPZNF = materpz.S_WLPZNF, |
| | | WLPZXM = null, |
| | | GZRQ = "2025-03-20", |
| | | SRRQ = DateTime.Now.ToString(), |
| | | GZRY = "过账人员姓名" |
| | | } |
| | | } |
| | | }; |
| | | List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>(); |
| | | //出库单详情 |
| | | LogHelper.Info($"冲销入库入库{GZRQ}"); |
| | | var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); |
| | | //var podet = db.Queryable<tn_i>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList(); |
| | | LogHelper.Info($"数量{porecord.Count()}"); |
| | | LogHelper.Info($"数量{po.Details.Count()}"); |
| | | //if (porecord.Count() <1 ) |
| | | //{ |
| | | // LogHelper.Info($"凭证号不存在"); |
| | | //} |
| | | foreach (var item in po.Details) |
| | | { |
| | | CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD(); |
| | | hEAD.GZRQ = GZRQ; |
| | | hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd"); |
| | | //hEAD.WLPZ = porecord.First()?.S_WLPZBH; |
| | | hEAD.WLPZ = po.S_WLPZ; |
| | | hEAD.WLPZNF = po.S_WLPZND; |
| | | //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH; |
| | | //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.S_ITEM_CODE&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND; |
| | | //hEAD.WLPZNF = porecord.First()?.S_WLPZND; |
| | | hEAD.WLPZXM = item.N_ROW_NO; |
| | | hEAD.GZRY = po.UNAME; |
| | | listhead.Add(hEAD); |
| | | } |
| | | roots.ROOT.HEAD = listhead; |
| | | |
| | | var json = JsonConvert.SerializeObject(roots.ROOT); |
| | | string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; |
| | | XElement responseXElement = XElement.Parse(xml); |
| | |
| | | // 确保HTTP成功状态值 |
| | | response.EnsureSuccessStatusCode(); |
| | | LogHelper.Info($"冲销入库xml数据{xml}"); |
| | | // 创建 StringContent 并指定媒体类型为 "text/xml" |
| | | HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml"); |
| | | string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData"; |
| | | string responseXml = ""; |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求并接收响应 |
| | | HttpResponseMessage responsess = await client.PostAsync(url, content); |
| | | responseXml = await responsess.Content.ReadAsStringAsync(); |
| | | |
| | | |
| | | } |
| | | ZSCM2_CXPZ service = new ZSCM2_CXPZ(); |
| | | service.PreAuthenticate = true; |
| | | service.Url = service.Url + "?sap-language=ZH"; |
| | | // 准备请求参数 |
| | | ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001(); |
| | | request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml; |
| | | LogHelper.Info($"通用冲销SAP回调"); |
| | | // 调用Web Service |
| | | ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request); |
| | | |
| | | |
| | | // 处理响应 |
| | | LogHelper.Info("通用冲销SAP返回结果: " + responses.Output); |
| | | |
| | | // 将 XmlDocument 转换为 JSON 字符串 |
| | | //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | |
| | | XmlDocument xmlDoc = new XmlDocument(); |
| | | xmlDoc.LoadXml(responseXml.ToString()); |
| | | xmlDoc.LoadXml(responses.Output.ToString()); |
| | | JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc)); |
| | | var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString()); |
| | | //var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString()); |
| | | var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString()); |
| | | var resmeg = ""; |
| | | int rescode = 0; |
| | | //添加凭证记录表 |
| | | result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = model.S_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH; |
| | | materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND; |
| | | materialVoucher.STATUS = 0; |
| | | db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | if (data != null) |
| | | { |
| | | List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | foreach (var item in data.ROOT.ITEM) |
| | | { |
| | | if (item.MSGCODE == 0) |
| | | { |
| | | |
| | | var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).First(); |
| | | |
| | | MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | materialVoucher.S_NO = po.S_NO; |
| | | materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | materialVoucher.S_WLPZBH = item?.WLPZBH; |
| | | materialVoucher.S_WLPZND = item?.WLPZND; |
| | | materialVoucher.S_WLPZHXM = item?.WLPZHXM; |
| | | |
| | | materialVoucher.S_YWLPZBH = item?.YWLPZBH; |
| | | materialVoucher.S_YWLPZND = item?.YWLPZND; |
| | | materialVoucher.S_YWLPZHXM = item?.YWLPZHXM; |
| | | materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | materialVoucher.F_QTY = onr.F_QTY; |
| | | //materialVoucher.STATUS = 0; |
| | | resmeg += item?.MSGDESP; |
| | | materiallist.Add(materialVoucher); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | rescode = 1; |
| | | } |
| | | |
| | | |
| | | } |
| | | if (materiallist.Count() > 0) |
| | | { |
| | | |
| | | db.Insertable<MaterialVoucher>(materiallist).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | result.resultMsg = resmeg; |
| | | result.resultCode = rescode; |
| | | //添加凭证记录表 |
| | | //result.resultMsg = data.ROOT.ITEM.MSGDESP; |
| | | //result.resultCode = data.ROOT.ITEM.MSGCODE; |
| | | //List<MaterialVoucher> materiallist = new List<MaterialVoucher>(); |
| | | //if (data.ROOT.ITEM.MSGCODE == 0) |
| | | //{ |
| | | // foreach (var item in po.Details) |
| | | // { |
| | | // MaterialVoucher materialVoucher = new MaterialVoucher(); |
| | | // materialVoucher.S_NO = po.S_NO; |
| | | // materialVoucher.S_TYPE = po.S_IN_TYPE; |
| | | // materialVoucher.S_WLBM = item.S_ITEM_CODE; |
| | | // materialVoucher.S_WLH = item.N_ROW_NO; |
| | | // materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ; |
| | | // materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND; |
| | | // materialVoucher.S_WH_CODE = po.S_WH_CODE; |
| | | // materialVoucher.S_AREA_CODE = po.S_AREA_CODE; |
| | | // materialVoucher.F_QTY = item.F_QTY; |
| | | // materialVoucher.STATUS = 0; |
| | | // db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | // } |
| | | //} |
| | | //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand(); |
| | | } |
| | | |
| | | db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info($"入库回调报错{ex.Message}"); |
| | | LogHelper.Info($"回调报错{ex.Message}"); |
| | | db.RollbackTran(); |
| | | throw; |
| | | } |