You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

867 lines
42 KiB

using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using NFine.Code;
using NFine.Data.Extensions;
using NFine.Domain._03_Entity.SRM;
using NFine.Repository;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.IO;
using System.Net;
using NFine.Application.WMS;
using NFine.Application.Models;
using System.Reflection;
using NFine.Application.Entity;
using NFine.Domain.Entity.SystemSecurity;
using System.Xml;
using System.Collections;
namespace NFine.Application.MFWMS
{
/// <summary>
/// HUB仓销售出库、销售退货
/// </summary>
public class ICSSSDApp : RepositoryFactory<ICSVendor>
{
public static DataTable Invmes = new DataTable();
/// <summary>
/// 销售发货 汇总查询
/// </summary>
/// <param name="queryJson"></param>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetSDNBackApplyNeg(string queryJson, string Type, ref Pagination jqgridparam)
{
//站点信息
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>();
var queryParam = queryJson.ToJObject();
object Figure = GetDecimalDigits();
#region [SQL]
string sql = "";
// 同步过来的销售发货 出库
if (Type == "001")
{
// AccomplishFlag 决定是否完成了审核
sql = @" select * from (
select distinct ROW_NUMBER() OVER(PARTITION BY a.SDNCode, a.MUSERName,a.MTIME,a.Status,a.Type,a.ArriveDate,d.ID order by a.MTIME desc) RowFalg
,a.SDNCode, a.MUSERName,a.MTIME,a.Status,a.Type ,b.WarehouseCode as WHCode,b.WarehouseName as WHName,a.ArriveDate
,case when ISNULL(d.ID,'') != '' then 1 else 0 end as AccomplishFlag
from ICSSDN a
join ICSWarehouse b on a.WHCode = b.WarehouseCode and a.WorkPoint = b.WorkPoint
join ICSInventory c on a.InvCode = c.InvCode and a.WorkPoint = b.WorkPoint
left join ICSSSD d on a.SDNCode = d.SDNCode and a.Sequence = d.SDNSequence and a.WorkPoint=d.WorkPoint
where a.Type = '1' ";
sql = string.Format(sql, Figure);
sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
}
else
{
// AccomplishFlag 决定是否完成了审核
// 销售退货 入库
sql = @" select * from (
select distinct ROW_NUMBER() OVER(PARTITION BY a.SDNCode, a.MUSERName,a.MTIME,a.Status,a.Type,a.ArriveDate,d.ID order by a.MTIME desc) RowFalg
,a.SDNCode, a.MUSERName,a.MTIME,a.Status,a.Type ,b.WarehouseCode as WHCode,b.WarehouseName as WHName,a.ArriveDate
,case when ISNULL(d.ID,'') != '' then 1 else 0 end as AccomplishFlag
from ICSSDN a
join ICSWarehouse b on a.WHCode = b.WarehouseCode and a.WorkPoint = b.WorkPoint
join ICSInventory c on a.InvCode = c.InvCode and a.WorkPoint = b.WorkPoint
left join ICSSSD d on a.SDNCode = d.SDNCode and a.Sequence = d.SDNSequence and a.InvCode = d.InvCode and a.WorkPoint=d.WorkPoint
where a.Type = '2' ";
sql = string.Format(sql, Figure);
sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
}
#endregion
if (!string.IsNullOrWhiteSpace(queryJson))
{
if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
{
sql += " and a.SDNCode like '%" + queryParam["POCode"].ToString() + "%' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
{
sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
{
sql += " and c.InvName like '%" + queryParam["InvName"].ToString() + "%' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["WHCode"].ToString()))
{
sql += " and b.WarehouseCode like '%" + queryParam["WHCode"].ToString() + "%' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["WHName"].ToString()))
{
sql += " and b.WarehouseName like '%" + queryParam["WHName"].ToString() + "%' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["FromTime"].ToString()))
{
sql += " and a.ArriveDate >= '" + queryParam["FromTime"].ToString() + "' ";
}
if (!string.IsNullOrWhiteSpace(queryParam["ToTime"].ToString()))
{
sql += " and a.ArriveDate <= '" + queryParam["ToTime"].ToString() + "' ";
}
//if (!string.IsNullOrWhiteSpace(queryParam["BatchCode"].ToString()))
//{
// sql += " and f.BatchCode like '%" + queryParam["BatchCode"].ToString() + "%' ";
//}
if (!string.IsNullOrWhiteSpace(queryParam["AuditStatus"].ToString()))
{
var AuditStatus = queryParam["AuditStatus"].ToInt();
if (AuditStatus == 1)
{
//已审核
sql += " and ISNULL(d.ID,'') != '' ";
}
else if (AuditStatus == 2)
{
//未审核
sql += " and ISNULL(d.ID,'') = '' ";
}
else
{
}
}
if (Type == "001")
{
if (!string.IsNullOrWhiteSpace(queryParam["SDNQtyFlag"].ToString()))
{
var SDNQtyFlag = queryParam["SDNQtyFlag"].ToInt();
if (SDNQtyFlag == 1)
{
//已审核
sql += " and a.SDNQuantity >= a.Quantity ";
}
else if (SDNQtyFlag == 2)
{
//未审核
sql += " and a.SDNQuantity < a.Quantity ";
}
else
{
}
}
}
}
if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
{
sql += " and a.WorkPoint='" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location + "'";
}
sql += @" --GROUP BY a.SDNCode, a.MUSERName,a.MTIME,a.Status,a.Type,a.ArriveDate,d.ID
) t where RowFalg = 1";
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
}
public object GetDecimalDigits()
{
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
try
{
string sql = string.Empty;
sql = @"select Figure from ICSConfiguration where Code='Figure001' and Enable='1' and WorkPoint='" + WorkPoint + "'";
object Figure = SqlHelper.ExecuteScalar(sql);
return Figure;
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
}
/// <summary>
/// HUB销售出库
/// </summary>
/// <param name="queryJson"></param>
/// <returns></returns>
public string AuditDelSDN(string keyValue)
{
string msg = string.Empty;
try
{
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
string UserCode = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
List<LOTStockModel> lOTStockModels = new List<LOTStockModel>();
var dateNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var Code = keyValue.TrimEnd(',');
//单据先进行拣料
DataTable dateTable = GetICSMOPickMergeTemp(Code, "7");
if (dateTable == null)
{
msg = "库存数据为空,请先检查库存";
return msg;
}
DataRow[] dateRowsIsNull = dateTable?.Select($@"ISNULL(LotNo,'') = ''");
//是否条码匹配错误
if (dateRowsIsNull.Length > 0)
{
msg = "过滤空条码库存后库存数据为空,请先检查库存";
return msg;
}
DataRow[] dateRows = dateTable?.Select($@"LotNo <> '' And LotNo is not null");
//decimal ToltalCount = 0.0M;
string tablesql = $@" SELECT ID,SDNCode,Sequence,Quantity FROM ICSSDN WHERE SDNCode in({Code}) and Type = '1' and WorkPoint='{WorkPoint}' ";
var dt = SqlHelper.CmdExecuteDataTable(tablesql);
if (dateRows == null || dateRows.Length <= 0)
{
msg = "过滤空条码库存后库存数据为空,请先检查库存";
return msg;
}
else
{
string docCode = string.Empty;
string docCodeAfter = string.Empty;
LOTStockModel lOTStockModel = null;
// 使用 LINQ 根据 Code 字段对 DataRow[] 进行分组
var groups = dateRows.Cast<DataRow>().GroupBy(row => new
{
Code = row.Field<string>("Code"),
Sequence = row.Field<string>("Sequence"),
iQuantity = row.Field<string>("iQuantity")
});
//将捡料数据分组
foreach (var group in groups)
{
var firstRow = group.First();
var code = firstRow["Code"];
decimal count = 0.0M;
// 存储过程返回的条码 匹配到具体数据的ID
DataRow[] SDNSequenceRow = dt?.Select("SDNCode='" + firstRow["Code"].ToString() + "' and Sequence='" + firstRow["Sequence"].ToString() + "'");
if (SDNSequenceRow.Length <= 0)
{
msg = "条码未能匹配销售发货表!";
return msg;
}
//出库数量
decimal Qty = Convert.ToDecimal(SDNSequenceRow[0]["Quantity"]);
lOTStockModel = new LOTStockModel
{
TransID = SDNSequenceRow[0]["ID"].ToString(),
TransCode = firstRow["Code"].ToString(),
TransSequence = firstRow["Sequence"].ToString(),
TransType = "销售发货-销售发货单",
Amount = "0",
User = UserCode,
Quantity = SDNSequenceRow[0]["Quantity"].ToString(),
MTime = dateNow,
WorkPoint = WorkPoint,
detail = new List<LOTStockModelList>(),
};
foreach (var row in group)
{
count += row["QTY"].ToDecimal();
LOTStockModelList lOTStockModelList = new LOTStockModelList
{
CurrentQuantity = row["QTY"].ToString(),
LotNo = row["LotNo"].ToString(),
CurrentAmount = "0",
Sequence = row["Sequence"].ToString(),
WarehouseCode = row["WarehouseCode"].ToString(),
LocationCode = row["LocationCode"].ToString()
};
lOTStockModel.detail.Add(lOTStockModelList);
}
// 库存数量与出库审核数量对比
if (Qty > count)
{
msg = "出库单编码:" + firstRow["Code"].ToString() + ",库存数量不足。当前库存数量:" + count.ToString();
return msg;
}
//lOTStockModel.Quantity = count.ToString();
lOTStockModels.Add(lOTStockModel);
}
string Inputstr = JsonConvert.SerializeObject(lOTStockModels.Distinct());
string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockDown/Create";
string result = HttpPost(APIURL, Inputstr);
JObject Obj = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
string MessAge = Obj["Message"].ToString();
string Success = Obj["Success"].ToString();
if (Success.ToUpper() == "FALSE")
{
msg = MessAge;
return msg;
}
//生成销售出库单
string SDNsql = $@"select a.SDNCode,a.Sequence as SDNSequence,a.Amount,a.WHCode,a.CusCode,a.CusName,a.ArriveDate,a.InvCode,a.ExtensionID,a.Quantity
from ICSSDN a where a.SDNCode in({Code}) and WorkPoint='{WorkPoint}' and a.Type = '1' ";
DataTable SDNdt = SqlHelper.CmdExecuteDataTable(SDNsql);
DataRow[] SDNRows = SDNdt?.Select($@"SDNCode <> '' And SDNCode is not null");
var ICSSSDList = new List<ICSSSD>();
var SDNgroups = SDNRows.Cast<DataRow>().GroupBy(row => new
{
Code = row.Field<string>("SDNCode"),
});
foreach (var SDNgroup in SDNgroups)
{
var SSDCode = GetOOCode(WorkPoint);
foreach (var SDNitem in SDNgroup)
{
var index = 1;
var entity = new ICSSSD
{
ID = Guid.NewGuid().ToString(),
SSDCode = SSDCode,
Quantity = Convert.ToDecimal(SDNitem["Quantity"]),
Amount = Convert.ToDecimal(SDNitem["Amount"]),
Status = "1",
InvCode = SDNitem["InvCode"].ToString(),
Sequence = index.ToString(),
SDNCode = SDNitem["SDNCode"].ToString(),
SDNSequence = SDNitem["SDNSequence"].ToString(),
CusCode = SDNitem["CusCode"].ToString(),
CusName = SDNitem["CusName"].ToString(),
Type = "1",
WHCode = SDNitem["WHCode"].ToString(),
ArriveDate = Convert.ToDateTime(SDNitem["ArriveDate"]),
CreateDateTime = Convert.ToDateTime(dateNow),
CreatePerson = UserCode,
SSDQuantity = 0,
SSDDetailID = "",
SSDID = "",
MTIME = Convert.ToDateTime(dateNow),
MUSER = UserCode,
MUSERName = UserName,
ExtensionID = SDNitem["ExtensionID"].ToString(),
WorkPoint = WorkPoint,
};
ICSSSDList.Add(entity);
}
}
var result1 = MsSqlData.Insert(ICSSSDList);
if (!result1)
{
msg = "销售出库表新增失败!";
return msg;
}
}
}
catch (Exception ex)
{
msg = ex.Message;
}
return msg;
}
/// <summary>
/// HUB销售退货
/// </summary>
/// <param name="queryJson"></param>
/// <returns></returns>
public string AuditSalesReturnSDN(string keyValue, string WhCode, string LotCode)
{
//准备条码回滚
var lotNoArr = "";
string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
string msg = "";
DateTime TimeNow = DateTime.Now;
string sqls = string.Empty;
string sql = string.Empty;
//根据退货单找到销售订单,找到对应出库单,根据出库单列表中最新的批次排序
//生成一条条码数据
try
{
keyValue = keyValue.TrimEnd(',');
//根据退货单找到销售订单 废弃
//取退货单上的批次
string SOList = $@"
select a.SDNCode,a.Sequence,a.InvCode,a.SOCode,a.SOSequence,a.Type,a.ExtensionID,e.BatchCode,a.Amount,a.Quantity,a.WHCode
from ICSSDN a
left join ICSExtension e on a.ExtensionID = e.ID and a.WorkPoint = e.WorkPoint
where a.SDNCode in ({keyValue}) and a.Type = '2' and a.WorkPoint='{WorkPoint}' ";
DataTable SOListdt = SqlHelper.CmdExecuteDataTable(SOList);
if (SOListdt.Rows.Count <= 0)
{
throw new Exception("未找到退货单!");
}
else
{
//判断退货单仓库和输入的仓库是否一致 yangtm 20251217
string mes = string.Empty;
foreach (DataRow dr1 in SOListdt.Rows)
{
if (dr1["WhCode"].ToString() != WhCode)
{
mes += "退货单" + dr1["WhCode"].ToString() + "行" + dr1["Sequence"].ToString() + "仓库" + dr1["WhCode"].ToString() + "和本次退货仓库" + WhCode + "不一致,请确认";
}
}
if (!string.IsNullOrWhiteSpace(mes))
{
throw new Exception(mes);
}
List<LOTStockUpCreateIModel> models = new List<LOTStockUpCreateIModel>();
//找到对应出库单 若退货单上没有批次 则用出库单最新的批次
//根据单据号分组
//DataRow[] dateRows = SOListdt?.Select($@"SOCode <> '' And SOCode is not null");
//if (dateRows.Length <= 0)
//{
// throw new Exception("退货单未关联销售订单!");
//}
// 使用 LINQ 根据 界面选择的单据号 字段对 DataRow[] 进行分组 分组后 每
var groups = SOListdt.Rows.Cast<DataRow>().GroupBy(row => new
{
Code = row.Field<string>("SDNCode"),
});
foreach (var group in groups)
{
//model在循环内还是外 决定 API中请求ERP的次数
LOTStockUpCreateIModel model = new LOTStockUpCreateIModel
{
User = MUSER,
MTime = TimeNow.ToString("yyyy-MM-dd HH:mm:ss"),
WorkPoint = WorkPoint,
TransType = "销售退货-销售退货单",
detail = new List<LOTStockUpCreateIModelList>()
};
foreach (var item in group)
{
var ExtensionID = "";
string LotNo = "";
//判断 退货数据中有批次,就直接用
if (!string.IsNullOrEmpty(item["ExtensionID"].ToString()))
{
ExtensionID = item["ExtensionID"].ToString();
}
else
{
throw new Exception("关联批次创建条码失败,未找到批次!");
//判断 退货没批次 找销售订单管理的出库表 最新的批次
//SOList = $@"
// -- 找同销售订单下的发货单、出库单 得到销售单的结果
//if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#tempDeliver'))
//begin
// drop table #tempDeliver
//end
//-- 退货临时表 关联发货表 为了结果集直接拿到退货表需要的批次
//select a.SDNCode,a.Sequence,a.InvCode,a.SOCode,a.SOSequence,a.Type,a.WorkPoint into #tempDeliver
//from ICSSDN a where a.SOCode = '{item["SOCode"].ToString()}' and a.SOSequence = '{item["SOSequence"].ToString()}' and a.InvCode = '{item["InvCode"].ToString()}' and Type = '2'
//-- 查询销售出库表 按批次、时间倒叙 找最后一个批次
//select TOP(1) ROW_NUMBER() OVER(PARTITION BY a.SOCode,a.SOSequence ORDER BY e.BatchCode,e.MTIME desc),
//a.SDNCode,a.Sequence,a.InvCode,a.SOCode,a.SOSequence,a.Type,e.BatchCode,e.MTIME,a.MTIME,e.ID as ExtensionID
//from ICSSDN a
//join #tempDeliver q on a.SOCode = q.SOCode and a.SOSequence = q.SOSequence and a.InvCode = q.InvCode and a.WorkPoint = q.WorkPoint
//Left join ICSSSD b on a.SDNCode = b.SDNCode and a.Sequence = b.SDNSequence and a.WorkPoint = b.WorkPoint
//left join ICSExtension e on b.ExtensionID = e.ID and b.WorkPoint = e.WorkPoint
//where a.Type = '1'
//if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#tempDeliver'))
//begin
// drop table #tempDeliver
//end ";
//DataTable SDNdt = SqlHelper.CmdExecuteDataTable(SOList);
//ExtensionID = string.IsNullOrEmpty(SDNdt.Rows[0]["ExtensionID"].ToString()) && SDNdt.Rows[0]["ExtensionID"].ToString() != "NULL" ? SDNdt.Rows[0]["ExtensionID"].ToString() : "";
}
//创建新的条码入库
var SDNCode = item["SDNCode"].ToString();
string Sequence = item["Sequence"].ToString();
var sqlLot = string.Format(@"SELECT A.LotNO AS LOTNO FROM ICSInventoryLot A WHERE A.LotNO LIKE '{0}%'", SDNCode);
var parentLot = Repository().FindTableBySql(sqlLot.ToString());
var drs = parentLot.Select("1 = 1", "LOTNO DESC");
if (drs.Length == 0)
{
LotNo = SDNCode + Sequence + "00001";
}
else
{
var OldLotNo = drs[0]["LOTNO"].ToString();
LotNo = SDNCode + Sequence + (Convert.ToInt64(OldLotNo.Substring(OldLotNo.Length - 5)) + 1).ToString().PadLeft(5, '0');
}
lotNoArr = string.IsNullOrEmpty(lotNoArr) ? "'" + LotNo + "'" : lotNoArr + "," + "'" + LotNo + "'";
sqls += @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,
PrintTimes,LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,WorkPoint)
Values(NEWID(),'{0}','{1}',getdate(),'2999-12-31','{2}','{3}','{4}','100','','','','{5}','{6}',getdate(),'{7}')
";
sqls += @"INSERT INTO ICSInventoryLotDetail( LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
Values('{0}','{8}','{9}','{5}','{6}',getdate(),'{7}')
";
//循环中不妨碍多次执行sql的替换 因为每次都只会替换{0}特殊字符 每次循环都只有一个{0}
sqls = string.Format(sqls, LotNo, item["InvCode"].ToString(), item["Quantity"].ToString(), item["Amount"].ToString(), ExtensionID, MUSER, MUSERNAME, WorkPoint, SDNCode, Sequence);
//完成数据准备
LOTStockUpCreateIModelList detail = new LOTStockUpCreateIModelList
{
LotNo = LotNo,
WarehouseCode = WhCode,
LocationCode = LotCode,
TransCode = item["SDNCode"].ToString(),
TransSequence = item["Sequence"].ToString(),
Quantity = item["Quantity"].ToString(),
InvCode = item["InvCode"].ToString()
};
model.detail.Add(detail);
}
//此时 每个SOListdt结果集的行 都会请求一次ERP 将new model的动作移动到循环外即可只请求一次
models.Add(model);
}
if (!String.IsNullOrEmpty(sqls))
{
SqlHelper.CmdExecuteNonQueryLi(sqls);
}
var input = models.Distinct().ToJson();
string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "LOTStockUp/Create";
string result = HttpPost(APIURL, input);
Result res = result.ToObject<Result>();
if (!res.Success)
{
throw new Exception(res.Message);
}
//生成销售出库单
string SDNsql = $@"select a.SDNCode,a.Sequence as SDNSequence,a.Amount,a.WHCode,a.CusCode,a.CusName,a.ArriveDate,a.InvCode,a.ExtensionID,a.Quantity
from ICSSDN a where a.SDNCode in({keyValue}) and WorkPoint='{WorkPoint}' and a.Type = '2' ";
DataTable SDNToCreatedt = SqlHelper.CmdExecuteDataTable(SDNsql);
DataRow[] SDNRows = SDNToCreatedt?.Select($@"SDNCode <> '' And SDNCode is not null");
var ICSSSDList = new List<ICSSSD>();
var SDNgroups = SDNRows.Cast<DataRow>().GroupBy(row => new
{
Code = row.Field<string>("SDNCode"),
});
foreach (var SDNgroup in SDNgroups)
{
var SSDCode = GetOOCode(WorkPoint);
foreach (var SDNitem in SDNgroup)
{
var index = 1;
var entity = new ICSSSD
{
ID = Guid.NewGuid().ToString(),
SSDCode = SSDCode,
Quantity = Convert.ToDecimal(SDNitem["Quantity"]),
Amount = Convert.ToDecimal(SDNitem["Amount"]),
Status = "1",
InvCode = SDNitem["InvCode"].ToString(),
Sequence = index.ToString(),
SDNCode = SDNitem["SDNCode"].ToString(),
SDNSequence = SDNitem["SDNSequence"].ToString(),
CusCode = SDNitem["CusCode"].ToString(),
CusName = SDNitem["CusName"].ToString(),
Type = "2",
WHCode = SDNitem["WHCode"].ToString(),
ArriveDate = Convert.ToDateTime(SDNitem["ArriveDate"]),
CreateDateTime = TimeNow,
CreatePerson = MUSER,
SSDQuantity = 0,
SSDDetailID = "",
SSDID = "",
MTIME = TimeNow,
MUSER = MUSER,
MUSERName = MUSERNAME,
ExtensionID = SDNitem["ExtensionID"].ToString(),
WorkPoint = WorkPoint,
};
ICSSSDList.Add(entity);
}
}
var result1 = MsSqlData.Insert(ICSSSDList);
if (!result1)
{
msg = "销售出库表新增失败!";
return msg;
}
}
}
catch (Exception ex)
{
//回退
if (!string.IsNullOrEmpty(lotNoArr))
{
sqls = $@"
delete from ICSInventoryLot where LotNo in ({lotNoArr}) and WorkPoint = '{WorkPoint}'
delete from ICSInventoryLotDetail where LotNo in ({lotNoArr}) and WorkPoint = '{WorkPoint}'
delete from ICSSSD where SDNCode in ({keyValue}) and Type = 2 and WorkPoint = '{WorkPoint}' ";
SqlHelper.CmdExecuteNonQueryLi(sqls);
}
throw new Exception(ex.Message);
}
return msg;
}
/// <summary>
/// 创建自增单号
/// </summary>
/// <param name="WorkPoint"></param>
/// <returns></returns>
public string GetOOCode(string WorkPoint)
{
WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
string OOCode = string.Empty;
if (!string.IsNullOrEmpty(WorkPoint))
{
OOCode = GetSerialCode(WorkPoint, "ICSSSD", "SSDCode", "00", 8);
}
if (!string.IsNullOrWhiteSpace(OOCode))
{
string sqlISHave = @"SELECT SSDCode FROM ICSSSD a
WHERE a.SSDCode = '{0}'";
sqlISHave = string.Format(sqlISHave, OOCode);
DataTable dtIsHave = SqlHelper.GetDataTableBySql(sqlISHave);
if (dtIsHave.Rows.Count > 0)
{
throw new Exception("单号已存在!");
}
}
return OOCode;
}
public string GetSerialCode(string workPointCode, string tbName, string colName, string Pre, int numLen)
{
string sql = "EXEC Addins_GetSerialCode '{0}','{1}','{2}','{3}',{4}";
sql = string.Format(sql, new object[] { workPointCode, tbName, colName, Pre, numLen });
return SqlHelper.ExecuteScalar(sql).ToString();
}
/// <summary>
/// 销售发货明细查询
/// </summary>
/// <param name="jqgridparam"></param>
/// <returns></returns>
public DataTable GetSDNApplyNegDetail(string SDNCode, ref Pagination jqgridparam)
{
DataTable dt = new DataTable();
//object Figure = GetDecimalDigits();
List<DbParameter> parameter = new List<DbParameter>();
string sql = @"SELECT a.ID,a.SDNCode,a.Sequence,a.SOSequence,a.SOCode,a.InvCode,a.Quantity,a.Amount,a.SDNQuantity,a.WHCode,e.WarehouseName as WHName,a.Type,a.CusCode,a.CusName,a.ArriveDate
,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.WorkPoint,b.InvName,a.CreateDateTime,a.CreatePerson
,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,a.EATTRIBUTE9,a.EATTRIBUTE10
from ICSSDN a
left join ICSInventory b on a.InvCode = b.InvCode and a.WorkPoint = b.WorkPoint
left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
left join ICSWarehouse e on a.WHCode = e.WarehouseCode and a.WorkPoint=e.WorkPoint
-- left join ICSSSD d on a.SDNCode = d.SDNCode and a.Sequence = d.SDNSequence and a.InvCode = d.InvCode and a.WorkPoint=d.WorkPoint
where a.SDNCode = '" + SDNCode + "' ";
//sql = string.Format(sql, Figure);
DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
}
//拣料
public DataTable GetICSMOPickMergeTemp(string ID, string Type)
{
string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
ID = ID.Replace("'", "''");
ID = string.IsNullOrWhiteSpace(ID) ? "''" : ID.TrimEnd(',');
string Code = SqlHelper.GetItemsDetailEnabledMark("MtimeControl");
string sql = @"EXEC ICSPicking '{0}','{1}','0','{2}'";
sql = string.Format(sql, ID, Type, WorkPoint);
var dataset = Repository().FindDataSetBySql(sql);
if (dataset.Tables[0].Rows.Count == 0)
return null;
DataTable table = dataset.Tables[0];
try
{
DataRow[] dss = table.Select("LotNO=''");
foreach (var item in dss)
{
DataRow[] dsss = table.Select("Code='" + item["Code"].ToString() + "' and Sequence='" + item["Sequence"].ToString() + "' and LotNO <> '' ");
if (dsss != null && dsss.Length > 0)
{
table.Rows.Remove(item);
}
}
var result = ConvertCellToString(table);
if (Invmes.Rows.Count > 0)
{
result.Merge(Invmes, false);
}
var groupedData = from row in table.AsEnumerable()
group row by new
{
Code = row.Field<string>("Code"),
Sequence = row.Field<string>("Sequence")
} into g
select new
{
Code = g.Key.Code,
Sequence = g.Key.Sequence,
TotalQTY = g.Sum(x =>
{
return !x.IsNull("QTY") ? x.Field<decimal>("QTY") : 0;
}),
TotaliQuantity = g.First().IsNull("iQuantity") ? 0 : g.First().Field<decimal>("iQuantity"),
};
foreach (var item in groupedData)
{
if (item.TotalQTY != item.TotaliQuantity)
{
string msg = "单据号:" + item.Code + "行号:" + item.Sequence + "库存不足,请先检查库存";
throw new Exception(msg);
}
}
return result;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public DataTable ConvertCellToString(DataTable data)
{
DataTable dtCloned = data.Clone();
foreach (DataColumn col in dtCloned.Columns)
{
col.DataType = typeof(string);
}
foreach (DataRow row in data.Rows)
{
DataRow newrow = dtCloned.NewRow();
foreach (DataColumn column in dtCloned.Columns)
{
newrow[column.ColumnName] = row[column.ColumnName].ToString();
}
dtCloned.Rows.Add(newrow);
}
return dtCloned;
}
//接口api解析
public static string HttpPost(string url, string body)
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
request.ContentType = "application/json; charset=utf-8";
byte[] buffer = encoding.GetBytes(body);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
{
return reader.ReadToEnd();
}
}
catch (WebException ex)
{
throw new Exception(ex.Message);
}
}
public void ClearTemp()
{
Invmes.Rows.Clear();
}
/// <summary>
/// 材料出库
/// </summary>
public class LOTStockModel
{
/// <summary>
/// 源头单据号
/// </summary>
public string TransCode { get; set; }
/// <summary>
/// 源头单据行号
/// </summary>
public string TransSequence { get; set; }
/// <summary>
/// 源头单据iD
/// </summary>
public string TransID { get; set; }
/// <summary>
/// 数量
/// </summary>
public string Quantity { get; set; }
/// <summary>
/// 辅计量数量
/// </summary>
public string Amount { get; set; }
/// <summary>
/// 操作类型
/// </summary>
public string TransType { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string User { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public string MTime { get; set; }
/// <summary>
/// 交接人--东辉
/// </summary>
public string Heir { get; set; }
//站点
public string WorkPoint { get; set; }
//快递单号
public string CourierCode { get; set; }
public List<LOTStockModelList> detail { get; set; }
}
public class LOTStockModelList
{
/// <summary>
/// 源头单据行号
/// </summary>
public string TransSequence { get; set; }
/// <summary>
/// 条码
/// </summary>
public string LotNo { get; set; }
/// <summary>
/// 数量
/// </summary>
public string CurrentQuantity { get; set; }
/// <summary>
/// 辅计量数量
/// </summary>
public string CurrentAmount { get; set; }
public string Sequence { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
public string WarehouseCode { get; set; }
/// <summary>
/// 库位代码
/// </summary>
public string LocationCode { get; set; }
/// <summary>
/// LogID
/// </summary>
public string LogID { get; set; }
}
}
}