纽威
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.
 
 
 
 
 

479 lines
22 KiB

using ICSSoft.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ICSSoft.Common;
namespace ICSSoft.DataProject
{
/// <summary>
/// 采购订单
/// </summary>
public class PurchaseOrder
{
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"];
private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"];
private static string Type = System.Configuration.ConfigurationManager.AppSettings["Type"];
/// <summary>
/// 查找采购订单
/// </summary>
/// <param name="infos"></param>
/// <returns></returns>
public string GET(List<ICSPurchaseOrder> infos)
{
DataTable dt = null;
DataTable dtNew = null;
string connS = "";
string sql = "";
string json = "";
if (infos.Count <= 0)
{
throw new Exception("传送数据为空!");
}
string res = string.Empty;
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
foreach (string WorkPoint in result)
{
try
{
connS = string.Format(connString, WorkPoint);
conn = new System.Data.SqlClient.SqlConnection(connS);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
foreach (ICSPurchaseOrder info in infos)
{
if (WorkPoint != info.WorkPoint)
continue;
ICSUserInfo userInfo = new ICSUserInfo();
userInfo = DBHelper.GetPersonInfo(info.User, cmd);
if (info.MTime < new DateTime(2000, 01, 01))
throw new Exception("请输入正确的操作时间:" + info.MTime);
sql = @" SELECT A.CPOID,A.CVENCODE,A.CDEPCODE,A.CAPPCODE,C.CDEPNAME,D.CVENNAME,A.CMAKER,A.CMAKETIME,A.CVERIFIER,A.CAUDITTIME,
B.IROWNO,B.CINVCODE ,B.IQUANTITY ,B.INUM,B.IRECEIVEDQTY,B.DARRIVEDATE,A.CEXCH_NAME,B.ITAXPRICE,B.INATUNITPRICE,B.IUNITPRICE
FROM PO_POMAIN A
INNER JOIN PO_PODETAILS B ON A.POID=B.POID
INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1";
if (!string.IsNullOrWhiteSpace(info.POCode))
{
sql += " and a.CPOID='{0}'";
}
if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
{
sql += " and ISNULL(b.cbCloseTime,ISNULL(a.cChangAuditTime,ISNULL(a.cAuditTime, ISNULL(a.cModifyTime, a.cmaketime))))>='{1}'";
}
if (!string.IsNullOrWhiteSpace(info.User))
{
sql += "and a.CMAKER='{2}'";
}
sql = string.Format(sql, info.POCode, info.MTime, userInfo.UserName);
dt = DBHelper.SQlReturnData(sql, cmd);
if (dt.Rows.Count <= 0 || dt == null)
throw new Exception("采购订单:" + info.PRCode + ",无信息!");
if (dtNew == null)
dtNew = dt;
else
dtNew.Merge(dt);
}
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
log.Error(ex.Message);
throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
}
}
json = JsonConvert.SerializeObject(dtNew);
return json;
}
/// <summary>
/// 创建采购订单
/// </summary>
/// <param name="infos"></param>
/// <returns></returns>
public string CreateICSPurchaseOrder(List<ICSPurchaseOrder> infos)
{
int num = 0;
DataTable dtNew = null;
string connS = "";
string szJson = "";
DataTable dt = null;
string sql = "";
if (infos.Count <= 0)
{
throw new Exception("传送数据为空!");
}
string res = string.Empty;
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
#region 采购订单表头
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
foreach (string WorkPoint in result)
{
try
{
connS = string.Format(connString, WorkPoint);
conn = new System.Data.SqlClient.SqlConnection(connS);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
foreach (ICSPurchaseOrder info in infos)
{
num = info.details.Count();
if (WorkPoint != info.WorkPoint)
continue;
ICSUserInfo userInfo = new ICSUserInfo();
userInfo = DBHelper.GetPersonInfo(info.User, cmd);
string[] ss = info.WorkPoint.Split('_');
ERPDB = ss[1];
Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "PoMain", "" + num + "", info.WorkPoint);
int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
DateTime date = DateTime.Now;
string iBaseCodeLen = DBHelper.GetAllRDCode("88", "" + date + "", "admin", "", info.WorkPoint);
if (string.IsNullOrWhiteSpace(info.PRCode))
{
sql = @"Insert Into dbo.PO_Pomain
(cPOID ,dPODate ,cVenCode ,cexch_name ,
nflat ,iTaxRate ,iCost ,iBargain ,
cMemo ,cState ,cMaker ,cVerifier ,
POID ,iVTid ,cBusType ,iDiscountTaxType ,
iverifystateex ,ireturncount ,IsWfControlled ,cmaketime ,
cAuditTime ,cAuditDate ,iPrintCount,cDefine14,
cPersonCode,cDepCode)
Values
( @cPOID,CONVERT(NVARCHAR(15),GETDATE(),23),@cVenCode,'人民币',
'','',0,0,
'',1,@cMaker,'',
@POID,'','普通采购',0,
2,0,0,GETDATE(),
GETDATE() ,CONVERT(NVARCHAR(15),GETDATE(),23) ,0 ,'',
'',@cDepCode)" + Environment.NewLine;
cmd.Parameters.Clear();
cmd.Parameters.Add("@cPOID", iBaseCodeLen);
cmd.Parameters.Add("@cVenCode", info.VenCode);
cmd.Parameters.Add("@POID", iFatherId);
cmd.Parameters.Add("@cMaker", userInfo.UserName);
cmd.Parameters.Add("@cDepCode", "''");
}
else
{
sql += @"INSERT INTO dbo.PO_Pomain
(cPOID ,dPODate ,cVenCode ,cexch_name ,
nflat ,iTaxRate ,iCost ,iBargain ,
cMemo ,cState ,cMaker ,cVerifier ,
POID ,iVTid ,cBusType ,iDiscountTaxType ,
iverifystateex ,ireturncount ,IsWfControlled ,cmaketime ,
cAuditTime ,cAuditDate ,iPrintCount,cDefine14,
cPersonCode,cDepCode)
SELECT
@cPOID,CONVERT(NVARCHAR(15),GETDATE(),23),@cVenCode ,'人民币' ,
'' AS nflat ,'' ,0 AS iCost ,0 AS iBargain,
cMemo , '1' AS cState ,cMaker ,cVerifier ,
@POID ,'' AS iVTid ,'普通采购' AS cBusType ,0 AS iDiscountTaxType ,
2 AS iverifystateex ,0 AS ireturncount ,0 AS IsWfControlled ,GETDATE() AS cmaketime ,
GETDATE() AS cAuditTime ,CONVERT(NVARCHAR(15),GETDATE(),23) AS cAuditDate ,0 AS iPrintCount ,ID,
cPersonCode,@cDepCode FROM dbo.PU_AppVouch where ccode='" + info.PRCode + "'";
cmd.Parameters.Clear();
cmd.Parameters.Add("@cPOID", iBaseCodeLen);
cmd.Parameters.Add("@cVenCode", info.VenCode);
cmd.Parameters.Add("@POID", iFatherId);
cmd.Parameters.Add("@cDepCode", info.DepCode);
}
cmd.CommandText = sql;
try
{
int count = cmd.ExecuteNonQuery();
if (count <= 0)
{
log.Error("采购订单表头<=0;");
throw new Exception("采购订单表头败,受影响行数<=0;");
}
}
catch (Exception ex)
{
log.Error("采购订单表头失败" + sql, ex);
throw new Exception("采购订单表头失败" + sql, ex);
}
#endregion
#region 采购订单表体
foreach (var detail in info.details)
{
if (string.IsNullOrWhiteSpace(info.PRCode))
{
sql = @"
Insert Into PO_Podetails
(ID,cInvCode ,iQuantity ,iNum ,iUnitPrice ,iMoney ,iTax ,iSum ,
iNatUnitPrice ,iNatMoney ,iNatTax ,iNatSum ,dArriveDate ,
iReceivedQTY ,iReceivedNum ,iReceivedMoney ,iPerTaxRate ,
bGsp ,POID ,iTaxPrice ,bTaxCost ,cSource ,SoType ,cupsocode ,
iordertype ,ivouchrowno ,bgift)
VALUES
('',@cInvCode,@iQuantity,@iNum,@iUnitPrice,'','','',
0,0,'','',@dArriveDate,
'','',0,'',
0,@ID,'',0,'','','' NULL,@ivouchrowno,'')" + Environment.NewLine;
cmd.Parameters.Clear();
cmd.Parameters.Add("@ID", iFatherId);
cmd.Parameters.Add("@cInvCode", detail.InvCode);
cmd.Parameters.Add("@Code", info.PRCode);
cmd.Parameters.Add("@ivouchrowno", detail.Sequence);
cmd.Parameters.Add("@iQuantity", detail.Quantity);
cmd.Parameters.Add("@iNum", detail.Amount);
cmd.Parameters.Add("@iUnitPrice", detail.UnitPrice);
cmd.Parameters.Add("@dArriveDate", detail.ArriveDate);
}
sql = @"INSERT INTO PO_Podetails
(ID,cInvCode ,iQuantity ,iNum ,iUnitPrice ,iMoney ,iTax ,iSum ,
iNatUnitPrice ,iNatMoney ,iNatTax ,iNatSum ,dArriveDate ,
iReceivedQTY ,iReceivedNum ,iReceivedMoney ,iPerTaxRate ,
bGsp ,POID ,iTaxPrice ,bTaxCost ,cSource ,SoType ,cupsocode ,
iordertype ,ivouchrowno ,bgift)
SELECT AutoID ,@cInvCode ,@iQuantity ,@iNum ,@iUnitPrice ,iMoney ,iOriTaxPrice,iOriSum ,
0 ,0 ,iTaxPrice ,'' ,@dArriveDate ,
iReceivedQTY ,iReceivedNum ,0 ,iPerTaxRate ,
0 ,@ID ,iOriTaxCost ,0 ,cSource ,SoType ,@Code ,
iordertype ,@ivouchrowno ,''
FROM PU_AppVouchs WHERE AutoID='" + detail.PRDetailID + "'";
cmd.Parameters.Clear();
cmd.Parameters.Add("@ID", iFatherId);
cmd.Parameters.Add("@cInvCode", detail.InvCode);
cmd.Parameters.Add("@Code", info.PRCode);
cmd.Parameters.Add("@ivouchrowno", detail.Sequence);
cmd.Parameters.Add("@iQuantity", detail.Quantity);
cmd.Parameters.Add("@iNum", detail.Amount);
cmd.Parameters.Add("@iUnitPrice", detail.UnitPrice);
cmd.Parameters.Add("@dArriveDate", detail.ArriveDate);
cmd.CommandText = sql;
try
{
int count = cmd.ExecuteNonQuery();
if (count <= 0)
{
log.Error("采购订单表体<=0;");
throw new Exception("采购订单表体败,受影响行数<=0;");
}
}
catch (Exception ex)
{
log.Error("采购订单表体失败" + sql, ex);
throw new Exception("采购订单表体失败" + sql, ex);
}
}
#endregion
#region 查询
cmd.Transaction.Commit();
sql = @"select a.POID,a.cPOID,a.cVenCode,c.cVenName,
a.cDepCode,d.cDepName,a.cappcode,a.cMaker,
a.cmaketime ,a.cVerifier,a.cAuditDate,b.ID,
b.ivouchrowno ,b.cInvCode , b.iQuantity, b.iNum,
b.fPoArrQuantity, b.dArriveDate ,'人民币' ,b.iTaxPrice ,
b.iAppIds from po_pomain a
left join PO_Podetails b on a.POID=b.POID
left join Vendor c on a.cVenCode=c.cVenCode
left join Department d on a.cDepCode=d.cDepCode where a.poid='{0}' ";
sql = string.Format(sql, iFatherId);
dt = DBHelper.SQlReturnData(sql, cmd);
#endregion
if (dtNew == null)
dtNew = dt;
else
dtNew.Merge(dt);
}
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
log.Error(ex.Message);
throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
}
}
szJson = JsonConvert.SerializeObject(dtNew);
return szJson;
}
/// <summary>
/// 审核采购订单
/// </summary>
/// <param name="infos"></param>
/// <returns></returns>
public string Approve(List<ICSPurchaseOrder> infos)
{
List<ICSPurchaseOrder> szJson = new List<ICSPurchaseOrder>();
string connS = "";
if (infos.Count <= 0)
{
throw new Exception("传送数据为空!");
}
string res = string.Empty;
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
string sql = string.Empty;
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
foreach (string WorkPoint in result)
{
try
{
connS = string.Format(connString, WorkPoint);
conn = new System.Data.SqlClient.SqlConnection(connS);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
foreach (ICSPurchaseOrder info in infos)
{
if (WorkPoint != info.WorkPoint)
continue;
ICSUserInfo userInfo = new ICSUserInfo();
userInfo = DBHelper.GetPersonInfo(info.User, cmd);
if (info.MTime < new DateTime(2000, 01, 01))
throw new Exception("请输入正确的操作时间:" + info.MTime);
sql = @"UPDATE PO_POMAIN SET cVerifier ='" + userInfo.UserName + @"' ,
cAuditTime=CONVERT(VARCHAR(50),GETDATE(),112),cAuditDate=GETDATE() WHERE POID='" + info.ID + "'";
sql = string.Format(sql, ERPDB);
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
}
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
log.Error(ex.Message);
throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
}
}
return res;
}
/// <summary>
/// 删除采购订单
/// </summary>
/// <param name="infos"></param>
/// <returns></returns>
public string Delete(List<ICSPurchaseOrder> infos)
{
List<ICSPurchaseOrder> szJson = new List<ICSPurchaseOrder>();
if (infos.Count <= 0)
{
throw new Exception("传送数据为空!");
}
string res = string.Empty;
string connS = "";
SqlConnection conn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
string sql = string.Empty;
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
foreach (string WorkPoint in result)
{
try
{
connS = string.Format(connString, WorkPoint);
conn = new System.Data.SqlClient.SqlConnection(connS);
conn.Open();
SqlTransaction sqlTran = conn.BeginTransaction();
cmd = new SqlCommand();
cmd.Transaction = sqlTran;
cmd.Connection = conn;
foreach (ICSPurchaseOrder info in infos)
{
if (WorkPoint != info.WorkPoint)
continue;
if (info.MTime < new DateTime(2000, 01, 01))
throw new Exception("请输入正确的操作时间:" + info.MTime);
sql = @" DELETE PO_POMAIN WHERE POID='{0}'";
sql = string.Format(sql, info.ID);
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
}
cmd.Transaction.Commit();
}
catch (Exception ex)
{
cmd.Transaction.Rollback();
log.Error(ex.Message);
throw new Exception(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
}
}
return res;
}
}
}