using HH.WCS.Mobox3.pinggao.wms;
|
using HH.WCS.Mobox3.pinggao;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using static HH.WCS.Mobox3.pinggao.api.ApiModel;
|
using static HH.WCS.Mobox3.pinggao.api.OtherModel;
|
using static HH.WCS.Mobox3.pinggao.models.SapRoot;
|
using HH.WCS.Mobox3.pinggao.util;
|
using NLog.Fluent;
|
using static HH.WCS.Mobox3.pinggao.models.SapRoot.WcReturnRoot;
|
using System.Reflection;
|
using System.Web.Http.Description;
|
using Newtonsoft.Json.Linq;
|
using Swashbuckle.Swagger;
|
using static HH.WCS.Mobox3.pinggao.models.SapRoot.CKDdto;
|
using static HH.WCS.Mobox3.pinggao.dispatch.NDC;
|
using static HH.WCS.Mobox3.pinggao.wms.WMSHelper.AddChangeModel;
|
using HH.WCS.Mobox3.pinggao.models;
|
using static HH.WCS.Mobox3.pinggao.models.SapRoot.otherDto;
|
using HH.WCS.Mobox3.pinggao.api;
|
using static HH.WCS.Mobox3.pinggao.api.ApibackModel;
|
using System.Net.Http;
|
using System.Web.UI.WebControls;
|
using System.Xml.Linq;
|
using System.Xml;
|
using System.Security.Policy;
|
using HH.WCS.Mobox3.pinggao.models;
|
using static HH.WCS.Mobox3.pinggao.wms.WMSHelper;
|
using System.Net;
|
using SqlSugar;
|
using static HH.WCS.Mobox3.pinggao.models.SapRoot.GYSDto;
|
using System.Web.Services.Protocols;
|
using System.Web.Http.ValueProviders;
|
using System.Diagnostics;
|
using System.Data.SqlClient;
|
using System.Data.Common;
|
using System.Data;
|
using System.Runtime.ConstrainedExecution;
|
using HH.WCS.Mobox3.pinggao.core;
|
|
namespace HH.WCS.Mobox3.pinggao.api
|
{
|
public class WmsSpaHelper
|
{
|
static WmsSpaHelper()
|
{
|
|
}
|
|
public static bool MaterPanduan(string ItemCode, double count)
|
{
|
bool panduan = true;
|
var db = new SqlHelper<object>().GetInstance();
|
|
var po = db.Queryable<TN_Material_KC>().Where(a => a.S_ITEM_CODE == ItemCode).First();
|
|
var po1 = db.Queryable<CntrItemRel>().Where(a => a.S_ITEM_CODE == ItemCode).First();
|
if (po != null)
|
{
|
if (po1 != null)
|
{
|
double sl = po1.F_QTY + count;
|
if (sl > po.N_COUNT)
|
{
|
panduan = false;
|
}
|
}
|
if (count > po.N_COUNT)
|
{
|
panduan = false;
|
}
|
}
|
else
|
{
|
panduan = false;
|
}
|
return panduan;
|
}
|
/// <summary>
|
/// 数据
|
/// </summary>
|
/// <param name="json"></param>
|
/// <param name="name"></param>
|
/// <param name="name1"></param>
|
public static void EnsureArrayFormat(JObject json, string name, string name1)
|
{
|
foreach (var property in json.Properties())
|
{
|
if (property.Name == name || property.Name == name1)
|
{
|
if (property.Value is JObject && !(property.Value is JArray))
|
{
|
// 若为单个对象,包装成数组
|
property.Value = new JArray(property.Value);
|
}
|
}
|
if (property.Value is JObject)
|
{
|
// 递归处理子对象
|
EnsureArrayFormat((JObject)property.Value, name, name1);
|
}
|
else if (property.Value is JArray)
|
{
|
// 递归处理数组中的每个元素
|
foreach (var item in (JArray)property.Value)
|
{
|
if (item is JObject)
|
{
|
EnsureArrayFormat((JObject)item, name, name1);
|
}
|
}
|
}
|
}
|
}
|
public static void EnsureArrayFormat(JObject json, string propertyName)
|
{
|
// 查找名为 propertyName 的属性
|
JProperty property = json.Property(propertyName);
|
|
if (property != null)
|
{
|
// 检查属性值是否为 JObject 类型(即单个对象)
|
if (property.Value is JObject)
|
{
|
// 将单个对象包装成数组
|
JArray newArray = new JArray(property.Value);
|
property.Value = newArray;
|
}
|
else if (property.Value is JArray)
|
{
|
// 如果属性值已经是 JArray,则不需要做任何操作
|
// 但如果需要递归检查数组中的每个元素,可以在这里实现
|
}
|
}
|
}
|
public static void EnsureArrayFormats(JObject json, string name)
|
{
|
foreach (var property in json.Properties())
|
{
|
// 如果当前属性名与指定名称匹配
|
if (property.Name.Equals(name))
|
{
|
// 如果属性值是 JObject,且不是 JArray,则将其包装成数组
|
if (property.Value is JObject)
|
{
|
JArray newArray = new JArray(property.Value);
|
property.Value = newArray;
|
}
|
// 如果属性值已经是 JArray,则不需要进一步操作
|
else if (property.Value is JArray)
|
{
|
// 已经是数组,无需操作
|
}
|
// 如果属性值是其他类型,则将其转换为单个元素的数组
|
else
|
{
|
JArray newArray = new JArray(property.Value);
|
property.Value = newArray;
|
}
|
}
|
// 如果属性值是 JObject,递归检查其子属性
|
else if (property.Value is JObject)
|
{
|
EnsureArrayFormats((JObject)property.Value, name);
|
}
|
}
|
}
|
//内采收货返回参数
|
public static string GetNcJsonResult(string WLPZBH, string WLPZND, string MSGCODE, string MSGDESP)
|
{
|
var root = new Dictionary<string, object>
|
{
|
{ "ITEM", new Dictionary<string, string>
|
{
|
{ "WLPZBH", WLPZBH },
|
{ "WLPZND", WLPZND },
|
{ "MSGCODE", MSGCODE },
|
{ "MSGDESP", MSGDESP }
|
}
|
}
|
};
|
|
string json = JsonConvert.SerializeObject(root);
|
return json;
|
}
|
//外采收货返回参数
|
public static string GetJsonResult(string WLPZBH, string MSGCODE, string MSGDESP)
|
{
|
var root = new Dictionary<string, object>
|
{
|
{ "ITEM", new Dictionary<string, string>
|
{
|
{ "WLPZBH", WLPZBH },
|
{ "MSGCODE", MSGCODE },
|
{ "MSGDESP", MSGDESP }
|
}
|
}
|
};
|
|
string json = JsonConvert.SerializeObject(root);
|
return json;
|
}
|
//出库返回参数
|
public static string CkGetJsonResult(string LLDH, string GC, string MSGCODE, string MSGDESP)
|
{
|
var root = new Dictionary<string, object>
|
{
|
{ "ITEM", new Dictionary<string, string>
|
{
|
{ "LLDH ", LLDH },
|
{ "GC ", GC },
|
{ "MSGCODE", MSGCODE },
|
{ "MSGDESP", MSGDESP }
|
}
|
}
|
};
|
|
string json = JsonConvert.SerializeObject(root);
|
return json;
|
}
|
/// <summary>
|
/// 外采入库/入库冲销
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static List<SimpleResult> Inbound_Order_In(models.SapRoot.Root model)
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
List<SimpleResult> simpleResults = new List<SimpleResult>();
|
//var result = new SimpleResult();
|
//result.WLPZBH = model.ROOT.WLPZ[0].HEAD.WLPZBH;
|
//result.resultMsg = "成功";
|
try
|
{
|
db.BeginTran();
|
|
foreach (var items in model.ROOT.WLPZ)
|
{
|
var result = new SimpleResult();
|
#region MyRegion
|
|
//if (items.HEAD.YDLX=="125")
|
//{
|
// //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库
|
// if (items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0)
|
// {
|
// //判断冲销物料是否为同一个入库单
|
// if (items.ITEM.Select(s => s.CKPZH).Distinct().Count() > 1)
|
// {
|
// result.WLPZBH = items.HEAD.WLPZH;
|
// result.WLPZND = items.HEAD.WLPZND;
|
// result.resultCode = 1;
|
// result.resultMsg = "冲销物料不属于同一订单";
|
// result.resultMsg = "失败";
|
// simpleResults.Add(result);
|
// continue;
|
// }
|
// //冲销凭证单号
|
// var cxpzbh = items.ITEM[0].CKPZH;
|
// var po = WMSHelper.GetInboundOrder(cxpzbh);
|
// //判断是否执行 执行中订单允许冲销
|
// if (po == null)
|
// {
|
// result.resultMsg = "失败";
|
// result.WLPZBH = items.HEAD.WLPZH;
|
// result.WLPZND = items.HEAD.WLPZND;
|
// result.resultCode = 1;
|
// result.resultMsg = "未找到此订单";
|
// simpleResults.Add(result);
|
// continue;
|
// }
|
// if (po.N_B_STATE != 0 && po.N_B_STATE != 7)
|
// {
|
// result.resultMsg = "失败";
|
// result.WLPZBH = items.HEAD.WLPZH;
|
// result.resultCode = 1;
|
// result.WLPZND = items.HEAD.WLPZND;
|
// result.resultMsg = "执行中订单不允许操作";
|
// simpleResults.Add(result);
|
// continue;
|
// }
|
// foreach (var item in items.ITEM)
|
// {
|
// ///判断是否都有冲销凭证编号
|
// if (string.IsNullOrEmpty(item.CKPZH))
|
// {
|
// result.resultMsg = "失败";
|
// result.WLPZBH = items.HEAD.WLPZH;
|
// result.resultCode = 1;
|
// result.WLPZND = items.HEAD.WLPZND;
|
// result.resultMsg = "冲销单有物料冲销编号为空";
|
// simpleResults.Add(result);
|
// continue;
|
// }
|
// var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLBM).FirstOrDefault();
|
// if (rkdmx!=null)//数量小于明细
|
// {
|
// rkdmx.F_QTY = rkdmx.F_QTY + item.SL;
|
// db.Updateable(rkdmx).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// else
|
// {
|
// result.resultMsg = "失败";
|
// result.WLPZBH = items.HEAD.WLPZH;
|
// result.resultCode = 1;
|
// result.WLPZND = items.HEAD.WLPZND;
|
// result.resultMsg = $"物料不存在{item.WLBM}";
|
// simpleResults.Add(result);
|
// continue;
|
|
// }
|
// }
|
// db.CommitTran();
|
// }
|
// else
|
// {
|
// //创建入库单主子表
|
// var po = WMSHelper.GetInboundOrder(items.HEAD.WLPZH);
|
// if (po == null)
|
// {
|
// po = new TN_Inbound_Order { S_NO = items.HEAD.WLPZH, S_WLPZND = items.HEAD.WLPZND, S_FACTORY = items.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = items.HEAD.YDLX };
|
// po.Details = new List<TN_Inbound_Detail>();
|
// if (items.ITEM.Count > 0)
|
// {
|
// items.ITEM.ForEach(a =>
|
// {
|
// po.Details.Add(new TN_Inbound_Detail
|
// {
|
// S_IO_NO = items.HEAD.WLPZH,
|
// N_ROW_NO = a.WLPZHXM,
|
// S_ITEM_CODE = a.WLBM,
|
// F_QTY = a.SL,
|
// S_ITEM_STATE = "物料",
|
// S_ITEM_NAME = "物料",
|
// F_ACC_B_QTY = 0,
|
// S_KCDD = a.KCDD,
|
// S_UOM = a.DW,//计量单位
|
// //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
// S_BATCH_NO = a.PC == null ? "" : a.PC,
|
// S_CGPZH = a.CGPZH,
|
// S_CGPZXMBH = a.CGPZXMBH,
|
// S_CKPZKJND = a.CKPZKJND,
|
// S_CKPZXM = a.CKPZHXM,
|
// S_CXWLPZBH = a.CKPZH,
|
// S_HWSJJYZT = a.HWSJJYZT,
|
// S_GYSZHH = a.GYSZHH,
|
// S_JYPBH = a.JYPBH,
|
// S_KJPZSSRQ = a.KJPZSSRQ,
|
// S_KJPZSRSJ = a.KJPZSRSJ,
|
// });
|
// //}
|
|
// });
|
// db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
// db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
// db.CommitTran();
|
|
// }
|
// }
|
// else
|
// {
|
// var Details = new List<TN_Inbound_Detail>();
|
// if (items.ITEM.Count > 0)
|
// {
|
// items.ITEM.ForEach(a =>
|
// {
|
// if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0)
|
// {
|
// 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
|
// {
|
// Details.Add(new TN_Inbound_Detail
|
// {
|
// S_IO_NO = items.HEAD.WLPZH,
|
// N_ROW_NO = a.WLPZHXM,
|
// S_ITEM_CODE = a.WLBM,
|
// F_QTY = a.SL,
|
// S_ITEM_STATE = "物料",
|
// S_ITEM_NAME = "物料",
|
// F_ACC_B_QTY = 0,
|
// S_KCDD = a.KCDD,
|
// S_UOM = a.DW,
|
// S_BATCH_NO = a.PC == null ? "" : a.PC,
|
// S_CGPZH = a.CGPZH,
|
// S_CGPZXMBH = a.CGPZXMBH,
|
// S_CKPZKJND = a.CKPZKJND,
|
// S_CKPZXM = a.CKPZHXM,
|
// S_CXWLPZBH = a.CKPZH,
|
// S_HWSJJYZT = a.HWSJJYZT,
|
// S_GYSZHH = a.GYSZHH,
|
// S_JYPBH = a.JYPBH,
|
// S_KJPZSSRQ = a.KJPZSSRQ,
|
// S_KJPZSRSJ = a.KJPZSRSJ,
|
// });
|
// }
|
|
// });
|
// db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand();
|
// db.CommitTran();
|
|
// }
|
// }
|
|
|
// }
|
//}
|
|
#endregion
|
//else
|
//{
|
//判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库
|
if (items.HEAD.YDLX != "124")
|
{
|
if ((items.ITEM.Where(s => s.CXPZH != null && s.CXPZH != "").Count() > 0))
|
{
|
//判断冲销物料是否为同一个入库单
|
if (items.ITEM.Select(s => s.CXPZH).Distinct().Count() > 1)
|
{
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultCode = 1;
|
result.resultMsg = "冲销物料不属于同一订单";
|
result.resultMsg = "失败";
|
simpleResults.Add(result);
|
continue;
|
}
|
//冲销凭证单号
|
var cxpzbh = items.ITEM[0].CXPZH;
|
var po = WMSHelper.GetInboundOrder(cxpzbh);
|
//判断是否执行 执行中订单允许冲销
|
if (po == null)
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultCode = 1;
|
result.resultMsg = "未找到此订单";
|
simpleResults.Add(result);
|
continue;
|
}
|
if (po.N_B_STATE != 0 && po.N_B_STATE != 7)
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.resultCode = 1;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultMsg = "执行中订单不允许操作";
|
simpleResults.Add(result);
|
continue;
|
}
|
foreach (var item in items.ITEM)
|
{
|
///判断是否都有冲销凭证编号
|
if (string.IsNullOrEmpty(item.CXPZH))
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.resultCode = 1;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultMsg = "冲销单有物料冲销编号为空";
|
simpleResults.Add(result);
|
continue;
|
}
|
var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLBM).ToList();
|
if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultMsg = $"冲销物料{item.WLBM}数量{item.SL}大于存入数量";
|
simpleResults.Add(result);
|
continue;
|
}
|
else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据
|
{
|
db.Deleteable<TN_Inbound_Detail>().Where(it => it.S_ITEM_CODE == item.WLBM && it.S_IO_NO == cxpzbh).ExecuteCommand();
|
}
|
else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细
|
{
|
//当前物料明细
|
var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault();
|
rkd.F_QTY = rkd.F_QTY - item.SL;
|
db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
var po1 = db.Queryable<TN_Inbound_Order>().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First();
|
int ssss = po1.Details.Count();
|
if (po1.Details.Count() == 0)
|
{
|
po1.N_B_STATE = 7;
|
db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
|
}
|
}
|
}
|
|
else
|
{
|
//创建入库单主子表
|
var po = WMSHelper.GetInboundOrder(items.HEAD.WLPZH);
|
if (po == null)
|
{
|
po = new TN_Inbound_Order { S_NO = items.HEAD.WLPZH, S_WLPZND = items.HEAD.WLPZND, S_FACTORY = items.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = items.HEAD.YDLX };
|
po.Details = new List<TN_Inbound_Detail>();
|
if (items.ITEM.Count > 0)
|
{
|
items.ITEM.ForEach(a =>
|
{
|
po.Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = items.HEAD.WLPZH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBM,
|
F_QTY = a.SL,
|
S_ITEM_STATE = "物料",
|
S_ITEM_NAME = "物料",
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_UOM = a.DW,//计量单位
|
//S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
S_CGPZH = a.CGPZH,
|
S_CGPZXMBH = a.CGPZXMBH,
|
S_CKPZKJND = a.CKPZKJND,
|
S_CKPZXM = a.CKPZHXM,
|
S_CXWLPZBH = a.CKPZH,
|
S_HWSJJYZT = a.HWSJJYZT,
|
S_GYSZHH = a.GYSZHH,
|
S_JYPBH = a.JYPBH,
|
S_KJPZSSRQ = a.KJPZSSRQ,
|
S_KJPZSRSJ = a.KJPZSRSJ,
|
});
|
//}
|
|
});
|
db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
|
|
}
|
}
|
else
|
{
|
var Details = new List<TN_Inbound_Detail>();
|
if (items.ITEM.Count > 0)
|
{
|
items.ITEM.ForEach(a =>
|
{
|
if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0)
|
{
|
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
|
{
|
Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = items.HEAD.WLPZH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBM,
|
F_QTY = a.SL,
|
S_ITEM_STATE = "物料",
|
S_ITEM_NAME = "物料",
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_UOM = a.DW,//计量单位
|
//S_UOM = a.JBJLDW,//计量单位
|
//S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
S_CGPZH = a.CGPZH,
|
S_CGPZXMBH = a.CGPZXMBH,
|
S_CKPZKJND = a.CKPZKJND,
|
S_CKPZXM = a.CKPZHXM,
|
S_CXWLPZBH = a.CKPZH,
|
S_HWSJJYZT = a.HWSJJYZT,
|
S_GYSZHH = a.GYSZHH,
|
S_JYPBH = a.JYPBH,
|
S_KJPZSSRQ = a.KJPZSSRQ,
|
S_KJPZSRSJ = a.KJPZSRSJ,
|
});
|
}
|
|
});
|
db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand();
|
|
|
}
|
//result.resultMsg = "成功";
|
//result.WLPZBH = items.HEAD.WLPZH;
|
//result.WLPZND = items.HEAD.WLPZND;
|
//result.resultCode = 0;
|
//result.resultMsg = "";
|
//simpleResults.Add(result);
|
//continue;
|
}
|
|
}
|
}
|
else
|
{
|
|
//冲销凭证单号
|
foreach (var item1 in items.ITEM)
|
{
|
var cxpzbh = item1.CKPZH;
|
var po = WMSHelper.GetInboundOrder(cxpzbh);
|
//判断是否执行 执行中订单允许冲销
|
if (po == null)
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultCode = 1;
|
result.resultMsg = "未找到此订单";
|
simpleResults.Add(result);
|
continue;
|
}
|
if (po.N_B_STATE != 0 && po.N_B_STATE != 7)
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.resultCode = 1;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultMsg = "执行中订单不允许操作";
|
simpleResults.Add(result);
|
continue;
|
}
|
|
foreach (var item in items.ITEM)
|
{
|
//s.S_ITEM_CODE == item.WLBM&&
|
var rkdmx = po.Details.Where(s => s.S_CKPZXM == item.CKPZHXM).ToList();
|
if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细
|
{
|
result.resultMsg = "失败";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultMsg = $"退货物料{item.WLBM}数量{item.SL}大于存入数量";
|
simpleResults.Add(result);
|
continue;
|
}
|
else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据
|
{
|
db.Deleteable<TN_Inbound_Detail>().Where(it => it.S_ITEM_CODE == item.WLBM && it.S_IO_NO == cxpzbh).ExecuteCommand();
|
}
|
else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细
|
{
|
//当前物料明细
|
var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault();
|
rkd.F_QTY = rkd.F_QTY - item.SL;
|
db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
var po1 = db.Queryable<TN_Inbound_Order>().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First();
|
int ssss = po1.Details.Count();
|
if (po1.Details.Count() == 0)
|
{
|
po1.N_B_STATE = 7;
|
db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
|
}
|
}
|
}
|
}
|
|
result.resultMsg = "成功";
|
result.WLPZBH = items.HEAD.WLPZH;
|
result.WLPZND = items.HEAD.WLPZND;
|
result.resultCode = 0;
|
db.CommitTran();
|
simpleResults.Add(result);
|
}
|
|
}
|
catch (Exception e)
|
{
|
var resss = new SimpleResult();
|
resss.resultMsg = "失败";
|
resss.WLPZBH = "";
|
resss.resultCode = 1;
|
resss.resultMsg = e.Message;
|
simpleResults.Add(resss);
|
db.RollbackTran();
|
return simpleResults;
|
|
throw;
|
}
|
return simpleResults;
|
}
|
/// <summary>
|
/// sap-wmsg供应商息添加SimpleResult
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static GYSReturnRoot.Root GYS_In(GYSDto.Root model)
|
{
|
var orderResponse = new GYSReturnRoot.Root
|
{
|
ROOT = new GYSReturnRoot.ROOT
|
{
|
ITEM = new List<GYSReturnRoot.ITEM> { }
|
|
}
|
};
|
|
List<GYSReturnRoot.ITEM> tEMs = new List<GYSReturnRoot.ITEM>();
|
var db = new SqlHelper<object>().GetInstance();
|
try
|
{
|
db.BeginTran();
|
foreach (var item in model.ROOT.GYSXX)
|
{
|
GYSReturnRoot.ITEM iTEM = new GYSReturnRoot.ITEM();
|
|
|
//创建入库单主子表
|
// var po = WMSHelper.GetGYSBMOrder(item.JBXX.GYSBM);
|
var po = db.Queryable<TN_Supplier>().Includes(a => a.Details).Where(a => a.S_GYSBM == item.JBXX.GYSBM).First();
|
if (po != null)
|
{
|
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();
|
|
}
|
po = new TN_Supplier
|
{
|
S_GYSBM = item.JBXX.GYSBM,
|
S_MDMBM = item.JBXX.MDMBM,
|
S_GYSMC = item.JBXX.GYSMC,
|
S_YHGJ = item.JBXX.YHGJ,
|
S_YHDM = item.JBXX.YHDM,
|
S_KHH = item.JBXX.KHH,
|
S_YHJD = item.JBXX.YHJD,
|
S_YHCS = item.JBXX.YHCS,
|
S_KHHZH = item.JBXX.KHHZH,
|
S_DZ = item.JBXX.DZ,
|
S_YZBM = item.JBXX.YZBM,
|
S_CS = item.JBXX.CS,
|
S_GJDM = item.JBXX.GJDM,
|
S_GJ = item.JBXX.GJ,
|
S_DQDM = item.JBXX.DQDM,
|
S_DQMC = item.JBXX.DQMC,
|
S_SH = item.JBXX.SH,
|
S_ZZSDJH = item.JBXX.ZZSDJH,
|
};
|
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();
|
}
|
iTEM.GYSBM = item.JBXX.GYSBM;
|
iTEM.MSGCODE = 0;
|
iTEM.MSGDESP = $"成功";
|
tEMs.Add(iTEM);
|
}
|
orderResponse.ROOT.ITEM = tEMs;
|
db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
GYSReturnRoot.ITEM iTEM = new GYSReturnRoot.ITEM();
|
iTEM.GYSBM = "";
|
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>
|
/// <returns></returns>
|
internal static Orderback.Root Mater_In(OrderDto.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();
|
var result = new SimpleResult();
|
result.resultMsg = "成功";
|
try
|
{
|
db.BeginTran();
|
List<TN_GENERATE_ORDER> tN_GENERATE_ORDERs = new List<TN_GENERATE_ORDER>();
|
foreach (var item in model.ROOT.SCDD)
|
{
|
Orderback.ITEM iTEM = new Orderback.ITEM();
|
var materlist = db.Queryable<TN_GENERATE_ORDER>().Where(it => it.S_SCDDH == item.SCDDH).First();
|
if (materlist == null)
|
{
|
TN_GENERATE_ORDER tnorder = new TN_GENERATE_ORDER();
|
tnorder.S_GC = item.GC;
|
tnorder.S_SCDDH = item.SCDDH;
|
tnorder.S_SCDDH = item.SCDDH;
|
tnorder.S_DZMC = item.DZMC;
|
tnorder.S_SCDDCMS = item.SCDDCMS;
|
tnorder.S_WLBH = item.WLBH;
|
tnorder.S_MS = item.MS;
|
tnorder.S_TH = item.TH;
|
tnorder.S_DDSL = item.DDSL;
|
tnorder.S_DDDW = item.DDDW;
|
tnorder.S_XSDD = item.XSDD;
|
tnorder.S_XSDDHXM = item.XSDDHXM;
|
tnorder.S_WBS = item.WBS;
|
tnorder.S_SHF = item.SHF;
|
tnorder.GZLH = item.GZLH;
|
tN_GENERATE_ORDERs.Add(tnorder);
|
//tnorder.S_XLH = string.Join(",", item.ITEM.Select(items => items.XLH));
|
|
}
|
else
|
{
|
iTEM.SCDDH = item.SCDDH;
|
iTEM.GC = item.GC;
|
iTEM.MSGCODE = "1";
|
iTEM.MSGDESP = $"{item.SCDDH}已存在";
|
tEMs.Add(iTEM);
|
}
|
iTEM.SCDDH = item.SCDDH;
|
iTEM.GC = item.GC;
|
iTEM.MSGCODE = "0";
|
iTEM.MSGDESP = $"成功";
|
tEMs.Add(iTEM);
|
}
|
db.Insertable<TN_GENERATE_ORDER>(tN_GENERATE_ORDERs).ExecuteCommand();
|
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物料信息添加
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static WLReturnRoot.Root Mater_In(MaterDto.Root model)
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
var response = new WLReturnRoot.Root
|
{
|
ROOT = new WLReturnRoot.ROOT
|
{
|
ITEM = new List<WLReturnRoot.ITEM>
|
{
|
|
}
|
}
|
};
|
db.BeginTran();
|
List<WLReturnRoot.ITEM> list = new List<WLReturnRoot.ITEM>();
|
|
|
var itemCodes = model.ROOT.ITEM.Select(item => item.WLBM).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
|
foreach (var item in model.ROOT.ITEM)
|
{
|
try
|
{
|
|
var result = new WLReturnRoot.ITEM();
|
|
var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).First();
|
if (materlist == null)
|
{
|
TN_Material tN_Material = new TN_Material();
|
tN_Material.S_ITEM_CODE = item.WLBM;
|
tN_Material.S_GCBM = item.GCBM;
|
tN_Material.S_WLZBM = item.WLZBM;
|
tN_Material.S_WLZMS = item.WLZMS;
|
tN_Material.S_WLLX = item.WLLX;
|
tN_Material.S_WLMS = item.WLMS;
|
tN_Material.S_WLCMS = item.WLCMS;
|
tN_Material.S_DWBM = item.DWBM;
|
tN_Material.S_DWMS = item.DWMS;
|
tN_Material.S_JBM = item.JBM;
|
tN_Material.S_CPZ = item.CPZ;
|
tN_Material.S_CPZMS = item.CPZMS;
|
tN_Material.S_ITEM_NAME = item.VTEXT;
|
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);
|
}
|
}
|
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();
|
|
|
return response;
|
}
|
|
|
/// <summary>
|
/// 内采入库/出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static List<SimpleResult> NCInbound_Order_In(NcDto.Root model)
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
List<SimpleResult> simpleResults = new List<SimpleResult>();
|
try
|
{
|
db.BeginTran();
|
foreach (var itemwlpz in model.ROOT.WLPZ)
|
{
|
var result = new SimpleResult();
|
//判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库
|
if ((itemwlpz.HEAD.YDLX != "351" || itemwlpz.HEAD.YDLX != "Z89") && itemwlpz.ITEM[0].FHGC == "3040")
|
{
|
var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZH).First();
|
//创建出库单主子表
|
#region
|
//var ckpo = WMSHelper.GetOutboundOrder(model.ROOT.WLPZ.HEAD.WLPZBH);
|
//if (ckpo == null)
|
//{
|
// ckpo = new TN_Outbound_Order { S_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_WLPZND = model.ROOT.WLPZ.HEAD.WLPZND, S_AREA_CODE = "HJQ", S_BS_NO = model.ROOT.WLPZ.HEAD.WLPZBH, S_FACTORY = model.ROOT.WLPZ.HEAD.GC, S_OUT_TYPE = "内采出库", S_BS_TYPE = model.ROOT.WLPZ.HEAD.YDLX };
|
// ckpo.Details = new List<TN_Outbound_Detail>();
|
// if (model.ROOT.WLPZ.ITME.Count > 0)
|
// {
|
// model.ROOT.WLPZ.ITME.ForEach(a =>
|
// {
|
// ckpo.Details.Add(new TN_Outbound_Detail
|
// {
|
// S_DO_NO = model.ROOT.WLPZ.HEAD.WLPZBH,
|
// N_ROW_NO = a.WLPZZDXM,
|
// S_ITEM_CODE = a.WLH,
|
// F_QTY = a.SL,
|
// S_AREA_CODE = "QYQXHQ",
|
// S_ITEM_NAME = "物料",
|
// S_KCDD = a.KCDD,
|
// S_UOM = a.JBJLDW,//计量单位
|
// //S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
// S_BATCH_NO = a.PC,
|
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// });
|
// //}
|
|
// });
|
// db.Insertable<TN_Outbound_Order>(ckpo).ExecuteCommand();
|
// db.Insertable<TN_Outbound_Detail>(ckpo.Details).ExecuteCommand();
|
// db.CommitTran();
|
|
// }
|
//}
|
//else
|
//{
|
// result.resultCode = 1;
|
// result.resultMsg = "已经有重复单号,不可重复传输";
|
// return result;
|
//}
|
#endregion
|
|
#region 创建领料单
|
|
if (po == null)
|
{
|
po = new TN_Ll_Order { S_NO = itemwlpz.HEAD.WLPZH, S_FACTORY = itemwlpz.ITEM[0].FHGC, S_OUT_TYPE = "内采出库", S_BS_TYPE = itemwlpz.HEAD.YDLX, S_AREA_CODE = "HJQ", S_BS_NO = itemwlpz.HEAD.WLPZH };
|
po.Details = new List<TN_Ll_detail>();
|
if (itemwlpz.ITEM.Count() > 0)
|
{
|
var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
foreach (var a in itemwlpz.ITEM)
|
{
|
|
|
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
if (item == null)
|
{
|
|
result.resultCode = 1;
|
result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料";
|
result.resultMsg = "失败";
|
result.WLPZBH = itemwlpz.HEAD.WLPZH;
|
result.WLPZND = itemwlpz.HEAD.ND;
|
|
simpleResults.Add(result);
|
continue;
|
//throw new Exception($"物料{a.WLH}物料主数据不存在该物料");
|
}
|
po.Details.Add(new TN_Ll_detail
|
{
|
S_DO_NO = itemwlpz.HEAD.WLPZH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = a.PC,
|
S_JDBS = a.JDBS,
|
S_CGPZH = a.CGDD,
|
S_CGPZXMBH = a.CGDDHXM,
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
});
|
}
|
|
var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand();
|
|
}
|
}
|
else
|
{
|
|
List<TN_Ll_detail> listtn = new List<TN_Ll_detail>();
|
if (po.N_B_STATE != 0)
|
{
|
var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
foreach (var a in itemwlpz.ITEM)
|
{
|
|
|
|
//if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
//{
|
// result.resultCode = 1;
|
// result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除";
|
// throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除");
|
//}
|
var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
if (item == null)
|
{
|
|
result.resultCode = 1;
|
result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料";
|
result.resultMsg = "失败";
|
result.WLPZBH = itemwlpz.HEAD.WLPZH;
|
result.WLPZND = itemwlpz.HEAD.ND;
|
simpleResults.Add(result);
|
continue;
|
//throw new Exception($"物料{a.WLH}物料主数据不存在该物料");
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_CGPZH = a.CGDD,
|
S_CGPZXMBH = a.CGDDHXM,
|
S_DO_NO = itemwlpz.HEAD.WLPZH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_JDBS = a.JDBS,
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = "无",
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{
|
if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
{
|
po1.First().F_QTY = a.SL;
|
db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
else //返回失败
|
{
|
|
result.resultCode = 1;
|
result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}";
|
result.resultMsg = "失败";
|
result.WLPZBH = itemwlpz.HEAD.WLPZH;
|
result.WLPZND = itemwlpz.HEAD.ND;
|
simpleResults.Add(result);
|
continue;
|
//throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLH}");
|
|
}
|
}
|
}
|
;
|
}//执行中订单
|
else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
{
|
var itemCodes = itemwlpz.ITEM.Select(items => items.WLBM).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
foreach (var a in itemwlpz.ITEM)
|
{
|
var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
if (item == null)
|
{
|
|
result.resultCode = 1;
|
result.resultMsg = $"物料{a.WLBM}物料主数据不存在该物料";
|
result.WLPZBH = itemwlpz.HEAD.WLPZH;
|
result.WLPZND = itemwlpz.HEAD.ND;
|
simpleResults.Add(result);
|
continue;
|
/* throw new Exception($"物料{a.WLH}物料主数据不存在该物料")*/
|
;
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_DO_NO = itemwlpz.HEAD.WLPZH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBM,
|
S_JDBS = a.JDBS,
|
S_CGPZH = a.CGDD,
|
S_CGPZXMBH = a.CGDDHXM,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = "无",
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{//更新数量 未执行时 直接更新数量
|
po1.First().F_QTY = a.SL;
|
db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
//}
|
}
|
;
|
}
|
//添加数据
|
if (listtn.Count() > 0)
|
{
|
db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand();
|
}
|
}
|
#endregion
|
}
|
else if ((itemwlpz.HEAD.YDLX == "351" || itemwlpz.HEAD.YDLX == "Z89") && itemwlpz.ITEM[0].GC == "3040")
|
{
|
//创建入库单主子表
|
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>();
|
if (itemwlpz.ITEM.Count > 0)
|
{
|
foreach (var a in itemwlpz.ITEM)
|
|
{
|
|
po.Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = itemwlpz.HEAD.WLPZH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBM,
|
F_QTY = a.SL,
|
S_ITEM_STATE = "物料",
|
S_ITEM_NAME = "物料",
|
S_CGPZH = a.CGDD,
|
S_CGPZXMBH = a.CGDDHXM,
|
S_JDBS = a.JDBS,
|
S_CKPZKJND = a.CKPZND,
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_UOM = a.DW,//计量单位
|
//S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
|
});
|
//}
|
|
}
|
db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
db.CommitTran();
|
|
#endregion
|
}
|
}
|
|
else
|
{
|
var Details = new List<TN_Inbound_Detail>();
|
if (itemwlpz.ITEM.Count > 0)
|
{
|
foreach (var a in itemwlpz.ITEM)
|
{
|
if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBM).Count() > 0)
|
{
|
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
|
{
|
Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = itemwlpz.HEAD.WLPZH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBM,
|
F_QTY = a.SL,
|
S_ITEM_STATE = "正常",
|
S_ITEM_NAME = "物料",
|
S_CKPZKJND = a.CKPZND,
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_JDBS = a.JDBS,
|
S_CGPZH = a.CGDD,
|
S_CGPZXMBH = a.CGDDHXM,
|
S_UOM = a.DW,//计量单位
|
//S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
});
|
}
|
|
}
|
db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand();
|
db.CommitTran();
|
|
}
|
}
|
}
|
|
var result2 = new SimpleResult();
|
result2.resultMsg = "成功";
|
result2.WLPZBH = itemwlpz.HEAD.WLPZH;
|
result2.WLPZND = itemwlpz.HEAD.ND;
|
result2.resultCode = 0;
|
simpleResults.Add(result2);
|
db.CommitTran();
|
}
|
}
|
catch (Exception e)
|
{
|
var result = new SimpleResult();
|
result.resultMsg = "失败";
|
result.WLPZBH = "";
|
result.WLPZND = "0";
|
result.resultCode = 1;
|
result.resultMsg = e.Message;
|
simpleResults.Add(result);
|
db.RollbackTran();
|
return simpleResults;
|
throw;
|
}
|
finally
|
{
|
db.Dispose();
|
}
|
return simpleResults;
|
}
|
|
|
/// <summary>
|
/// 其他出入库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static List<SimpleResult> Otherbound_Order_In(otherDto.Root model)
|
{
|
Stopwatch sw = new Stopwatch();
|
sw.Start();
|
LogHelper.Info($"其他出入库调试");
|
List<SimpleResult> simples = new List<SimpleResult>();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
|
try
|
{
|
List<TN_Inbound_Detail> tN_Inbound_Details = new List<TN_Inbound_Detail>();
|
List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
|
|
foreach (var itemwlpz in model.ROOT.WLPZ)
|
{
|
var itemCodes = itemwlpz.ITEM.Select(item => item.WLBH).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
var result = new SimpleResult();
|
|
db.BeginTran();
|
if (itemwlpz.ITEM.Count() < 1)
|
{
|
result.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result.resultCode = 1;
|
result.resultMsg = $"不存在物料信息";
|
simples.Add(result);
|
continue;
|
//throw new Exception($"不存在该物料信息");
|
}
|
if (itemwlpz.ITEM[0].JDBS == "S")
|
{
|
LogHelper.Info($"物料凭证编号{itemwlpz.HEAD.WLPZBH}");
|
//创建入库单主子表
|
var po = WMSHelper.GetInboundOrder(itemwlpz.HEAD.WLPZBH);
|
if (po == null)
|
{
|
po = new TN_Inbound_Order { S_NO = itemwlpz.HEAD.WLPZBH, S_WLPZND = itemwlpz.HEAD.WLPZNF, S_WLPZNF = itemwlpz.HEAD.WLPZNF, S_FACTORY = itemwlpz.ITEM[0].GC, S_IN_TYPE = "其他入库", S_BS_TYPE = itemwlpz.ITEM[0].YDLX };
|
po.Details = new List<TN_Inbound_Detail>();
|
if (itemwlpz.ITEM.Count > 0)
|
{
|
foreach (var a in itemwlpz.ITEM)
|
|
{
|
|
LogHelper.Info($"效验{a.ITEM1}");
|
po.Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = itemwlpz.HEAD.WLPZBH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBH,
|
F_QTY = a.SL,
|
S_JDBS = a.JDBS,
|
S_ITEM_STATE = "物料",
|
S_ITEM_NAME = "物料",
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_UOM = a.JLDW,//计量单位
|
// S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
S_CKPZKJND = a.CKPZNF,
|
S_CKPZXM = a.CKPZHXM,
|
S_CKPZH = a.CKPZ,
|
S_CXWLPZBH = a.CXPZ,
|
S_CXWLPZHXM = a.CXPZHXM,
|
S_CXPZNF = a.CXPZNF,
|
|
S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH),
|
|
});
|
//}
|
|
}
|
db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
db.CommitTran();
|
|
}
|
}
|
else
|
{
|
var Details = new List<TN_Inbound_Detail>();
|
if (itemwlpz.ITEM.Count > 0)
|
{
|
foreach (var a in itemwlpz.ITEM)
|
|
{
|
if (po.Details.Where(s => s.S_ITEM_CODE == a.WLBH).Count() > 0)
|
{
|
var poq = po.Details.Where(s => s.S_ITEM_CODE == a.WLBH).FirstOrDefault();
|
poq.F_QTY = a.SL;
|
tN_Inbound_Details.Add(poq);
|
// db.Updateable(poq).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
else
|
{
|
Details.Add(new TN_Inbound_Detail
|
{
|
S_IO_NO = itemwlpz.HEAD.WLPZBH,
|
N_ROW_NO = a.WLPZHXM,
|
S_ITEM_CODE = a.WLBH,
|
F_QTY = a.SL,
|
S_JDBS = a.JDBS,
|
S_ITEM_STATE = "物料",
|
S_ITEM_NAME = "物料",
|
F_ACC_B_QTY = 0,
|
S_KCDD = a.KCDD,
|
S_UOM = a.JLDW,//计量单位
|
// S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
S_BATCH_NO = a.PC == null ? "" : a.PC,
|
S_CKPZKJND = a.CKPZNF,
|
S_CKPZXM = a.CKPZHXM,
|
S_CKPZH = a.CKPZ,
|
S_CXWLPZBH = a.CXPZ,
|
S_CXWLPZHXM = a.CXPZHXM,
|
S_CXPZNF = a.CXPZNF,
|
S_SERIAL_NO = string.Join(",", a.ITEM1.XLH),
|
});
|
}
|
|
}
|
db.Insertable<TN_Inbound_Detail>(Details).ExecuteCommand();
|
db.CommitTran();
|
|
}
|
|
//result.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
//result.WLPZND = itemwlpz.HEAD.WLPZNF;
|
//result.resultCode = 1;
|
//result.resultMsg = "已经有重复单号,不可重复传输";
|
//simples.Add(result);
|
//continue;
|
//return simples;
|
}
|
}
|
else
|
{
|
|
sw.Stop();
|
LogHelper.Info("第一次" + sw.ElapsedMilliseconds);
|
|
#region 创建领料单
|
var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == itemwlpz.HEAD.WLPZBH).First();
|
if (po == null)
|
{
|
po = new TN_Ll_Order { S_NO = itemwlpz.HEAD.WLPZBH, S_OUT_TYPE = "其他出库", S_BS_TYPE = itemwlpz.ITEM[0].YDLX, S_AREA_CODE = "HJQ", S_BS_NO = itemwlpz.HEAD.WLPZBH };
|
po.Details = new List<TN_Ll_detail>();
|
if (itemwlpz.ITEM.Count() > 0)
|
{
|
po.S_FACTORY = itemwlpz.ITEM[0].GC;
|
foreach (var a in itemwlpz.ITEM)
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault();
|
if (item == null)
|
{
|
var result12 = new SimpleResult();
|
result12.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result12.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result12.resultCode = 1;
|
result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
simples.Add(result12);
|
//throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
continue;
|
}
|
po.Details.Add(new TN_Ll_detail
|
{
|
S_DO_NO = itemwlpz.HEAD.WLPZBH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = a.WLPZHXM,
|
S_JDBS = a.JDBS,
|
S_ITEM_CODE = a.WLBH,
|
S_ITEM_NAME = item?.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = a.PC,
|
S_ERP_WH_CODE = a.KCDD,
|
S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH),
|
//S_SERIAL_NO = string.Join(",", a.ITEM1.XLH),
|
N_ITEM_STATE = 1
|
});
|
}
|
|
var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer))
|
{
|
bulkCopy.DestinationTableName = "TN_Picking_Detail";
|
bulkCopy.BatchSize = 500;
|
var dataTable = new DataTable();
|
dataTable = po.Details.ToDataTable();
|
// 添加列映射(确保名称匹配)
|
foreach (DataColumn col in dataTable.Columns)
|
{
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
}
|
bulkCopy.WriteToServer(po.Details.ToDataTable());
|
}
|
//db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand();
|
|
}
|
}
|
else
|
{
|
|
List<TN_Ll_detail> listtn = new List<TN_Ll_detail>();
|
if (po.N_B_STATE != 0)
|
{
|
foreach (var a in itemwlpz.ITEM)
|
{
|
|
var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault();
|
if (item == null)
|
{
|
var result12 = new SimpleResult();
|
result12.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result12.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result12.resultCode = 1;
|
result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
simples.Add(result12);
|
//throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
continue;
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_DO_NO = itemwlpz.HEAD.WLPZBH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH),
|
S_ITEM_CODE = a.WLBH,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = "无",
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{
|
if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
{
|
po1.First().F_QTY = a.SL;
|
tN_Ll_Details.Add(po1.First());
|
//db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
else //返回失败
|
{
|
var result12 = new SimpleResult();
|
result12.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result12.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result12.resultCode = 1;
|
result12.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBH}";
|
simples.Add(result12);
|
//throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBH}");
|
continue;
|
|
}
|
}
|
}
|
;
|
}//执行中订单
|
else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
{
|
foreach (var a in itemwlpz.ITEM)
|
{
|
|
var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBH).FirstOrDefault();
|
if (item == null)
|
{
|
var result12 = new SimpleResult();
|
result12.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result12.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result12.resultCode = 1;
|
result12.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
simples.Add(result12);
|
continue;
|
// throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_DO_NO = itemwlpz.HEAD.WLPZBH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBH,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.SL,
|
S_BATCH_NO = "无",
|
S_SERIAL_NO = a.ITEM1 == null ? "" : string.Join(",", a.ITEM1.XLH),
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{//更新数量 未执行时 直接更新数量
|
po1.First().F_QTY = a.SL;
|
tN_Ll_Details.Add(po1.First());
|
//db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
//}
|
}
|
;
|
}
|
//添加数据
|
if (listtn.Count() > 0)
|
{
|
db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand();
|
}
|
}
|
sw.Restart();
|
sw.Stop();
|
LogHelper.Info("第二次" + sw.ElapsedMilliseconds);
|
#endregion
|
}
|
result.WLPZBH = itemwlpz.HEAD.WLPZBH;
|
result.WLPZND = itemwlpz.HEAD.WLPZNF;
|
result.resultMsg = "成功";
|
result.resultCode = 0;
|
simples.Add(result);
|
}
|
if (tN_Ll_Details.Count() > 0)
|
{
|
|
db.Updateable(tN_Ll_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
if (tN_Inbound_Details.Count() > 0)
|
{
|
db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
db.CommitTran();
|
sw.Restart();
|
sw.Stop();
|
LogHelper.Info("第三次" + sw.ElapsedMilliseconds);
|
}
|
catch (Exception e)
|
{
|
var result = new SimpleResult();
|
result.WLPZBH = "";
|
result.WLPZND = "";
|
result.resultMsg = e.Message;
|
result.resultCode = 1;
|
simples.Add(result);
|
db.RollbackTran();
|
return simples;
|
throw;
|
}
|
return simples;
|
}
|
|
}
|
|
/// <summary>
|
/// 码盘入库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static SimpleResult InboundOrderSorting(MPSorting model)
|
{
|
var result = new SimpleResult();
|
foreach (var a in model.MaterList)
|
{
|
bool v = MaterPanduan(a.item_code, a.qty);
|
if (v)
|
{
|
result.resultMsg = $"物料{a.item_code}数量超过 库存总数";
|
return result;
|
}
|
}
|
//判断起始库位是否锁定
|
// var db = new SqlHelper<object>().GetInstance();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
var locinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.start).First();
|
|
if (locinfo?.N_LOCK_STATE != 0)
|
{
|
result.resultCode = 3;
|
result.resultMsg = $"起始库位已锁/不存在";
|
return result;
|
}
|
//判断托盘是否已经生成任务,如果没有则生成
|
var wmsTask = WMSHelper.GetWmsTaskByCntr(model.cntr_code);
|
if (wmsTask != null)
|
{
|
result.resultCode = 3;
|
result.resultMsg = $"起点{model.start} 托盘{model.cntr_code}已经创建任务,请勿重复申请";
|
return result;
|
}
|
|
result.resultMsg = "成功";
|
result.resultCode = 0;
|
//校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量
|
result = AddInboundOrder(model.MaterList, model.cntr_code, model.cntr_type);
|
#region MyRegion
|
|
|
//var info = WMSHelper.GetInboundOrderDetail(model.arrival_no, item.item_code);
|
//if (info != null)
|
//{
|
// float qty = model.MaterList.Sum(s => s.qty);
|
// if (info.F_QTY - info.F_ACC_B_QTY >= qty)
|
// {
|
// // 插入到托盘明细表
|
// var cntr = ContainerHelper.GetCntr(model.cntr_code, true);
|
// if (cntr != null)
|
// {
|
// ContainerHelper.BindCntrItems(cntr, model.MaterList, info.S_BATCH_NO, model.arrival_no);
|
// //更新入库单累计绑定数量
|
// info.F_ACC_B_QTY += qty;
|
// WMSHelper.UpdateInboundOrderDetailQty(info);
|
// }
|
// else
|
// {
|
// result.resultCode = 2;
|
// result.resultMsg = "获取托盘信息失败";
|
// }
|
// }
|
// else
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "累计码盘数量超出入库单数量";
|
// }
|
//}
|
//else
|
//{
|
// result.resultCode = 3;
|
// result.resultMsg = $"未找到入库单{model.arrival_no}";
|
//}
|
#endregion
|
|
|
|
if (result.resultCode != 0)
|
{
|
return result;
|
}
|
//添加作业
|
wmsTask = new WMSTask
|
{
|
S_CNTR_CODE = model.cntr_code,
|
S_CODE = WMSHelper.GenerateTaskNo(),
|
S_START_LOC = model.start,
|
S_START_AREA = locinfo.S_AREA_CODE,
|
S_START_WH = locinfo.S_WH_CODE,
|
S_END_LOC = model.start,
|
S_BS_NO = model.MaterList[0].arrival_no,
|
N_TYPE = 1,
|
S_TYPE = WMSTask.GetTypeStr(1),
|
S_OP_DEF_CODE = "",
|
S_OP_DEF_NAME = "pda入库"
|
};
|
if (WMSHelper.CreateWmsTask(wmsTask))
|
{
|
LocationHelper.LockLoc(model.start, 1);
|
result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
|
}
|
|
return result;
|
}
|
|
}
|
/// <summary>
|
/// 分拣
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static async Task<SimpleResult> KtSorting(KtSorting model)
|
{
|
|
var result = new SimpleResult();
|
|
// var db = new SqlHelper<object>().GetInstance();
|
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
try
|
{
|
|
|
result.resultMsg = "成功";
|
result.resultCode = 0;
|
var locinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.start).First();
|
|
if (locinfo?.N_LOCK_STATE != 0)
|
{
|
result.resultCode = 3;
|
result.resultMsg = $"起始库位已锁/不存在";
|
return result;
|
}
|
//判断托盘是否已经生成任务,如果没有则生成
|
if (!string.IsNullOrEmpty(model.cntr_code))
|
{
|
var wmsTaskcs = WMSHelper.GetWmsTaskByCntr(model.cntr_code);
|
if (wmsTaskcs != null)
|
{
|
result.resultCode = 3;
|
result.resultMsg = $"起点{model.start} 托盘{model.cntr_code}已经创建任务,请勿重复申请";
|
return result;
|
}
|
}
|
|
//出库
|
if (model.Type == 2)
|
{
|
Location start = new Location();
|
if (!string.IsNullOrEmpty(model.cntr_code))
|
{
|
var loc = db.Queryable<LocCntrRel>().Where(it => it.S_CNTR_CODE == model.cntr_code).First();
|
if (loc == null)
|
{
|
LogHelper.Info($"容器{model.cntr_code}找不到对应货位");
|
result.resultMsg = $"容器{model.cntr_code}找不到对应货位";
|
result.resultCode = 1;
|
return result;
|
}
|
else
|
{
|
start = db.Queryable<Location>().Where(it => it.S_CODE == loc.S_LOC_CODE).First();
|
}
|
}
|
else if (!string.IsNullOrEmpty(model.item_code))
|
{
|
var starts = db.Queryable<CntrItemRel>().Where(cir => cir.S_CNTR_TYPE == "半托" && cir.S_ITEM_CODE == model.item_code).OrderBy(cir => cir.T_CREATE).ToList().FirstOrDefault();
|
if (starts!=null)
|
{
|
LogHelper.Info($"starts{starts}");
|
var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE == starts.S_CNTR_CODE).ToList().FirstOrDefault();
|
LogHelper.Info($"starts1{starts12}");
|
start = db.Queryable<Location>().Where(loc => loc.S_AREA_CODE == "HJQ" && loc.S_CODE == starts12.S_LOC_CODE).ToList().FirstOrDefault();
|
LogHelper.Info($"starts2{start}");
|
|
model.cntr_code = starts12?.S_CNTR_CODE;
|
}
|
else
|
{
|
var list = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToArray();
|
var S_LOC_CODElist = db.Queryable<LocCntrRel>().Where(s => !list.Contains(s.S_CNTR_CODE)).Select(s => s.S_LOC_CODE).ToArray();
|
start = db.Queryable<Location>().Where(it => S_LOC_CODElist.Contains(it.S_CODE)).ToList().FirstOrDefault();
|
|
|
|
|
var starts12 = db.Queryable<LocCntrRel>().Where(lcr => lcr.S_CNTR_CODE == start.S_CODE).ToList().FirstOrDefault();
|
|
|
model.cntr_code = starts12?.S_CNTR_CODE;
|
}
|
|
}
|
else
|
{
|
#region MyRegion
|
|
#endregion
|
}
|
if (start == null)
|
{
|
LogHelper.Info($"{model.cntr_code}未找到可用货位");
|
result.resultMsg = $"{model.cntr_code}未找到可用货位";
|
result.resultCode = 1;
|
return result;
|
}
|
//库位信息
|
|
var endinfo = db.Queryable<Location>().Where(it => it.S_CODE == model.start).First();
|
var wmsTask = new WMSTask
|
{
|
S_CNTR_CODE = model.cntr_code,
|
S_CODE = WMSHelper.GenerateTaskNo(),
|
S_START_LOC = start.S_CODE,
|
S_START_AREA = start.S_AREA_CODE,
|
S_START_WH = start.S_WH_CODE,
|
S_END_LOC = endinfo.S_CODE,
|
S_END_AREA = endinfo.S_AREA_CODE,
|
S_END_WH = endinfo.S_WH_CODE,
|
|
N_TYPE = 2,
|
// S_TYPE = WMSTask.GetTypeStr(1),
|
S_TYPE = "出库空托盘",
|
S_OP_DEF_CODE = "",
|
S_OP_DEF_NAME = "pda出库"
|
};
|
if (WMSHelper.CreateWmsTask(wmsTask))
|
{
|
LocationHelper.LockLoc(start.S_CODE, 2);
|
result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
|
}
|
|
|
}
|
else //入库
|
{
|
Location end = new Location();
|
if (!string.IsNullOrEmpty(model.cntr_code))
|
{
|
|
#region MyRegion
|
//var list = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToArray();
|
//var S_LOC_CODElist = db.Queryable<LocCntrRel>().Where(s=>!list.Contains(s.S_CNTR_CODE)).Select(s=>s.S_LOC_CODE).ToArray();
|
//start = db.Queryable<Location>().Where(it => S_LOC_CODElist.Contains(it.S_CODE)).First();
|
|
//// 获取所有被占用的容器编码
|
//var usedContainerCodes = db.Queryable<CntrItemRel>().Select(s => s.S_CNTR_CODE).ToList();
|
|
// 获取未被占用的容器对应的货位编码
|
var availableLocationCodes = db.Queryable<LocCntrRel>()
|
.Select(s => s.S_LOC_CODE)
|
.ToList();
|
|
// 获取第一个可用货位(如果没有则返回null)
|
end = db.Queryable<Location>()
|
.Where(it => !availableLocationCodes.Contains(it.S_CODE) && it.S_AREA_CODE == "HJQ")
|
.ToList().FirstOrDefault();
|
|
|
#endregion
|
}
|
else
|
{
|
LogHelper.Info($"入库 容器{model.cntr_code}不能为空");
|
result.resultMsg = $"入库 容器{model.cntr_code}不能为空";
|
result.resultCode = 1;
|
return result;
|
|
}
|
if (end == null)
|
{
|
LogHelper.Info($"{model.cntr_code}未找到可用货位");
|
result.resultMsg = $"{model.cntr_code}未找到可用货位";
|
result.resultCode = 1;
|
return result;
|
}
|
var sart = db.Queryable<Location>().Where(it => it.S_CODE == model.start).First();
|
var wmsTask = new WMSTask
|
{
|
S_CNTR_CODE = model.cntr_code,
|
S_CODE = WMSHelper.GenerateTaskNo(),
|
S_START_LOC = sart.S_CODE,
|
S_START_AREA = sart.S_AREA_CODE,
|
S_START_WH = sart.S_WH_CODE,
|
S_END_LOC = end.S_CODE,
|
S_END_AREA = end.S_AREA_CODE,
|
S_END_WH = end.S_WH_CODE,
|
|
N_TYPE = 1,
|
// S_TYPE = WMSTask.GetTypeStr(1),
|
S_TYPE = "入库空托盘",
|
S_OP_DEF_CODE = "",
|
S_OP_DEF_NAME = "pda入库"
|
};
|
if (WMSHelper.CreateWmsTask(wmsTask))
|
{
|
LocationHelper.LockLoc(end.S_CODE, 1);
|
result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
|
}
|
|
}
|
//通用接口 对容器货品的删减 和生成回库单 都要用的接口
|
|
return result;
|
|
}
|
catch (Exception e)
|
{
|
result.resultMsg = e.Message;
|
db.RollbackTran();
|
return result;
|
throw;
|
}
|
}
|
|
}
|
/// <summary>
|
/// 分拣
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
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.resultMsg = "出库单号不能为空";
|
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();
|
if (po == null)
|
{
|
result.resultMsg = "未找到此出库单";
|
result.resultCode = 1;
|
return result;
|
|
}
|
LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
|
//根据不同出库类型 回调sap
|
if (po.S_OUT_TYPE == "冲销出库")
|
{
|
result = await CXAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
|
}
|
else
|
if (po.S_OUT_TYPE == "出库")//普通出库
|
{
|
LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
|
result = await AddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
|
}
|
else if (po.S_OUT_TYPE == "计划外发料出库")
|
{
|
result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
|
}
|
else if (po.S_OUT_TYPE == "成本中心出库")
|
{
|
result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
|
}
|
|
//通用接口 对容器货品的删减 和生成回库单 都要用的接口
|
result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE, model.cntr_type);
|
if (result.resultCode == 1)
|
{
|
return result;
|
}
|
#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 };
|
var S_WH_CODE = "";
|
var S_AREA_CODE = "";
|
if (string.IsNullOrEmpty(po.S_WH_CODE))
|
{
|
S_WH_CODE = util.Settings.WHCode;
|
}
|
else
|
{
|
S_WH_CODE = po.S_WH_CODE;
|
}
|
if (string.IsNullOrEmpty(po.S_AREA_CODE))
|
{
|
S_AREA_CODE = util.Settings.AREACode;
|
}
|
else
|
{
|
S_AREA_CODE = po.S_AREA_CODE;
|
}
|
model.MaterList.ForEach(a =>
|
{
|
LogHelper.Info($"填充数据{util.Settings.WHCode}");
|
LogHelper.Info($"减仓库量{util.Settings.AREACode}表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}");
|
req.item_info.Add(new AddChangeModel.itemModel
|
{
|
wh_code = 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 = S_WH_CODE,
|
area_code = 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)
|
{
|
LogHelper.Info($"报错{e.Message}");
|
result.resultMsg = e.Message;
|
db.RollbackTran();
|
return result;
|
throw;
|
}
|
}
|
|
}
|
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, string cntr_type)
|
{
|
// 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>();
|
var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First();
|
foreach (var item in MaterList)
|
{
|
// 插入到托盘明细表
|
var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList();
|
if (cntr.Count() > 0)
|
{
|
db.BeginTran();
|
//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;
|
cir.S_CNTR_TYPE = cntr_type;
|
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.S_CNTR_TYPE, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
|
//添加回库作业
|
}
|
}
|
else
|
{
|
db.RollbackTran();
|
result.resultCode = 1;
|
result.resultMsg = $"物料不存在{item.item_code}";
|
LogHelper.Info($"物料不存在{item.item_code}");
|
return result;
|
}
|
|
OutboundRecord outboundRecord = new OutboundRecord();
|
outboundRecord.S_WLPZBH = pz?.S_WLPZBH;
|
outboundRecord.S_WLPZND = pz?.S_WLPZND;
|
outboundRecord.S_TYPE = S_OUT_TYPE;
|
|
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;
|
}
|
}
|
if (isHK)
|
{
|
var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First();
|
if (locs != null)
|
{
|
var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First();
|
if (cntr != null)
|
{
|
cntr.S_SORT_TYPE = "已分拣";
|
db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand();
|
}
|
else
|
{
|
result.resultCode = 1;
|
result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息";
|
return result;
|
}
|
//var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First();
|
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 = locs?.S_START_LOC,
|
S_END_AREA = locs?.S_START_AREA,
|
S_END_WH = locs?.S_START_WH,
|
|
N_TYPE = 1,
|
// S_TYPE = WMSTask.GetTypeStr(1),
|
S_TYPE = "回库",
|
S_OP_DEF_CODE = "",
|
S_OP_DEF_NAME = "pda入库"
|
};
|
if (WMSHelper.CreateWmsTask(wmsTask))
|
{
|
LocationHelper.LockLoc(start, 1);
|
result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
|
}
|
}
|
else
|
{
|
result.resultCode = 1;
|
result.resultMsg += $"找不到容器对应任务信息{cntr_code}";
|
return result;
|
}
|
|
}
|
var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand();
|
|
//db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
//db.RollbackTran();
|
LogHelper.Info("物料信息绑定到满容器上" + ex.Message);
|
result.resultCode = 1;
|
result.resultMsg += ex.Message;
|
Console.WriteLine(ex.Message);
|
|
throw;
|
}
|
return result;
|
}
|
|
//}
|
|
|
|
/// <summary>
|
/// 成本中心退料
|
/// </summary>
|
/// <param name="MaterList"></param>
|
/// <param name="arrival_no"></param>
|
/// <param name="cntr_code"></param>
|
/// <param name="start"></param>
|
/// <returns></returns>
|
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())
|
//{
|
// 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 CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == arrival_no).ToList();
|
//出库回调入参
|
var cbCenterBackDto = new CBcenterBackDto.Root
|
{
|
ROOT = new CBcenterBackDto.ROOT
|
{
|
HEAD = new List<CBcenterBackDto.HEADItem>
|
{
|
|
}
|
}
|
};
|
//回参物料信息
|
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.KEY = arrival_no;
|
|
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.UNAME;
|
|
ckbitem.PC = podetail?.S_BATCH_NO;
|
ckbitem.PZRQ = PZZDRQ;
|
ckbitem.GZRQ = GZRQ;
|
|
|
|
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(',');
|
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);
|
|
|
}
|
cbCenterBackDto.ROOT.HEAD = iTEMs;
|
//db.Insertable<OutboundRecord>(records).ExecuteCommand();
|
#region wms-sap回调
|
//类转json
|
var json = JsonConvert.SerializeObject(cbCenterBackDto.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();
|
|
//}
|
|
#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(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;
|
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?.WLPZH;
|
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;
|
materialVoucher.S_GZRQ = po.BUDAT;
|
materialVoucher.UNAME = po.UNAME;
|
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();
|
}
|
catch (Exception ex)
|
{
|
//db.RollbackTran();
|
LogHelper.Info("成本中心回调报错" + ex.Message);
|
Console.WriteLine(ex.Message);
|
|
throw;
|
}
|
return result;
|
}
|
|
//}
|
/// <summary>
|
/// 计划外退料回调
|
/// </summary>
|
/// <param name="MaterList"></param>
|
/// <param name="arrival_no"></param>
|
/// <param name="cntr_code"></param>
|
/// <param name="start"></param>
|
/// <returns></returns>
|
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())
|
//{
|
// 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 CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == arrival_no).ToList();
|
//出库回调入参
|
|
DateTime dateTime;
|
DateTime dateTime1;
|
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");
|
|
}
|
JHWBackDto.Root myRoot = new JHWBackDto.Root
|
{
|
ROOT = new JHWBackDto.ROOT
|
{
|
HEAD = new JHWBackDto.HEAD
|
{
|
|
KEY = po.S_NO,
|
GZRQ = GZRQ,
|
PZZDRQ = PZZDRQ,
|
YHM = po.UNAME,
|
PZTTWB = po.BKTXT,
|
YDLX = po.S_BS_TYPE,
|
TSKCBS = po.SOBKZ,
|
ITEM = new List<JHWBackDto.ITEM>
|
{
|
|
}
|
},
|
|
}
|
};
|
//回参物料信息
|
List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>();
|
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.SL = item.qty;
|
ckbitem.DW = podetail?.S_UOM;
|
ckbitem.DDH = podetail?.S_DDH;
|
//ckbitem.DDHXM = (podetail?.N_ROW_NO);
|
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
|
// .Where(s => s.S_ITEM_CODE == item.item_code)
|
// .Select(s => s.S_SERIAL_NO));
|
//string[] xlhValues = serialNos.Split(',');
|
string[] xlhValues = podetail?.S_SERIAL_NO.Split(',');
|
//foreach (var xlhValue in xlhValues)
|
//{
|
// JHWBackDto.ITEM1 newItem = new JHWBackDto.ITEM1 { XLH = xlhValue };
|
// listitem1.Add(newItem);
|
//}
|
listitem1.XLH = podetail?.S_SERIAL_NO.Split(',').ToList();
|
ckbitem.ITEM1 = listitem1;
|
iTEMs.Add(ckbitem);
|
|
//添加出库录凭证表
|
//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_TYPE = "计划外退料";
|
|
//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);
|
|
}
|
myRoot.ROOT.HEAD.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();
|
|
//}
|
#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(responses.Output.ToString());
|
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
|
//添加凭证记录表
|
result.resultMsg = data.ROOT.ITEM.MSGDESP;
|
result.resultCode = data.ROOT.ITEM.MSGCODE;
|
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.S_GZRQ = po.BUDAT;
|
materialVoucher.UNAME = po.UNAME;
|
materialVoucher.F_QTY = item.qty;
|
materialVoucher.STATUS = 0;
|
db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
|
}
|
}
|
#endregion
|
|
//db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
//db.RollbackTran();
|
LogHelper.Info("计划外退料回调报错" + ex.Message);
|
Console.WriteLine(ex.Message);
|
|
throw;
|
}
|
return result;
|
}
|
|
//}
|
/// <summary>
|
/// 通用冲销回调
|
/// </summary>
|
/// <param name="MaterList"></param>
|
/// <param name="arrival_no"></param>
|
/// <param name="cntr_code"></param>
|
/// <param name="start"></param>
|
/// <returns></returns>
|
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();
|
|
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();
|
|
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();
|
//根据入库查看凭证编号信息
|
//var poIPz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == poIn.S_NO).First();
|
//出库回调入参
|
CXCkBackDto.Root myRoot = new CXCkBackDto.Root
|
{
|
ROOT = new CXCkBackDto.ROOT
|
{
|
HEAD = new List<CXCkBackDto.HEAD>
|
{
|
|
//GZRQ = GZRQ,
|
//SRRQ = PZZDRQ,
|
//WLPZ = po.S_WLPZ,
|
//WLPZNF = po.S_WLPZNF,
|
//WLPZXM = MaterList[0].N_ROW_NO,
|
|
//GZRY = po.UNAME
|
}
|
}
|
};
|
List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>();
|
//出库单详情
|
var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO && a.STATUS == 0).ToList();
|
foreach (var item in MaterList)
|
{
|
CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD();
|
hEAD.GZRQ = GZRQ;
|
hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd");
|
|
//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;
|
|
//hEAD.WLPZ = porecord.First()?.S_WLPZBH;
|
//hEAD.WLPZNF = porecord.First()?.S_WLPZND;
|
|
hEAD.WLPZ = porecord.FirstOrDefault()?.S_WLPZBH;
|
hEAD.WLPZNF = porecord.FirstOrDefault()?.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}");
|
|
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(responses.Output.ToString());
|
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
EnsureArrayFormat(jsonObject, "ITEM", "");
|
var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString());
|
var resmeg = "";
|
int rescode = 0;
|
//添加凭证记录表
|
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).FirstOrDefault();
|
|
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.S_GZRQ = po.BUDAT;
|
materialVoucher.UNAME = po.UNAME;
|
materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
|
|
materialVoucher.F_QTY = onr == null ? 0 : onr.qty;
|
//materialVoucher.STATUS = 0;
|
resmeg += item?.MSGDESP;
|
materiallist.Add(materialVoucher);
|
|
|
}
|
else
|
{
|
rescode = 1;
|
resmeg += item?.MSGDESP;
|
}
|
|
|
}
|
if (materiallist.Count() > 0)
|
{
|
|
db.Insertable<MaterialVoucher>(materiallist).ExecuteCommand();
|
}
|
}
|
|
|
|
|
result.resultMsg = resmeg;
|
result.resultCode = rescode;
|
#endregion
|
|
//db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
//db.RollbackTran();
|
LogHelper.Info("通用冲销回调报错" + ex.Message);
|
Console.WriteLine(ex.Message);
|
|
throw;
|
}
|
return result;
|
}
|
|
|
|
/// <summary>
|
/// 普通回调接口
|
/// </summary>
|
/// <param name="MaterList"></param>
|
/// <param name="arrival_no"></param>
|
/// <param name="cntr_code"></param>
|
/// <param name="start"></param>
|
/// <returns></returns>
|
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())
|
//{
|
// 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();
|
string GZRQ = "";
|
string PZZDRQ = "";
|
//if (po.Details[0].S_CJRQ != null)
|
//{
|
// GZRQ = DateTime.Parse(po.Details[0].S_CJRQ.ToString()).ToString("yyyyMMdd");
|
//}
|
//if (po.Details[0].S_XQRQ != null)
|
//{
|
// PZZDRQ = DateTime.Parse(po.Details[0].S_XQRQ.ToString()).ToString("yyyyMMdd");
|
|
//}
|
CkBcakDto.Root myRoot = new CkBcakDto.Root
|
{
|
ROOT = new CkBcakDto.ROOT
|
{
|
WLPZ = new CkBcakDto.WLPZ
|
{
|
KEY = po.S_NO,
|
ZYWLX = "2",
|
PZRQ = DateTime.Now.ToString("yyyyMMdd"),
|
GZRQ = DateTime.Now.ToString("yyyyMMdd"), // 假设日期格式为"年-月-日"
|
GZRY = po.S_CREATOR_NAME,
|
ITEM = new List<CkBcakDto.ITEM>
|
{
|
}
|
}
|
}
|
};
|
//出库回调入参
|
|
//回参物料信息
|
List<CkBcakDto.ITEM> iTEMs = new List<CkBcakDto.ITEM>();
|
foreach (var item in MaterList)
|
{
|
|
db.BeginTran();
|
|
|
var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault();
|
CkBcakDto.ITEM ckbitem = new CkBcakDto.ITEM();
|
ckbitem.SCDD = podetail?.S_SCDD;
|
ckbitem.ZJBM = podetail?.S_ZJBM;
|
ckbitem.FHSL = item.qty;
|
ckbitem.DW = podetail?.S_UOM;
|
ckbitem.YLBH = podetail?.S_YLBH;
|
ckbitem.YLXMH = podetail?.S_YLXMH;
|
ckbitem.GC = po.S_FACTORY;
|
ckbitem.KCDD = podetail?.S_KCDD;
|
|
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));
|
listitem1.XLH = podetail?.S_SERIAL_NO == null ? null : 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);
|
}
|
myRoot.ROOT.WLPZ.ITEM = iTEMs;
|
if (myRoot.ROOT.WLPZ.ITEM.Where(s => !string.IsNullOrEmpty(s.SCDD) && !string.IsNullOrEmpty(s.YLBH) && !string.IsNullOrEmpty(s.YLXMH)).Count() == 0)
|
{
|
myRoot.ROOT.WLPZ.ZYWLX = "2";
|
}
|
//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();
|
|
//}
|
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(responses.Output.ToString());
|
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
|
//添加凭证记录表
|
result.resultMsg = data.ROOT.ITEM.MSGDESP;
|
result.resultCode = data.ROOT.ITEM.MSGCODE;
|
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.S_GZRQ = po.BUDAT;
|
materialVoucher.UNAME = po.UNAME;
|
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();
|
}
|
catch (Exception ex)
|
{
|
//db.RollbackTran();
|
LogHelper.Info("普通出库回调" +
|
"" + ex.Message);
|
Console.WriteLine(ex.Message);
|
|
throw;
|
}
|
return result;
|
}
|
|
//}
|
|
|
|
/// <summary>
|
/// 校验入库单数量,不可以超,成功后插入托盘物料表,更新入库单累计数量
|
/// </summary>
|
/// <param name="arrival_no"></param>
|
/// <param name="item_code"></param>
|
/// <param name="MaterList"></param>
|
/// <param name="cntr_code"></param>
|
/// <returns></returns>
|
[ApiExplorerSettings(IgnoreApi = true)]
|
public static SimpleResult AddInboundOrder(List<Mater> MaterList, string cntr_code, string S_CNTR_TYPE)
|
{
|
var result = new SimpleResult();
|
// var db = new SqlHelper<object>().GetInstance();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
|
try
|
{
|
if (MaterList.Count() < 1)
|
{
|
throw new Exception("累计码盘数量物料数据为空");
|
}
|
foreach (var item in MaterList)
|
{
|
var allInfolist = db.Queryable<TN_Inbound_Detail>()
|
.Where(a => a.S_IO_NO == item.arrival_no)
|
.ToList();
|
//var info = WMSHelper.GetInboundOrderDetail(arrival_no, item.item_code);
|
var info = allInfolist.Where(a => a.S_ITEM_CODE == item.item_code && a.N_ROW_NO == item.N_ROW_NO).FirstOrDefault();
|
if (info != null)
|
{
|
if (info.F_QTY - info.F_ACC_B_QTY >= item.qty)
|
{
|
db.BeginTran();
|
//// 插入到托盘明细表
|
//var cntr = ContainerHelper.GetCntr(cntr_code, true);
|
#region 插入到托盘明细表
|
var cntr = db.Queryable<Container>().Where(a => a.S_CODE == cntr_code).First();
|
if (cntr == null)
|
{
|
var model = new Container { S_CODE = cntr_code };
|
if (db.Insertable(model).ExecuteCommand() > 0)
|
{
|
cntr = model;
|
}
|
}
|
#endregion
|
if (cntr != null)
|
{
|
#region 1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开
|
var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code && a.S_BATCH_NO == item.S_BATCH_NO && a.N_BS_ROW_NO == item.N_ROW_NO && a.S_BS_NO == item.arrival_no).First();
|
if (cir != null)
|
{
|
cir.F_QTY += item.qty;
|
cir.S_CNTR_TYPE = S_CNTR_TYPE;
|
db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.S_CNTR_TYPE }).ExecuteCommand();
|
}
|
else
|
{
|
//2.插入新的容器物料信息(容器号不变S_SERIAL_NO = item.S_SERIAL_NO,)
|
cir = new CntrItemRel { S_CNTR_TYPE = S_CNTR_TYPE, 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);
|
cntr.N_DETAIL_COUNT = count;
|
cntr.C_ENABLE = "N";//码盘后将托盘设置为不可用状态,入库后变成可用
|
db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE, it.S_SRC }).ExecuteCommand();
|
#endregion
|
|
//更新入库单累计绑定数量
|
info.F_ACC_B_QTY += item.qty;
|
db.Updateable(info).UpdateColumns(it => new { it.F_ACC_B_QTY }).ExecuteCommand();
|
}
|
else
|
{
|
throw new Exception("获取托盘信息失败");
|
}
|
}
|
else
|
{
|
throw new Exception("累计码盘数量超出入库单数量");
|
}
|
}
|
else
|
{
|
throw new Exception($"未找到入库单{item.arrival_no}/物料信息{item.item_code}");
|
}
|
}
|
db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
db.RollbackTran();
|
result.resultCode = 1;
|
result.resultMsg = $"码盘入库{ex.Message}";
|
return result;
|
throw;
|
}
|
return result;
|
}
|
}
|
|
/// <summary>
|
/// 创建领料单
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public static LLDReturnRoot.Root Out_Order_In1s(CKDdto.Root model)
|
{
|
LLDReturnRoot.Root finalRoot = new LLDReturnRoot.Root
|
{
|
ROOT = new LLDReturnRoot.ROOT
|
{
|
ITEM = new List<LLDReturnRoot.ITEM>
|
{
|
|
}
|
}
|
};
|
List<LLDReturnRoot.ITEM> iTEMs = new List<LLDReturnRoot.ITEM>();
|
var result = new WeiLiResult();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
//创建领料单
|
try
|
{
|
List<WcReturnRoot.ITEM> wcReturnRoots = new List<WcReturnRoot.ITEM>();
|
//删除的集合
|
List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
|
List<TN_Ll_detail> iuptN_Ll_Details = new List<TN_Ll_detail>();
|
//db.BeginTran();
|
foreach (var itemscddll in model.ROOT.SCDDLL)
|
{
|
|
LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM();
|
|
#region
|
var po = db.Queryable<TN_Ll_Order>()
|
.Includes(a => a.Details)
|
.Where(s => s.S_NO == itemscddll.LLDH)
|
.First();
|
|
#endregion
|
if (po == null)
|
{
|
po = new TN_Ll_Order { S_NO = itemscddll.LLDH, S_FACTORY = itemscddll.GC, S_OUT_TYPE = "出库", S_BS_TYPE = "出库", S_AREA_CODE = "HJQ", S_BS_NO = itemscddll.LLDH };
|
po.Details = new List<TN_Ll_detail>();
|
if (itemscddll.ITEM.Count() > 0)
|
{
|
Stopwatch sw = new Stopwatch();
|
sw.Start();
|
foreach (var a in itemscddll.ITEM)
|
{
|
po.Details.Add(new TN_Ll_detail
|
{
|
S_DO_NO = itemscddll.LLDH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = "",
|
F_QTY = a.XQSL,
|
S_ZJBM = a.ZJBM,
|
S_YLBH = a.YLBH,
|
S_YLXMH = a.YLHXM,
|
S_BATCH_NO = "",
|
S_ERP_WH_CODE = a.KCDD,
|
S_ZJWLTH = a.ZJWLTH,
|
S_ZJWLMS = a.ZJWLMS,
|
S_ZHFHBS = a.ZHFHBS,
|
S_CJRQ = a.CJRQ,
|
S_LLDSCBS = a.LLDSCBS,
|
S_SCGLY = a.SCGLY,
|
S_GXH = a.GXH,
|
S_XQRQ = a.XQRQ,
|
N_ITEM_STATE = 1
|
});
|
}
|
|
|
var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
if (po.Details.Count() > 0)
|
{
|
using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer))
|
{
|
bulkCopy.DestinationTableName = "TN_Picking_Detail";
|
bulkCopy.BatchSize = 500;
|
var dataTable = new DataTable();
|
dataTable = po.Details.ToDataTable();
|
// 添加列映射(确保名称匹配)
|
foreach (DataColumn col in dataTable.Columns)
|
{
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
}
|
bulkCopy.WriteToServer(po.Details.ToDataTable());
|
}
|
}
|
sw.Stop();
|
long elapsedMilliseconds = sw.ElapsedMilliseconds;
|
LogHelper.Info($"生产订单领料单无数据{po.Details.Count()}(生成领料单)添加数据返回时长:" + elapsedMilliseconds);
|
}
|
}
|
}
|
|
//db.CommitTran();
|
|
return finalRoot;
|
|
}
|
catch (Exception ex)
|
{
|
LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM();
|
lLDReturnRoots.GC = "";
|
lLDReturnRoots.LLDH = "";
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = ex.Message;
|
iTEMs.Add(lLDReturnRoots);
|
finalRoot.ROOT.ITEM = iTEMs;
|
db.RollbackTran();
|
|
return finalRoot;
|
}
|
}
|
|
}
|
|
/// <summary>
|
/// 创建领料单
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public static LLDReturnRoot.Root Out_Order_Ins(CKDdto.Root model)
|
{
|
LLDReturnRoot.Root finalRoot = new LLDReturnRoot.Root
|
{
|
ROOT = new LLDReturnRoot.ROOT
|
{
|
ITEM = new List<LLDReturnRoot.ITEM>
|
{
|
|
}
|
}
|
};
|
List<LLDReturnRoot.ITEM> iTEMs = new List<LLDReturnRoot.ITEM>();
|
var result = new WeiLiResult();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
//创建领料单
|
try
|
{
|
Stopwatch s1w = new Stopwatch();
|
s1w.Start();
|
List<WcReturnRoot.ITEM> wcReturnRoots = new List<WcReturnRoot.ITEM>();
|
|
//删除的集合
|
List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
|
List<TN_Ll_detail> iuptN_Ll_Details = new List<TN_Ll_detail>();
|
|
db.BeginTran();
|
foreach (var itemscddll in model.ROOT.SCDDLL)
|
{
|
var wlbmList = itemscddll.ITEM.Select(x => x.WLBM).Distinct().ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => wlbmList.Contains(it.S_ITEM_CODE)) // 使用 IN 查询
|
.ToList();
|
LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM();
|
|
var materialCache = new Dictionary<string, TN_Material>();
|
#region 创建领料单
|
var po = db.Queryable<TN_Ll_Order>()
|
.Includes(a => a.Details)
|
.Where(s => s.S_NO == itemscddll.LLDH)
|
.First();
|
|
#endregion
|
//var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH);
|
if (po == null)
|
{
|
po = new TN_Ll_Order { S_NO = itemscddll.LLDH, S_FACTORY = itemscddll.GC, S_OUT_TYPE = "出库", S_BS_TYPE = "出库", S_AREA_CODE = "HJQ", S_BS_NO = itemscddll.LLDH };
|
po.Details = new List<TN_Ll_detail>();
|
if (itemscddll.ITEM.Count() > 0)
|
{
|
foreach (var a in itemscddll.ITEM)
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).FirstOrDefault();
|
if (item == null)
|
{
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料";
|
iTEMs.Add(lLDReturnRoots);
|
|
continue;
|
}
|
po.Details.Add(new TN_Ll_detail
|
{
|
S_DO_NO = itemscddll.LLDH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = item?.S_ITEM_NAME,
|
F_QTY = a.XQSL,
|
S_ZJBM = a.ZJBM,
|
S_YLBH = a.YLBH,
|
S_YLXMH = a.YLHXM,
|
S_BATCH_NO = "",
|
S_ERP_WH_CODE = a.KCDD,
|
S_ZJWLTH = a.ZJWLTH,
|
S_ZJWLMS = a.ZJWLMS,
|
S_ZHFHBS = a.ZHFHBS,
|
S_CJRQ = a.CJRQ,
|
S_LLDSCBS = a.LLDSCBS,
|
S_SCGLY = a.SCGLY,
|
S_GXH = a.GXH,
|
S_XQRQ = a.XQRQ,
|
N_ITEM_STATE = 1
|
});
|
|
}
|
|
Stopwatch sw = new Stopwatch();
|
sw.Start();
|
|
if (po.Details.Count() > 0)
|
{
|
LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM();
|
lLDReturnRoot1.GC = itemscddll.GC;
|
lLDReturnRoot1.LLDH = itemscddll.LLDH;
|
lLDReturnRoot1.MSGCODE = 0;
|
lLDReturnRoot1.MSGDESP = $"成功";
|
iTEMs.Add(lLDReturnRoot1);
|
var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
//db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand();
|
using (var bulkCopy = new SqlBulkCopy(util.Settings.SqlServer))
|
{
|
bulkCopy.DestinationTableName = "TN_Picking_Detail";
|
bulkCopy.BatchSize = 500;
|
var dataTable = new DataTable();
|
dataTable = po.Details.ToDataTable();
|
// 添加列映射(确保名称匹配)
|
foreach (DataColumn col in dataTable.Columns)
|
{
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
}
|
bulkCopy.WriteToServer(po.Details.ToDataTable());
|
}
|
}
|
else
|
{
|
LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM();
|
lLDReturnRoot1.GC = itemscddll.GC;
|
lLDReturnRoot1.LLDH = itemscddll.LLDH;
|
lLDReturnRoot1.MSGCODE = 0;
|
lLDReturnRoot1.MSGDESP = $"成功,无数据添加";
|
iTEMs.Add(lLDReturnRoot1);
|
}
|
sw.Stop();
|
long elapsedMilliseconds = sw.ElapsedMilliseconds;
|
LogHelper.Info($"生产订单领料单无数据{po.Details.Count()}(生成领料单)添加数据返回时长:" + elapsedMilliseconds);
|
}
|
}
|
else
|
{
|
|
List<TN_Ll_detail> listtn = new List<TN_Ll_detail>();
|
if (po.N_B_STATE != 0)
|
{
|
foreach (var a in itemscddll.ITEM)
|
{
|
if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
{
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"执行中领料单,物料{a.WLBM}物料不允许删除";
|
iTEMs.Add(lLDReturnRoots);
|
continue;
|
}
|
var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).FirstOrDefault();
|
if (item == null)
|
{
|
;
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料";
|
iTEMs.Add(lLDReturnRoots);
|
continue;
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_DO_NO = itemscddll.LLDH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.XQSL,
|
S_ZJBM = a.ZJBM,
|
S_YLBH = a.YLBH,
|
S_YLXMH = a.YLHXM,
|
S_ZJWLTH = a.ZJWLTH,
|
S_ZJWLMS = a.ZJWLMS,
|
S_ZHFHBS = a.ZHFHBS,
|
S_CJRQ = a.CJRQ,
|
S_LLDSCBS = a.LLDSCBS,
|
S_GXH = a.GXH,
|
S_XQRQ = a.XQRQ,
|
S_SCGLY = a.SCGLY,
|
S_BATCH_NO = "无",
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{
|
if (po1.Where(s => s.F_ACC_D_QTY < a.XQSL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
{
|
po1.First().F_QTY = a.XQSL;
|
iuptN_Ll_Details.Add(po1.First());
|
//db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
else //返回失败
|
{
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}";
|
iTEMs.Add(lLDReturnRoots);
|
continue;
|
}
|
}
|
}
|
;
|
}//执行中订单
|
else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
{
|
foreach (var a in itemscddll.ITEM)
|
{
|
if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
{
|
var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).FirstOrDefault();
|
if (po1 != null) //无则新增物料明细
|
{
|
tN_Ll_Details.Add(po1);
|
// db.Deleteable<TN_Ll_detail>().Where(it => it.S_ITEM_CODE == a.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand();
|
}
|
else
|
{
|
//result.code = 1;
|
//result.msg = $"物料{a.WLBM}物料数据不存在 无法删除";
|
//throw new Exception($"物料{a.WLBM}物料数据不存在 无法删除");
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"删除的物料{a.WLBM}物料数据不存在 无法删除";
|
iTEMs.Add(lLDReturnRoots);
|
continue;
|
}
|
}
|
else
|
{
|
var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
if (po1.Count() == 0) //无则新增物料明细
|
{
|
var item = itemlist.Where(it => it.S_ITEM_CODE == a.WLBM).FirstOrDefault();
|
if (item == null)
|
{
|
//result.code = 1;
|
//result.msg = $"物料{a.WLBM}物料主数据不存在该物料";
|
//throw new Exception($"物料{a.WLBM}物料主数据不存在该物料");
|
lLDReturnRoots.GC = itemscddll.GC;
|
lLDReturnRoots.LLDH = itemscddll.LLDH;
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = $"物料{a.WLBM}物料主数据不存在该物料";
|
iTEMs.Add(lLDReturnRoots);
|
continue;
|
}
|
TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
{
|
S_DO_NO = itemscddll.LLDH,
|
S_AREA_CODE = "HJQ",
|
N_ROW_NO = "",
|
S_ITEM_CODE = a.WLBM,
|
S_ITEM_NAME = item.S_ITEM_NAME,
|
F_QTY = a.XQSL,
|
S_ZJBM = a.ZJBM,
|
S_YLBH = a.YLBH,
|
S_YLXMH = a.YLHXM,
|
S_ZJWLTH = a.ZJWLTH,
|
S_ZJWLMS = a.ZJWLMS,
|
S_ZHFHBS = a.ZHFHBS,
|
S_CJRQ = a.CJRQ,
|
S_LLDSCBS = a.LLDSCBS,
|
S_SCGLY = a.SCGLY,
|
S_GXH = a.GXH,
|
S_XQRQ = a.XQRQ,
|
S_BATCH_NO = "无",
|
S_ERP_WH_CODE = a.KCDD,
|
N_ITEM_STATE = 1
|
};
|
listtn.Add(tN_Outbound_Detail);
|
}
|
else
|
{//更新数量 未执行时 直接更新数量
|
po1.First().F_QTY = a.XQSL;
|
iuptN_Ll_Details.Add(po1.First());
|
//db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
}
|
}
|
if (tN_Ll_Details.Count() > 0)
|
{
|
db.Deleteable<TN_Ll_detail>(tN_Ll_Details).ExecuteCommand();
|
}
|
if (iuptN_Ll_Details.Count() > 0)
|
{
|
db.Updateable(iuptN_Ll_Details).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
}
|
}
|
Stopwatch sw1 = new Stopwatch();
|
sw1.Start();
|
//添加数据
|
if (listtn.Count() > 0)
|
{
|
LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM();
|
lLDReturnRoot1.GC = itemscddll.GC;
|
lLDReturnRoot1.LLDH = itemscddll.LLDH;
|
lLDReturnRoot1.MSGCODE = 0;
|
lLDReturnRoot1.MSGDESP = $"成功";
|
iTEMs.Add(lLDReturnRoot1);
|
db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand();
|
|
}
|
else
|
{
|
LLDReturnRoot.ITEM lLDReturnRoot1 = new LLDReturnRoot.ITEM();
|
lLDReturnRoot1.GC = itemscddll.GC;
|
lLDReturnRoot1.LLDH = itemscddll.LLDH;
|
lLDReturnRoot1.MSGCODE = 0;
|
lLDReturnRoot1.MSGDESP = $"成功,无数据添加";
|
iTEMs.Add(lLDReturnRoot1);
|
}
|
|
sw1.Stop();
|
long elapsedMilliseconds2 = sw1.ElapsedMilliseconds;
|
LogHelper.Info("生产订单领料单有数据(生成领料单)添加数据返回时长:" + elapsedMilliseconds2);
|
}
|
|
}
|
|
db.CommitTran();
|
|
finalRoot.ROOT.ITEM = iTEMs;
|
|
|
s1w.Stop();
|
long elapsedMillisecond1s = s1w.ElapsedMilliseconds;
|
LogHelper.Info("生产订单finalRoot.ROOT.ITEM" + elapsedMillisecond1s);
|
|
|
|
}
|
catch (Exception ex)
|
{
|
LLDReturnRoot.ITEM lLDReturnRoots = new LLDReturnRoot.ITEM();
|
lLDReturnRoots.GC = "";
|
lLDReturnRoots.LLDH = "";
|
lLDReturnRoots.MSGCODE = 1;
|
lLDReturnRoots.MSGDESP = ex.Message;
|
iTEMs.Add(lLDReturnRoots);
|
finalRoot.ROOT.ITEM = iTEMs;
|
db.RollbackTran();
|
|
return finalRoot;
|
}
|
}
|
return finalRoot;
|
}
|
|
/// <summary>
|
/// mobox创建出库单
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static WeiLiResult Out_Order_Inss(string S_NO)
|
{
|
var result = new WeiLiResult();
|
// var db = new SqlHelper<object>().GetInstance();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
|
//mobox创建出库单
|
try
|
{
|
db.BeginTran();
|
|
#region mobox创建出库单
|
var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == S_NO).First();
|
|
#endregion
|
//var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH);
|
if (po == null)
|
{
|
result.code = 1;
|
result.msg = $"领料单号不存在";
|
throw new Exception($"领料单号不存在");
|
}
|
else
|
{
|
//var az = db.Queryable<AZInventory>().ToList();
|
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 };
|
List<TN_Ll_detail> tN_Ll_Details = new List<TN_Ll_detail>();
|
po1.Details = new List<TN_Outbound_Detail>();
|
var list = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY).Select(s => s.S_ITEM_CODE).Distinct().ToArray();
|
var Sitemlist = db.Queryable<CntrItemRel>().Where(s => list.Contains(s.S_ITEM_CODE)).Select(s => s.S_ITEM_CODE).ToArray();
|
|
po.Details = po.Details.Where(s => s.F_QTY > s.F_ACC_D_QTY && Sitemlist.Contains(s.S_ITEM_CODE)).ToList();
|
if (po.Details.Count() > 0)
|
{
|
|
foreach (var a in po.Details)
|
{
|
if (a.F_QTY > a.F_ACC_D_QTY)
|
{
|
po1.Details.Add(new TN_Outbound_Detail
|
{
|
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,
|
S_CGPZH = a.S_CGPZH,
|
S_ZJBM = a.S_ZJBM,
|
S_YLBH = a.S_YLBH,
|
S_ZJWLTH = a.S_ZJWLTH,
|
S_ZJWLMS = a.S_ZJWLMS,
|
S_ZHFHBS = a.S_ZHFHBS,
|
S_CJRQ = a.S_CJRQ,
|
S_LLDSCBS = a.S_LLDSCBS,
|
S_SCGLY = a.S_SCGLY,
|
S_GXH = a.S_GXH,
|
S_XQRQ = a.S_XQRQ,
|
S_YLXMH = a.S_YLXMH,
|
S_CGPZXMBH = a.S_CGPZXMBH,
|
S_ERP_WH_CODE = a.S_ERP_WH_CODE,
|
N_ITEM_STATE = a.N_ITEM_STATE
|
});
|
double difference = a.F_QTY - a.F_ACC_D_QTY;
|
a.F_ACC_D_QTY += difference;
|
tN_Ll_Details.Add(a);
|
}
|
else
|
{
|
result.code = 1;
|
result.msg = $"数量小于分配数量";
|
throw new Exception($"数量小于分配数量");
|
}
|
|
}
|
|
|
db.Updateable(tN_Ll_Details).UpdateColumns(it => new { it.F_ACC_D_QTY }).ExecuteCommand();
|
if (po1.Details.Count() > 0)
|
{
|
var result1 = db.Insertable<TN_Outbound_Order>(po1).ExecuteCommand() > 0;
|
db.Insertable<TN_Outbound_Detail>(po1.Details).ExecuteCommand();
|
po1.Details.Clear();
|
}
|
else
|
{
|
result.code = 1;
|
result.msg = $"领料单{po.S_NO}无需新增出库单,请检查";
|
return result;
|
}
|
}
|
else
|
{
|
result.code = 1;
|
result.msg = $"领料单{po.S_NO}找不到对应库存物料信息";
|
return result;
|
}
|
}
|
db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
db.RollbackTran();
|
result.code = 1;
|
result.msg = $"出库单接口异常,异常信息={ex.Message}";
|
|
return result;
|
}
|
return result;
|
}
|
}
|
/// <summary>
|
/// 创建出库单
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
//internal static string Out_Order_In(CKDdto.Root model)
|
//{
|
// var result = new WeiLiResult();
|
// // var db = new SqlHelper<object>().GetInstance();
|
// using (var db = new SqlHelper<object>().GetInstance())
|
// {
|
|
// //创建发货单,人工点确认后生成分拣单,没有缺货的自动更新为失败,有货的更新为执行中
|
// //创建入库单主子表
|
// //var po = WMSHelper.GetShippingOrder(model.shippingNoteNo);
|
// try
|
// {
|
// db.BeginTran();
|
// var po = WMSHelper.GetOutboundOrder(model.ROOT.SCDDLL.LLDH);
|
// if (po == null)
|
// {
|
// po = new TN_Outbound_Order { S_NO = model.ROOT.SCDDLL.LLDH, S_FACTORY = model.ROOT.SCDDLL.GC, S_OUT_TYPE = "出库", S_BS_TYPE = "出库", S_AREA_CODE = "HJQ", S_BS_NO = model.ROOT.SCDDLL.LLDH };
|
// po.Details = new List<TN_Outbound_Detail>();
|
// if (model.ROOT.SCDDLL.ITEM.Count() > 0)
|
// {
|
// foreach (var a in model.ROOT.SCDDLL.ITEM)
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
// if (item == null)
|
// {
|
// result.code = 1;
|
// result.msg = $"物料{a.WLBM}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBM}物料主数据不存在该物料");
|
// }
|
// po.Details.Add(new TN_Outbound_Detail
|
// {
|
// S_DO_NO = model.ROOT.SCDDLL.LLDH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = "",
|
// S_ITEM_CODE = a.WLBM,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.XQSL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// });
|
// }
|
// //WMSHelper.CreateShippingOrder(po);
|
// WMSHelper.CreateOutboundOrder(po);
|
// }
|
// }
|
// else
|
// {//待执行出库单 更新数量必须大于当前物料数量
|
|
// List<TN_Outbound_Detail> listtn = new List<TN_Outbound_Detail>();
|
// if (po.N_B_STATE != 0)
|
// {
|
// foreach (var a in model.ROOT.SCDDLL.ITEM)
|
// {
|
// if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// {
|
// result.code = 1;
|
// result.msg = $"执行中订单,物料{a.WLBM}物料不允许删除";
|
// throw new Exception($"执行中订单,物料{a.WLBM}物料不允许删除");
|
// }
|
// var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
// if (item == null)
|
// {
|
// result.code = 1;
|
// result.msg = $"物料{a.WLBM}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBM}物料主数据不存在该物料");
|
// }
|
// TN_Outbound_Detail tN_Outbound_Detail = new TN_Outbound_Detail
|
// {
|
// S_DO_NO = model.ROOT.SCDDLL.LLDH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = "",
|
// S_ITEM_CODE = a.WLBM,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.XQSL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {
|
// if (po1.Where(s => s.F_ACC_D_QTY < a.XQSL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
// {
|
// po1.First().F_QTY = a.XQSL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// else //返回失败
|
// {
|
// result.code = 1;
|
// result.msg = $"更新失败,更新数量必须大于当前物料数量{a.WLBM}";
|
// throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBM}");
|
|
// }
|
// }
|
// }
|
// ;
|
// }//执行中订单
|
// else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
// {
|
// foreach (var a in model.ROOT.SCDDLL.ITEM)
|
// {
|
// if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// {
|
// var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() > 0) //无则新增物料明细
|
// {
|
// db.Deleteable<TN_Outbound_Detail>().Where(it => it.S_ITEM_CODE == a.WLBM && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand();
|
// }
|
// else
|
// {
|
// result.code = 1;
|
// result.msg = $"物料{a.WLBM}物料数据不存在 无法删除";
|
// throw new Exception($"物料{a.WLBM}物料数据不存在 无法删除");
|
// }
|
// }
|
// else
|
// {
|
// var po1 = po.Details.Where(s => a.WLBM == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBM).First();
|
// if (item == null)
|
// {
|
// result.code = 1;
|
// result.msg = $"物料{a.WLBM}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBM}物料主数据不存在该物料");
|
// }
|
// TN_Outbound_Detail tN_Outbound_Detail = new TN_Outbound_Detail
|
// {
|
// S_DO_NO = model.ROOT.SCDDLL.LLDH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = "",
|
// S_ITEM_CODE = a.WLBM,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.XQSL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {//更新数量 未执行时 直接更新数量
|
// po1.First().F_QTY = a.XQSL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// }
|
// }
|
// ;
|
// }
|
// //添加数据
|
// if (listtn.Count() > 0)
|
// {
|
// db.Insertable<TN_Outbound_Detail>(listtn).ExecuteCommand();
|
// }
|
// }
|
// db.CommitTran();
|
// }
|
// catch (Exception ex)
|
// {
|
// db.RollbackTran();
|
// result.code = 1;
|
// result.msg = $"出库单接口异常,异常信息={ex.Message}";
|
// var jsons = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg);
|
// return jsons;
|
// }
|
|
// var json = CkGetJsonResult(model.ROOT.SCDDLL.LLDH, model.ROOT.SCDDLL.GC, result.code.ToString(), result.msg);
|
// return json;
|
// }
|
//}
|
|
|
#region wm-spa
|
/// <summary>
|
/// 外采入库回调
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static async Task<SimpleResult> WcRkBacking(WcRkDto model)
|
{
|
var result = new SimpleResult();
|
//判断起始库位是否锁定
|
// var db = new SqlHelper<object>().GetInstance();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
var po = db.Queryable<TN_Inbound_Order>().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First();
|
var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == model.S_NO).ToList();
|
if (po == null)
|
{
|
result.resultCode = 1;
|
result.resultMsg = "数据不存在";
|
}
|
|
List<WcRkBc.ITEM> listitem = new List<WcRkBc.ITEM>();
|
foreach (var item in po.Details)
|
{
|
WcRkBc.ITEM wcbkbcitem = new WcRkBc.ITEM();
|
wcbkbcitem.WLPZBH = po.S_NO;
|
wcbkbcitem.WLPZND = po.S_WLPZND;
|
wcbkbcitem.WLPZZDXM = item.N_ROW_NO;
|
wcbkbcitem.WLH = item.S_ITEM_CODE;
|
wcbkbcitem.JBJLDW = item.S_UOM;
|
wcbkbcitem.SL = item.F_QTY;
|
wcbkbcitem.CGPZH = item.S_CGPZH;
|
wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH;
|
wcbkbcitem.KCDD = item.S_KCDD;
|
//wcbkbcitem.JYPBH = item.S_JYPBH;
|
//wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ;
|
//wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ;
|
wcbkbcitem.PC = item.S_BATCH_NO;
|
List<WcRkBc.ITEM1> listitem1 = new List<WcRkBc.ITEM1>();
|
//string[] xlhValues = item.S_SERIAL_NO.Split(',');
|
var serialNos = string.Join(",", CntrItemRels
|
.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE)
|
.Select(s => s.S_SERIAL_NO));
|
string[] xlhValues = serialNos.Split(',');
|
foreach (var xlhValue in xlhValues)
|
{
|
WcRkBc.ITEM1 newItem = new WcRkBc.ITEM1 { XLH = xlhValue };
|
listitem1.Add(newItem);
|
}
|
wcbkbcitem.ITEM1 = listitem1;
|
listitem.Add(wcbkbcitem);
|
|
}
|
|
|
|
|
|
WcRkBc.Root roots = new WcRkBc.Root
|
{
|
ROOT = new WcRkBc.ROOT
|
{
|
WLPZ = new WcRkBc.WLPZ
|
{
|
HEAD = new WcRkBc.HEAD
|
{
|
KEY = "12345",
|
GZRQ = DateTime.Now.ToString(),
|
GZRY = model.GZRY,
|
GC = po.S_FACTORY
|
},
|
ITEM = new List<WcRkBc.ITEM>
|
{
|
}
|
}
|
}
|
};
|
roots.ROOT.WLPZ.ITEM = listitem;
|
var json = JsonConvert.SerializeObject(roots.ROOT);
|
string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
|
XElement responseXElement = XElement.Parse(xml);
|
//返回json
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
};
|
// 现在 root 对象包含了您定义的假数据
|
// 发送POST请求
|
|
// 确保HTTP成功状态值
|
response.EnsureSuccessStatusCode();
|
string xmlData = "{\r\n \"ROOT\": {\r\n \"WLPZ\": {\r\n \"KEY\": \"唯一标识\",\r\n \"WLPZBH\": \"物料凭证号\",\r\n " +
|
" \"WLPZND\": \"物料凭年度\",\r\n \"MSGCODE\": \"0\",\r\n \"MSGDESP\": \"失败原因或者成功信息字符长度255\"\r\n }\r\n }\r\n}";
|
|
|
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();
|
|
}
|
// 将 XmlDocument 转换为 JSON 字符串
|
//JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
|
XmlDocument xmlDoc = new XmlDocument();
|
xmlDoc.LoadXml(responseXml.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 = model.S_NO;
|
materialVoucher.S_TYPE = po.S_IN_TYPE;
|
materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH;
|
materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
|
materialVoucher.STATUS = 0;
|
db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
|
|
return result;
|
}
|
|
}
|
|
|
|
/// <summary>
|
/// 内采入库回调
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static async Task<SimpleResult> NcRkBacking(WcRkDto model)
|
{
|
var result = new SimpleResult();
|
//判断起始库位是否锁定
|
//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)
|
{
|
var url = Settings.MoboxSeverUrl + "inventory/AddChange";
|
//仓库量表升量
|
var req = new AddChangeModel { op_type = 5 };
|
//库区量表升量
|
var req2 = new AddChangeModel { op_type = 6 };
|
po.Details.ForEach(a =>
|
{
|
LogHelper.Info($"填充数据");
|
LogHelper.Info($"添加仓库量表数据 仓库 物料编码{a.S_ITEM_CODE} 物料名称 数量{a.F_QTY}");
|
req.item_info.Add(new AddChangeModel.itemModel
|
{
|
wh_code = "cangku",
|
item_code = a.S_ITEM_CODE,
|
item_name = a.S_ITEM_NAME,
|
qty = (float)a.F_QTY
|
});
|
LogHelper.Info($"添加库区量表数据 库区 物料编码{a.S_ITEM_CODE} 物料名称{a.S_ITEM_NAME} 数量{a.F_QTY}");
|
req2.item_info.Add(new AddChangeModel.itemModel
|
{
|
wh_code = "cangku",
|
area_code = "kuqu",
|
item_code = a.S_ITEM_CODE,
|
item_name = a.S_ITEM_NAME,
|
qty = (float)a.F_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)
|
{
|
resu = false;
|
}
|
}
|
else
|
{
|
LogHelper.Info($"mobox 仓库升量接口返回为空");
|
resu = false;
|
}
|
var reqData2 = JsonConvert.SerializeObject(req2);
|
var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
|
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)
|
{
|
resu = false;
|
}
|
}
|
else
|
{
|
LogHelper.Info($"mobox 库区升量接口返回为空");
|
resu = false;
|
}
|
}
|
else LogHelper.Info($"入库单明细无值");
|
#endregion
|
var CntrItemRels = db.Queryable<CntrItemRel>().Where(a => a.S_BS_NO == model.S_NO).ToList();
|
if (po == null)
|
{
|
result.resultCode = 1;
|
result.resultMsg = "数据不存在";
|
return result;
|
}
|
|
List<TN_Inbound_Detail> tN_Inbound_Details = new List<TN_Inbound_Detail>();
|
po.Details = po.Details.Where(d => model.Wlist.Any(w =>
|
w.S_ITEM_CODE == d.S_ITEM_CODE &&
|
w.N_ROW_NO == d.N_ROW_NO))
|
.ToList();
|
if (po.S_IN_TYPE == "内采入库")
|
{
|
List<NcRkDto.ITEM> listitem = new List<NcRkDto.ITEM>();
|
foreach (var item in po.Details)
|
{
|
NcRkDto.ITEM wcbkbcitem = new NcRkDto.ITEM();
|
//wcbkbcitem.WLPZBH = po.S_WLPZBH;
|
//wcbkbcitem.WLPZND = po.S_WLPZND;
|
wcbkbcitem.WLPZZDXM = item.N_ROW_NO;
|
wcbkbcitem.WLH = item.S_ITEM_CODE;
|
wcbkbcitem.JBJLDW = item.S_UOM;
|
wcbkbcitem.SL = item.F_QTY;
|
wcbkbcitem.CGPZH = item.S_CGPZH;
|
wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH;
|
wcbkbcitem.KCDD = item.S_KCDD;
|
wcbkbcitem.YDLX = po.S_BS_TYPE;
|
wcbkbcitem.GC = po.S_FACTORY;
|
//wcbkbcitem.JYPBH = item.S_JYPBH;
|
//wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ;
|
//wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ;
|
wcbkbcitem.PC = item.S_BATCH_NO;
|
List<NcRkDto.ITEM1> listitem1 = new List<NcRkDto.ITEM1>();
|
//string[] xlhValues = item.S_SERIAL_NO.Split(',');
|
//var serialNos = string.Join(",", CntrItemRels
|
// .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE)
|
// .Select(s => s.S_SERIAL_NO));
|
//string[] xlhValues = serialNos.Split(',');
|
//foreach (var xlhValue in xlhValues)
|
//{
|
// NcRkDto.ITEM1 newItem = new NcRkDto.ITEM1 { XLH = xlhValue };
|
// listitem1.Add(newItem);
|
//}
|
//wcbkbcitem.ITEM1 = listitem1;
|
listitem.Add(wcbkbcitem);
|
item.N_B_STATE = 1;
|
tN_Inbound_Details.Add(item);
|
|
}
|
NcRkDto.Root roots = new NcRkDto.Root
|
{
|
ROOT = new NcRkDto.ROOT
|
{
|
WLPZ = new NcRkDto.WLPZ
|
{
|
HEAD = new NcRkDto.HEAD
|
{
|
|
KEY = po.S_NO,
|
GZRQ = DateTime.Now.ToString("yyyyMMdd"),
|
GZRY = model.GZRY,
|
WLPZBH = po.S_NO,
|
WLPZND = po.S_WLPZND
|
},
|
ITEM = new List<NcRkDto.ITEM>
|
{
|
|
}
|
}
|
}
|
};
|
roots.ROOT.WLPZ.ITEM = listitem;
|
var json = JsonConvert.SerializeObject(roots.ROOT);
|
string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
|
|
// 现在 root 对象包含了您定义的假数据
|
// 发送POST请求
|
LogHelper.Info($"内采收货xml数据{xml}");
|
|
#region MyRegion
|
|
// 创建 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();
|
|
//}
|
// 将 XmlDocument 转换为 JSON 字符串
|
//JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
#endregion
|
|
|
|
|
|
#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();
|
request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml;
|
LogHelper.Info($"内采SAP回调{service.Url}");
|
// 调用Web Service
|
ZscmNcResponse responses = service.ZscmNc(request);
|
|
// 处理响应
|
LogHelper.Info("SAP返回结果: " + responses.Output);
|
|
// 解析Output中的凭证号等信息
|
|
#endregion
|
|
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());
|
//添加凭证记录表
|
result.resultMsg = data.ROOT.ITEM.MSGDESP;
|
result.resultCode = data.ROOT.ITEM.MSGCODE;
|
//MaterialVoucher materialVoucher = new MaterialVoucher();
|
if (data.ROOT.ITEM.MSGCODE == 0)
|
{
|
//materialVoucher.S_NO = model.S_NO;
|
//materialVoucher.S_TYPE = po.S_IN_TYPE;
|
//materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH;
|
//materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
|
//materialVoucher.STATUS = 0;
|
//db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
|
List<MaterialVoucher> materials = new List<MaterialVoucher>();
|
foreach (var item in model.Wlist)
|
{
|
MaterialVoucher materialVoucher = new MaterialVoucher();
|
materialVoucher.S_NO = po.S_NO;
|
materialVoucher.S_WLBM = item.S_ITEM_CODE;
|
materialVoucher.S_WLH = item.N_ROW_NO;
|
materialVoucher.S_TYPE = po.S_IN_TYPE;
|
materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH;
|
materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
|
materialVoucher.STATUS = 0;
|
materials.Add(materialVoucher);
|
}
|
|
if (materials.Count() > 0)
|
{
|
|
db.Insertable<MaterialVoucher>(materials).ExecuteCommand();
|
}
|
}
|
|
|
}
|
else if (po.S_IN_TYPE == "计划外退料入库")
|
{
|
DateTime dateTime;
|
DateTime dateTime1;
|
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");
|
|
}
|
JHWBackDto.Root myRoot = new JHWBackDto.Root
|
{
|
ROOT = new JHWBackDto.ROOT
|
{
|
HEAD = new JHWBackDto.HEAD
|
{
|
KEY = po.S_NO,
|
GZRQ = GZRQ,
|
PZZDRQ = PZZDRQ,
|
YHM = po.UNAME,
|
PZTTWB = po.BKTXT,
|
YDLX = po.S_BS_TYPE,
|
TSKCBS = po.SOBKZ,
|
ITEM = new List<JHWBackDto.ITEM>
|
{
|
|
}
|
},
|
|
}
|
};
|
//回参物料信息
|
List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>();
|
foreach (var item in po.Details)
|
{
|
// var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE).FirstOrDefault();
|
JHWBackDto.ITEM ckbitem = new JHWBackDto.ITEM();
|
ckbitem.WLBH = item.S_ITEM_CODE;
|
ckbitem.GC = po.S_FACTORY;
|
ckbitem.XSDD = item?.S_XSDD;
|
ckbitem.XSDDHXM = item?.S_XSDDXMBH;
|
ckbitem.SL = item.F_QTY;
|
ckbitem.DW = item?.S_UOM;
|
ckbitem.DDH = item?.S_DDH;
|
//ckbitem.PH = podetail?.S_PH;
|
// ckbitem.TSKCBS = podetail?.S_TSKCBS;
|
//ckbitem.DDHXM = (podetail?.N_ROW_NO);
|
ckbitem.WBS = item?.S_WBS;
|
ckbitem.KCDD = item?.S_KCDD;
|
ckbitem.PC = item?.S_BATCH_NO;
|
#region MyRegion
|
// List<JHWBackDto.ITEM1> listitem1 = new List<JHWBackDto.ITEM1>();
|
JHWBackDto.ITEM1 listitem1 = new JHWBackDto.ITEM1();
|
listitem1.XLH = item?.S_SERIAL_NO.Split(',').ToList();
|
////string[] xlhValues = item.S_SERIAL_NO.Split(',');
|
//var serialNos = string.Join(",", CntrItemRels
|
// .Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE)
|
// .Select(s => s.S_SERIAL_NO));
|
//string[] xlhValues = serialNos.Split(',');
|
//foreach (var xlhValue in xlhValues)
|
//{
|
// JHWBackDto.ITEM1 newItem = new JHWBackDto.ITEM1 { XLH = xlhValue };
|
// listitem1.Add(newItem);
|
//}
|
ckbitem.ITEM1 = listitem1;
|
#endregion
|
|
iTEMs.Add(ckbitem);
|
|
item.N_B_STATE = 1;
|
tN_Inbound_Details.Add(item);
|
}
|
myRoot.ROOT.HEAD.ITEM = iTEMs;
|
#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();
|
|
//}
|
#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(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;
|
if (data.ROOT.ITEM.MSGCODE == 0)
|
{
|
List<MaterialVoucher> materials = new List<MaterialVoucher>();
|
foreach (var item in model.Wlist)
|
{
|
MaterialVoucher materialVoucher = new MaterialVoucher();
|
materialVoucher.S_NO = po.S_NO;
|
materialVoucher.S_WLBM = item.S_ITEM_CODE;
|
materialVoucher.S_WLH = item.N_ROW_NO;
|
materialVoucher.S_TYPE = po.S_IN_TYPE;
|
materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH;
|
materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
|
materialVoucher.STATUS = 0;
|
materials.Add(materialVoucher);
|
}
|
|
if (materials.Count() > 0)
|
{
|
|
db.Insertable<MaterialVoucher>(materials).ExecuteCommand();
|
}
|
}
|
#endregion
|
|
}
|
|
else if (po.S_IN_TYPE == "外采入库")
|
{
|
LogHelper.Info($"外采入库 xml数据");
|
List<WcRkBc.ITEM> listitem = new List<WcRkBc.ITEM>();
|
foreach (var item in po.Details)
|
{
|
WcRkBc.ITEM wcbkbcitem = new WcRkBc.ITEM();
|
wcbkbcitem.WLPZBH = po.S_NO;
|
wcbkbcitem.WLPZND = po.S_WLPZND;
|
wcbkbcitem.WLPZZDXM = item.N_ROW_NO;
|
wcbkbcitem.WLH = item.S_ITEM_CODE;
|
wcbkbcitem.JBJLDW = item.S_UOM;
|
wcbkbcitem.SL = item.F_QTY;
|
wcbkbcitem.CGPZH = item.S_CGPZH;
|
wcbkbcitem.CGPZXMBH = item.S_CGPZXMBH;
|
wcbkbcitem.KCDD = item.S_KCDD;
|
//wcbkbcitem.JYPBH = item.S_JYPBH;
|
//wcbkbcitem.KJPZSSRQ = item.S_KJPZSRRQ;
|
//wcbkbcitem.KJPZSRSJ = item.S_KJPZSRSJ;
|
wcbkbcitem.PC = item.S_BATCH_NO;
|
List<WcRkBc.ITEM1> listitem1 = new List<WcRkBc.ITEM1>();
|
//string[] xlhValues = item.S_SERIAL_NO.Split(',');
|
var serialNos = string.Join(",", CntrItemRels
|
.Where(s => s.S_ITEM_CODE == item.S_ITEM_CODE)
|
.Select(s => s.S_SERIAL_NO));
|
string[] xlhValues = serialNos.Split(',');
|
foreach (var xlhValue in xlhValues)
|
{
|
WcRkBc.ITEM1 newItem = new WcRkBc.ITEM1 { XLH = xlhValue };
|
listitem1.Add(newItem);
|
}
|
wcbkbcitem.ITEM1 = listitem1;
|
listitem.Add(wcbkbcitem);
|
item.N_B_STATE = 1;
|
tN_Inbound_Details.Add(item);
|
|
}
|
WcRkBc.Root roots = new WcRkBc.Root
|
{
|
ROOT = new WcRkBc.ROOT
|
{
|
WLPZ = new WcRkBc.WLPZ
|
{
|
HEAD = new WcRkBc.HEAD
|
{
|
KEY = po.S_NO,
|
GZRQ = DateTime.Now.ToString("yyyyMMdd"),
|
GZRY = model.GZRY,
|
GC = po.S_FACTORY
|
},
|
ITEM = new List<WcRkBc.ITEM>
|
{
|
}
|
}
|
}
|
};
|
roots.ROOT.WLPZ.ITEM = listitem;
|
var json = JsonConvert.SerializeObject(roots.ROOT);
|
string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
|
XElement responseXElement = XElement.Parse(xml);
|
//返回json
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
};
|
LogHelper.Info($"外采sap xml数据{xml}");
|
// 确保HTTP成功状态值
|
response.EnsureSuccessStatusCode();
|
#region MyRegion
|
//string xmlData = "{\r\n \"ROOT\": {\r\n \"WLPZ\": {\r\n \"KEY\": \"唯一标识\",\r\n \"WLPZBH\": \"物料凭证号\",\r\n " +
|
// " \"WLPZND\": \"物料凭年度\",\r\n \"MSGCODE\": \"0\",\r\n \"MSGDESP\": \"失败原因或者成功信息字符长度255\"\r\n }\r\n }\r\n}";
|
|
|
|
// 创建 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();
|
|
//}
|
#endregion
|
|
|
#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();
|
request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml;
|
LogHelper.Info($"SAP回调");
|
// 调用Web Service
|
ZscmWcResponse responses = service.ZscmWc(request);
|
|
// 处理响应
|
LogHelper.Info("SAP返回结果: " + responses.Output);
|
|
// 解析Output中的凭证号等信息
|
|
#endregion
|
|
// 将 XmlDocument 转换为 JSON 字符串
|
//JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
|
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());
|
//添加凭证记录表
|
result.resultMsg = data.ROOT.ITEM.MSGDESP;
|
result.resultCode = data.ROOT.ITEM.MSGCODE;
|
if (data.ROOT.ITEM.MSGCODE == 0)
|
{
|
;
|
List<MaterialVoucher> materials = new List<MaterialVoucher>();
|
foreach (var item in model.Wlist)
|
{
|
MaterialVoucher materialVoucher = new MaterialVoucher();
|
materialVoucher.S_NO = po.S_NO;
|
materialVoucher.S_WLBM = item.S_ITEM_CODE;
|
materialVoucher.S_WLH = item.N_ROW_NO;
|
materialVoucher.S_TYPE = po.S_IN_TYPE;
|
materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZH;
|
materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
|
materialVoucher.STATUS = 0;
|
materials.Add(materialVoucher);
|
}
|
if (materials.Count() > 0)
|
{
|
|
db.Insertable<MaterialVoucher>(materials).ExecuteCommand();
|
}
|
|
}
|
|
}
|
|
else if (po.S_IN_TYPE == "冲销入库")
|
{
|
|
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 List<CXCkBackDto.HEAD>
|
{
|
}
|
}
|
};
|
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);
|
item.N_B_STATE = 1;
|
tN_Inbound_Details.Add(item);
|
}
|
roots.ROOT.HEAD = listhead;
|
|
var json = JsonConvert.SerializeObject(roots.ROOT);
|
string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
|
XElement responseXElement = XElement.Parse(xml);
|
//返回json
|
var response = new HttpResponseMessage()
|
{
|
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
|
};
|
// 确保HTTP成功状态值
|
response.EnsureSuccessStatusCode();
|
LogHelper.Info($"冲销入库xml数据{xml}");
|
|
|
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);
|
|
|
|
//string xmlqqq = "<ROOT>\r\n\t<ITEM>\r\n\t\t<YWLPZBH>490062947</YWLPZBH>\r\n\t\t<YWLPZND>2025</YWLPZND>\r\n\t\t<YWLPZHXM>001</YWLPZHXM>\r\n\t\t<WLPZBH>490062949</WLPZBH>\r\n\t\t<WLPZND>\r\n\t\t</WLPZND>\r\n\t\t<WLPZHXM>D0001</WLPZHXM>\r\n\t\t<MSGCODE>0</MSGCODE>\r\n\t\t<MSGDESP>数据接收成功,并冲中销成功!</MSGDESP>\r\n\t</ITEM>\r\n</ROOT>";
|
// 将 XmlDocument 转换为 JSON 字符串
|
//JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
|
XmlDocument xmlDoc = new XmlDocument();
|
xmlDoc.LoadXml(responses.Output.ToString());
|
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
|
|
EnsureArrayFormat(jsonObject, "ITEM", "");
|
//var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
|
var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString());
|
var resmeg = "";
|
int rescode = 0;
|
//添加凭证记录表
|
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).FirstOrDefault();
|
|
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 != null ? onr.F_QTY : 0;
|
//materialVoucher.STATUS = 0;
|
resmeg += item?.MSGDESP;
|
materiallist.Add(materialVoucher);
|
|
|
}
|
else
|
{
|
rescode = 1; resmeg += item?.MSGDESP;
|
}
|
|
|
}
|
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();
|
}
|
|
if (tN_Inbound_Details.Count() > 0)
|
{
|
db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
|
}
|
var newpodetai= db.Queryable<TN_Inbound_Detail>().Where(a => a.S_IO_NO == model.S_NO).ToList();
|
int cout = newpodetai.Where(s => s.N_B_STATE != 1).Count();
|
if (cout==0)
|
{
|
po.N_B_STATE = 1;
|
db.Updateable(po).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
|
}
|
|
db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Info($"回调报错{ex.Message}");
|
db.RollbackTran();
|
throw;
|
}
|
return result;
|
}
|
}
|
#endregion
|
/// <summary>
|
/// 添加入库记录表
|
/// </summary>
|
/// <param name="taskno"></param>
|
/// <param name="S_CNTR_CODE"></param>
|
/// <returns></returns>
|
internal static SimpleResult AddMaterOrder(string taskno, string S_CNTR_CODE)
|
{
|
LogHelper.Info("添加入库记录表" + S_CNTR_CODE + "----" + taskno);
|
var result = new SimpleResult();
|
|
// var db = new SqlHelper<object>().GetInstance();
|
using (var db = new SqlHelper<object>().GetInstance())
|
{
|
|
try
|
{
|
db.BeginTran();
|
db.Updateable<Container>().SetColumns(it => new Container { C_ENABLE = "Y" }).Where(it => it.S_CODE == S_CNTR_CODE).ExecuteCommand();
|
|
var po = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == S_CNTR_CODE && a.S_BS_NO == taskno).ToList();
|
LogHelper.Info("添加入库记录表po" + po.Count());
|
var pzs = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == taskno).ToList();
|
var ass = pzs == null;
|
LogHelper.Info("添加入库记录表pz" + ass);
|
List<OutboundRecord> records = new List<OutboundRecord>();
|
foreach (var item in po)
|
{
|
var pz = pzs.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_BS_ROW_NO).ToList().FirstOrDefault();
|
|
OutboundRecord outboundRecord = new OutboundRecord();
|
outboundRecord.S_NO = item.S_BS_NO;
|
outboundRecord.S_TYPE = pz?.S_TYPE;
|
outboundRecord.S_WLPZBH = pz?.S_WLBM;
|
outboundRecord.S_WLPZND = pz?.S_WLPZND;
|
outboundRecord.S_WLBM = item.S_ITEM_CODE;
|
outboundRecord.S_SL = item.F_QTY;
|
outboundRecord.S_CNTR_CODE = S_CNTR_CODE;
|
records.Add(outboundRecord);
|
|
}
|
if (records.Count() > 0)
|
{
|
|
db.Insertable<OutboundRecord>(records).ExecuteCommand();
|
}
|
db.CommitTran();
|
|
return result;
|
|
}
|
catch (Exception ex)
|
{
|
result.resultMsg = ex.Message;
|
|
|
LogHelper.Info($"添加入库记录表{taskno} 容器={S_CNTR_CODE},{ex.Message}");
|
db.RollbackTran();
|
throw;
|
}
|
}
|
}
|
|
#region MyRegion
|
///// <summary>
|
///// 外采入库/入库冲销
|
///// </summary>
|
///// <param name="model"></param>
|
///// <returns></returns>
|
//internal static SimpleResult FSInbound_Order_In(models.SapRoot.ROOT model)
|
//{
|
// var db = new SqlHelper<object>().GetInstance();
|
// var result = new SimpleResult();
|
// result.WLPZBH = model.WLPZ.HEAD.WLPZBH;
|
// result.resultMsg = "成功";
|
// try
|
// {
|
// db.BeginTran();
|
// //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库
|
// if (model.WLPZ.ITME.Where(s => s.CXWLPZBH != null && s.CXWLPZBH != "").Count() > 0)
|
// {
|
// //判断冲销物料是否为同一个入库单
|
// if (model.WLPZ.ITME.Select(s => s.CXWLPZBH).Distinct().Count() > 1)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "冲销物料不属于同一订单";
|
// return result;
|
// }
|
// //冲销凭证单号
|
// var cxpzbh = model.WLPZ.ITME[0].CXWLPZBH;
|
// var po = WMSHelper.GetInboundOrder(cxpzbh);
|
// //判断是否执行 执行中订单允许冲销
|
// if (po == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "未找到此订单";
|
// return result;
|
// }
|
// if (po.N_B_STATE != 0 && po.N_B_STATE != 7)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "执行中订单不允许冲销";
|
// return result;
|
// }
|
// foreach (var item in model.WLPZ.ITME)
|
// {
|
// ///判断是否都有冲销凭证编号
|
// if (string.IsNullOrEmpty(item.CXWLPZBH))
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "冲销单有物料冲销编号为空";
|
// return result;
|
// }
|
// var rkdmx = po.Details.Where(s => s.S_ITEM_CODE == item.WLH).ToList();
|
// if (rkdmx.Where(s => s.F_QTY < item.SL).Count() > 0)//数量大于明细
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"冲销物料{item.WLH}数量{item.SL}大于存入数量";
|
// return result;
|
// }
|
// else if (rkdmx.Where(s => s.F_QTY == item.SL).Count() == 1)//数量==明细 删除当下入库单物料数据
|
// {
|
// db.Deleteable<TN_Inbound_Detail>().Where(it => it.S_ITEM_CODE == item.WLH && it.S_IO_NO == cxpzbh).ExecuteCommand();
|
// }
|
// else if (rkdmx.Where(s => s.F_QTY > item.SL).Count() > 0)//数量小于明细
|
// {
|
// //当前物料明细
|
// var rkd = rkdmx.Where(s => s.F_QTY > item.SL).FirstOrDefault();
|
// rkd.F_QTY = rkd.F_QTY - item.SL;
|
// db.Updateable(rkd).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// var po1 = db.Queryable<TN_Inbound_Order>().Includes(a => a.Details).Where(a => a.S_NO == cxpzbh).First();
|
// int ssss = po1.Details.Count();
|
// if (po1.Details.Count() == 0)
|
// {
|
// po1.N_B_STATE = 7;
|
// db.Updateable(po1).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
|
// }
|
// }
|
// db.CommitTran();
|
// }
|
// else
|
// {
|
// //创建入库单主子表
|
// var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH);
|
// if (po == null)
|
// {
|
// po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZND = model.WLPZ.HEAD.WLPZND, S_FACTORY = model.WLPZ.HEAD.GC, S_IN_TYPE = "外采入库", S_BS_TYPE = model.WLPZ.HEAD.YDLX };
|
// po.Details = new List<TN_Inbound_Detail>();
|
// if (model.WLPZ.ITME.Count > 0)
|
// {
|
// model.WLPZ.ITME.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 = model.WLPZ.HEAD.WLPZBH,
|
// N_ROW_NO = a.WLPZZDXM,
|
// 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 = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
// S_BATCH_NO = a.PC,
|
// S_CGPZH = a.CGPZH,
|
// S_CGPZXMBH = a.CGPZXMBH,
|
// S_CKPZKJND = a.CKPZKJND,
|
// S_CKPZXM = a.CKPZXM,
|
// S_CXWLPZBH = a.CXWLPZBH,
|
// S_HWSJJYZT = a.HWSJJYZT,
|
// S_GYSZHH = a.GYSZHH,
|
// S_JYPBH = a.JYPBH,
|
// S_KJPZSSRQ = a.KJPZSSRQ,
|
// S_KJPZSRSJ = a.KJPZSRSJ,
|
// });
|
// //}
|
|
// });
|
// db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
// db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
// db.CommitTran();
|
|
// }
|
// }
|
// else
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "已经有重复单号,不可重复传输";
|
// return result;
|
// }
|
|
|
// }
|
// }
|
// catch (Exception e)
|
// {
|
// db.RollbackTran();
|
// throw;
|
// }
|
// return result;
|
//}
|
|
/// <summary>
|
/// 内采入库/出库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
//internal static SimpleResult FSNCInbound_Order_In(NcDto.ROOT model)
|
//{
|
// var db = new SqlHelper<object>().GetInstance();
|
// var result = new SimpleResult();
|
// result.WLPZBH = model.WLPZ.HEAD.WLPZBH;
|
// result.WLPZND = model.WLPZ.HEAD.WLPZND;
|
// result.resultMsg = "成功";
|
// try
|
// {
|
// db.BeginTran();
|
// //判断冲销凭证编号 是否为空 如果为空 则为冲销(审核前才能冲销,非待执行状态提示执行中不可冲销) 不为空 则为外采入库
|
// if (model.WLPZ.HEAD.YDLX != "rk")
|
// {
|
// var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == model.WLPZ.HEAD.WLPZBH).First();
|
// //创建出库单主子表
|
|
|
// #region 创建领料单
|
|
// if (po == null)
|
// {
|
// po = new TN_Ll_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_FACTORY = model.WLPZ.HEAD.GC, S_OUT_TYPE = "内采出库", S_BS_TYPE = model.WLPZ.HEAD.YDLX, S_AREA_CODE = "HJQ", S_BS_NO = model.WLPZ.HEAD.WLPZBH };
|
// po.Details = new List<TN_Ll_detail>();
|
// if (model.WLPZ.ITME.Count() > 0)
|
// {
|
// foreach (var a in model.WLPZ.ITME)
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLH}物料主数据不存在该物料");
|
// }
|
// po.Details.Add(new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = a.WLPZZDXM,
|
// S_ITEM_CODE = a.WLH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = a.PC,
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// });
|
// }
|
|
// var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
// db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand();
|
|
// }
|
// }
|
// else
|
// {
|
|
// List<TN_Ll_detail> listtn = new List<TN_Ll_detail>();
|
// if (po.N_B_STATE != 0)
|
// {
|
// foreach (var a in model.WLPZ.ITME)
|
// {
|
// //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// //{
|
// // result.resultCode = 1;
|
// // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除";
|
// // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除");
|
// //}
|
// var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLH}物料主数据不存在该物料");
|
// }
|
// TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = 0,
|
// S_ITEM_CODE = a.WLH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {
|
// if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
// {
|
// po1.First().F_QTY = a.SL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// else //返回失败
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLH}";
|
// throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLH}");
|
|
// }
|
// }
|
// }
|
// ;
|
// }//执行中订单
|
// else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
// {
|
// foreach (var a in model.WLPZ.ITME)
|
// {
|
// //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// //{
|
// // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList();
|
// // if (po1.Count() > 0) //无则新增物料明细
|
// // {
|
// // db.Deleteable<TN_Ll_detail>().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand();
|
// // }
|
// // else
|
// // {
|
// // result.resultCode = 1;
|
// // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除";
|
// // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除");
|
// // }
|
// //}
|
// //else
|
// //{
|
// var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLH}物料主数据不存在该物料");
|
// }
|
// TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = 0,
|
// S_ITEM_CODE = a.WLH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {//更新数量 未执行时 直接更新数量
|
// po1.First().F_QTY = a.SL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// //}
|
// }
|
// ;
|
// }
|
// //添加数据
|
// if (listtn.Count() > 0)
|
// {
|
// db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand();
|
// }
|
// }
|
// db.CommitTran();
|
// #endregion
|
// }
|
// else
|
// {
|
// //创建入库单主子表
|
// var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH);
|
// if (po == null)
|
// {
|
|
|
// #region MyRegion
|
// po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZND = model.WLPZ.HEAD.WLPZND, S_FACTORY = model.WLPZ.HEAD.GC, S_IN_TYPE = "内采入库", S_BS_TYPE = model.WLPZ.HEAD.YDLX };
|
// po.Details = new List<TN_Inbound_Detail>();
|
// if (model.WLPZ.ITME.Count > 0)
|
// {
|
// model.WLPZ.ITME.ForEach(a =>
|
// {
|
// po.Details.Add(new TN_Inbound_Detail
|
// {
|
// S_IO_NO = model.WLPZ.HEAD.WLPZBH,
|
// N_ROW_NO = a.WLPZZDXM,
|
// 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 = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
// S_BATCH_NO = a.PC,
|
// });
|
|
// });
|
// db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
// db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
// db.CommitTran();
|
// #endregion
|
// }
|
// }
|
|
// else
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "已经有重复单号,不可重复传输";
|
// return result;
|
// }
|
// }
|
// }
|
// catch (Exception e)
|
// {
|
// db.RollbackTran();
|
// return result;
|
// throw;
|
// }
|
// finally
|
// {
|
// db.Dispose();
|
// }
|
// return result;
|
//}
|
|
/// <summary>
|
/// 其他出入库
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
//internal static SimpleResult FSOtherbound_Order_In(otherDto.ROOT model)
|
//{
|
|
// using (var db = new SqlHelper<object>().GetInstance())
|
// {
|
// var result = new SimpleResult();
|
// result.WLPZBH = model.WLPZ.HEAD.WLPZBH;
|
// result.resultMsg = "成功";
|
// try
|
// {
|
// db.BeginTran();
|
// if (model.WLPZ.ITEM.Count() < 1)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"不存在物料信息";
|
// throw new Exception($"不存在该物料信息");
|
// }
|
// if (model.WLPZ.ITEM[0].YDLX == "qtrk")
|
// {
|
// //创建入库单主子表
|
// var po = WMSHelper.GetInboundOrder(model.WLPZ.HEAD.WLPZBH);
|
// if (po == null)
|
// {
|
// po = new TN_Inbound_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_WLPZNF = model.WLPZ.HEAD.WLPZNF, S_FACTORY = model.WLPZ.ITEM[0].GC, S_IN_TYPE = "其他入库", S_BS_TYPE = model.WLPZ.ITEM[0].YDLX };
|
// po.Details = new List<TN_Inbound_Detail>();
|
// if (model.WLPZ.ITEM.Count > 0)
|
// {
|
// model.WLPZ.ITEM.ForEach(a =>
|
// {
|
// po.Details.Add(new TN_Inbound_Detail
|
// {
|
// S_IO_NO = model.WLPZ.HEAD.WLPZBH,
|
// N_ROW_NO = a.WLPZHXM,
|
// S_ITEM_CODE = a.WLBH,
|
// F_QTY = a.SL,
|
// S_ITEM_STATE = "物料",
|
// S_ITEM_NAME = "物料",
|
// F_ACC_B_QTY = 0,
|
// S_KCDD = a.KCDD,
|
// S_UOM = a.JLDW,//计量单位
|
// S_SERIAL_NO = string.Join(",", a.ITEM1.Select(item => item.XLH)),
|
// S_BATCH_NO = a.PC,
|
// });
|
// //}
|
|
// });
|
// db.Insertable<TN_Inbound_Order>(po).ExecuteCommand();
|
// db.Insertable<TN_Inbound_Detail>(po.Details).ExecuteCommand();
|
// db.CommitTran();
|
|
// }
|
// }
|
// else
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = "已经有重复单号,不可重复传输";
|
// return result;
|
// }
|
// }
|
// else
|
// {
|
|
|
// #region 创建领料单
|
// var po = db.Queryable<TN_Ll_Order>().Includes(a => a.Details).Where(s => s.S_NO == model.WLPZ.HEAD.WLPZBH).First();
|
// if (po == null)
|
// {
|
// po = new TN_Ll_Order { S_NO = model.WLPZ.HEAD.WLPZBH, S_OUT_TYPE = "其他出库", S_BS_TYPE = model.WLPZ.ITEM[0].YDLX, S_AREA_CODE = "HJQ", S_BS_NO = model.WLPZ.HEAD.WLPZBH };
|
// po.Details = new List<TN_Ll_detail>();
|
// if (model.WLPZ.ITEM.Count() > 0)
|
// {
|
// po.S_FACTORY = model.WLPZ.ITEM[0].GC;
|
// foreach (var a in model.WLPZ.ITEM)
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
// }
|
// po.Details.Add(new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = a.WLPZHXM,
|
// S_ITEM_CODE = a.WLBH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = a.PC,
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// });
|
// }
|
|
// var result1 = db.Insertable<TN_Ll_Order>(po).ExecuteCommand() > 0;
|
// db.Insertable<TN_Ll_detail>(po.Details).ExecuteCommand();
|
|
// }
|
// }
|
// else
|
// {
|
|
// List<TN_Ll_detail> listtn = new List<TN_Ll_detail>();
|
// if (po.N_B_STATE != 0)
|
// {
|
// foreach (var a in model.WLPZ.ITEM)
|
// {
|
// //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// //{
|
// // result.resultCode = 1;
|
// // result.resultMsg = $"执行中领料单,物料{a.WLH}物料不允许删除";
|
// // throw new Exception($"执行中领料单,物料{a.WLH}物料不允许删除");
|
// //}
|
// var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
// }
|
// TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = "",
|
// S_ITEM_CODE = a.WLBH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {
|
// if (po1.Where(s => s.F_ACC_D_QTY < a.SL).Count() > 0)//更新数量大于当前物料 数量 更新出库单
|
// {
|
// po1.First().F_QTY = a.SL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// else //返回失败
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"更新失败,更新数量必须大于当前物料数量{a.WLBH}";
|
// throw new Exception($"更新失败,更新数量必须大于当前物料数量{a.WLBH}");
|
|
// }
|
// }
|
// }
|
// ;
|
// }//执行中订单
|
// else if (po.N_B_STATE == 0)//未执行 执行增删改操作
|
// {
|
// foreach (var a in model.WLPZ.ITEM)
|
// {
|
// //if (a.LLDSCBS == "Y")//如果是删除标识则删除当前所属出库单明细 不是删除标记 则进行增改判断
|
// //{
|
// // var po1 = po.Details.Where(s => a.WLH == s.S_ITEM_CODE).ToList();
|
// // if (po1.Count() > 0) //无则新增物料明细
|
// // {
|
// // db.Deleteable<TN_Ll_detail>().Where(it => it.S_ITEM_CODE == a.WLH && it.S_DO_NO == po1.First().S_DO_NO).ExecuteCommand();
|
// // }
|
// // else
|
// // {
|
// // result.resultCode = 1;
|
// // result.resultMsg = $"物料{a.WLH}物料数据不存在 无法删除";
|
// // throw new Exception($"物料{a.WLH}物料数据不存在 无法删除");
|
// // }
|
// //}
|
// //else
|
// //{
|
// var po1 = po.Details.Where(s => a.WLBH == s.S_ITEM_CODE).ToList();
|
// if (po1.Count() == 0) //无则新增物料明细
|
// {
|
// var item = db.Queryable<TN_Material>().Where(it => it.S_ITEM_CODE == a.WLBH).First();
|
// if (item == null)
|
// {
|
// result.resultCode = 1;
|
// result.resultMsg = $"物料{a.WLBH}物料主数据不存在该物料";
|
// throw new Exception($"物料{a.WLBH}物料主数据不存在该物料");
|
// }
|
// TN_Ll_detail tN_Outbound_Detail = new TN_Ll_detail
|
// {
|
// S_DO_NO = model.WLPZ.HEAD.WLPZBH,
|
// S_AREA_CODE = "HJQ",
|
// N_ROW_NO = "",
|
// S_ITEM_CODE = a.WLBH,
|
// S_ITEM_NAME = item.S_ITEM_NAME,
|
// F_QTY = a.SL,
|
// S_BATCH_NO = "无",
|
// S_ERP_WH_CODE = a.KCDD,
|
// N_ITEM_STATE = 1
|
// };
|
// listtn.Add(tN_Outbound_Detail);
|
// }
|
// else
|
// {//更新数量 未执行时 直接更新数量
|
// po1.First().F_QTY = a.SL;
|
// db.Updateable(po1).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
|
// }
|
// //}
|
// }
|
// ;
|
// }
|
// //添加数据
|
// if (listtn.Count() > 0)
|
// {
|
// db.Insertable<TN_Ll_detail>(listtn).ExecuteCommand();
|
// }
|
// }
|
|
// #endregion
|
// }
|
|
|
// db.CommitTran();
|
|
// }
|
// catch (Exception e)
|
// {
|
// db.RollbackTran();
|
// return result;
|
// throw;
|
// }
|
// finally
|
// {
|
// db.Dispose();
|
// }
|
// return result;
|
// }
|
|
//}
|
|
|
/// <summary>
|
/// sap-wms生产订单信息添加
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
//internal static SimpleResult fsMater_In(OrderDto.ROOT model)
|
//{
|
// var db = new SqlHelper<object>().GetInstance();
|
// var result = new SimpleResult();
|
// result.resultMsg = "成功";
|
// try
|
// {
|
// db.BeginTran();
|
|
// var materlist = db.Queryable<TN_GENERATE_ORDER>().Where(it => it.S_SCDDH == model.SCDD.SCDDH).First();
|
// if (materlist == null)
|
// {
|
// TN_GENERATE_ORDER tnorder = new TN_GENERATE_ORDER();
|
// tnorder.S_GC = model.SCDD.GC;
|
// tnorder.S_SCDDH = model.SCDD.SCDDH;
|
// tnorder.S_DZMC = model.SCDD.DZMC;
|
// tnorder.S_SCDDCMS = model.SCDD.SCDDCMS;
|
// tnorder.S_WLBH = model.SCDD.WLBH;
|
// tnorder.S_MS = model.SCDD.MS;
|
// tnorder.S_TH = model.SCDD.TH;
|
// tnorder.S_DDSL = model.SCDD.DDSL;
|
// tnorder.S_DDDW = model.SCDD.DDDW;
|
// tnorder.S_XSDD = model.SCDD.XSDD;
|
// tnorder.S_XSDDHXM = model.SCDD.XSDDHXM;
|
// tnorder.S_WBS = model.SCDD.WBS;
|
// tnorder.S_SHF = model.SCDD.SHF;
|
// tnorder.GZLH = model.SCDD.GZLH;
|
// tnorder.S_XLH = string.Join(",", model.SCDD.ITEM.Select(item => item.XLH));
|
// db.Insertable<TN_GENERATE_ORDER>(tnorder).ExecuteCommand();
|
// }
|
// else
|
// {
|
// result.resultMsg += $"{model.SCDD.SCDDH}已存在";
|
// }
|
// db.CommitTran();
|
// }
|
// catch (Exception e)
|
// {
|
// db.RollbackTran();
|
// throw;
|
// }
|
// return result;
|
//}
|
/// <summary>
|
/// sap-wms物料信息添加
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
internal static SimpleResult FSMater_In(MaterDto.ROOT model)
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
var result = new SimpleResult();
|
result.resultMsg = "成功";
|
try
|
{
|
db.BeginTran();
|
List<TN_Material> list = new List<TN_Material>();
|
|
|
var itemCodes = model.ITEM.Select(item => item.WLBM).ToList();
|
var itemlist = db.Queryable<TN_Material>()
|
.Where(it => itemCodes.Contains(it.S_ITEM_CODE))
|
.ToList();
|
foreach (var item in model.ITEM)
|
{
|
var materlist = itemlist.Where(it => it.S_ITEM_CODE == item.WLBM).First();
|
if (materlist == null)
|
{
|
TN_Material tN_Material = new TN_Material();
|
tN_Material.S_ITEM_CODE = item.WLBM;
|
tN_Material.S_GCBM = item.GCBM;
|
tN_Material.S_WLZBM = item.WLZBM;
|
tN_Material.S_WLZMS = item.WLZMS;
|
tN_Material.S_WLLX = item.WLLX;
|
tN_Material.S_WLMS = item.WLMS;
|
tN_Material.S_WLCMS = item.WLCMS;
|
tN_Material.S_DWBM = item.DWBM;
|
tN_Material.S_DWMS = item.DWMS;
|
tN_Material.S_JBM = item.JBM;
|
tN_Material.S_CPZ = item.CPZ;
|
tN_Material.S_CPZMS = item.CPZMS;
|
tN_Material.S_ITEM_NAME = item.VTEXT;
|
list.Add(tN_Material);
|
}
|
|
}
|
var ss = db.Insertable<TN_Material>(list).ExecuteCommand();
|
db.CommitTran();
|
|
}
|
catch (Exception e)
|
{
|
db.RollbackTran();
|
throw;
|
}
|
return result;
|
}
|
#endregion
|
}
|
|
}
|