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.
 
 
 
 
 

1903 lines
92 KiB

using CK.SCP.Models;
using CK.SCP.Models.AppBoxEntity;
using CK.SCP.Models.Enums;
using CK.SCP.Models.ScpEntity;
using CK.SCP.Utils;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Core;
using System.Data.Entity.Migrations;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace CK.SCP.Controller
{
public class SCP_PLAN_CONTROLLER
{
public static void Get_V_TB_PO_PLAN_EXTEND_List(V_TB_PO_PLAN_EXTEND p_entity, Action<ResultObject<IQueryable<V_TB_PO_PLAN_EXTEND>>> p_action)
{
ResultObject<IQueryable<V_TB_PO_PLAN_EXTEND>> _ret = new ResultObject<IQueryable<V_TB_PO_PLAN_EXTEND>>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
IQueryable<V_TB_PO_PLAN_EXTEND> q = db.V_TB_PO_PLAN_EXTEND;
if (!string.IsNullOrEmpty(p_entity.Domain))
{
q = q.Where(p => p.Domain.Contains(p_entity.Domain));
}
if (!string.IsNullOrEmpty(p_entity.PartCode))
{
q = q.Where(p => p.PartCode.Contains(p_entity.PartCode));
}
if (!string.IsNullOrEmpty(p_entity.PoBillNum))
{
q = q.Where(p => p.PoBillNum.Contains(p_entity.PoBillNum));
}
if (!string.IsNullOrEmpty(p_entity.Site))
{
q = q.Where(p => p.Site.Contains(p_entity.Site));
}
if (!string.IsNullOrEmpty(p_entity.AskBillNum))
{
q = q.Where(p => p.AskBillNum.Contains(p_entity.AskBillNum));
}
if (!string.IsNullOrEmpty(p_entity.Version))
{
q = q.Where(p => p.Version.Contains(p_entity.Version));
}
if (!string.IsNullOrEmpty(p_entity.PartDesc))
{
q = q.Where(p => p.PartDesc.Contains(p_entity.PartDesc));
}
if (!string.IsNullOrEmpty(p_entity.VendId))
{
q = q.Where(p => p.VendId.Contains(p_entity.VendId));
}
if (p_entity.EndTime != null)
{
q = q.Where(p => p.EndTime == p_entity.EndTime.Value);
}
if (p_entity.UserInAddress != null && p_entity.UserInAddress.Count > 0)
{
q = q.Where(p => p_entity.UserInAddress.Contains(p.Domain));
}
if (p_entity.UserInVendIds != null && p_entity.UserInVendIds.Count > 0)
{
q = q.Where(p => p_entity.UserInVendIds.Contains(p.VendId));
}
_ret.State = ReturnStatus.Succeed;
_ret.Result = q;
p_action(_ret);
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN), "Get_V_TB_PO_PLAN_EXTEND_List", e.Message);
throw e;
}
}
public static void Get_V_TB_PO_PLAN_List(V_TB_PO_PLAN p_entity, Action<ResultObject<IQueryable<V_TB_PO_PLAN>>> p_action)
{
ResultObject<IQueryable<V_TB_PO_PLAN>> _ret = new ResultObject<IQueryable<V_TB_PO_PLAN>>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
IQueryable<V_TB_PO_PLAN> q = db.V_TB_PO_PLAN;
if (!string.IsNullOrEmpty(p_entity.Domain))
{
q = q.Where(p => p.Domain.Contains(p_entity.Domain));
}
if (!string.IsNullOrEmpty(p_entity.PartCode))
{
q = q.Where(p => p.PartCode.Contains(p_entity.PartCode));
}
if (!string.IsNullOrEmpty(p_entity.PoBillNum))
{
q = q.Where(p => p.PoBillNum.Contains(p_entity.PoBillNum));
}
if (!string.IsNullOrEmpty(p_entity.Site))
{
q = q.Where(p => p.Site.Contains(p_entity.Site));
}
if (!string.IsNullOrEmpty(p_entity.AskBillNum))
{
q = q.Where(p => p.AskBillNum.Contains(p_entity.AskBillNum));
}
if (!string.IsNullOrEmpty(p_entity.Version))
{
q = q.Where(p => p.Version.Contains(p_entity.Version));
}
if (!string.IsNullOrEmpty(p_entity.PartDesc))
{
q = q.Where(p => p.PartDesc.Contains(p_entity.PartDesc));
}
if (!string.IsNullOrEmpty(p_entity.VendId))
{
q = q.Where(p => p.VendId.Contains(p_entity.VendId));
}
if (p_entity.EndTime!=null)
{
q = q.Where(p => p.EndTime==p_entity.EndTime.Value);
}
if (p_entity.UserInAddress != null && p_entity.UserInAddress.Count > 0)
{
q = q.Where(p => p_entity.UserInAddress.Contains(p.Domain));
}
if (p_entity.UserInVendIds != null && p_entity.UserInVendIds.Count > 0)
{
q = q.Where(p => p_entity.UserInVendIds.Contains(p.VendId));
}
_ret.State = ReturnStatus.Succeed;
_ret.Result = q;
p_action(_ret);
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN), "Get_V_TB_PO_PLAN_List", e.Message);
throw e;
}
}
public static DataTable Get_TB_PLAN_REPORT(V_TB_PO_PLAN p_plan)
{
DataTable dt = new DataTable();
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
string _sqlString = "SELECT * FROM ( SELECT partcode,endtime,planqty,partdesc,pounit,domain,pobillnum,poline FROM V_TB_PO_PLAN where {0}\n " +
") A\n" +
" pivot ( sum(planQty) for a.endtime in (\n" +
" {1}\n" +
")\n" +
") as ourpivot ";
string _sql = "SELECT DISTINCT(ENDTIME) FROM V_TB_PO_PLAN where {0} ORDER BY ENDTIME";
string _askBillSql = "SELECT * FROM V_TB_ASK_DETAIL where VENDID = '{0}' AND EndTime IN ({1}) AND AskBillNum like 'E%' ";
string _asn_recive = "SELECT A.PartCode, A.PoBillNum, A.PoLine, SUM(A.Qty) AS AsnQty, SUM(ISNULL(B.Qty, 0)) AS ReciveQty,\n" +
" SUM(ISNULL(C.AskQty, 0)) AS AskQty\n" +
"FROM V_TB_ASN_DETAIL AS A LEFT OUTER JOIN\n" +
" V_TB_RECEIVE_DETAIL AS B ON A.AsnBillNum = B.AsnBillNum AND A.PartCode = B.PartCode AND\n" +
" A.PoBillNum = B.PoBillNum AND A.PoLine = B.PoLine INNER JOIN\n" +
" TB_ASK_DETAIL AS C ON A.AskBillNum = C.AskBillNum AND A.PartCode = C.PartCode AND\n" +
" A.PoBillNum = C.PoBillNum AND A.PoLine = C.PoLine\n" +
"WHERE (A.AskBillNum LIKE 'E%') AND (A.State > 0) and {0}\n" +
"GROUP BY A.PartCode, A.PoBillNum, A.PoLine";
var dbSetting = GlobalConfig.ScpDatabase;
try
{
var strConn = EntitiesFactory.GetEfConnectionString(dbSetting);
SqlConnection conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = strConn;
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
#region 结束时间范围
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
string where1 = " 1=1 ";
if (!string.IsNullOrEmpty(p_plan.PartCode))
{
where1 += string.Format(" and partcode='{0}' ", p_plan.PartCode);
}
if (!string.IsNullOrEmpty(p_plan.VendId))
{
where1 += string.Format(" and VendId='{0}' ", p_plan.VendId);
}
if (!string.IsNullOrEmpty(p_plan.PoBillNum))
{
where1 += string.Format(" and PoBillNum='{0}' ", p_plan.PoBillNum);
}
if (p_plan.EndTime_Begin != null)
{
where1 += string.Format(" and EndTime>='{0}'", p_plan.EndTime_Begin.Value.ToString("yyyy-MM-dd") );
}
else
{
where1 += string.Format(" and EndTime>='{0}'", DateTime.Now.ToString("yyyy-MM-dd"));
}
if (p_plan.EndTime_End != null)
{
where1 += string.Format(" and EndTime<='{0}'", p_plan.EndTime_End.Value.ToString("yyyy-MM-dd"));
}
else
{
where1 += string.Format(" and EndTime<='{0}'", DateTime.Now.AddMonths(1).ToString("yyyy-MM-dd"));
}
cmd.CommandText = string.Format(_sql,where1);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
#endregion
List<string> _ls = new List<string>();
List<string> _ls1 = new List<string>();
foreach (DataRow row in dt.Rows)
{
_ls.Add(string.Format("[{0}]", row["EndTime"].ToString()));
_ls1.Add(string.Format("'{0}'", row["EndTime"].ToString()));
}
if (_ls.Count > 0)
{
#region 计划行转列
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn;
string where = "1=1 ";
if (!string.IsNullOrEmpty(p_plan.PartCode))
{
where += string.Format(" and partcode='{0}' ", p_plan.PartCode);
}
where += string.Format(" and VendId='{0}' ", p_plan.VendId);
if (!string.IsNullOrEmpty(p_plan.PoBillNum))
{
where += string.Format(" and PoBillNum='{0}' ", p_plan.PoBillNum);
}
cmd1.CommandText = string.Format(_sqlString,where, string.Join(",", _ls.ToArray()));
var adapter1 = new SqlDataAdapter(cmd1);
adapter1.Fill(dt1);
#endregion
#region 此范围内的看板号
SqlCommand cmd2 = new SqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = string.Format(_askBillSql,p_plan.VendId, string.Join(",", _ls1.ToArray()));
SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
adapter2.Fill(dt2);
#endregion
List<string> _askList = new List<string>();
foreach (DataRow row in dt2.Rows)
{
_askList.Add(string.Format("'{0}'", row["AskBillNum"].ToString()));
}
if (_askList.Count > 0)
{
SqlCommand cmd3 = new SqlCommand();
cmd3.Connection = conn;
cmd3.CommandText = string.Format(_asn_recive, string.Format(" A.askBillNum in ({0}) ", string.Join(",", _askList.ToArray())));
SqlDataAdapter adapter3 = new SqlDataAdapter(cmd3);
adapter3.Fill(dt3);
}
var column0 = dt1.Columns.Add("要货数量");
var column1 = dt1.Columns.Add("收货数量");
var column2 = dt1.Columns.Add("发货数量");
var column3 = dt1.Columns.Add("未发数量");
var column4 = dt1.Columns.Add("未收数量");
foreach (DataRow dr in dt1.Rows)
{
foreach (DataRow row in dt3.Rows)
{
if (
dr["PartCode"].ToString()==row["PartCode"].ToString()
&& dr["PoBillNum"].ToString()==row["PoBillNum"].ToString()
&& dr["PoLine"].ToString()==row["PoLine"].ToString())
{
dr["要货数量"] = row["ReciveQty"].ToString();
dr["收货数量"] = row["ReciveQty"].ToString();
dr["发货数量"] = row["AsnQty"].ToString();
dr["未收数量"] =decimal.Parse(row["AsnQty"].ToString())-decimal.Parse(row["ReciveQty"].ToString());
dr["未发数量"] =decimal.Parse(row["AskQty"].ToString())-decimal.Parse(row["AsnQty"].ToString());
}
}
}
foreach (DataColumn column in dt1.Columns)
{
try
{
var _dt1 = DateTime.Parse(column.ColumnName);
var _curDate=_dt1.ToString("yyyy-MM-dd");
column.ColumnName = _curDate+"(预测)";//要货预测头
foreach (DataRow row in dt2.Rows)
{
var _cur = DateTime.Parse(row["EndTime"].ToString()).ToString("yyyy-MM-dd");//看板时间
StringBuilder _buf = new StringBuilder();
if (_curDate==_cur)
{
var _ask = row["AskBillNum"].ToString();
column.ColumnName = _cur + "(" + _ask + ")";
switch (int.Parse(row["state"].ToString()))
{
case (int)AskState.New:
column.ColumnName = _cur + "(" + _ask + ")" + "(计划)";
break;
case (int)AskState.Ship:
column.ColumnName = _cur + "(" + _ask + ")" + "(已发货)";
break;
case (int)AskState.Confirm:
column.ColumnName = _cur + "(" + _ask + ")" + "(已确认)";
break;
case (int)AskState.Release:
column.ColumnName = _cur + "(" + _ask + ")" + "(已发布)";
break;
case (int)AskState.Receive:
column.ColumnName = _cur + "(" + _ask + ")" + "(已收货)";
break;
}
}
}
}
catch
{
continue;
}
}
dt1.Columns["PartCode"].ColumnName = "零件编码";
dt1.Columns["PartDesc"].ColumnName = "零件描述";
dt1.Columns["PoUnit"].ColumnName = "单位";
dt1.Columns["PoBillNum"].ColumnName = "订单编号";
dt1.Columns["PoLine"].ColumnName = "行号";
dt1.Columns["Domain"].ColumnName = "域";
}
conn.Close();
}
catch (SqlException ex)
{
throw new Exception($"系统无法连接到数据库:{dbSetting},请检查配置的服务器,数据库,用户名和密码等信息是否正确。{Environment.NewLine}{ex}");
}
return dt1;
}
public static DataTable Get_TB_PLAN_REPORT_EXTEND(V_TB_PO_PLAN_EXTEND p_plan,bool IsOutput)
{
DataTable dt = new DataTable();
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt3 = new DataTable();
string _sqlString = "SELECT a.partcode,a.PartDesc1+a.PartDesc2 as PartDesc,a.pounit,a.Site as domain,a.pobillnum,a.poline,a.Vendid , {0} FROM V_TB_PO_DETAIL A LEFT JOIN\n" +
"(\n" +
"SELECT * FROM ( SELECT partcode,endtime,planqty,partdesc,pounit,domain,pobillnum,poline,Vendid FROM V_TB_PO_PLAN_EXTEND where {1}\n" +
" ) A\n" +
" pivot ( sum(planQty) for a.endtime in ({0})\n" +
") as ourpivot) B ON A.PoBillNum=B.PoBillNum AND A.PoLine=B.PoLine AND A.PartCode=B.PartCode and a.Site=b.Domain WHERE {2} ORDER BY A.PoLine";
/*计划时间长度*/
string _sql = "SELECT convert(varchar(10),EndTime ,23) EndTime FROM (\n" +
"SELECT DISTINCT(EndTime) EndTime FROM V_TB_PO_PLAN_EXTEND where {0}) A ORDER BY ENDTIME";
//string _sql = "SELECT convert(varchar(10),DISTINCT(ENDTIME) ,23) FROM V_TB_PO_PLAN_EXTEND where {0} ORDER BY ENDTIME";
/*导出预测导入模板*/
if (IsOutput==true)
{
_sql= "select convert(varchar(10),DATEADD(day,number,GETDATE()) ,23) endtime\n" +
"from master.dbo.spt_values\n" +
"where type='p'\n" +
"AND number<=DATEDIFF(day,GETDATE(),DATEADD(DAY,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+6,0)))";
}
/*查询结束的看遍内容*/
string _askBillSql = "SELECT * FROM V_TB_ASK_DETAIL where PoBillNum='{0}' and EndTime IN ({1}) AND AskBillNum like 'U%' and State>-1 ";
/*要货收发货数量统计*/
//string _asn_recive = "SELECT C.PartCode, C.PoBillNum, C.PoLine, SUM(ISNULL(A.Qty, 0)) AS AsnQty, SUM(ISNULL(B.qty, 0)) AS ReciveQty,\n" +
//" SUM(ISNULL(C.AskQty, 0)) AS AskQty\n" +
//"FROM TB_ASK_DETAIL AS C LEFT OUTER JOIN\n" +
//" V_TB_ASN_DETAIL AS A ON A.AskBillNum = C.AskBillNum AND A.PartCode = C.PartCode AND\n" +
//" A.PoBillNum = C.PoBillNum AND A.PoLine = C.PoLine AND A.STATE>-1 LEFT OUTER JOIN\n" +
//" V_TB_RECEIVE_DETAIL AS B ON A.AsnBillNum = B.AsnBillNum AND A.PartCode = B.PartCode AND\n" +
//" A.PoBillNum = B.PoBillNum AND A.PoLine = B.PoLine\n" +
//"WHERE (C.AskBillNum LIKE 'U%') AND (C.State >= 0) AND (C.AskBillNum IN ({0}))\n" +
//"GROUP BY C.PartCode, C.PoBillNum, C.PoLine";
string _asn_recive = "\n" +
"SELECT p1.PartCode, p1.PoBillNum, p1.PoLine,AskQty,ReciveQty,AsnQty FROM\n" +
"(\n" +
"\n" +
"\n" +
"SELECT sum(c.AskQty) AskQty, C.PartCode, C.PoBillNum, C.PoLine\n" +
"FROM TB_ASK_DETAIL AS C\n" +
"WHERE (C.AskBillNum LIKE 'U%') AND (C.State >= 0) AND (C.AskBillNum IN ({0}))\n" +
"GROUP BY C.PartCode, C.PoBillNum, C.PoLine\n" +
") p1\n" +
"left join\n" +
"(SELECT A.PartCode, A.PoBillNum, A.PoLine, SUM(ISNULL(A.Qty, 0)) AS AsnQty, SUM(ISNULL(B.qty, 0)) AS ReciveQty\n" +
"FROM\n" +
" V_TB_ASN_DETAIL AS A\n" +
" LEFT OUTER JOIN\n" +
" V_TB_RECEIVE_DETAIL AS B ON A.AsnBillNum = B.AsnBillNum AND A.PartCode = B.PartCode AND\n" +
" A.PoBillNum = B.PoBillNum AND A.PoLine = B.PoLine\n" +
"\n" +
"WHERE (A.AskBillNum LIKE 'U%') AND (A.State > 1) AND (A.AskBillNum IN ({0}))\n" +
"GROUP BY A.PartCode, A.PoBillNum, A.PoLine) P2\n" +
"\n" +
"on P1.PartCode=p2.PartCode and p1.PoBillNum=p2.PoBillNum and p1.PoLine=p2.PoLine";
/*初始化预测模板填写*/
string _posql = "SELECT * FROM ( SELECT partcode, convert(varchar(10),EndTime ,23) endtime,0 as planqty, isnull(PartDesc1,'') +isnull(PartDesc2,'') as partdesc,pounit,Site as domain,pobillnum,poline,vendid FROM V_TB_PO_DETAIL where {0}\n" +
" ) A\n" +
" pivot ( sum(planQty) for a.endtime in (\n" +
"{1}\n" +
" )\n" +
" ) as ourpivot";
var dbSetting = GlobalConfig.ScpDatabase;
SqlConnection conn = new System.Data.SqlClient.SqlConnection();
try
{
var strConn = EntitiesFactory.GetEfConnectionString(dbSetting);
conn.ConnectionString = strConn;
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
#region 结束时间范围
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
string where1 = " 1=1 ";
if (!string.IsNullOrEmpty(p_plan.PartCode))
{
where1 += string.Format(" and partcode='{0}' ", p_plan.PartCode);
}
if (!string.IsNullOrEmpty(p_plan.VendId))
{
where1 += string.Format(" and VendId='{0}' ", p_plan.VendId);
}
if (!string.IsNullOrEmpty(p_plan.PoBillNum))
{
where1 += string.Format(" and PoBillNum='{0}' ", p_plan.PoBillNum);
}
if (p_plan.EndTime_Begin != null)
{
where1 += string.Format(" and EndTime>='{0}'", p_plan.EndTime_Begin.Value.ToString("yyyy-MM-dd"));
}
else
{
where1 += string.Format(" and EndTime>='{0}'", DateTime.Now.ToString("yyyy-MM-dd"));
}
if (p_plan.EndTime_End != null)
{
where1 += string.Format(" and EndTime<='{0}'", p_plan.EndTime_End.Value.ToString("yyyy-MM-dd"));
}
else
{
where1 += string.Format(" and EndTime<='{0}'", DateTime.Now.AddMonths(6).ToString("yyyy-MM-dd"));
}
cmd.CommandText = string.Format(_sql, where1);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
#endregion
List<string> _ls = new List<string>();
List<string> _ls1 = new List<string>();
foreach (DataRow row in dt.Rows)
{
if (IsOutput == true)
{
var _date= DateTime.Parse(row["EndTime"].ToString());//去掉周六周日
if ((int)_date.DayOfWeek != 0 || (int)_date.DayOfWeek != 6)
{
_ls.Add(string.Format("[{0}]", row["EndTime"].ToString()));
}
_ls1.Add(string.Format("'{0}'", row["EndTime"].ToString()));
}
else
{
_ls.Add(string.Format("[{0}]", row["EndTime"].ToString()));
_ls1.Add(string.Format("'{0}'", row["EndTime"].ToString()));
}
}
if (_ls.Count > 0)
{
#region 计划行转列
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn;
string Bwhere = "1=1 ";
string Awhere = "1=1";
if (!string.IsNullOrEmpty(p_plan.PartCode))
{
Bwhere += string.Format(" and PartCode='{0}' ", p_plan.PartCode);
Awhere += string.Format(" and A.partcode='{0}' ", p_plan.PartCode);
}
if (!string.IsNullOrEmpty(p_plan.VendId))
{
Bwhere += string.Format(" and VendId='{0}' ", p_plan.VendId);
Awhere += string.Format(" and A.VendId='{0}' ", p_plan.VendId);
}
if (!string.IsNullOrEmpty(p_plan.PoBillNum))
{
Bwhere += string.Format(" and PoBillNum='{0}' ", p_plan.PoBillNum);
Awhere += string.Format(" and A.PoBillNum='{0}' ", p_plan.PoBillNum);
}
cmd1.CommandText = string.Format(_sqlString, string.Join(",", _ls.ToArray()),Bwhere,Awhere );
var adapter1 = new SqlDataAdapter(cmd1);
adapter1.Fill(dt1);
#endregion
if (dt1.Rows.Count == 0)
{
#region 是否使用订单生成模板
DataTable poTable = new DataTable();
SqlCommand pocmd = new SqlCommand();
pocmd.Connection = conn;
string poWhere = "1=1 ";
//poWhere += string.Format(" and VendId='{0}' ", p_plan.VendId);
if (!string.IsNullOrEmpty(p_plan.PoBillNum))
{
poWhere += string.Format(" and PoBillNum='{0}' ", p_plan.PoBillNum);
}
pocmd.CommandText = string.Format(_posql, poWhere, string.Join(",", _ls.ToArray()));
var poAdapter = new SqlDataAdapter(pocmd);
poAdapter.Fill(poTable);
dt1= poTable;
foreach (DataColumn itm in dt1.Columns)
{
itm.DataType = System.Type.GetType("System.String");
}
DataColumn _column = new DataColumn("计划天数");
dt1.Columns.Add(_column);
DataColumn _column1 = new DataColumn("版本号");
dt1.Columns.Add(_column1);
foreach (DataRow row in dt1.Rows)
{
row["版本号"] = DateTime.Now.ToString("yyyy-MM-dd").Replace("-", string.Empty).Replace("/", string.Empty) + "0001";
}
#endregion
}
else
{
#region 此范围内的看板号
SqlCommand cmd2 = new SqlCommand();
cmd2.Connection = conn;
cmd2.CommandText = string.Format(_askBillSql, p_plan.PoBillNum, string.Join(",", _ls1.ToArray()));
SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
adapter2.Fill(dt2);
#endregion
List<string> _askList = new List<string>();
foreach (DataRow row in dt2.Rows)
{
_askList.Add(string.Format("'{0}'", row["AskBillNum"].ToString()));
}
if (_askList.Count > 0)
{
SqlCommand cmd3 = new SqlCommand();
cmd3.Connection = conn;
cmd3.CommandText = string.Format(_asn_recive,string.Join(",", _askList.ToArray()));
SqlDataAdapter adapter3 = new SqlDataAdapter(cmd3);
adapter3.Fill(dt3);
}
var column1 = dt1.Columns.Add("收货数量");
var column2 = dt1.Columns.Add("发货数量");
var column3 = dt1.Columns.Add("要货数量");
var column5 = dt1.Columns.Add("版本号");
var column6 = dt1.Columns.Add("计划天数");
string _maxCode = string.Empty;
if (IsOutput == true)
{
DataTable dt5 = new DataTable();
string _max = string.Format("SELECT MAX(Version) as max FROM [TB_PO_PLAN_EXTEND] where PoBillNum = '{0}' and site='{1}'", p_plan.PoBillNum, p_plan.Domain);
SqlCommand cmd5 = new SqlCommand();
cmd5.Connection = conn;
cmd5.CommandText = _max;
var adapter5 = new SqlDataAdapter(cmd5);
adapter5.Fill(dt5);
if (dt5.Rows[0]["max"] != null && dt5.Rows[0]["max"].ToString() != string.Empty && string.IsNullOrEmpty(Regex.Replace(dt5.Rows[0]["max"].ToString(), @"\d{11,12}", string.Empty)))
{
if (dt5.Rows[0]["max"].ToString().Length == 11)
{
string _oldDate = dt5.Rows[0]["max"].ToString().Substring(0, 7);
string _newDate = DateTime.Now.ToString("yyyy-MM-dd").Replace("/", string.Empty);
if (long.Parse(_oldDate) == long.Parse(_newDate))
{
_maxCode = (long.Parse(dt5.Rows[0]["max"].ToString()) + 1).ToString();
}
if (long.Parse(_newDate) > long.Parse(_oldDate))
{
_maxCode = _newDate + "0001";
}
}
if (dt5.Rows[0]["max"].ToString().Length == 12)
{
string _oldDate = dt5.Rows[0]["max"].ToString().Substring(0, 8);
string _newDate = DateTime.Now.ToString("yyyy-MM-dd").Replace("-", string.Empty);
if (long.Parse(_oldDate) == long.Parse(_newDate))
{
_maxCode = (long.Parse(dt5.Rows[0]["max"].ToString()) + 1).ToString();
}
if (long.Parse(_newDate) > long.Parse(_oldDate))
{
_maxCode = _newDate + "0001";
}
}
}
else
{
string _newDate = DateTime.Now.ToString("yyyy-MM-dd").Replace("-", string.Empty).Replace("/",string.Empty);
_maxCode = _newDate + "0001";
}
}
foreach (DataRow dr in dt1.Rows)
{
foreach (DataRow row in dt3.Rows)
{
if (
dr["PartCode"].ToString() == row["PartCode"].ToString()
&& dr["PoBillNum"].ToString() == row["PoBillNum"].ToString()
&& dr["PoLine"].ToString() == row["PoLine"].ToString())
{
dr["收货数量"] = row["ReciveQty"].ToString();
dr["发货数量"] = row["AsnQty"].ToString();
dr["要货数量"] = row["AskQty"].ToString();
//dr["未收数量"] = decimal.Parse(row["AsnQty"].ToString()) - decimal.Parse(row["ReciveQty"].ToString());
//dr["未发数量"] = decimal.Parse(row["AskQty"].ToString()) - decimal.Parse(row["AsnQty"].ToString());
}
}
}
if (IsOutput == true)
{
foreach (DataRow row in dt1.Rows)
{
row["版本号"] = _maxCode;
}
}
foreach (DataColumn column in dt1.Columns)
{
try
{
var _dt1 = DateTime.Parse(column.ColumnName);
var _curDate = _dt1.ToString("yyyy-MM-dd");
column.ColumnName = _curDate+"(预测)";
foreach (DataRow row in dt2.Rows)
{
var _cur = DateTime.Parse(row["EndTime"].ToString()).ToString("yyyy-MM-dd");
StringBuilder _buf = new StringBuilder();
if (_curDate == _cur)
{
var _ask = row["AskBillNum"].ToString();
column.ColumnName = _cur + "(" + _ask + ")";
switch (int.Parse(row["state"].ToString()))
{
case (int)AskState.New:
column.ColumnName = _cur + "(" + _ask + ")" + "(计划)";
break;
case (int)AskState.Ship:
column.ColumnName = _cur + "(" + _ask + ")" + "(已发货)";
break;
case (int)AskState.Confirm:
column.ColumnName = _cur + "(" + _ask + ")" + "(已确认)";
break;
case (int)AskState.Release:
column.ColumnName = _cur + "(" + _ask + ")" + "(已发布)";
break;
case (int)AskState.Receive:
column.ColumnName = _cur + "(" + _ask + ")" + "(已收货)";
break;
}
}
}
}
catch
{
continue;
}
}
}
dt1.Columns["VendID"].ColumnName = "供应商编码";
dt1.Columns["PartCode"].ColumnName = "零件编码";
dt1.Columns["PartDesc"].ColumnName = "零件描述";
dt1.Columns["PoUnit"].ColumnName = "单位";
dt1.Columns["PoBillNum"].ColumnName = "订单编号";
dt1.Columns["PoLine"].ColumnName = "行号";
dt1.Columns["Domain"].ColumnName = "域";
if (IsOutput == true)
{
dt1.Columns["版本号"].SetOrdinal(0);
dt1.Columns["计划天数"].SetOrdinal(1);
}
}
conn.Close();
}
catch (Exception ex)
{
conn.Close();
throw new Exception($"系统无法连接到数据库:{dbSetting},请检查配置的服务器,数据库,用户名和密码等信息是否正确。{Environment.NewLine}{ex}");
}
return dt1;
}
public static DataTable EXPORT_TB_PO_PLAN_EXTEND(V_TB_PO_PLAN_EXTEND p_plan)
{
V_TB_PO_PLAN_EXTEND _plan = new V_TB_PO_PLAN_EXTEND();
_plan.VendId = p_plan.VendId;
_plan.PoBillNum = p_plan.PoBillNum;
_plan.Domain = p_plan.Domain;
DataTable tb = Get_TB_PLAN_REPORT_EXTEND(_plan, true);
return tb;
}
public class TB_PO_PLAN_EXTEND_TEMP
{
public string AskBillNum { set; get; }
public string AsnBillNum { set; get; }
}
public static ResultObject<bool> IMPORT_TB_PO_PLAN_EXTEND(DataTable p_table,User p_user,bool IsAutoRelse)
{
string _sqlString = "SELECT askbillNum FROM TB_ASK where TB_ASK.AskBillNum LIKE 'U%' and TB_ASK.ENDTIME in ({0}) and TB_ASK.pobillnum='{1}' and TB_ASK.Site='{2}'";
string _asnSqlString = "select CONVERT(varchar(100), TB_ASK.EndTime, 23) as EndTime from TB_ASK inner join tb_asn on TB_ASK.AskBillNum=TB_ASN.AskBillNum \n" +
"where tb_asn.State>-1 and TB_ASK.AskBillNum like 'U%' AND TB_ASK.ENDTIME in ({0}) and TB_ASK.pobillnum='{1}' and tb_ask.site='{2}'";
string _delPlan = "delete from TB_PO_PLAN_EXTEND where pobillnum ='{0}' and domain='{1}' and endtime in ({2}) ";
string _delString = "delete from tb_ask where askbillnum in ({0}) ";
string _delDetailString = "delete from tb_ask_detail where askbillnum in ({0}) ";
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
List<string> _versionList = new List<string>();
List<TB_PO_PLAN_EXTEND> _ls = new List<TB_PO_PLAN_EXTEND>();
List<string> _partcodeList = new List<string>();
List<string> _vendcodeList = new List<string>();
List<string> _poList = new List<string>();
List<string> _siteList = new List<string>();
List<string> _dayList = new List<string>();
List<string> _endTimelist = new List<string>();
List<string> _askbillList = new List<string>();
#region 列校验
List<string> _checkDay = new List<string>();
string[] _checkColumnAry = new string[] {
"版本号",
"计划天数",
"零件编码",
"订单编号",
"行号",
"供应商编码",
"域",
"单位"
};
int _checkNum = 0;
foreach (DataColumn column in p_table.Columns)
{
if (!column.ColumnName.Contains("版本号") &&
!column.ColumnName.Contains("计划天数") &&
!column.ColumnName.Contains("零件编码") &&
!column.ColumnName.Contains("零件描述") &&
!column.ColumnName.Contains("订单编号") &&
!column.ColumnName.Contains("行号") &&
!column.ColumnName.Contains("供应商编码") &&
!column.ColumnName.Contains("域") &&
!column.ColumnName.Contains("收货数量") &&
!column.ColumnName.Contains("要货数量") &&
!column.ColumnName.Contains("发货数量") &&
!column.ColumnName.Contains("单位")
)
{
var _reg1 = Regex.Match(column.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}\([a-zA-Z]{1}\d{10}\)\([\u4e00-\u9fa5]+\)");
var _reg2 = Regex.Match(column.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}\([\u4e00-\u9fa5]+\)");
var _reg3 = Regex.Match(column.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}");
if (!string.IsNullOrEmpty(_reg3.Value) && !_endTimelist.Contains(_reg3.Value))
{
_endTimelist.Add(string.Format("'{0}'", DateTime.Parse(_reg3.Value).ToString("yyyy-MM-dd")));
}
else
{
_ret.MessageList.Add(_reg3.Value + "交货日期有重复日期!");
}
if (string.IsNullOrEmpty(_reg1.Value) && string.IsNullOrEmpty(_reg2.Value))
{
_ret.MessageList.Add(string.Format("{0}列格式不对", column.ColumnName));
}
}
else
{
foreach (DataRow dr in p_table.Rows)//导入计划EXCEL行转列
{
if (column.ColumnName == "订单编号")
{
if (!_poList.Contains(dr["订单编号"].ToString().Trim()))
{
_poList.Add(dr["订单编号"].ToString().Trim());
}
}
if (column.ColumnName == "版本号")
{
if (!_versionList.Contains(dr["版本号"].ToString().Trim()))
{
_versionList.Add(dr["版本号"].ToString().Trim());
}
}
if (column.ColumnName == "零件编码")
{
if (!_partcodeList.Contains(dr["零件编码"].ToString().Trim()))
{
_partcodeList.Add(dr["零件编码"].ToString().Trim());
}
}
if (column.ColumnName == "供应商编码")
{
if (!_vendcodeList.Contains(dr["供应商编码"].ToString().Trim()))
{
_vendcodeList.Add(dr["供应商编码"].ToString().Trim());
}
}
if (column.ColumnName == "域")
{
if (!_siteList.Contains(dr["域"].ToString().Trim()))
{
_siteList.Add(dr["域"].ToString().Trim());
}
}
if (column.ColumnName == "计划天数")
{
if (dr["计划天数"] != null)
{
_dayList.Add(dr["计划天数"].ToString().Trim());
}
}
}
if (_checkColumnAry.Contains(column.ColumnName.Trim()))
{
_checkNum++;
}
}
}
string _pobillNum = p_table.Rows[0]["订单编号"].ToString();
string _site = p_table.Rows[0]["域"].ToString();
string _sql = string.Format(_asnSqlString, string.Join(",", _endTimelist.ToArray()), _pobillNum, _site);
var _asnCurList = db.Database.SqlQuery<string>(_sql).ToList();
if (_asnCurList.Count > 0)
{
_endTimelist = _endTimelist.Where(p => !_asnCurList.Contains(p.Replace("'", string.Empty))).ToList();
}
if (_versionList.Distinct().Count() > 1)
{
_ret.MessageList.Add("导入模板中多个版本号!");
}
if (_vendcodeList.Distinct().Count() > 1)
{
_ret.MessageList.Add("导入模板中有多个供应商编码!");
}
if (_versionList.Distinct().Count() == 1)
{
var _version = _versionList.FirstOrDefault().Replace("/", string.Empty);
var _first = db.TB_PO_PLAN_EXTEND.Where(p => p.VendId == _vendcodeList.FirstOrDefault() && p.PoBillNum == _poList.FirstOrDefault() && p.Version == _version).FirstOrDefault();
if (_first != null)
{
if (long.Parse(_version) <= long.Parse(_first.Version))
{
_ret.MessageList.Add("版本号必须大于上期版本号");
}
}
}
if (_checkNum != _checkColumnAry.Length)
{
_ret.MessageList.Add("版本号、计划天数、零件编码、订单编号、行号、供应商编码、域、单位为必填列");
}
if (string.IsNullOrEmpty(_dayList.FirstOrDefault().ToString()))
{
_ret.MessageList.Add("计划天数不能为空!");
}
#endregion
if (_ret.MessageList.Count == 0)
{
if (_endTimelist.Count > 0)
{
var _sql1 = string.Format(_sqlString, string.Join(",", _endTimelist.ToArray()), _poList.FirstOrDefault(), _siteList.FirstOrDefault());
var _askList = db.Database.SqlQuery<string>(_sql1).ToList();
#region 发货单位空的看板
if (_askList.Count > 0)
{
var _list = new List<string>();
_askList.ForEach(p =>
{
_list.Add(string.Format("'{0}'", p));
});
string _askStr = string.Format(_delString, string.Join(",", _list.ToArray()));
int _askdel = db.Database.ExecuteSqlCommand(_askStr);
if (_askdel > 0)
{
string _askDetailStr = string.Format(_delDetailString, string.Join(",", _list.ToArray()), _siteList.FirstOrDefault());
int _askdelDetail = db.Database.ExecuteSqlCommand(_askDetailStr);
}
}
int delPlanState = db.Database.ExecuteSqlCommand(string.Format(_delPlan, _pobillNum, _site, string.Join(",", _endTimelist.ToArray())));
#endregion
}
foreach (DataColumn colum in p_table.Columns)
{
if (colum.ColumnName.Contains("(预测)"))
{
var _reg3 = Regex.Match(colum.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}");
colum.ColumnName = DateTime.Parse(_reg3.Value).ToString("yyyy-MM-dd");
}
if (colum.ColumnName.Contains("(计划)"))
{
var _reg3 = Regex.Match(colum.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}");
colum.ColumnName = DateTime.Parse(_reg3.Value).ToString("yyyy-MM-dd");
}
if (colum.ColumnName.Contains("(已确认)"))
{
var _reg3 = Regex.Match(colum.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}");
colum.ColumnName = DateTime.Parse(_reg3.Value).ToString("yyyy-MM-dd");
//_endTimelist.Add(string.Format("'{0}'", colum.ColumnName));
}
if (colum.ColumnName.Contains("(已发布)"))
{
var _reg3 = Regex.Match(colum.ColumnName, @"\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}");
colum.ColumnName = DateTime.Parse(_reg3.Value).ToString("yyyy-MM-dd");
}
if (_endTimelist.Contains(string.Format("'{0}'", colum.ColumnName)))//没有被发货单占用的要货看板结束时间
{
foreach (DataRow dr in p_table.Rows)//导入计划EXCEL行转列
{
DateTime _dt = new DateTime();
if (DateTime.TryParse(colum.ColumnName, out _dt))
{
if (dr[colum.ColumnName] != null && !string.IsNullOrEmpty(dr[colum.ColumnName].ToString()))
{
try
{
var _planQty = decimal.Parse(dr[colum.ColumnName].ToString());
if (_planQty > 0)
{
TB_PO_PLAN_EXTEND _extend = new TB_PO_PLAN_EXTEND();
_extend.PartCode = dr["零件编码"].ToString();
_extend.Version = _versionList.FirstOrDefault().Replace("/",string.Empty);
_extend.PoBillNum = dr["订单编号"].ToString();
_extend.PoLine = int.Parse(dr["行号"].ToString());
_extend.PlanQty = decimal.Parse(dr[colum.ColumnName].ToString());
_extend.BeginTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
_extend.EndTime = DateTime.Parse(colum.ColumnName);
_extend.Domain = dr["域"].ToString();
_extend.VendId = dr["供应商编码"].ToString();
_extend.CreateTime = DateTime.Now;
_extend.Site = dr["域"].ToString();
_extend.PoUnit = dr["单位"].ToString();
_ls.Add(_extend);
}
}
catch (Exception e)
{
throw e;
}
}
}
}
}
}
db.TB_PO_PLAN_EXTEND.AddOrUpdate(_ls.ToArray());
if (db.SaveChanges() != -1)
{
if (_dayList.Count > 0)
{
var _askday = int.Parse(_dayList.FirstOrDefault());
var _planDayList = _ls.Select(p => p.EndTime).Distinct();
if (_askday > _planDayList.Count())
{
_ret.MessageList.Add("计划天数不能大于导入天数!");
}
else
{
var _askEndTime = _planDayList.OrderBy(p => p).Take(_askday);
foreach (var itm in _askEndTime)
{
var list = _ls.Where(p => p.EndTime == itm && p.VendId == _vendcodeList.FirstOrDefault() && p.PoBillNum == _poList.FirstOrDefault()).ToList();
var rsult = PLAN_EXTEND_TO_ASK(list, p_user, IsAutoRelse);
if (rsult.State == ReturnStatus.Succeed)
{
}
else
{
_ret.MessageList.AddRange(rsult.MessageList.ToArray());
}
}
}
}
else
{
}
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
if (_ret.MessageList.Count == 0)
{
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(TB_PO_PLAN_EXTEND), "IMPORT_TB_PO_PLAN_EXTEND", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public static void Get_TB_PO_PLAN(TB_PO_PLAN p_entity, Action<ResultObject<IQueryable<TB_PO_PLAN>>> p_action)
{
ResultObject<IQueryable<TB_PO_PLAN>> _ret = new ResultObject<IQueryable<TB_PO_PLAN>>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
IQueryable<TB_PO_PLAN> q = db.TB_PO_PLAN;
if (!string.IsNullOrEmpty(p_entity.Domain))
{
q = q.Where(p => p.Domain.Contains(p_entity.Domain));
}
if (!string.IsNullOrEmpty(p_entity.PartCode))
{
q = q.Where(p => p.PartCode.Contains(p_entity.PartCode));
}
if (!string.IsNullOrEmpty(p_entity.PoBillNum))
{
q = q.Where(p => p.PoBillNum.Contains(p_entity.PoBillNum));
}
if (!string.IsNullOrEmpty(p_entity.Site))
{
q = q.Where(p => p.Site.Contains(p_entity.Site));
}
if (!string.IsNullOrEmpty(p_entity.Version))
{
q = q.Where(p => p.Version.Contains(p_entity.Version));
}
if (!string.IsNullOrEmpty(p_entity.VendId))
{
q = q.Where(p => p.VendId.Contains(p_entity.VendId));
}
if (p_entity.EndTime != null)
{
q = q.Where(p => p.EndTime == p_entity.EndTime);
}
//if (p_entity.UserInAddress != null && p_entity.UserInAddress.Count > 0)
//{
// q = q.Where(p => p_entity.UserInAddress.Contains(p.Address));
//}
_ret.State = ReturnStatus.Succeed;
_ret.Result = q;
p_action(_ret);
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN), "Get_TB_PO_PLAN", e.Message);
throw e;
}
}
public ResultObject<bool> Save_V_TB_PO_PLAN(List<V_TB_PO_PLAN> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.V_TB_PO_PLAN.AddOrUpdate(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN), "Save_V_TB_PO_PLAN", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public ResultObject<bool> Del_V_TB_PO_PLAN(List<V_TB_PO_PLAN> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.V_TB_PO_PLAN.Remove(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN), "Del_V_TB_PO_PLAN", e.Message); throw e;
}
return _ret;
}
public static void Get_V_TB_PO_PLAN_DETAIL_List(V_TB_PO_PLAN_DETAIL p_entity, Action<ResultObject<IQueryable<V_TB_PO_PLAN_DETAIL>>> p_action)
{
ResultObject<IQueryable<V_TB_PO_PLAN_DETAIL>> _ret = new ResultObject<IQueryable<V_TB_PO_PLAN_DETAIL>>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
IQueryable<V_TB_PO_PLAN_DETAIL> q = db.V_TB_PO_PLAN_DETAIL;
if (!string.IsNullOrEmpty(p_entity.PoBillNum))
{
q = q.Where(p => p.PoBillNum.Contains(p_entity.PoBillNum));
}
if (!string.IsNullOrEmpty(p_entity.VendId))
{
q = q.Where(p => p.VendId.Contains(p_entity.VendId));
}
if (!string.IsNullOrEmpty(p_entity.PartCode))
{
q = q.Where(p => p.PartCode.Contains(p_entity.PartCode));
}
if (!string.IsNullOrEmpty(p_entity.AskBillNum))
{
q = q.Where(p => p.AskBillNum.Contains(p_entity.AskBillNum));
}
if (p_entity.EndTime != null)
{
q = q.Where(p => p.EndTime==p_entity.EndTime.Value);
}
if (!string.IsNullOrEmpty(p_entity.Version))
{
q = q.Where(p => p.Version.Contains(p_entity.Version));
}
if (!string.IsNullOrEmpty(p_entity.Domain))
{
q = q.Where(p => p.Domain.Contains(p_entity.Domain));
}
_ret.State = ReturnStatus.Succeed;
_ret.Result = q;
p_action(_ret);
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN_DETAIL), "Get_V_TB_PO_PLAN_DETAIL_List", e.Message);
throw e;
}
}
public ResultObject<bool> Save_V_TB_PO_PLAN_DETAIL(List<V_TB_PO_PLAN_DETAIL> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.V_TB_PO_PLAN_DETAIL.AddOrUpdate(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN_DETAIL), "Save_V_TB_PO_PLAN_DETAIL", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public ResultObject<bool> Del_V_TB_PO_PLAN_DETAIL(List<V_TB_PO_PLAN_DETAIL> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.V_TB_PO_PLAN_DETAIL.Remove(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(V_TB_PO_PLAN_DETAIL), "Del_V_TB_PO_PLAN_DETAIL", e.Message); throw e;
}
return _ret;
}
public static ResultObject<bool> PLAN_TO_ASK(List<V_TB_PO_PLAN> p_order_list,User p_user, bool IsAutoPublish = false)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
//p_order_list.ForEach(p =>
//{
// if (string.IsNullOrEmpty(p.PlanQty))
// {
// p.PlanQty = 0;
// }
//});
//int number = 1;
List<string> lineError = new List<string>();
List<string> ErrorList = new List<string>();
var _lst = p_order_list.Where(p => p.PlanQty != 0).ToList();
//_lst.ForEach
//(p =>
//{
// //var _ls = CheckExcelMode(db, p);
// if (_ls.Count > 0)
// {
// lineError.Add(number.ToString());
// ErrorList.Add(string.Join("<br>", _ls.ToArray()));
// }
// number++;
//});
if (lineError.Count > 0)
{
_ret.State = ReturnStatus.Failed;
_ret.MessageList.AddRange(ErrorList);
_ret.Result = false;
}
else
{
var VenderList = _lst.Select(p => p.VendId).Distinct();
var PartCodeList = _lst.Select(p => p.PartCode).Distinct();
var OrderList = _lst.GroupBy(p => p.PoBillNum).ToList();
OrderList.ForEach((p) =>
{
var list = p.ToList();
if (list.Count > 0)
{
var _entity = list.FirstOrDefault();
TB_ASK _ask = new TB_ASK();
_ask.AskBillNum = SCP_BILLCODE_CONTROLLER.MakePLAN_ASKCode();
_ask.VendId = _entity.VendId;
_ask.State = (int)AskState.New;
_ask.PoBillNum = _entity.PoBillNum;
_ask.ModType = (int)BillModType.Contract;
_ask.Site = _entity.Domain;
_ask.Remark = _entity.Version;
if (IsAutoPublish)
{
_ask.State = (int)AskState.Release;
}
else
{
_ask.State = (int)AskState.New;
}
_ask.BeginTime = DateTime.Now;
_ask.Buyer =p_user.ChineseName;
_ask.BuyerPhone = p_user.CellPhone;
_ask.ErpBillNum = _entity.PoBillNum;
_ask.EndTime = _entity.EndTime;
_ask.CreateTime = DateTime.Now;
_ask.CreateUser = p_user.Name;
_ask.VendId = _entity.VendId;
_ask.GUID = Guid.NewGuid();
_ask.ReceivedPort = string.Empty;
_ask.IsDeleted = false;
db.TB_ASK.Add(_ask);
#region 供应商新任务代办接口
TB_PENING_ITEMS _item = new TB_PENING_ITEMS();
_item.ROLE_NAME = "供应商";
_item.ITEM_NO = _ask.AskBillNum;
_item.ITEM_CONTENT = "要货看盘有信息";
_item.ITEM_TYPE = (int)PENDING_MESSAGE_TYPE.NEW_ASK;
_item.VEND_ID = _ask.VendId;
_item.ITEM_STATE = (int)PENDING_STATE.WAITING;
_item.SENDER = p_user.ChineseName;
_item.SENDING_TIME = DateTime.Now;
db.TB_PENING_ITEMS.Add(_item);
#endregion
// int _number = 1;
List<TB_ASK_DETAIL> _ls = new List<TB_ASK_DETAIL>();
list.ForEach((itm) =>
{
var _number = _ls.Count(p1 => p1.PoBillNum == _ask.PoBillNum
&& p1.PoLine == itm.PoLine && p1.PartCode == itm.PartCode );
if (_number > 0)
{
_ret.MessageList.Add(string.Format("已经存在订单为{0}行号为{1}零件编码为{2}", itm.PoBillNum, itm.PoLine.ToString(), itm.PartCode));
}
TB_ASK_DETAIL _t_ASK_Detail = new TB_ASK_DETAIL();
//_t_ASK_Detail.PoLine = _number;
_t_ASK_Detail.PoLine =itm.PoLine;
_t_ASK_Detail.Currency = "CNY";
_t_ASK_Detail.AskBillNum = _ask.AskBillNum;
_t_ASK_Detail.PoBillNum = _ask.PoBillNum;
_t_ASK_Detail.PoUnit = itm.PoUnit;
_t_ASK_Detail.CreateTime = DateTime.Now;
_t_ASK_Detail.CreateUser = _ask.CreateUser;
_t_ASK_Detail.PartCode = itm.PartCode;
_t_ASK_Detail.BeginTime =_ask.BeginTime;
_t_ASK_Detail.EndTime = itm.EndTime;
_t_ASK_Detail.TempQty = itm.PlanQty;
_t_ASK_Detail.AskQty = itm.PlanQty;
_t_ASK_Detail.IsDeleted = false;
_t_ASK_Detail.LocUnit = itm.PoUnit;
_t_ASK_Detail.UnConv = 1;
_t_ASK_Detail.Remark = itm.Version;
_t_ASK_Detail.State = _ask.State;
// _t_ASK_Detail.Price = string.IsNullOrEmpty(itm.) ? 0 : decimal.Parse(itm.价格);
_t_ASK_Detail.GUID = Guid.NewGuid();
_t_ASK_Detail.Remark = _ask.Site;
db.TB_ASK_DETAIL.Add(_t_ASK_Detail);
_ls.Add(_t_ASK_Detail);
// _number++;
});
}
else
{
_ret.MessageList.Add("ERP订单编号已存在,请重新导入!");
}
if (_ret.MessageList.Count == 0)
{
int state = db.SaveChanges();
if (state != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
);
}
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)//捕获实体验证异常
{
var sb = new StringBuilder();
foreach (var error in dbEx.EntityValidationErrors.ToList())
{
error.ValidationErrors.ToList().ForEach(i =>
{
sb.AppendFormat("表:{0},字段:{1},信息:{2}\r\n", error.Entry.Entity.GetType().Name, i.PropertyName, i.ErrorMessage);
});
}
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(dbEx);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", sb.ToString());
throw new ScpException(ResultCode.DbEntityValidationException, sb.ToString(), "字段验证失败" + sb.ToString());
}
catch (OptimisticConcurrencyException ex)//并发冲突异常
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(ex);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", ex.ToString());
throw new ScpException(ResultCode.Exception, "9999", ex.ToString());
}
catch (ScpException ex)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(ex);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", ex.ToString());
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(UpdateException))
{
var inner = (UpdateException)ex.InnerException;
throw new ScpException(ResultCode.Exception, "0000", ex.ToString());
}
else
{
if (ex.InnerException != null) throw ex.InnerException;
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public static ResultObject<bool> PLAN_EXTEND_TO_ASK(List<TB_PO_PLAN_EXTEND> p_order_list, User p_user, bool IsAutoPublish = false)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
//p_order_list.ForEach(p =>
//{
// if (string.IsNullOrEmpty(p.PlanQty))
// {
// p.PlanQty = 0;
// }
//});
//int number = 1;
List<string> lineError = new List<string>();
List<string> ErrorList = new List<string>();
var _lst = p_order_list.Where(p => p.PlanQty> 0).ToList();
//_lst.ForEach
//(p =>
//{
// //var _ls = CheckExcelMode(db, p);
// if (_ls.Count > 0)
// {
// lineError.Add(number.ToString());
// ErrorList.Add(string.Join("<br>", _ls.ToArray()));
// }
// number++;
//});
if (lineError.Count > 0)
{
_ret.State = ReturnStatus.Failed;
_ret.MessageList.AddRange(ErrorList);
_ret.Result = false;
}
else
{
var VenderList = _lst.Select(p => p.VendId).Distinct();
var PartCodeList = _lst.Select(p => p.PartCode).Distinct();
var OrderList = _lst.GroupBy(p => p.PoBillNum).ToList();
OrderList.ForEach((p) =>
{
var list = p.ToList();
if (list.Count > 0)
{
var _entity = list.FirstOrDefault();
TB_ASK _ask = new TB_ASK();
_ask.AskBillNum = SCP_BILLCODE_CONTROLLER.MakePLAN_EXTEND_ASKCode();
_ask.VendId = _entity.VendId;
_ask.State = (int)AskState.New;
_ask.PoBillNum = _entity.PoBillNum;
_ask.ModType = (int)BillModType.Contract;
_ask.Site = _entity.Domain;
_ask.Remark = _entity.Domain;
if (IsAutoPublish)
{
_ask.State = (int)AskState.Release;
}
else
{
_ask.State = (int)AskState.New;
}
_ask.BeginTime = DateTime.Now;
_ask.Buyer = p_user.ChineseName;
_ask.BuyerPhone = p_user.CellPhone;
_ask.ErpBillNum = _entity.PoBillNum;
_ask.EndTime = _entity.EndTime;
_ask.SubSite = _entity.Site;
_ask.CreateTime = DateTime.Now;
_ask.CreateUser = p_user.Name;
_ask.VendId = _entity.VendId;
_ask.GUID = Guid.NewGuid();
_ask.ReceivedPort = string.Empty;
_ask.IsDeleted = false;
db.TB_ASK.Add(_ask);
#region 供应商新任务代办接口
TB_PENING_ITEMS _item = new TB_PENING_ITEMS();
_item.ROLE_NAME = "供应商";
_item.ITEM_NO = _ask.AskBillNum;
_item.ITEM_CONTENT = "要货看盘有信息";
_item.ITEM_TYPE = (int)PENDING_MESSAGE_TYPE.NEW_ASK;
_item.VEND_ID = _ask.VendId;
_item.ITEM_STATE = (int)PENDING_STATE.WAITING;
_item.SENDER = p_user.ChineseName;
_item.SENDING_TIME = DateTime.Now;
db.TB_PENING_ITEMS.Add(_item);
#endregion
// int _number = 1;
List<TB_ASK_DETAIL> _ls = new List<TB_ASK_DETAIL>();
list.ForEach((itm) =>
{
var _number = _ls.Count(p1 => p1.PoBillNum == _ask.PoBillNum
&& p1.PoLine == itm.PoLine && p1.PartCode == itm.PartCode);
if (_number > 0)
{
_ret.MessageList.Add(string.Format("已经存在订单为{0}行号为{1}零件编码为{2}", itm.PoBillNum, itm.PoLine.ToString(), itm.PartCode));
}
TB_ASK_DETAIL _t_ASK_Detail = new TB_ASK_DETAIL();
//_t_ASK_Detail.PoLine = _number;
_t_ASK_Detail.PoLine = itm.PoLine;
_t_ASK_Detail.Currency = "CNY";
_t_ASK_Detail.AskBillNum = _ask.AskBillNum;
_t_ASK_Detail.PoBillNum = _ask.PoBillNum;
_t_ASK_Detail.PoUnit = itm.PoUnit;
_t_ASK_Detail.CreateTime = DateTime.Now;
_t_ASK_Detail.CreateUser = _ask.CreateUser;
_t_ASK_Detail.PartCode = itm.PartCode;
_t_ASK_Detail.BeginTime = _ask.BeginTime;
_t_ASK_Detail.EndTime = itm.EndTime;
_t_ASK_Detail.TempQty = itm.PlanQty;
_t_ASK_Detail.AskQty = itm.PlanQty;
_t_ASK_Detail.IsDeleted = false;
_t_ASK_Detail.LocUnit = itm.PoUnit;
_t_ASK_Detail.UnConv = 1;
_t_ASK_Detail.Site =_ask.Site;
_t_ASK_Detail.SubSite = _ask.SubSite;
_t_ASK_Detail.State = _ask.State;
// _t_ASK_Detail.Price = string.IsNullOrEmpty(itm.) ? 0 : decimal.Parse(itm.价格);
_t_ASK_Detail.GUID = Guid.NewGuid();
db.TB_ASK_DETAIL.Add(_t_ASK_Detail);
_ls.Add(_t_ASK_Detail);
// _number++;
});
}
else
{
_ret.MessageList.Add("ERP订单编号已存在,请重新导入!");
}
if (_ret.MessageList.Count == 0)
{
int state = db.SaveChanges();
if (state != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
);
}
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)//捕获实体验证异常
{
var sb = new StringBuilder();
foreach (var error in dbEx.EntityValidationErrors.ToList())
{
error.ValidationErrors.ToList().ForEach(i =>
{
sb.AppendFormat("表:{0},字段:{1},信息:{2}\r\n", error.Entry.Entity.GetType().Name, i.PropertyName, i.ErrorMessage);
});
}
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(dbEx);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", sb.ToString());
throw new ScpException(ResultCode.DbEntityValidationException, sb.ToString(), "字段验证失败" + sb.ToString());
}
catch (OptimisticConcurrencyException ex)//并发冲突异常
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(ex);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", ex.ToString());
throw new ScpException(ResultCode.Exception, "9999", ex.ToString());
}
catch (ScpException ex)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(ex);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", ex.ToString());
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(UpdateException))
{
var inner = (UpdateException)ex.InnerException;
throw new ScpException(ResultCode.Exception, "0000", ex.ToString());
}
else
{
if (ex.InnerException != null) throw ex.InnerException;
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(SCP_PO_CONTROLLER), "EXCEL_PO_TO_ASK", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public static void Get_TB_PLAN_CUSTOM_List(TB_PLAN_CUSTOM p_entity, Action<ResultObject<IQueryable<TB_PLAN_CUSTOM>>> p_action)
{
ResultObject<IQueryable<TB_PLAN_CUSTOM>> _ret = new ResultObject<IQueryable<TB_PLAN_CUSTOM>>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
IQueryable<TB_PLAN_CUSTOM> q = db.TB_PLAN_CUSTOM;
if (p_entity.UID != 0)
{
q = q.Where(p => p.UID == p_entity.UID);
}
if (!string.IsNullOrEmpty(p_entity.VendID))
{
q = q.Where(p => p.VendID.Contains(p_entity.VendID));
}
if (!string.IsNullOrEmpty(p_entity.PlanData))
{
q = q.Where(p => p.PlanData.Contains(p_entity.PlanData));
}
if (!string.IsNullOrEmpty(p_entity.Version))
{
q = q.Where(p => p.Version.Contains(p_entity.Version));
}
//if (p_entity.UserInAddress != null && p_entity.UserInAddress.Count > 0)
//{
// q = q.Where(p => p_entity.UserInAddress.Contains(p.Address));
//}
_ret.State = ReturnStatus.Succeed;
_ret.Result = q;
p_action(_ret);
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(TB_PLAN_CUSTOM), "Get_TB_PLAN_CUSTOM_List", e.Message);
throw e;
}
}
public static ResultObject<bool> Save_TB_PLAN_CUSTOM(List<TB_PLAN_CUSTOM> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.TB_PLAN_CUSTOM.AddOrUpdate(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
LogHelper.Writlog(LogHelper.LogType.Error, typeof(TB_PLAN_CUSTOM), "Save_TB_PLAN_CUSTOM", e.Message);
_ret.Result = false;
_ret.ErrorList.Add(e);
throw e;
}
return _ret;
}
public ResultObject<bool> Del_TB_PLAN_CUSTOM(List<TB_PLAN_CUSTOM> p_entitys)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
foreach (var itm in p_entitys)
{
db.TB_PLAN_CUSTOM.Remove(itm);
}
if (db.SaveChanges() != -1)
{
_ret.State = ReturnStatus.Succeed;
_ret.Result = true;
}
else
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(TB_PLAN_CUSTOM), "Del_TB_PLAN_CUSTOM", e.Message); throw e;
}
return _ret;
}
public ResultObject<bool> PLAN_TO_ASN(DataTable p_table)
{
ResultObject<bool> _ret = new ResultObject<bool>();
try
{
using (ScpEntities db = EntitiesFactory.CreateScpInstance())
{
//foreach (var itm in p_entitys)
//{
// db.TB_PLAN_CUSTOM.Remove(itm);
//}
//if (db.SaveChanges() != -1)
//{
// _ret.State = ReturnStatus.Succeed;
// _ret.Result = true;
//}
//else
//{
// _ret.State = ReturnStatus.Failed;
// _ret.Result = false;
//}
}
}
catch (Exception e)
{
_ret.State = ReturnStatus.Failed;
_ret.Result = false;
_ret.ErrorList.Add(e);
LogHelper.Writlog(LogHelper.LogType.Error, typeof(TB_PLAN_CUSTOM), "PLAN_TO_ASN", e.Message); throw e;
}
return _ret;
}
}
}