481 lines
19 KiB
C#
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,XLXSBJDQYFZB_GCID)
|
|
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,XLXSBJDQYFB_GCID)
|
|
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,XLXSBJDQYFB_GCID)
|
|
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
|
|
|
|
}
|