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