|
|
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.EATTRIBUTE10from 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; } } }}
|