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.
416 lines
21 KiB
416 lines
21 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 DeliveryNotice
|
|
{
|
|
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"];
|
|
//参数示例
|
|
//[{
|
|
// "ASNNO": "DN510852000001",
|
|
// "WHCode": "11",
|
|
// "User": "CC001",
|
|
// "MTime": "2021-08-26 17:20:13",
|
|
// "details": [
|
|
// {
|
|
// "LOTNO": "PO200219004100005",
|
|
// "ReceiveQty": "2"
|
|
// },{
|
|
// "LOTNO": "PO200219004100001",
|
|
// "ReceiveQty": "1"
|
|
// }
|
|
// ]
|
|
//}]
|
|
//返回参数
|
|
//{
|
|
//"Success": true,
|
|
//"Message": "接口调用成功!",
|
|
//"Data": null
|
|
//}
|
|
public string Get(List<ICSDeliveryNotice> infos)
|
|
{
|
|
List<ICSDeliveryNotice> szJson = new List<ICSDeliveryNotice>();
|
|
DataTable dt = null;
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @" SELECT A.ID,A.cCode,A.cVenCode,D.cVenName,C.CDEPNAME,A.cDepCode,C.cDepName,A.cpocode,A.cMaker,A.cMakeTime,A.cverifier,A.caudittime,
|
|
B.Autoid,B.irowno ,B.cInvCode ,B.INUM,B.iQuantity,B.fValidInQuan,B.iPOsID
|
|
FROM PU_ArrivalVouch A
|
|
INNER JOIN PU_ArrivalVouchs B ON A.ID=B.ID
|
|
INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
|
|
INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1 and A.cBusType='委外加工'";
|
|
if (!string.IsNullOrWhiteSpace(info.ODNCode))
|
|
{
|
|
sql += " and a.cCode='{0}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
|
|
{
|
|
sql += " and ISNULL(a.cModifyTime,ISNULL(a.cAuditTime, ISNULL(a.cModifyTime, a.cmaketime)))>='{1}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.User))
|
|
{
|
|
sql += "and a.CMAKER='{2}'";
|
|
}
|
|
sql = string.Format(sql, info.ODNCode, info.MTime, info.User);
|
|
dt = DBHelper.SQlReturnData(sql, cmd);
|
|
json = JsonConvert.SerializeObject(dt);
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return json;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 回写U8到货单,
|
|
/// </summary>
|
|
/// <param name="cmd"></param>
|
|
/// <param name="Lotnos"></param>
|
|
/// <param name="info"></param>
|
|
public string CreatePUArrive(List<ICSDeliveryNotice> Bills)
|
|
{
|
|
string iFatherIdTwo = "";
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
string str = "";
|
|
DataTable dt = null;
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
int num = 0;
|
|
//int iBaseCodeLen = Convert.ToInt32(dic["iBaseCodeLen"].ToString());
|
|
//int cVouchCodeBase = Convert.ToInt32(dic["cVouchCodeBase"].ToString());
|
|
List<ICSDeliveryNotice> datas = new List<ICSDeliveryNotice>();
|
|
string sql = "";
|
|
try
|
|
{
|
|
foreach (ICSDeliveryNotice head in Bills)
|
|
{
|
|
num = head.details.Count();
|
|
DateTime time = DateTime.Now;
|
|
Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "PuArrival", "" + num + "");
|
|
int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
|
|
int iChildId = Convert.ToInt32(dic["iChildId"].ToString());
|
|
DateTime date = DateTime.Now;
|
|
string iBaseCodeLen = DBHelper.GetAllRDCode("26", "" + time + "", "admin");
|
|
string DEF_ID = DBHelper.GetDefaultTemplate(Type, cmd);
|
|
#region 主表
|
|
sql = @"INSERT INTO PU_ArrivalVouch
|
|
(iVTid, ID, cCode, cPTCode, dDate,
|
|
cVenCode, cDepCode, cPersonCode, cPayCode,
|
|
cexch_name, iExchRate, iTaxRate, cMemo,
|
|
cBusType, cMaker, bNegative, iBillType,
|
|
cMakeTime, cAuditDate, caudittime, cverifier,
|
|
iverifystateex, IsWfControlled, iflowid, iPrintCount,
|
|
cpocode)
|
|
SELECT
|
|
@iVTid, @ID, @cCode, cPTCode, CONVERT(NVARCHAR(10), GETDATE(), 23),
|
|
cVenCode, cDepCode, cPersonCode, cPayCode,
|
|
cexch_name, nflat, iTaxRate, cMemo,
|
|
'委外加工', @User, 0, 0,
|
|
GETDATE(), CONVERT(NVARCHAR(10), GETDATE(), 23), GETDATE(), @User,
|
|
2, 0, 0, iPrintCount,
|
|
cCode
|
|
FROM OM_MOMain WHERE 1=1 AND cCode = @POID ";
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@iVTid", DEF_ID));
|
|
cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
|
|
cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
|
|
cmd.Parameters.Add(new SqlParameter("@User", head.User));
|
|
cmd.Parameters.Add(new SqlParameter("@POID", head.OOCode));
|
|
//cmd.Parameters.Add(new SqlParameter("@dDate", data.dMate));
|
|
cmd.CommandText = sql;
|
|
try
|
|
{
|
|
int count = cmd.ExecuteNonQuery();
|
|
if (count <= 0)
|
|
{
|
|
log.Error("生成委外到货单表头失败,受影响行数<=0;");
|
|
throw new Exception("生成委外到货单表头失败,受影响行数<=0;");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("生成委外到货单表头失败!委外订单号:" + head.ODNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成委外到货单表头失败!委外订单号:" + head.ODNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
#endregion
|
|
foreach (ICSDeliveryNotices body in head.details)
|
|
{
|
|
int iMassDate = 0;
|
|
int cMassUnit = 0;
|
|
sql = @"SELECT cInvCode, ISNULL(iMassDate, 0) iMassDate, ISNULL(cMassUnit, 0) cMassUnit FROM Inventory WHERE cInvCode = '{0}' ";
|
|
sql = string.Format(sql, body.InvCode);
|
|
DataTable dts = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dts.Rows.Count == 0)
|
|
{
|
|
log.Error("存货档案不存在");
|
|
throw new Exception("存货档案不存在");
|
|
}
|
|
else
|
|
{
|
|
iMassDate = Convert.ToInt16(dts.Rows[0]["iMassDate"].ToString());
|
|
cMassUnit = Convert.ToInt16(dts.Rows[0]["cMassUnit"].ToString());
|
|
}
|
|
|
|
sql = @"
|
|
INSERT INTO PU_ArrivalVouchs
|
|
(Autoid, ID, cInvCode, iQuantity, iOriCost, iOriTaxCost, iOriMoney, iOriTaxPrice, iOriSum, iCost, iMoney, iTaxPrice, iSum, iTaxRate,
|
|
iPOsID, fValidInQuan, fRealQuantity, fValidQuantity, fRetQuantity, fInValidInQuan, bGsp, fValidNum, fValidInNum, fRealNum, bTaxCost,
|
|
SoType, fInvalidInNum, iinvexchrate, cordercode, RejectSource, iExpiratDateCalcu, iordertype, ivouchrowno, bgift,
|
|
dPDate, dVDate, imassdate, cmassunit, cExpirationdate, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8,
|
|
cBatch, cDefine37, fKPQuantity, finValidQuantity, fRefuseQuantity, iProductType,bexigency)
|
|
|
|
SELECT @Autoid, @ID, @cInvCode, @iQuantity,pd.iUnitPrice,pd.iTaxPrice,round((pd.iTaxPrice*@iQuantity)/(1+pd.iPerTaxRate/100),2),
|
|
round(pd.iTaxPrice*@iQuantity,2)-round((pd.iTaxPrice*@iQuantity)/(1+pd.iPerTaxRate/100),2),round(pd.iTaxPrice*@iQuantity,2),round((pd.iTaxPrice/(1+pd.iPerTaxRate/100)*b.nflat),2),
|
|
round(round((pd.iTaxPrice*@iQuantity)/(1+pd.iPerTaxRate/100),2)*b.nflat,2),
|
|
round((round(pd.iTaxPrice*@iQuantity,2)-round((pd.iTaxPrice*@iQuantity)/(1+pd.iPerTaxRate/100),2))*b.nflat,2),round(round(pd.iTaxPrice*@iQuantity,2)*b.nflat,2),pd.iPerTaxRate,
|
|
pd.MODetailsID , 0, @iQuantity, @iQuantity, 0, 0, 0, null, null, null, 1,
|
|
0, null, 0, @cordercode, 0, 0, 0, @ivouchrowno, 0,
|
|
@dPDate, @dVDate, @imassdate, @cmassunit, null, @cFree1, @cFree2, @cFree3, @cFree4, @cFree5, @cFree6, @cFree7, @cFree8,
|
|
@Batch, @cDefine37, null, null, null, null, null FROM OM_MODetails pd
|
|
left join OM_MOMain b on pd.MOID =b.MOID
|
|
WHERE pd.MODetailsID = @MODetailsID ";
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@MODetailsID", body.OODetailID));
|
|
cmd.Parameters.Add(new SqlParameter("@Autoid", iChildId));
|
|
cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
|
|
cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
|
|
cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
|
|
cmd.Parameters.Add(new SqlParameter("@cordercode", head.OOCode));
|
|
cmd.Parameters.Add(new SqlParameter("@ivouchrowno",body.Sequence));
|
|
cmd.Parameters.Add(new SqlParameter("@dPDate", head.MTime));
|
|
if (cMassUnit == 1)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@dVDate", head.MTime.AddYears(iMassDate).Date));
|
|
}
|
|
if (cMassUnit == 2)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@dVDate", head.MTime.AddMonths(iMassDate).Date));
|
|
}
|
|
if (cMassUnit == 3)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@dVDate", head.MTime.AddDays(iMassDate).Date));
|
|
}
|
|
cmd.Parameters.Add(new SqlParameter("@dVDate", ""));
|
|
cmd.Parameters.Add(new SqlParameter("@imassdate", iMassDate));
|
|
cmd.Parameters.Add(new SqlParameter("@cmassunit", cMassUnit));
|
|
cmd.Parameters.Add(new SqlParameter("@Batch", ""));
|
|
cmd.Parameters.Add(new SqlParameter("@cDefine37", head.MTime.AddDays(1 - DateTime.Now.Day).AddMonths(1).AddSeconds(-1)));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree1", body.cFree1));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree2", body.cFree2));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree3", body.cFree3));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree4", body.cFree4));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree5", body.cFree5));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree6", body.cFree6));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree7", body.cFree7));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree8", body.cFree8));
|
|
cmd.CommandText = sql;
|
|
try
|
|
{
|
|
int count = cmd.ExecuteNonQuery();
|
|
if (count <= 0)
|
|
{
|
|
log.Error("生成委外到货单表体失败,受影响行数<=0;");
|
|
throw new Exception("生成委外到货单表体失败,受影响行数<=0;");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("生成委外到货单表体失败!委外订单号:" + head.ODNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成委外到货单表体失败!委外订单号:" + head.ODNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
sql = string.Format(@"UPDATE B SET B.iArrMoney = ISNULL(B.iArrMoney, 0) + A.iOriSum, B.iNatArrMoney = ISNULL(B.iNatArrMoney, 0) + A.iSum
|
|
FROM dbo.PU_ArrivalVouchs A LEFT JOIN dbo.PO_Podetails B ON A.iPOsID = B.ID
|
|
WHERE A.Autoid = '{0}'", iChildId);
|
|
cmd.CommandText = sql;
|
|
cmd.ExecuteNonQuery();
|
|
iFatherIdTwo += "'" + iFatherId + "',";
|
|
iChildId--;
|
|
}
|
|
sql = @" SELECT A.ID as ID, A.ID as IDs,A.cCode as ODNCode,A.cVenCode,D.cVenName,
|
|
A.cDepCode,C.cDepName,A.cpocode as OOCode,A.cMaker,A.cMakeTime,A.cverifier,A.caudittime
|
|
FROM PU_ArrivalVouch A
|
|
INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
|
|
INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE
|
|
WHERE 1=1 and A.cBusType='委外加工' AND A.ID in ({0})
|
|
|
|
SELECT A.ID as IDs, B.Autoid as DetailID ,B.ivouchrowno as Sequence,B.cInvCode,B.INUM,B.iQuantity,
|
|
B.fValidInQuan,B.iPOsID as OODetailID
|
|
FROM PU_ArrivalVouch A
|
|
INNER JOIN PU_ArrivalVouchs B ON A.ID=B.ID
|
|
INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
|
|
INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1 and A.cBusType='委外加工' AND A.ID in ({0}) ";
|
|
sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
|
|
DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
|
|
string RelationName = "details";
|
|
DataRelation dr = new DataRelation(RelationName, ds.Tables[0].Columns["IDs"], ds.Tables[1].Columns["IDs"]);
|
|
ds.Relations.Add(dr);
|
|
// sql = @"
|
|
// SELECT A.ID,A.cCode as ODNCode,A.cVenCode,D.cVenName,C.CDEPNAME,A.cDepCode,C.cDepName,A.cpocode,A.cMaker,A.cMakeTime,A.cverifier,A.caudittime,
|
|
// B.Autoid,B.ivouchrowno as Sequence ,B.cInvCode ,B.INUM,B.iQuantity,B.fValidInQuan,B.iPOsID as DetailID
|
|
// FROM PU_ArrivalVouch A
|
|
// INNER JOIN PU_ArrivalVouchs B ON A.ID=B.ID
|
|
// INNER JOIN DEPARTMENT C ON A.CDEPCODE=C.CDEPCODE
|
|
// INNER JOIN VENDOR D ON A.CVENCODE=D.CVENCODE WHERE 1=1 and A.cBusType='委外加工' AND A.ID in ({0}) ";
|
|
// sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
|
|
// dt = DBHelper.SQlReturnData(sql, cmd);
|
|
str = DBHelper.DataSetToJson(ds, RelationName);
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return str;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
public string Approve(List<ICSDeliveryNotice> infos)
|
|
{
|
|
List<ICSDeliveryNotice> szJson = new List<ICSDeliveryNotice>();
|
|
DataTable dt = null;
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @"UPDATE dbo.PU_ArrivalVouch SET cVerifier ='" + info.User + @"' ,
|
|
cAuditTime=CONVERT(VARCHAR(50),GETDATE(),112),cAuditDate=GETDATE() WHERE ID='{0}'";
|
|
sql = string.Format(sql, info.ID);
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return json;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 删除请购单
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Delete(List<ICSDeliveryNotice> infos)
|
|
{
|
|
List<ICSDeliveryNotice> szJson = new List<ICSDeliveryNotice>();
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @" DELETE dbo.PU_ArrivalVouch WHERE ID='{0}'";
|
|
sql = string.Format(sql, info.ID);
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return res;
|
|
;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|