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.
307 lines
16 KiB
307 lines
16 KiB
using ICSSoft.ERPWMS.Entity;
|
|
using Microsoft.Data.SqlClient;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ICSSoft.ERPWMS.SQL
|
|
{
|
|
public class CreateVendorInventoryPrice
|
|
{
|
|
public static Result Create(List<CreateVendorInventoryPriceEntity> list)
|
|
{
|
|
Result res = new Result();
|
|
try
|
|
{
|
|
string jsonstr = JsonConvert.SerializeObject(list);
|
|
Log.WriteLogFile(jsonstr, "创建价格表日志");
|
|
StringBuilder sb = new StringBuilder();//接口返回Message
|
|
|
|
|
|
foreach (CreateVendorInventoryPriceEntity entity in list)
|
|
{
|
|
SqlConnection conn = new SqlConnection(ICSHelper.ReadConfig(ICSHelper.FileNameCompanyCon)["ERP"].ToString());
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
if (string.IsNullOrWhiteSpace(entity.cVenCode))
|
|
{
|
|
throw new Exception("存在供应商编码为空!");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(entity.cInvCode))
|
|
{
|
|
throw new Exception("物料编码为空!");
|
|
}
|
|
if (entity.bTaxCost == null)
|
|
{
|
|
throw new Exception("价格标识为空!");
|
|
}
|
|
if (entity.iSupplyType == null)
|
|
{
|
|
throw new Exception("供应类型为空!");
|
|
}
|
|
int iSupplyType = 1;
|
|
if (entity.iSupplyType == 0)
|
|
{
|
|
iSupplyType = 2;
|
|
}
|
|
if (entity.iSupplyType == 2)
|
|
{
|
|
iSupplyType = 4;
|
|
}
|
|
if (string.IsNullOrWhiteSpace(entity.cExch_Name))
|
|
{
|
|
throw new Exception("币种为空!");
|
|
}
|
|
if (entity.dEnableDate == null)
|
|
{
|
|
throw new Exception("生效日期为空!");
|
|
}
|
|
if (entity.dDisableDate == null)
|
|
{
|
|
throw new Exception("失效日期为空!");
|
|
}
|
|
if (string.IsNullOrWhiteSpace(entity.WorkPoint))
|
|
{
|
|
throw new Exception("表头站点为空!");
|
|
}
|
|
|
|
string WorkPoint = ICSHelper.GetConnectStringTest(entity.WorkPoint);
|
|
|
|
if (WorkPoint == "NotExit")
|
|
{
|
|
throw new Exception("站点编码不存在!");
|
|
}
|
|
//检查供应商编码是否存在
|
|
string sqlVenCheck = "select cVenCode from {0}.dbo.Vendor where cVenCode='{1}'";
|
|
sqlVenCheck = string.Format(sqlVenCheck, WorkPoint, entity.cVenCode);
|
|
DataTable dtVenCheck = ICSHelper.SQlReturnData(sqlVenCheck, cmd);
|
|
if (dtVenCheck.Rows.Count < 1)
|
|
{
|
|
throw new Exception("供应商编码不存在!");
|
|
}
|
|
|
|
//检查物料编码是否存在
|
|
string sqlInvCheck = "select cInvCode from {0}.dbo.Inventory where cInvCode='{1}'";
|
|
sqlInvCheck = string.Format(sqlInvCheck, WorkPoint, entity.cInvCode);
|
|
DataTable dtInvCheck = ICSHelper.SQlReturnData(sqlInvCheck, cmd);
|
|
if (dtInvCheck.Rows.Count < 1)
|
|
{
|
|
throw new Exception("物料编码不存在!");
|
|
}
|
|
|
|
|
|
|
|
if (entity.list.Count > 0)
|
|
{
|
|
List<CreateVendorInventoryPriceDetailEntity> listDownCheck = entity.list.Where(x => x.iLowerLimit == null).ToList();
|
|
if (listDownCheck.Count > 0)
|
|
{
|
|
throw new Exception("表体数量下限为空");
|
|
//sb.Append("表体数量下限为空,表头供应商编码为:" + entity.cVenCode + "!!!");
|
|
//continue;
|
|
}
|
|
|
|
List<float?> listDown = entity.list.Select(x => x.iLowerLimit).Distinct().ToList();
|
|
if (listDown.Count != entity.list.Count)
|
|
{
|
|
throw new Exception("表体数量下限存在重复");
|
|
//sb.Append("表体数量下限存在重复,表头供应商编码为:" + entity.cVenCode + "!!!");
|
|
//continue;
|
|
}
|
|
|
|
foreach (CreateVendorInventoryPriceDetailEntity detail in entity.list)
|
|
{
|
|
if (detail.iUpperLimit != null)
|
|
{
|
|
if (detail.iUpperLimit <= detail.iLowerLimit)
|
|
{
|
|
throw new Exception("表体数量下限大于数量上限");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
List<CreateVendorInventoryPriceDetailEntity> listDownOrder = entity.list.OrderBy(x => x.iLowerLimit).ToList();
|
|
float? UpLimit = null;
|
|
foreach (CreateVendorInventoryPriceDetailEntity item in listDownOrder)
|
|
{
|
|
if (UpLimit != null)
|
|
{
|
|
if (item.iLowerLimit <= UpLimit)
|
|
{
|
|
throw new Exception("表体数量下限与数量上限存在交叉");
|
|
}
|
|
}
|
|
if (item.iUpperLimit != null)
|
|
{
|
|
UpLimit = item.iUpperLimit;
|
|
}
|
|
else
|
|
{
|
|
UpLimit = null;
|
|
}
|
|
if (item.iUnitPrice == null)
|
|
{
|
|
throw new Exception("表体无税单价为空");
|
|
}
|
|
if (item.iTaxRate == null)
|
|
{
|
|
throw new Exception("表体税率为空");
|
|
}
|
|
if (item.iTaxUnitPrice == null)
|
|
{
|
|
throw new Exception("表体含税单价为空");
|
|
}
|
|
if (item.WorkPoint == null)
|
|
{
|
|
throw new Exception("表体站点为空");
|
|
}
|
|
}
|
|
|
|
string UpdateSQL = "";
|
|
//将上个版本全部失效
|
|
string sqlLastCheck = @"Select Autoid,dEnableDate,dDisableDate from {0}.dbo.Ven_Inv_Price Where cVenCode ='{1}' and cInvCode ='{2}'
|
|
and iSupplyType ='{3}' and (dDisableDate>='{4}' or dDisableDate is null)";//检查是否存在交叉失效日期
|
|
sqlLastCheck = string.Format(sqlLastCheck, WorkPoint, entity.cVenCode, entity.cInvCode, iSupplyType, entity.dEnableDate);
|
|
|
|
Log.WriteLogFile(sqlLastCheck, "创建价格表SQL日志");
|
|
|
|
DataTable dtNew = ICSHelper.SQlReturnData(sqlLastCheck, cmd);
|
|
if (dtNew != null && dtNew.Rows.Count > 0)
|
|
{
|
|
//将上个版本的失效日期改为当前生效日期的前一天
|
|
foreach (DataRow dr in dtNew.Rows)
|
|
{
|
|
if (entity.dEnableDate <= Convert.ToDateTime(dr["dEnableDate"]))
|
|
{
|
|
UpdateSQL += " Update {0}.dbo.Ven_Inv_Price Set dDisableDate ='{1}',dEnableDate ='{1}' Where Autoid ='{2}';";
|
|
UpdateSQL = string.Format(UpdateSQL, WorkPoint, Convert.ToDateTime(entity.dEnableDate).AddDays(-1), dr["Autoid"].ToString());
|
|
}
|
|
else
|
|
{
|
|
UpdateSQL += " Update {0}.dbo.Ven_Inv_Price Set dDisableDate ='{1}' Where Autoid ='{2}';";
|
|
UpdateSQL = string.Format(UpdateSQL, WorkPoint, Convert.ToDateTime(entity.dEnableDate).AddDays(-1), dr["Autoid"].ToString());
|
|
}
|
|
|
|
}
|
|
}
|
|
foreach (CreateVendorInventoryPriceDetailEntity detail in entity.list)
|
|
{
|
|
if (detail.iUpperLimit == null)
|
|
{
|
|
UpdateSQL += @" Insert into {0}.dbo.Ven_Inv_Price(cVenCode,cInvCode,btaxcost,iSupplyType,cExch_Name,dEnableDate,dDisableDate,iLowerLimit,
|
|
iUpperLimit,iUnitPrice,iTaxRate,iTaxUnitPrice,bPromotion) Values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}',null,'{9}','{10}','{11}',0);";
|
|
UpdateSQL = string.Format(UpdateSQL, WorkPoint, entity.cVenCode, entity.cInvCode, entity.bTaxCost, iSupplyType, entity.cExch_Name,
|
|
entity.dEnableDate, entity.dDisableDate, detail.iLowerLimit, detail.iUnitPrice, detail.iTaxRate, detail.iTaxUnitPrice);
|
|
}
|
|
else
|
|
{
|
|
UpdateSQL += @" Insert into {0}.dbo.Ven_Inv_Price(cVenCode,cInvCode,btaxcost,iSupplyType,cExch_Name,dEnableDate,dDisableDate,iLowerLimit,
|
|
iUpperLimit,iUnitPrice,iTaxRate,iTaxUnitPrice,bPromotion) Values ('{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}',0);";
|
|
UpdateSQL = string.Format(UpdateSQL, WorkPoint, entity.cVenCode, entity.cInvCode, entity.bTaxCost, iSupplyType, entity.cExch_Name,
|
|
entity.dEnableDate, entity.dDisableDate, detail.iLowerLimit, detail.iUpperLimit, detail.iUnitPrice, detail.iTaxRate, detail.iTaxUnitPrice);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
//if (iSupplyType == 1)
|
|
//{
|
|
// float? MaxiUnitPrice = entity.list.Select(x => x.iUnitPrice).Max();
|
|
// decimal CkUnitPrice = (decimal)entity.list.Select(x => x.iUnitPrice).Max();
|
|
|
|
|
|
// if (entity.cExch_Name != "人民币")
|
|
// {
|
|
// string Year = DateTime.Now.Year.ToString();
|
|
// string Month = DateTime.Now.Month.ToString();
|
|
|
|
// string sqlEx = "select nflat from {0}.dbo.exch where cexch_name ='" + entity.cExch_Name + "' and iYear ='" + Year + "' and iperiod='" + Month + "' and itype =2";
|
|
// sqlEx = string.Format(sqlEx, WorkPoint);
|
|
// DataTable dtEx = ICSHelper.SQlReturnData(sqlEx, cmd);
|
|
// if (dtEx == null || dtEx.Rows.Count < 1)
|
|
// {
|
|
// throw new Exception("币种:" + entity.cExch_Name + ",在年份:" + Year + ",月份:" + Month + ",未维护汇率关系!");
|
|
// }
|
|
|
|
// MaxiUnitPrice = MaxiUnitPrice * float.Parse(dtEx.Rows[0]["nflat"].ToString());
|
|
// CkUnitPrice = decimal.Round(CkUnitPrice * decimal.Parse(dtEx.Rows[0]["nflat"].ToString()), 2);
|
|
// }
|
|
// else
|
|
// {
|
|
// CkUnitPrice = decimal.Round(CkUnitPrice, 2);
|
|
// }
|
|
|
|
|
|
// UpdateSQL += " Update {0}.dbo.Inventory set cVenCode ='{1}',iInvRCost ='{3}',iInvSPrice ='{4}' Where cInvCode ='{2}'";
|
|
// UpdateSQL = String.Format(UpdateSQL, WorkPoint, entity.cVenCode, entity.cInvCode, MaxiUnitPrice, CkUnitPrice);
|
|
//}
|
|
//else
|
|
//{
|
|
// UpdateSQL += " Update {0}.dbo.Inventory set cVenCode ='{1}' Where cInvCode ='{2}'";
|
|
// UpdateSQL = String.Format(UpdateSQL, WorkPoint, entity.cVenCode, entity.cInvCode);
|
|
//}
|
|
|
|
UpdateSQL += " Update {0}.dbo.Inventory set cVenCode ='{1}' Where cInvCode ='{2}'";
|
|
UpdateSQL = String.Format(UpdateSQL, WorkPoint, entity.cVenCode, entity.cInvCode);
|
|
|
|
|
|
Log.WriteLogFile(UpdateSQL, "创建价格表SQL日志");
|
|
if (!ICSHelper.ExecuteNonQuery(UpdateSQL, cmd))
|
|
{
|
|
throw new Exception("新增供应商料品价格表失败!");
|
|
}
|
|
cmd.Transaction.Commit();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("表体为空");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
cmd.Transaction.Rollback();
|
|
sb.Append("执行报错,供应商编码为:" + entity.cVenCode + ",物料编码为:" + entity.cInvCode + ",报错信息:" + ex.Message + "!!!");
|
|
continue;
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
}
|
|
conn.Dispose();
|
|
}
|
|
}
|
|
|
|
|
|
if (sb.Length > 0)
|
|
{
|
|
res.IsSuccess = false;
|
|
res.Message = sb.ToString();
|
|
}
|
|
else
|
|
{
|
|
res.IsSuccess = true;
|
|
res.Message = "执行成功!";
|
|
}
|
|
return res;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
res.IsSuccess = false;
|
|
res.Message = ex.Message;
|
|
return res;
|
|
}
|
|
}
|
|
}
|
|
}
|