Files
N_XLXSBJ----MX/BJYFDRInfo.aspx.cs
T

481 lines
19 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GThinking.N_MODEL.Page;
using System.Collections.Generic;
using GThinking.N_MISPRO.Data;
using GThinking.N_MISPRO.Utility;
using GThinking.N_MISPROAS;
using GThinking.N_CONTROL;
namespace GThinking.N_XLXSBJ
{
public partial class BJYFDRInfo : SingleCardBase
{
BJYFDR entity = new BJYFDR();
protected void Page_Load(object sender, EventArgs e)
{
this.UMID = 100860071;
this.UMName = "线缆销售报价单运费";
base.CurMaster = Master;
this.CurEntity = entity;
this.PageHeight = 180;
this.PageWidth = 420;
this.Master.EnableAttachBtn = false;
this.Master.EnableCancelBtn = false;
this.Master.EnableCopyBtn = false;
this.Master.EnableDeleteBtn = false;
this.Master.EnableEditBtn = false;
this.Master.EnableInsertBtn = false;
this.Master.EnablePrintBtn = false;
this.Master.EnableRefreshBtn = false;
this.Master.EnableSaveBtn = false;
Server.ScriptTimeout = 3600;
fupdPost.FileSaveType = gtAsyncFileUpload.DFileSaveType.SaveToPath;
if (AppRuntime.BitType == AppBitType.Bit32)
fupdPost.Filter = "XLS";
else // AppBitType.Bit64
fupdPost.Filter = "XLS,XLSX";
base.InitPage();
Server.ScriptTimeout = 3600;
btnUn.Style["display"] = "none";
}
#region 控件事件
protected void btnQX_Click(object sender, EventArgs e)
{
CloseWindowNoQuery();
}
protected void btnUnDis_Click(object sender, EventArgs e)
{
TDatabase dberp = TContextDatabases.GetDatabase("DBERP");
TSQL sSQL = new TSQL(dberp);
try
{
lblTitle.Text = "正在导入数据,请稍后...";
dberp.BeginTrans();
DataSet aDataExcel = new DataSet();
if (AppRuntime.BitType == AppBitType.Bit32)
{
aDataExcel = XLBJDUtils.ReadFromExcelFile(fupdPost.FilePath, 0, "");
}
else // AppBitType.Bit64
{
ReadWJ(fupdPost.FilePath, ref aDataExcel);
}
ExcelColumnValid(aDataExcel);
ProcessAndImportData(aDataExcel, dberp, sSQL);
dberp.CommitTrans();
ShowMessage("导入成功!");
DialogOperationScript dos = new DialogOperationScript(this);
//dos.ClickOwnerButton(PageParam.GetRTrimString("btnRefreshCID"));
dos.CloseSelf();
dos.Execute();
}
catch (Exception ex)
{
lblTitle.Text = "";
dberp.RollbackTrans();
ShowMessage(ex.Message);
}
finally
{
System.IO.File.Delete(fupdPost.FilePath.Trim());
}
CloseWindowNoQuery();
}
#endregion
#region 自定义函数
private void ProcessAndImportData(DataSet dataSet, TDatabase database, TSQL sql)
{
DataTable dataTable = dataSet.Tables[0];
// 清空现有数据
ClearExistingData(database, sql);
// 解析重量区间列
List<WeightIntervalColumn> weightColumns = ParseWeightIntervalColumns(dataTable);
// 插入重量区间数据
Dictionary<string, int> intervalIdMap = InsertWeightIntervalData(database, sql, weightColumns);
// 插入地区运费数据
InsertRegionFreightData(dataTable, database, sql, intervalIdMap, weightColumns);
}
private void ClearExistingData(TDatabase database, TSQL sql)
{
sql.Clear();
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS") == "6")
sql.Add(" DELETE FROM XLXSBJYFJZQJ where XLXSBJYFJZQJ_YFJSGS='6' ");
else
sql.Add(" DELETE FROM XLXSBJYFJZQJ where XLXSBJYFJZQJ_YFJSGS='运价*运重' ");
database.ExecSQL(sql);
}
private string GetXZQHID(string sPro,string sCity)
{
TDatabase dberp = TContextDatabases.GetDatabase("DBERP");
TSQL sSQL = new TSQL(dberp);
sSQL.Clear();
sSQL.Add(" select XZQH_XZQHID from XZQH where XZQH_PROVINCE like :pPRO and XZQH_CITY=:pCity ");
sSQL.ParamByName("pPRO").Value = sPro + "%";
sSQL.ParamByName("pCity").Value = sCity;
DataSet ds=dberp.OpenDataSet(sSQL);
if (ds.Tables[0].Rows.Count > 0)
{
return ds.Tables[0].Rows[0][0].ToString().Trim();
}
return "";
}
private List<WeightIntervalColumn> ParseWeightIntervalColumns(DataTable dataTable)
{
List<WeightIntervalColumn> weightColumns = new List<WeightIntervalColumn>();
// 从第5列开始解析重量区间列(索引4)
for (int i = 2; i < dataTable.Columns.Count; i++)
{
string columnName = dataTable.Columns[i].ColumnName.Trim();
WeightIntervalColumn column = ParseWeightInterval(columnName);
column.ColumnIndex = i;
weightColumns.Add(column);
}
if (weightColumns.Count == 0)
{
throw new Exception("Excel文件中未找到重量区间列");
}
return weightColumns;
}
private WeightIntervalColumn ParseWeightInterval(string columnName)
{
WeightIntervalColumn column = new WeightIntervalColumn();
column.ColumnName = columnName;
try
{
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS") == "6")
{
string separator = columnName.Contains("-") ? "-" :
(columnName.Contains("~") ? "~" : "至");
string cleanName = columnName.Replace("铜价", "").Replace("铝价", "");
string[] parts = cleanName.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length >= 2)
{
double minValue, maxValue;
if (double.TryParse(parts[0], out minValue) && double.TryParse(parts[1], out maxValue))
{
column.MinValue = minValue;
column.MaxValue = maxValue;
return column;
}
}
}
// 尝试解析各种重量区间格式
else if (columnName.Contains("以下") || columnName.Contains("以内"))
{
// 处理 "X吨以下" 格式
string valueStr = columnName.Replace("吨以下", "").Replace("吨以内", "").Replace("零担报价","");
double maxValue;
if (double.TryParse(valueStr, out maxValue))
{
column.MinValue = 0;
column.MaxValue = maxValue;
return column;
}
}
else if (columnName.Contains("以上"))
{
// 处理 "X吨以上" 格式
string valueStr = columnName.Replace("吨以上", "");
double minValue;
if (double.TryParse(valueStr, out minValue))
{
column.MinValue = minValue;
column.MaxValue = 9999;
return column;
}
}
else if (columnName.Contains("-") || columnName.Contains("~") || columnName.Contains("至"))
{
// 处理 "X-Y吨" 格式
string separator = columnName.Contains("-") ? "-" :
(columnName.Contains("~") ? "~" : "至");
string cleanName = columnName.Substring(0, columnName.IndexOf("吨")).Replace("吨", "").Replace("零担报价", "");
string[] parts = cleanName.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length >= 2)
{
double minValue, maxValue;
if (double.TryParse(parts[0], out minValue) && double.TryParse(parts[1], out maxValue))
{
column.MinValue = minValue;
column.MaxValue = maxValue;
return column;
}
}
}
}
catch
{
// 解析失败时使用默认值
}
// 如果无法解析,使用默认范围
column.MinValue = 0;
column.MaxValue = 9999;
column.IsUnparsed = true;
return column;
}
private Dictionary<string, int> InsertWeightIntervalData(TDatabase database, TSQL sql, List<WeightIntervalColumn> weightColumns)
{
Dictionary<string, int> intervalIdMap = new Dictionary<string, int>();
int intervalId = 1;
foreach (WeightIntervalColumn column in weightColumns)
{
sql.Clear();
sql.Add(@"INSERT INTO XLXSBJYFJZQJ (XLXSBJYFJZQJ_YFJZQH, XLXSBJYFJZQJ_YFJZQJMC, XLXSBJYFJZQJ_YFJZXX, XLXSBJYFJZQJ_YFJZSX, XLXSBJYFJZQJ_YFJSGS,XLXSBJYFJZQJ_WHR,XLXSBJYFJZQJ_WHRID,XLXSBJYFJZQJ_WHSJ)
VALUES (:XLXSBJYFJZQJ_YFJZQH, :XLXSBJYFJZQJ_YFJZQJMC, :XLXSBJYFJZQJ_YFJZXX, :XLXSBJYFJZQJ_YFJZSX, :XLXSBJYFJZQJ_YFJSGS,:XLXSBJYFJZQJ_WHR,:XLXSBJYFJZQJ_WHRID,:XLXSBJYFJZQJ_WHSJ) ");
sql.ParamByName("XLXSBJYFJZQJ_YFJZQH").Value = intervalId;
sql.ParamByName("XLXSBJYFJZQJ_YFJZQJMC").Value = column.ColumnName;
sql.ParamByName("XLXSBJYFJZQJ_YFJZXX").Value = column.MinValue;
sql.ParamByName("XLXSBJYFJZQJ_YFJZSX").Value = column.MaxValue;
sql.ParamByName("XLXSBJYFJZQJ_YFJSGS").Value = "运价*运重";
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS")=="6")
sql.ParamByName("XLXSBJYFJZQJ_YFJSGS").Value = "6";
sql.ParamByName("XLXSBJYFJZQJ_WHR").Value = tSession.UserName;
sql.ParamByName("XLXSBJYFJZQJ_WHRID").Value = tSession.UserId;
sql.ParamByName("XLXSBJYFJZQJ_WHSJ").Value = DateTime.Now;
database.ExecSQL(sql);
intervalIdMap[column.ColumnName] = intervalId;
intervalId++;
}
return intervalIdMap;
}
private void InsertRegionFreightData(DataTable dataTable, TDatabase database, TSQL sql, Dictionary<string, int> intervalIdMap, List<WeightIntervalColumn> weightColumns)
{
// 从第2行开始读取数据(跳过表头)
for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
{
DataRow row = dataTable.Rows[rowIndex];
// 获取基本数据
string province = row[0].ToString().Trim();
string city = row[1].ToString().Trim();
string sXZQHID = GetXZQHID(province, city);
sql.Clear();
sql.Add(" delete from XLXSBJDQYFZB where XLXSBJDQYFZB_XZQHID=:pID ");
sql.ParamByName("pID").Value = sXZQHID;
database.ExecSQL(sql);
sql.Clear();
sql.Add(" delete from XLXSBJDQYFB where XLXSBJDQYFB_XZQHID=:pID ");
sql.ParamByName("pID").Value = sXZQHID;
database.ExecSQL(sql);
sql.Clear();
sql.Add(@"INSERT INTO XLXSBJDQYFZB (XLXSBJDQYFZB_XZQHID, XLXSBJDQYFZB_YFJSFS, XLXSBJDQYFZB_WHR, XLXSBJDQYFZB_WHRID, XLXSBJDQYFZB_WHSJ)
VALUES (:XLXSBJDQYFZB_XZQHID, :XLXSBJDQYFZB_YFJSFS, :XLXSBJDQYFZB_WHR, :XLXSBJDQYFZB_WHRID, :XLXSBJDQYFZB_WHSJ) ");
sql.ParamByName("XLXSBJDQYFZB_XZQHID").Value = sXZQHID;
sql.ParamByName("XLXSBJDQYFZB_YFJSFS").Value = "1";
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS") == "6")
sql.ParamByName("XLXSBJDQYFZB_YFJSFS").Value = "6";
sql.ParamByName("XLXSBJDQYFZB_WHR").Value = tSession.UserName;
sql.ParamByName("XLXSBJDQYFZB_WHRID").Value = tSession.UserId;
sql.ParamByName("XLXSBJDQYFZB_WHSJ").Value = DateTime.Now;
database.ExecSQL(sql);
// 为每个重量区间插入记录
foreach (WeightIntervalColumn weightColumn in weightColumns)
{
if (weightColumn.ColumnIndex < row.Table.Columns.Count &&
row[weightColumn.ColumnIndex] != DBNull.Value &&
!string.IsNullOrEmpty(row[weightColumn.ColumnIndex].ToString()))
{
double YFDJ = 0;
if (double.TryParse(row[weightColumn.ColumnIndex].ToString().Replace("%",""), out YFDJ))
{
int JZQH = intervalIdMap[weightColumn.ColumnName];
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS") == "6")
{
sql.Clear();
sql.Add(@"INSERT INTO XLXSBJDQYFB (XLXSBJDQYFB_XZQHID, XLXSBJDQYFB_YFJZQH, XLXSBJDQYFB_YSFL, XLXSBJDQYFB_WHR, XLXSBJDQYFB_WHRID, XLXSBJDQYFB_WHSJ)
VALUES (:XLXSBJDQYFB_XZQHID, :XLXSBJDQYFB_YFJZQH, :XLXSBJDQYFB_YSFL, :XLXSBJDQYFB_WHR, :XLXSBJDQYFB_WHRID, :XLXSBJDQYFB_WHSJ) ");
sql.ParamByName("XLXSBJDQYFB_XZQHID").Value = sXZQHID;
sql.ParamByName("XLXSBJDQYFB_YFJZQH").Value = JZQH;
sql.ParamByName("XLXSBJDQYFB_YSFL").Value = YFDJ;
sql.ParamByName("XLXSBJDQYFB_WHR").Value = tSession.UserName;
sql.ParamByName("XLXSBJDQYFB_WHRID").Value = tSession.UserId;
sql.ParamByName("XLXSBJDQYFB_WHSJ").Value = DateTime.Now;
}
else
{
sql.Clear();
sql.Add(@"INSERT INTO XLXSBJDQYFB (XLXSBJDQYFB_XZQHID, XLXSBJDQYFB_YFJZQH, XLXSBJDQYFB_YFDJ, XLXSBJDQYFB_WHR, XLXSBJDQYFB_WHRID, XLXSBJDQYFB_WHSJ)
VALUES (:XLXSBJDQYFB_XZQHID, :XLXSBJDQYFB_YFJZQH, :XLXSBJDQYFB_YFDJ, :XLXSBJDQYFB_WHR, :XLXSBJDQYFB_WHRID, :XLXSBJDQYFB_WHSJ) ");
sql.ParamByName("XLXSBJDQYFB_XZQHID").Value = sXZQHID;
sql.ParamByName("XLXSBJDQYFB_YFJZQH").Value = JZQH;
sql.ParamByName("XLXSBJDQYFB_YFDJ").Value = YFDJ;
sql.ParamByName("XLXSBJDQYFB_WHR").Value = tSession.UserName;
sql.ParamByName("XLXSBJDQYFB_WHRID").Value = tSession.UserId;
sql.ParamByName("XLXSBJDQYFB_WHSJ").Value = DateTime.Now;
}
database.ExecSQL(sql);
}
}
}
}
}
private void ExcelColumnValid(DataSet dataSet)
{
DataTable dataTable = dataSet.Tables[0];
if (PageParam.ContainsKey("YFJSFS") && PageParam.GetRTrimString("YFJSFS") == "6")
{
if (dataTable.Rows.Count < 1)
{
throw new Exception("Excel文件行数不足,至少需要1行表头");
}
}
else
{
if (dataTable.Rows.Count < 2)
{
throw new Exception("Excel文件行数不足,至少需要2行表头");
}
DataRow headerRow1 = dataTable.Rows[0];
DataRow headerRow2 = dataTable.Rows[1];
// 处理重量区间列(从索引2开始)
for (int i = 2; i < dataTable.Columns.Count; i++)
{
string header1 = headerRow1[i].ToString().Trim();
string header2 = headerRow2[i].ToString().Trim();
// 合并两行表头内容
string combinedHeader = header1.Trim();
if (!string.IsNullOrEmpty(header2))
{
combinedHeader += header2.Trim();
}
// 更新列名
dataTable.Columns[i].ColumnName = combinedHeader;
}
// 移除表头行,保留数据行
dataTable.Rows.RemoveAt(0);
dataTable.Rows.RemoveAt(0);
}
}
private void ReadWJ(string sPath, ref DataSet aDataExcel)
{
string sMessage = "";
aDataExcel = TExcelData.ReadExcel(sPath.Trim(), "", "", false, ref sMessage);
if (!sMessage.Trim().Equals(""))
{
throw new Exception("文件读取失败!");
}
}
#endregion
}
#region 辅助类
public class WeightIntervalColumn
{
private string columnName=string.Empty;
private int columnIndex=0;
private double minValue=0;
private double maxValue=0;
private bool isUnparsed=false;
public string ColumnName
{
get { return columnName; }
set { columnName = value; }
}
public int ColumnIndex
{
get { return columnIndex; }
set { columnIndex = value; }
}
public double MinValue
{
get { return minValue; }
set { minValue = value; }
}
public double MaxValue
{
get { return maxValue; }
set { maxValue = value; }
}
public bool IsUnparsed
{
get { return isUnparsed; }
set { isUnparsed = value; }
}
}
#endregion
}