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.
722 lines
38 KiB
722 lines
38 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using ICSSoft.Frame.Data.Entity;
|
|
using System.Data;
|
|
using ICSSoft.Base.Config.DBHelper;
|
|
using ICSSoft.Base.Config.AppConfig;
|
|
using ICSSoft.Frame.Data.Entity.NcApiEntity;
|
|
using Newtonsoft.Json;
|
|
using System.Net;
|
|
namespace ICSSoft.Frame.Data.DAL
|
|
{
|
|
public class ICSDeliveryPlanDAL
|
|
{
|
|
private static string APIURL = System.Configuration.ConfigurationSettings.AppSettings["APIURL"].ToString();
|
|
private static string urlCreatDeliveryPlan = APIURL + "sendSaleDispatch";//生成销售发货单
|
|
private static string erp = AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]");
|
|
|
|
#region 新增和修改
|
|
public static void Add(ICSDeliveryPlan Info, DataTable dt, string Version, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var has = db.ICSDeliveryPlan.Where(a => a.DeliveryPlanNO == Info.DeliveryPlanNO && a.Version == Info.Version && a.ID != Info.ID);
|
|
if (has != null && has.Count() > 0)
|
|
throw new Exception("单据号:" + Info.DeliveryPlanNO + " 已存在!");
|
|
var line = db.ICSDeliveryPlan.SingleOrDefault(a => a.ID == Info.ID);
|
|
if (line == null)
|
|
db.ICSDeliveryPlan.InsertOnSubmit(Info);
|
|
else if (string.IsNullOrWhiteSpace(Version) && line.Checker != null)
|
|
{
|
|
throw new Exception("单据号:" + Info.DeliveryPlanNO + " 已审核,不能修改!");
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(Version))
|
|
{
|
|
if (line.Checker == null)
|
|
throw new Exception("单据号:" + Info.DeliveryPlanNO + " 未审核,不能变更!");
|
|
else
|
|
{
|
|
ICSDeliveryPlan lineNew = new ICSDeliveryPlan();
|
|
Info.ID = AppConfig.GetGuid();
|
|
lineNew.ID = Info.ID;
|
|
lineNew.DeliveryPlanNO = Info.DeliveryPlanNO;
|
|
lineNew.Version = GetVersion(line.Version);// (Convert.ToInt32(line.Version) + 10).ToString();
|
|
lineNew.Customer = Info.Customer;
|
|
lineNew.Org = Info.Org;
|
|
lineNew.Enable = true;
|
|
lineNew.WorkPoint = AppConfig.WorkPointCode;
|
|
lineNew.EATTRIBUTE1 = null;
|
|
lineNew.MUSER = AppConfig.UserCode;
|
|
lineNew.MUSERName = AppConfig.UserName;
|
|
lineNew.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
lineNew.CreateUser = lineNew.MUSER;
|
|
lineNew.CreateDateTime = lineNew.MTIME;
|
|
db.ICSDeliveryPlan.InsertOnSubmit(lineNew);
|
|
line.Enable = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
line.MUSER = Info.MUSER;
|
|
line.MUSERName = Info.MUSERName;
|
|
line.MTIME = Info.MTIME;
|
|
}
|
|
db.SubmitChanges();
|
|
|
|
var delete = db.ICSDeliveryPlanDetail.Where(a => a.DeliveryPlanID == Info.ID);
|
|
db.ICSDeliveryPlanDetail.DeleteAllOnSubmit(delete);
|
|
db.SubmitChanges();
|
|
int count = 0;
|
|
string invcode = "";
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(dr["InvCode"].ToString()))
|
|
{
|
|
dr["InvCode"] = invcode;
|
|
if (count == 0)
|
|
throw new Exception("首行物料编码不能为空!");
|
|
}
|
|
//if (string.IsNullOrWhiteSpace(dr["InvCode"].ToString()))
|
|
// throw new Exception("物料编码不能为空!");
|
|
//if (string.IsNullOrWhiteSpace(dr["SOCode"].ToString()))
|
|
// throw new Exception("销售订单号不能为空!");
|
|
//foreach (DataColumn dc in dt.Columns)
|
|
//{
|
|
bool isNew = false;
|
|
ICSDeliveryPlanDetail detail = null;// db.ICSDeliveryPlanDetail.SingleOrDefault(a => a.DeliveryPlanID == Info.ID && a.InvCode == dr["InvCode"].ToString() && a.SOCode == dr["SOCode"].ToString());
|
|
if (detail == null)
|
|
{
|
|
isNew = true;
|
|
detail = new ICSDeliveryPlanDetail();
|
|
detail.ID = AppConfig.GetGuid();
|
|
detail.DeliveryPlanID = Info.ID;
|
|
detail.InvCode = dr["InvCode"].ToString();
|
|
detail.SOCode = dr["SOCode"].ToString();
|
|
detail.WorkPoint = Info.WorkPoint;
|
|
}
|
|
detail.Sequence = ++count;// string.IsNullOrWhiteSpace(dr["Sequence"].ToString()) ? 0 : Convert.ToInt32(dr["Sequence"]);
|
|
detail.Quantity = string.IsNullOrWhiteSpace(dr["Quantity"].ToString()) ? 0 : Convert.ToDecimal(dr["Quantity"]);
|
|
detail.PreDate = Convert.ToDateTime(dr["PreDate"]);
|
|
detail.MUSER = Info.MUSER;
|
|
detail.MUSERName = Info.MUSERName;
|
|
detail.MTIME = Info.MTIME;
|
|
if (isNew)
|
|
db.ICSDeliveryPlanDetail.InsertOnSubmit(detail);
|
|
//}
|
|
db.SubmitChanges();
|
|
invcode = dr["InvCode"].ToString();
|
|
}
|
|
#region 校验是否超销售订单行创建数据
|
|
//var parent = dt.DefaultView.ToTable(true, "SOCode","vbillcode","crowno","SOQTY");
|
|
//foreach (DataRow drP in parent.Rows)
|
|
//{
|
|
// string socode = drP["SOCode"].ToString();
|
|
// var detail = db.ICSDeliveryPlanDetail.Where(a => a.SOCode == socode).Select(a => a.Quantity).Sum();
|
|
// if (detail != null && detail > Convert.ToDecimal(drP["SOQTY"]))
|
|
// {
|
|
// throw new Exception("销售订单:" + drP["vbillcode"].ToString() +"_"+ drP["crowno"].ToString() + " 已超出订单数量!");
|
|
// }
|
|
//}
|
|
#endregion
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 导入
|
|
public static void AddList(DataTable dt, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
DateTime mtime = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
string date = "LH" + mtime.ToString("yyyyMMdd").Substring(2);
|
|
string version = mtime.ToString("yyyyMM");
|
|
var parent = dt.DefaultView.ToTable(true, "客户编码");
|
|
foreach (DataRow drP in parent.Rows)
|
|
{
|
|
bool isNewP = false;
|
|
string customer = drP["客户编码"].ToString();
|
|
string DeliveryPlanNO = date + "001";
|
|
|
|
var dp = db.ICSDeliveryPlan.Where(a => a.DeliveryPlanNO.Substring(0, date.Length) == date).OrderByDescending(a => a.DeliveryPlanNO).FirstOrDefault();
|
|
if (dp != null)
|
|
{
|
|
DeliveryPlanNO = date + (Convert.ToInt32(dp.DeliveryPlanNO.Substring(date.Length)) + 1).ToString().PadLeft(3, '0');
|
|
}
|
|
var line = db.ICSDeliveryPlan.SingleOrDefault(a => a.DeliveryPlanNO == DeliveryPlanNO && a.Enable == true);
|
|
ICSDeliveryPlan lineNew = new ICSDeliveryPlan();
|
|
if (line == null)
|
|
{
|
|
isNewP = true;
|
|
lineNew.Version = version + "A";
|
|
lineNew.ID = AppConfig.GetGuid();
|
|
lineNew.DeliveryPlanNO = DeliveryPlanNO;
|
|
lineNew.Enable = true;
|
|
lineNew.WorkPoint = AppConfig.WorkPointCode;
|
|
lineNew.EATTRIBUTE1 = null;
|
|
lineNew.CreateUser = AppConfig.UserCode;
|
|
lineNew.CreateDateTime = mtime;
|
|
lineNew.Customer = customer;
|
|
}
|
|
else if (line.Checker != null)
|
|
{
|
|
isNewP = true;
|
|
lineNew.Version = GetVersion(line.Version);// (Convert.ToInt32(line.Version) + 10).ToString();
|
|
lineNew.ID = AppConfig.GetGuid();
|
|
lineNew.DeliveryPlanNO = DeliveryPlanNO;
|
|
lineNew.Enable = true;
|
|
lineNew.WorkPoint = AppConfig.WorkPointCode;
|
|
lineNew.EATTRIBUTE1 = null;
|
|
lineNew.CreateUser = AppConfig.UserCode;
|
|
lineNew.CreateDateTime = mtime;
|
|
line.Enable = false;
|
|
}
|
|
else
|
|
{
|
|
lineNew = line;
|
|
}
|
|
lineNew.MUSER = AppConfig.UserCode;
|
|
lineNew.MUSERName = AppConfig.UserName;
|
|
lineNew.MTIME = mtime;
|
|
if (isNewP)
|
|
db.ICSDeliveryPlan.InsertOnSubmit(lineNew);
|
|
else
|
|
{
|
|
var delete = db.ICSDeliveryPlanDetail.Where(a => a.DeliveryPlanID == lineNew.ID);
|
|
db.ICSDeliveryPlanDetail.DeleteAllOnSubmit(delete);
|
|
db.SubmitChanges();
|
|
}
|
|
db.SubmitChanges();
|
|
DataRow[] drs = dt.Select("客户编码='" + customer + "'");
|
|
//DataRow[] drs = dt.Select("单据号='" + DeliveryPlanNO + "'");
|
|
int count = 0;
|
|
foreach (DataRow dr in drs)
|
|
{
|
|
lineNew.Org = dr["客户名称"].ToString();
|
|
//if (string.IsNullOrWhiteSpace(dr["客户编码"].ToString()))
|
|
// throw new Exception("单据号:" + DeliveryPlanNO + " 客户编码不能为空!");
|
|
if (string.IsNullOrWhiteSpace(dr["物料编码"].ToString()))
|
|
throw new Exception("客户编码:" + customer + " 物料编码不能为空!");
|
|
|
|
//foreach (DataColumn dc in dt.Columns)
|
|
//{
|
|
//if (dc.Caption == "单据号" || dc.Caption == "客户编码" || dc.Caption == "物料编码")
|
|
// continue;
|
|
bool isNew = false;
|
|
var detail = db.ICSDeliveryPlanDetail.SingleOrDefault(a => a.DeliveryPlanID == lineNew.ID && a.InvCode == dr["物料编码"].ToString() && a.SOCode == dr["客户订单号"].ToString());
|
|
if (detail == null)
|
|
{
|
|
isNew = true;
|
|
detail = new ICSDeliveryPlanDetail();
|
|
detail.ID = AppConfig.GetGuid();
|
|
detail.DeliveryPlanID = lineNew.ID;//ICSINVENTORY.INVMODELGROUP
|
|
detail.InvCode = dr["物料编码"].ToString();
|
|
detail.SOCode = dr["客户订单号"].ToString();
|
|
detail.WorkPoint = lineNew.WorkPoint;
|
|
}
|
|
detail.Sequence = ++count;
|
|
//int s = 0;
|
|
//if (int.TryParse(string.IsNullOrWhiteSpace(dr["行号"].ToString()) ? "0" : dr["行号"].ToString(), out s))
|
|
//{
|
|
// detail.Sequence = s;
|
|
//}
|
|
//else
|
|
//{
|
|
// throw new Exception("单据号:" + DeliveryPlanNO + " 行号格式不正确!");
|
|
//}
|
|
decimal t = 0m;
|
|
if (decimal.TryParse(string.IsNullOrWhiteSpace(dr["数量"].ToString()) ? "0" : dr["数量"].ToString(), out t))
|
|
{
|
|
detail.Quantity = t;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("单据号:" + DeliveryPlanNO + " 数量格式不正确!");
|
|
}
|
|
detail.PreDate = Convert.ToDateTime(dr["要求交期"]);
|
|
detail.MUSER = lineNew.MUSER;
|
|
detail.MUSERName = lineNew.MUSERName;
|
|
detail.MTIME = lineNew.MTIME;
|
|
if (isNew)
|
|
db.ICSDeliveryPlanDetail.InsertOnSubmit(detail);
|
|
}
|
|
db.SubmitChanges();
|
|
}
|
|
//}
|
|
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
private static string GetVersion(string version)
|
|
{
|
|
string ver = version.Substring(6);
|
|
List<string> str = new List<string> { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
|
|
int index = str.IndexOf(ver) + 1;
|
|
if (index >= str.Count())
|
|
throw new Exception("超出变更次数!");
|
|
|
|
return version.Substring(0, 6) + str[index];
|
|
}
|
|
#region 通过ID查询
|
|
public static DataSet SearchInfoByID(string ID, string dsconn)
|
|
{
|
|
string sql = "";
|
|
if (string.IsNullOrWhiteSpace(ID))
|
|
{
|
|
sql = @"DECLARE @MaxNO INT,@date varchar(20)='LH'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 3, 6)
|
|
SELECT @MaxNO=SUBSTRING(MAX(DeliveryPlanNO),LEN(@date)+1,LEN(MAX(DeliveryPlanNO))-LEN(@date))+1 FROM ICSDeliveryPlan WHERE SUBSTRING(DeliveryPlanNO, 1, LEN(@date))=@date
|
|
IF @MaxNO IS NULL
|
|
BEGIN
|
|
SELECT @date+'001' AS DeliveryPlanNO,CONVERT(VARCHAR(6),GETDATE(),112)+'A' AS Version
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT @date+REPLICATE('0',3-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS DeliveryPlanNO,CONVERT(VARCHAR(6),GETDATE(),112)+'A' AS Version
|
|
END ";
|
|
}
|
|
else
|
|
{
|
|
sql = @"SELECT ID,DeliveryPlanNO,Version,Org,Enable,Customer,CreateUser,CreateDateTime,Checker,CheckDateTime,Reviewer,ReviewDateTime,MUSER,MUSERName,MTIME,WorkPoint
|
|
FROM ICSDeliveryPlan WHERE ID='{0}' AND WorkPoint='{1}' ";
|
|
}
|
|
|
|
sql += @"declare @sql varchar(8000)
|
|
SELECT @sql='['+DBIpAddress+'].'+DBName FROM dbo.Sys_DataBase WHERE WorkCode = '{1}' AND DBSourceName = 'ERP'
|
|
|
|
set @sql='SELECT DeliveryPlanID,Sequence,SOCode,PreDate,InvCode,Quantity,inv.name,inv.materialspec,inv.materialmnecode,d.vcooppohcode,d.vbillcode,c.crowno,c.nastnum AS SOQTY
|
|
FROM ICSDeliveryPlanDetail b
|
|
LEFT JOIN '+@sql+'.dbo.so_saleorder_b c ON b.SOCode=c.csaleorderbid
|
|
LEFT JOIN '+@sql+'.dbo.so_saleorder d ON c.csaleorderid=d.csaleorderid
|
|
LEFT JOIN '+@sql+'.dbo.bd_material inv ON b.InvCode=inv.code
|
|
WHERE DeliveryPlanID=''{0}'' AND WorkPoint=''{1}'' '
|
|
|
|
exec(@sql)";
|
|
sql = string.Format(sql, ID, AppConfig.WorkPointCode);
|
|
DataSet ds = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql);
|
|
|
|
return ds;
|
|
}
|
|
#endregion
|
|
|
|
#region 删除
|
|
public static void deleteInfo(List<string> IDList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSDeliveryPlan.Where(a => IDList.Contains(a.ID));
|
|
foreach (ICSDeliveryPlan line in lines)
|
|
{
|
|
line.MUSER = AppConfig.UserCode;
|
|
line.MUSERName = AppConfig.UserName;
|
|
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
line.Enable = false;
|
|
line.EATTRIBUTE1 = "delete";
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 审核
|
|
public static void Check(List<string> IDList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSDeliveryPlan.Where(a => IDList.Contains(a.ID));
|
|
foreach (ICSDeliveryPlan line in lines)
|
|
{
|
|
if (line.Checker != null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 已审核,不能再次审核!");
|
|
}
|
|
line.MUSER = AppConfig.UserCode;
|
|
line.MUSERName = AppConfig.UserName;
|
|
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
line.Checker = AppConfig.UserCode;
|
|
line.CheckDateTime = line.MTIME;
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 弃审
|
|
public static void RefuseCheck(List<string> IDList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSDeliveryPlan.Where(a => IDList.Contains(a.ID));
|
|
foreach (ICSDeliveryPlan line in lines)
|
|
{
|
|
if (line.Checker == null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 不是审核状态,不能弃审!");
|
|
}
|
|
else if (line.Reviewer != null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 已复审,不能弃审!");
|
|
}
|
|
line.MUSER = AppConfig.UserCode;
|
|
line.MUSERName = AppConfig.UserName;
|
|
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
line.Checker = null;
|
|
line.CheckDateTime = null;
|
|
line.EATTRIBUTE1 = "check";
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region 复审
|
|
public static void Review(List<string> IDList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSDeliveryPlan.Where(a => IDList.Contains(a.ID));
|
|
foreach (ICSDeliveryPlan line in lines)
|
|
{
|
|
if (line.Checker == null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 未审核,不能复审!");
|
|
}
|
|
else if (line.Reviewer != null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 已复审,不能再次复审!");
|
|
}
|
|
line.MUSER = AppConfig.UserCode;
|
|
line.MUSERName = AppConfig.UserName;
|
|
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
line.Reviewer = AppConfig.UserCode;
|
|
line.ReviewDateTime = line.MTIME;
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 取消复审
|
|
public static void ReviewBack(List<string> IDList, string dsconn)
|
|
{
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
var lines = db.ICSDeliveryPlan.Where(a => IDList.Contains(a.ID));
|
|
foreach (ICSDeliveryPlan line in lines)
|
|
{
|
|
if (line.Reviewer == null)
|
|
{
|
|
throw new Exception("单据号:" + line.DeliveryPlanNO + " 不是复审状态,不能取消复审!");
|
|
}
|
|
line.MUSER = AppConfig.UserCode;
|
|
line.MUSERName = AppConfig.UserName;
|
|
line.MTIME = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
|
|
line.Reviewer = null;
|
|
line.ReviewDateTime = null;
|
|
line.EATTRIBUTE1 = "review";
|
|
db.SubmitChanges();
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
public static DataSet GetInvInfoAndCust(string pk_org)
|
|
{
|
|
string sqlDB = "SELECT '['+DBIpAddress+'].'+DBName FROM dbo.Sys_DataBase WHERE WorkCode = '{0}' AND DBSourceName = 'ERP'";
|
|
sqlDB = string.Format(sqlDB, AppConfig.WorkPointCode);
|
|
var DB = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqlDB).Tables[0].Rows[0][0].ToString();
|
|
string sql = @"SELECT a.code AS [物料编码] ,a.name AS [物料名称] ,a.materialspec AS [规格型号],a.materialmnecode as [客户料号]
|
|
FROM {1}.dbo.bd_material a
|
|
-- INNER JOIN org_orgs b ON a.pk_org =b.pk_org
|
|
WHERE a.pk_org='{0}' --b.code='Ahwit'
|
|
ORDER BY a.code
|
|
|
|
SELECT b.csaleorderbid AS [表体标识],a.vcooppohcode AS [客户订单号],a.vbillcode AS [销售订单号],b.crowno AS [销售订单行号],d.code AS [物料编码] ,d.name AS [物料名称] ,d.materialmnecode as [客户料号]
|
|
,e.code AS [客户编码],ISNULL(b.vbdef5, b.dreceivedate) AS [要求交期],b.nastnum-ISNULL(x.Quantity, 0) AS [数量]
|
|
FROM {1}.dbo.so_saleorder a
|
|
INNER JOIN {1}.dbo.so_saleorder_b b ON a.csaleorderid=b.csaleorderid
|
|
INNER JOIN {1}.dbo.so_saleorder_exe c ON b.csaleorderbid=c.csaleorderbid
|
|
INNER JOIN {1}.dbo.bd_material d ON b.cmaterialvid = d.pk_material
|
|
INNER JOIN {1}.dbo.bd_customer e ON a.ccustomerid = e.pk_customer
|
|
INNER JOIN {1}.dbo.bd_billtype f ON a.ctrantypeid = f.pk_billtypeid
|
|
LEFT JOIN (SELECT a.SOCode,SUM(a.Quantity) AS Quantity
|
|
FROM ICSDeliveryPlanDetail a
|
|
INNER JOIN ICSDeliveryPlan b ON a.DeliveryPlanID=b.ID
|
|
WHERE Enable=1
|
|
GROUP BY a.SOCode) x ON x.SOCode=b.csaleorderbid
|
|
WHERE a.dr=0 AND a.fstatusflag=2 AND bbinvoicendflag='N' AND bboutendflag='N' AND bbsendendflag='N'AND b.dr=0 AND c.dr=0 AND f.pk_billtypecode IN('30-Cxx-08','30-Cxx-09')
|
|
ORDER BY a.vbillcode,b.crowno
|
|
|
|
SELECT cus.code AS [客户编码],cus.name AS [客户名称],cus.mnecode as [助记码],cus.shortname as [客户简称] FROM {1}.dbo.bd_customer cus
|
|
INNER JOIN {1}.dbo.org_orgs org ON cus.pk_org=org.pk_org
|
|
ORDER BY cus.code";//--WHERE org.code='{1}'
|
|
sql = string.Format(sql, pk_org, DB);
|
|
return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
|
|
}
|
|
|
|
public static DataSet GetPlanInfo(string vourchs)
|
|
{
|
|
string sql = @"SELECT a.SOCode,SUM(a.Quantity) AS Quantity
|
|
FROM ICSDeliveryPlanDetail a
|
|
INNER JOIN ICSDeliveryPlan b ON a.DeliveryPlanID=b.ID
|
|
WHERE Enable=1
|
|
GROUP BY a.SOCode
|
|
";
|
|
//sql = string.Format(sql, vourchs);
|
|
return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
|
|
}
|
|
|
|
public static void UploadErp(string ids, string dsconn)
|
|
{
|
|
string sql = "";
|
|
FramDataContext db = new FramDataContext(dsconn);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
db.CommandTimeout = 6000;
|
|
try
|
|
{
|
|
sql = "UPDATE ICSDeliveryPlan SET UploadErp=1 WHERE ID IN ({0})";
|
|
sql = string.Format(sql, ids);
|
|
db.ExecuteCommand(sql);
|
|
db.SubmitChanges();
|
|
#region 表头
|
|
sql = @"select DISTINCT 'Ahwit' AS pk_group,x.code as pk_org,z.busicode as cbiztypeid,CONVERT(varchar(100), GETDATE(), 120) AS dbilldate,CONVERT(varchar(100), GETDATE(), 120) AS creationtime,CONVERT(varchar(100), GETDATE(), 120) AS dmakedate
|
|
from {1}.dbo.so_saleorder_b b
|
|
join {1}.dbo.so_saleorder a on a.csaleorderid = b.csaleorderid
|
|
join {1}.dbo.bd_busitype z on z.pk_busitype = a. cbiztypeid
|
|
join {1}.dbo.org_trafficorg x on x.pk_trafficorg = b.ctrafficorgid
|
|
WHERE b.csaleorderbid in (SELECT SOCode FROM ICSDeliveryPlanDetail WHERE DeliveryPlanID IN ({0}))
|
|
";
|
|
#endregion
|
|
//string sqlDB="SELECT '['+DBIpAddress+'].'+DBName FROM dbo.Sys_DataBase WHERE WorkCode = '{0}' AND DBSourceName = 'ERP'";
|
|
//sqlDB=string.Format(sqlDB,AppConfig.WorkPointCode);
|
|
//var info = db.ExecuteQuery<string>(sqlDB).ToString();
|
|
var infoERP = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "ERP" && a.WorkCode == AppConfig.WorkPointCode);
|
|
var infoMES = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "SYS" && a.WorkCode == AppConfig.WorkPointCode);
|
|
string DB = (infoERP.DBIpAddress == infoMES.DBIpAddress ? "" : "[" + infoERP.DBIpAddress + "].") + infoERP.DBName;
|
|
|
|
sql = string.Format(sql, ids, DB);
|
|
var DeliveryPlan = db.ExecuteQuery<CreateSaleDispatchEntity>(sql).ToList();
|
|
|
|
var infoApiUser = db.Sys_DataBase.SingleOrDefault(a => a.DBSourceName == "UserNCAPI" && a.WorkCode == AppConfig.WorkPointCode);
|
|
if (infoApiUser == null)
|
|
throw new Exception("数据源中未维护调用NC接口的用户:UserNCAPI");
|
|
string ApiUserCode = infoApiUser.DBUser;
|
|
string ApiUserPassword = AppConfig.FromMd5(infoApiUser.DBPwd);
|
|
|
|
#region 表体
|
|
sql = @"select b.csaleorderbid,b.vsrcrowno as crowno ,c.code as cmaterialid, d.name as castunitid, nastnum,b.vchangerate as vchangerate,
|
|
e.name as cqtunitid , b.nqtunitnum as nqtunitnum , b.vqtunitrate as vqtunitrate ,f.code as corigcurrencyid , b.nexchangerate as nexchangerate ,
|
|
j.code as ccurrencyid , h.code as ctaxcodeid ,b.ntaxrate as ntaxrate ,b.ncaltaxmny as ncaltaxmny , b.ndiscountrate as ndiscountrate,
|
|
b.nitemdiscountrate as nitemdiscountrate , b.norigtaxprice ,b.norigprice ,b.norigtaxnetprice,
|
|
b.norignetprice , b.nqtorigtaxprice , b.nqtorigprice , b.nqtorigtaxnetprc ,b.nqtorignetprice,
|
|
b.nqtorigprice AS norigmny ,b.nqtorigtaxprice AS norigtaxmny ,ISNULL(b.norigdiscount ,0 )as norigdiscount,b.ntaxprice ,b.nprice,
|
|
b.ntaxnetprice,b.nnetprice ,b.nqttaxprice ,b.nqtprice,b.nqttaxnetprice,
|
|
b.nqtnetprice ,b.ntax ,b.nmny ,b.ntaxmny ,b.ndiscount,
|
|
a.vbillcode AS vfirstcode, b.crowno AS vfirstrowno ,b.csaleorderid AS cfirstid , b.csaleorderbid AS cfirstbid ,a.vbillcode AS vsrccode ,
|
|
b.crowno AS vsrcrowno , b.csaleorderid AS csrcid ,b.csaleorderbid AS csrcbid ,i.code as csaleorgid,g.code as csaleorgvid,
|
|
k.code as csendstockorgid ,l.code as csendstockorgvid ,ISNULL(o.code ,'~' )as csendstordocid ,p.code as creceivecustid , CONVERT(varchar(100),b.dsenddate,120) as dsenddate,
|
|
CONVERT(varchar(100),b.dreceivedate,120) as dreceivedate , q.code as carorgvid ,r.code as csettleorgid ,s.code as cdeptid , t.code as cdeptvid,
|
|
u.code as crececountryid ,v.code as csendcountryid ,w.code as ctaxcountryid ,CONVERT(varchar(100),b.dbilldate,120) as vfirstbilldate,CONVERT(varchar(100),GETDATE(),120) as dbilldate,x.code as pk_org,
|
|
y.code as cordercustid, z.busicode as cbiztypeid,a.cinvoicecustid as cinvoicecustid
|
|
INTO #TempSale
|
|
from {1}.dbo.so_saleorder_b b
|
|
join {1}.dbo.so_saleorder a on a.csaleorderid = b.csaleorderid
|
|
join {1}.dbo.bd_busitype z on z.pk_busitype = a. cbiztypeid
|
|
join {1}.dbo.bd_material c on b.cmaterialvid = c.pk_material
|
|
join {1}.dbo.bd_measdoc d on d.pk_measdoc = b.castunitid
|
|
join {1}.dbo.bd_measdoc e on e.pk_measdoc = b.cqtunitid
|
|
join {1}.dbo.bd_currtype f on f.pk_currtype = a.corigcurrencyid
|
|
join {1}.dbo.bd_currtype j on j.pk_currtype = b.ccurrencyid
|
|
join {1}.dbo.bd_taxcode h on h.pk_taxcode = b.ctaxcodeid
|
|
join {1}.dbo.org_salesorg i on i.pk_salesorg = a.pk_org
|
|
join {1}.dbo.org_salesorg_v g on g.pk_vid = a. pk_org_v
|
|
join {1}.dbo.org_stockorg k on k.pk_stockorg = b.csendstockorgid
|
|
join {1}.dbo.org_stockorg_v l on l.pk_vid = b.csendstockorgvid
|
|
left join {1}.dbo.bd_stordoc o on o.pk_stordoc = b.csendstordocid
|
|
join {1}.dbo.bd_customer p on p.pk_customer= b.creceivecustid
|
|
join {1}.dbo.org_financeorg_v q on q.pk_vid = b.carorgvid
|
|
join {1}.dbo.org_financeorg r on r.pk_financeorg =b.csettleorgid
|
|
join {1}.dbo.org_dept s on s.pk_dept = a.cdeptid
|
|
join {1}.dbo.org_dept_v t on t.pk_vid = a.cdeptvid
|
|
join {1}.dbo.bd_countryzone u on u.pk_country =b.crececountryid
|
|
join {1}.dbo.bd_countryzone v on v.pk_country = b.csendcountryid
|
|
join {1}.dbo.bd_countryzone w on w.pk_country = b.ctaxcountryid
|
|
join {1}.dbo.org_trafficorg x on x.pk_trafficorg = b.ctrafficorgid
|
|
join {1}.dbo.bd_customer y on y.pk_customer = a.ccustomerid
|
|
WHERE b.csaleorderbid in (SELECT SOCode FROM ICSDeliveryPlanDetail WHERE DeliveryPlanID IN ({0}))
|
|
|
|
select crowno, cmaterialid, castunitid, pl.Quantity as nastnum, vchangerate,
|
|
cqtunitid, nqtunitnum, vqtunitrate, corigcurrencyid, nexchangerate,
|
|
ccurrencyid, ctaxcodeid, ntaxrate, ncaltaxmny, ndiscountrate,
|
|
nitemdiscountrate, norigtaxprice, norigprice, norigtaxnetprice,
|
|
norignetprice, nqtorigtaxprice, nqtorigprice, nqtorigtaxnetprc, nqtorignetprice,
|
|
CAST(b.norigmny*pl.Quantity AS DECIMAL(18,2)) AS norigmny,CAST(b.norigtaxmny*pl.Quantity AS DECIMAL(18,2)) AS norigtaxmny, norigdiscount, ntaxprice, nprice,
|
|
ntaxnetprice, nnetprice, nqttaxprice, nqtprice, nqttaxnetprice,
|
|
nqtnetprice,CAST(b.norigtaxmny*pl.Quantity AS DECIMAL(18,2))-CAST(b.norigmny*pl.Quantity AS DECIMAL(18,2)) AS ntax, nmny, ntaxmny, ndiscount,
|
|
vfirstcode, vfirstrowno, cfirstid, cfirstbid, vsrccode,
|
|
vsrcrowno, csrcid, csrcbid, csaleorgid, csaleorgvid,
|
|
csendstockorgid, csendstockorgvid, csendstordocid, creceivecustid,CONVERT(varchar(10),pl.PreDate,23) as dsenddate,
|
|
dreceivedate, carorgvid, csettleorgid, cdeptid, cdeptvid,
|
|
crececountryid, csendcountryid, ctaxcountryid, vfirstbilldate, dbilldate,
|
|
pk_org, cordercustid, cbiztypeid
|
|
from ICSDeliveryPlanDetail pl
|
|
join #TempSale b on pl.SOCode = b.csaleorderbid
|
|
WHERE pl.DeliveryPlanID IN ({0})
|
|
|
|
DROP TABLE #TempSale
|
|
";
|
|
#endregion
|
|
sql = string.Format(sql, ids, DB);
|
|
var query = db.ExecuteQuery<CreateSaleDispatchDetailEntity>(sql).ToList();
|
|
NcApiInputArguments inputInfo = new NcApiInputArguments();
|
|
inputInfo.datasource = "design";
|
|
inputInfo.usercode = ApiUserCode;// AppConfig.UserCode;
|
|
inputInfo.password = ApiUserPassword;// AppConfig.FromMd5(AppConfig.UserPwd);
|
|
inputInfo.list = new List<object>();
|
|
//CreateSaleDispatchEntity DeliveryPlan = new CreateSaleDispatchEntity();
|
|
//DeliveryPlan.pk_group = "Ahwit";
|
|
//string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//DeliveryPlan.dbilldate = time;
|
|
//DeliveryPlan.creationtime = time;
|
|
//DeliveryPlan.dmakedate = time;
|
|
//DeliveryPlan.list = query;
|
|
////待修改
|
|
//if (query != null && query.Count > 0)
|
|
//{
|
|
// DeliveryPlan.cbiztypeid = query[0].cbiztypeid;
|
|
// DeliveryPlan.pk_org = query[0].pk_org;
|
|
//}
|
|
foreach (CreateSaleDispatchEntity item in DeliveryPlan)
|
|
{
|
|
var detail = query.Where(a => a.pk_org == item.pk_org && a.cbiztypeid == item.cbiztypeid);
|
|
var dates = detail.Select(a => a.dsenddate).Distinct();
|
|
foreach (string date in dates)
|
|
{
|
|
CreateSaleDispatchEntity info = item;
|
|
var det = detail.Where(a => a.dsenddate == date).ToList();
|
|
info.list = det;
|
|
inputInfo.list.Add(info);
|
|
}
|
|
}
|
|
string inputJson = JsonConvert.SerializeObject(inputInfo);
|
|
string resStrCreatDeliveryPlan = HttpPost(urlCreatDeliveryPlan, inputJson);
|
|
NcApiOutArguments res = new NcApiOutArguments();
|
|
res = JsonConvert.DeserializeObject<NcApiOutArguments>(resStrCreatDeliveryPlan);
|
|
if (res.flat == "0")
|
|
{
|
|
throw new Exception("生成拉货计划单失败:" + res.list_info);
|
|
}
|
|
db.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
db.Connection.Close();
|
|
}
|
|
}
|
|
|
|
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 (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
|
|
{
|
|
return reader.ReadToEnd();
|
|
}
|
|
}
|
|
catch (WebException ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
}
|
|
public class TEMP_DeliveryPlanDetail
|
|
{
|
|
public string InvCode { get; set; }
|
|
public string Period { get; set; }
|
|
public decimal Quantity { get; set; }
|
|
public string cDate { get; set; }
|
|
}
|
|
}
|