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

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