|
|
using System.Data;
|
|
|
using System.Collections;
|
|
|
using System.Text;
|
|
|
using Estsh.Core.Models;
|
|
|
using Estsh.Core.Repository.IRepositories;
|
|
|
using Estsh.Core.Services.IServices;
|
|
|
using NPOI.HSSF.UserModel;
|
|
|
using NPOI.SS.UserModel;
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
/***************************************************************************************************
|
|
|
*
|
|
|
* 更新人:sitong.dong
|
|
|
* 描述:采购周计划导入
|
|
|
* 修改时间:2022.06.22
|
|
|
* 修改日志:系统迭代升级
|
|
|
*
|
|
|
**************************************************************************************************/
|
|
|
namespace Estsh.Core.Services
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 采购周计划业务处理类
|
|
|
/// </summary>
|
|
|
public class PurchaseNoteService : BaseService<SysStock>, IPurchaseNoteService
|
|
|
{
|
|
|
|
|
|
#region 类局部变量
|
|
|
private System.Data.DataTable dtWeekSchedule = null;
|
|
|
private System.Data.DataTable dtDaySchedule = null;
|
|
|
private System.Data.DataTable dtWeekDate = null;
|
|
|
|
|
|
private bool isReadWeekDate = false;
|
|
|
private string[] strArrayWeekValue = null;
|
|
|
|
|
|
private const int ISTARTSHEETINDEX = 6; //起始SHEET值(不读取)
|
|
|
private const int IENDSHEETCOUNT = 3; //尾通用SHEET数量(不读取)
|
|
|
private const int ISTARTROWINDEX = 18; //数据起始行值
|
|
|
private const int ISTARTDATEINDEX = 7; //日期起始列值
|
|
|
private const int IENDDATEINDEX = 13; //日期结束列值
|
|
|
|
|
|
private const int IROWINTERVAL = 8; //上、下模板差值
|
|
|
private const int ICOLINTERVAL = 6; //左、右模板差值
|
|
|
private const int IFIRSTLETTER = 65; //起始字母值(‘A’ ASSIC value)
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
private readonly IPurchaseNoteRepository repository;
|
|
|
|
|
|
public PurchaseNoteService(IPurchaseNoteRepository _repository) : base(_repository)
|
|
|
{
|
|
|
repository = _repository;
|
|
|
|
|
|
strArrayWeekValue = new string[7];
|
|
|
strArrayWeekValue[0] = "日";
|
|
|
strArrayWeekValue[1] = "一";
|
|
|
strArrayWeekValue[2] = "二";
|
|
|
strArrayWeekValue[3] = "三";
|
|
|
strArrayWeekValue[4] = "四";
|
|
|
strArrayWeekValue[5] = "五";
|
|
|
strArrayWeekValue[6] = "六";
|
|
|
isReadWeekDate = false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 读取采购订单文件并更新至数据库
|
|
|
/// </summary>
|
|
|
/// <param name="inputStream">文件全路径</param>
|
|
|
/// <param name="userInfo">登录用户信息</param>
|
|
|
public Hashtable ReadExcelFile(Stream inputStream, int userID)
|
|
|
{
|
|
|
|
|
|
HSSFWorkbook hsWorkbook = new HSSFWorkbook(inputStream);
|
|
|
Hashtable result = new Hashtable();
|
|
|
int iSheetCount = hsWorkbook.Workbook.NumSheets;
|
|
|
if (iSheetCount < 9)
|
|
|
{
|
|
|
result.Add("log","所选取周计划数据[Sheet]数量不足,请确认采购单格式!");
|
|
|
result.Add("message", "所选取周计划数据[Sheet]数量不足,请确认采购单格式!\r\n");
|
|
|
result.Add("flag","error");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
if (!isReadWeekDate)
|
|
|
{
|
|
|
string strReadWeekDate = this.ReadWeekDate(hsWorkbook);
|
|
|
if (strReadWeekDate != "")
|
|
|
{
|
|
|
result.Add("log", strReadWeekDate);
|
|
|
result.Add("message", strReadWeekDate);
|
|
|
result.Add("flag", "error");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
isReadWeekDate = true;
|
|
|
|
|
|
//this.ListBoxItemAdd(lstInfo, "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
|
|
|
// + "]:周数及对应日期读取成功!正在读取周计划表头数据,请稍候...");
|
|
|
//this.MessageShow(plInfo, lblInfo, "周数及对应日期读取成功!\r\n正在读取周计划表头数据,请稍候...", 1);
|
|
|
//System.Windows.Forms.Application.DoEvents();
|
|
|
}
|
|
|
|
|
|
string strReadWeekResult = this.ReadWeekSchedule(hsWorkbook, iSheetCount,userID);
|
|
|
if (strReadWeekResult != "")
|
|
|
{
|
|
|
result.Add("log", strReadWeekResult);
|
|
|
result.Add("message", strReadWeekResult);
|
|
|
result.Add("flag", "error");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
string strReadDayResult = this.ReadDaySchedule(hsWorkbook, iSheetCount);
|
|
|
if (strReadDayResult != "")
|
|
|
{
|
|
|
result.Add("log", strReadDayResult);
|
|
|
result.Add("message", strReadDayResult);
|
|
|
result.Add("flag", "error");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
string strResult = this.repository.DataSaveTransact(dtWeekSchedule, dtDaySchedule, userID).Trim();
|
|
|
if (string.IsNullOrEmpty(strResult))
|
|
|
{
|
|
|
result.Add("log", "周计划数据文件更新成功!日程单已转结,请确认...\r\n周计划订单数据文件更新成功!");
|
|
|
result.Add("message", "周计划数据文件更新成功,日程单已转结,请确认!");
|
|
|
result.Add("flag", "success");
|
|
|
return result;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result.Add("log", "周计划数据文件更新失败!请重试...\r\n周计划订单数据文件更新失败!");
|
|
|
result.Add("message", "周计划数据文件更新失败,请重试!");
|
|
|
result.Add("flag", "error");
|
|
|
return result;
|
|
|
//#if DEBUG
|
|
|
//this.MessageShow(plInfo, lblInfo, strResult, 0);
|
|
|
//#endif
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 读取EXCEL周计划文件详细要货数据
|
|
|
/// </summary>
|
|
|
/// <param name="hsWorkbook">EXCEL工作簿对象</param>
|
|
|
/// <param name="iSheetCount">EXCEL工作表数量</param>
|
|
|
/// <returns></returns>
|
|
|
public string ReadDaySchedule(HSSFWorkbook hsWorkbook, int iSheetCount)
|
|
|
{
|
|
|
dtDaySchedule = new System.Data.DataTable();
|
|
|
dtDaySchedule.TableName = "DaySchedule";
|
|
|
DataColumn dcSeNo = new DataColumn("se_no", typeof(string)); //周计划单据号
|
|
|
DataColumn dcChNo = new DataColumn("ch_no", typeof(string)); //采购单
|
|
|
DataColumn dcSeDate = new DataColumn("se_date", typeof(string)); //送货日期
|
|
|
DataColumn dcSeTime = new DataColumn("se_time", typeof(string)); //送货时间
|
|
|
DataColumn dcElNo = new DataColumn("el_no", typeof(string)); //零件号
|
|
|
DataColumn dcBoxQty = new DataColumn("carton_qty", typeof(string)); //送货数量(箱数量)
|
|
|
DataColumn dcSnpQty = new DataColumn("snp_qty", typeof(string)); //标准包装规格
|
|
|
DataColumn dcQty = new DataColumn("qty", typeof(string)); //总数量
|
|
|
DataColumn dcProject = new DataColumn("se_project", typeof(string)); //项目
|
|
|
DataColumn dcChNoSheet = new DataColumn("ch_no_sheet", typeof(string)); //周计划单行采购订单
|
|
|
DataColumn dcSuNo = new DataColumn("su_no", typeof(string)); //供应商代码
|
|
|
DataColumn dcDayOrder = new DataColumn("day_order", typeof(string)); //日程单单据号
|
|
|
DataColumn dcVendorId = new DataColumn("vendor_id", typeof(string)); //供应商信息所属行ID
|
|
|
DataColumn dcPartId = new DataColumn("part_id", typeof(string)); //零件号信息所属行ID
|
|
|
DataColumn dcTypeId = new DataColumn("type_id", typeof(string)); //项目(车型)信息所属行ID
|
|
|
dtDaySchedule.Columns.AddRange(new DataColumn[] { dcSeNo, dcChNo, dcSeDate, dcSeTime, dcElNo
|
|
|
, dcBoxQty, dcSnpQty, dcQty, dcProject, dcChNoSheet, dcSuNo, dcDayOrder, dcVendorId, dcPartId, dcTypeId });
|
|
|
|
|
|
for (int i = ISTARTSHEETINDEX; i < iSheetCount - IENDSHEETCOUNT; i++)
|
|
|
{
|
|
|
//string strTemppp = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX][19].ToString().Trim().ToUpper();
|
|
|
if (dtWeekSchedule.Rows[i - ISTARTSHEETINDEX]["is_print"].ToString().Trim().ToUpper() != "Y")
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
string strSuNo = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX]["su_no"].ToString().Trim().ToUpper();
|
|
|
string strSeNo = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX]["se_no"].ToString().Trim().ToUpper();
|
|
|
string strVendorId = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX]["vendor_id"].ToString().Trim().ToUpper();
|
|
|
|
|
|
HSSFSheet hsSheet = (HSSFSheet)hsWorkbook.GetSheetAt(i);
|
|
|
//string strSupplierCode = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX][1].ToString();
|
|
|
string strChNo = dtWeekSchedule.Rows[0][1].ToString();
|
|
|
|
|
|
for (int j = ISTARTROWINDEX; j < 65535; j++)
|
|
|
{
|
|
|
HSSFCell hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(0);
|
|
|
string strElNo = this.GetCellValue(hsCell).Trim();
|
|
|
if (strElNo == "备注")
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(6);
|
|
|
if (this.GetCellValue(hsCell).Trim() == "")
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
//标准包装获取
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(5);
|
|
|
string strSnp = this.GetCellValue(hsCell);
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(2);
|
|
|
string strProject = this.GetCellValue(hsCell).ToUpper().Replace(" ", "");
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(3);
|
|
|
strChNo = this.GetCellValue(hsCell).ToUpper().Trim();
|
|
|
|
|
|
if (strElNo == "")
|
|
|
{
|
|
|
//同零件多送货时间,寻找第一送货时间点的零件号及标准包装
|
|
|
for (int n = j; n >= ISTARTROWINDEX; n--)
|
|
|
{
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(n).GetCell(0);
|
|
|
string strTempCellValue = this.GetCellValue(hsCell).Trim();
|
|
|
|
|
|
if (strTempCellValue == "")
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
strElNo = strTempCellValue;
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(n).GetCell(5);
|
|
|
strSnp = this.GetCellValue(hsCell);
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(n).GetCell(2);
|
|
|
strProject = this.GetCellValue(hsCell);
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(n).GetCell(3);
|
|
|
strChNo = this.GetCellValue(hsCell);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (strElNo == "")
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,零件号读取错误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
string partId = this.repository.QueryPartId(strElNo);
|
|
|
if (string.IsNullOrEmpty(partId))
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,零件号信息查询错误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
if (!this.IsNumeric(strSnp))
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,零件标准包装读取错误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
int iSnp = Convert.ToInt32(strSnp);
|
|
|
if (iSnp < 1)
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,零件标准包装配置有误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
int snpTemp = this.repository.QueryPartSnp(partId);
|
|
|
if (snpTemp < 1)
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,无此零件配置信息或标准包装配置有误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
if (strSnp != snpTemp.ToString())
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) + "]行,此零件标准包装[" + strSnp + "]与系统配置数据[" +
|
|
|
snpTemp.ToString() + "]不符!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
string itemId = this.repository.QueryItemId(strProject);
|
|
|
if (string.IsNullOrEmpty(itemId))
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) + "]行,此零件所属项目[" + strProject +
|
|
|
"]信息未配置或与系统不符!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
if (!this.repository.ValidatePurNo(strChNo, strElNo))
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) + "]行,此零件所属采购单号[" + strChNo +
|
|
|
"]信息验证失败,请确认QAD采购单数据已同步!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(6);
|
|
|
string strTime = this.GetTimeCellValue(hsCell);
|
|
|
if (strTime == "")
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) +
|
|
|
"]行,送货时间读取错误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
string strDateNow = this.repository.GetApDateTime(0);
|
|
|
if (strDateNow == "")
|
|
|
{
|
|
|
return "服务器日期获取错误!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
for (int k = ISTARTDATEINDEX; k <= IENDDATEINDEX; k++)
|
|
|
{
|
|
|
//判断文件内日期是否早于服务器日期
|
|
|
string strSeDate = dtWeekDate.Rows[k - ISTARTDATEINDEX][1].ToString();
|
|
|
if (strSeDate.CompareTo(strDateNow) < 0)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(j).GetCell(k);
|
|
|
string strSendQty = this.GetCellValue(hsCell);
|
|
|
if (strSendQty == "0" || strSendQty == "")
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (!this.IsNumeric(strSendQty))
|
|
|
{
|
|
|
return "第[" + Convert.ToString(j + 1) + "]行,第[" + Convert.ToString(k + 1) +
|
|
|
"]列,数据格式错误!\r\nSheet Name:[" + hsSheet.SheetName + "]"; ;
|
|
|
}
|
|
|
|
|
|
int iSendQty = Convert.ToInt32(strSendQty);
|
|
|
//int iBoxQty = iSendQty / iSnp;
|
|
|
int iBoxQty = (int)Math.Ceiling(Convert.ToDouble(iSendQty) / iSnp);
|
|
|
|
|
|
DataRow dr = dtDaySchedule.NewRow();
|
|
|
dr["se_no"] = strSeNo;
|
|
|
dr["ch_no_sheet"] = dtWeekSchedule.Rows[i - ISTARTSHEETINDEX]["ch_no"].ToString();
|
|
|
dr["ch_no"] = strChNo;
|
|
|
dr["se_date"] = strSeDate;
|
|
|
dr["se_time"] = strTime;
|
|
|
dr["el_no"] = strElNo;
|
|
|
dr["carton_qty"] = iBoxQty.ToString();
|
|
|
dr["snp_qty"] = strSnp;
|
|
|
dr["qty"] = strSendQty;
|
|
|
dr["se_project"] = strProject;
|
|
|
dr["su_no"] = strSuNo;
|
|
|
dr["day_order"] = "DR" + strSeDate.Replace("/", "");
|
|
|
dr["vendor_id"] = strVendorId;
|
|
|
dr["part_id"] = partId;
|
|
|
dr["type_id"] = itemId;
|
|
|
dtDaySchedule.Rows.Add(dr);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (dtDaySchedule == null || dtDaySchedule.Rows.Count < 1)
|
|
|
{
|
|
|
return "所选择采购周计划订单文件未读取到任何数据,请确认文件格式!";
|
|
|
}
|
|
|
|
|
|
DataView dvDaySchedule = new DataView();
|
|
|
dvDaySchedule = dtDaySchedule.Copy().DefaultView;
|
|
|
dvDaySchedule.Sort = "el_no,se_date,se_time";
|
|
|
dtDaySchedule.Clear();
|
|
|
dtDaySchedule = dvDaySchedule.ToTable();
|
|
|
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取周计划段内详细日期数据
|
|
|
/// </summary>
|
|
|
/// <param name="hsWorkbook">工作簿对象</param>
|
|
|
/// <returns></returns>
|
|
|
public string ReadWeekDate(HSSFWorkbook hsWorkbook)
|
|
|
{
|
|
|
dtWeekDate = new System.Data.DataTable();
|
|
|
dtWeekDate.TableName = "WeekDate";
|
|
|
DataColumn dcWeekNo = new DataColumn("week_no", typeof(string)); //周数
|
|
|
DataColumn dcDayValue = new DataColumn("day_value", typeof(string)); //日期
|
|
|
DataColumn dcWeekValue = new DataColumn("week_value", typeof(string)); //星期值
|
|
|
dtWeekDate.Columns.AddRange(new DataColumn[] { dcWeekNo, dcDayValue, dcWeekValue });
|
|
|
|
|
|
HSSFSheet hsSheet = (HSSFSheet)hsWorkbook.GetSheetAt(ISTARTDATEINDEX - 1);
|
|
|
for (int i = ISTARTDATEINDEX; i <= IENDDATEINDEX; i++)
|
|
|
{
|
|
|
DataRow dr = dtWeekDate.NewRow();
|
|
|
HSSFCell hsCell = (HSSFCell)hsSheet.GetRow(15).GetCell(i);
|
|
|
|
|
|
string strWeekNo = this.GetCellValue(hsCell);
|
|
|
|
|
|
int iWeekNo = 0;
|
|
|
try
|
|
|
{
|
|
|
iWeekNo = Convert.ToInt32(strWeekNo);
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
return "订单数据所属周数读取错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
if (iWeekNo < 10)
|
|
|
{
|
|
|
dr["week_no"] = "0" + strWeekNo;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
dr["week_no"] = strWeekNo;
|
|
|
}
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(16).GetCell(i);
|
|
|
DateTime dtTemp = DateTime.FromOADate(Convert.ToInt32(this.GetCellValue(hsCell)));
|
|
|
//dr[1] = dtTemp.ToShortDateString().Replace("-", "/");
|
|
|
dr["day_value"] = dtTemp.ToString("yyyy/MM/dd").Replace('-', '/');
|
|
|
dr["week_value"] = strArrayWeekValue[(int)dtTemp.DayOfWeek];
|
|
|
|
|
|
if (dr["week_no"].ToString() == "" || dr["day_value"].ToString() == "" || dr["week_value"].ToString() == "")
|
|
|
{
|
|
|
return "订单周数及日期查询错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
}
|
|
|
|
|
|
dtWeekDate.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取EXCEL周计划文件内各供应商表头信息
|
|
|
/// </summary>
|
|
|
/// <param name="hsWorkbook">工作簿对象</param>
|
|
|
/// <param name="iSheetCount">工作表数量</param>
|
|
|
/// <returns></returns>
|
|
|
public string ReadWeekSchedule(HSSFWorkbook hsWorkbook, int iSheetCount,int userID)
|
|
|
{
|
|
|
dtWeekSchedule = new System.Data.DataTable();
|
|
|
dtWeekSchedule.TableName = "WeekSchedule";
|
|
|
DataColumn dcSeNo = new DataColumn("se_no", typeof(string)); //周计划单
|
|
|
DataColumn dcSuNo = new DataColumn("su_no", typeof(string)); //供应商代码
|
|
|
DataColumn dcChNo = new DataColumn("ch_no", typeof(string)); //采购单
|
|
|
DataColumn dcSuContact = new DataColumn("su_contact", typeof(string)); //供应商联系人
|
|
|
DataColumn dcSuTel = new DataColumn("su_tel", typeof(string));
|
|
|
DataColumn dcSuFax = new DataColumn("su_fax", typeof(string));
|
|
|
DataColumn dcSuMtel = new DataColumn("su_mtel", typeof(string));
|
|
|
DataColumn dcSuAddr = new DataColumn("su_addr", typeof(string));
|
|
|
DataColumn dcSuMile = new DataColumn("su_mile", typeof(string));
|
|
|
DataColumn dcSeDate = new DataColumn("se_date", typeof(string));
|
|
|
DataColumn dcSeAddr = new DataColumn("se_addr", typeof(string));
|
|
|
DataColumn dcSeContact = new DataColumn("se_contact", typeof(string));
|
|
|
DataColumn dcSeTel = new DataColumn("se_tel", typeof(string));
|
|
|
DataColumn dcSeMtel = new DataColumn("se_mtel", typeof(string));
|
|
|
DataColumn dcSeFax = new DataColumn("se_fax", typeof(string));
|
|
|
DataColumn dcSeMile = new DataColumn("se_mile", typeof(string));
|
|
|
DataColumn dcWaNo = new DataColumn("wa_no", typeof(string));
|
|
|
DataColumn dcSeWeek = new DataColumn("se_week", typeof(string));
|
|
|
DataColumn dcRtdSure = new DataColumn("rtd_sure", typeof(string));
|
|
|
DataColumn dcIsPrint = new DataColumn("is_print", typeof(string));
|
|
|
DataColumn dcSuPwd = new DataColumn("su_pwd", typeof(string));
|
|
|
DataColumn dcIssId = new DataColumn("iss_id", typeof(string));
|
|
|
DataColumn dcVendorId = new DataColumn("vendor_id", typeof(string));
|
|
|
dtWeekSchedule.Columns.AddRange(new DataColumn[] { dcSeNo, dcSuNo, dcChNo, dcSuContact,
|
|
|
dcSuTel, dcSuFax, dcSuMtel, dcSuAddr, dcSuMile, dcSeDate, dcSeAddr, dcSeContact,
|
|
|
dcSeTel, dcSeMtel, dcSeFax, dcSeMile, dcWaNo, dcSeWeek, dcRtdSure, dcIsPrint ,dcSuPwd ,dcVendorId ,dcIssId });
|
|
|
|
|
|
HSSFSheet hsSheet = new HSSFSheet(hsWorkbook);
|
|
|
for (int i = ISTARTSHEETINDEX; i < iSheetCount - IENDSHEETCOUNT; i++)
|
|
|
{
|
|
|
hsSheet = (HSSFSheet)hsWorkbook.GetSheetAt(i);
|
|
|
string[] strArrayTemp = null;
|
|
|
strArrayTemp = this.GetSupplierInfo(hsSheet,userID);
|
|
|
|
|
|
if (strArrayTemp[0] != "")
|
|
|
{
|
|
|
return strArrayTemp[0];
|
|
|
}
|
|
|
|
|
|
string strSeWeek = dtWeekDate.Rows[0]["week_no"].ToString();
|
|
|
|
|
|
DataRow dr = dtWeekSchedule.NewRow();
|
|
|
dr["se_no"] = "WR" + this.repository.GetServerDateTime("YYYY") + strSeWeek;
|
|
|
for (int j = 1; j <= 16; j++)
|
|
|
{
|
|
|
dr[j] = strArrayTemp[j];
|
|
|
}
|
|
|
dr["se_week"] = strSeWeek;
|
|
|
dr["rtd_sure"] = "N";
|
|
|
dr["is_print"] = strArrayTemp[19];
|
|
|
dr["su_pwd"] = strArrayTemp[20];
|
|
|
dr["vendor_id"] = strArrayTemp[21];
|
|
|
dr["iss_id"] = strArrayTemp[22];
|
|
|
dtWeekSchedule.Rows.Add(dr);
|
|
|
|
|
|
}
|
|
|
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
public string[] GetSupplierInfo(HSSFSheet hsSheet,int userID)
|
|
|
{
|
|
|
string[] strArrayInfo = new string[23];
|
|
|
strArrayInfo[0] = "";
|
|
|
|
|
|
string factoryId = this.repository.GetFactoryId(userID);
|
|
|
if (string.IsNullOrEmpty(factoryId))
|
|
|
{
|
|
|
strArrayInfo[0] = "登录用户所属厂区信息查询错误!";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
|
|
|
HSSFCell hsCell = (HSSFCell)hsSheet.GetRow(5).GetCell(0);
|
|
|
string strSupplierCode = this.SeparateByColon(GetCellValue(hsCell));
|
|
|
if (strSupplierCode == "")
|
|
|
{
|
|
|
strArrayInfo[0] = "供应商代码查询错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
strArrayInfo[1] = strSupplierCode.Trim().ToUpper(); //su_no:供应商代码
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(7).GetCell(0);
|
|
|
string strBuyerNo = this.SeparateByColon(GetCellValue(hsCell)).ToUpper();
|
|
|
if (strBuyerNo == "")
|
|
|
{
|
|
|
strArrayInfo[0] = "采购单号查询错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
strArrayInfo[2] = strBuyerNo; //ch_no:采购单
|
|
|
|
|
|
List<SysVendor> dtTemp = this.repository.QuerySupplierInfo(strSupplierCode);
|
|
|
if (dtTemp != null && dtTemp.Count > 0)
|
|
|
{
|
|
|
strArrayInfo[3] = dtTemp[0].VendorSale.ToString(); //su_contact:供应商联系人
|
|
|
strArrayInfo[4] = dtTemp[0].VendorTel.ToString(); //su_tel:供应商电话
|
|
|
strArrayInfo[5] = dtTemp[0].VendorFax.ToString(); //su_fax:供应商传真
|
|
|
strArrayInfo[6] = dtTemp[0].VendorMtel.ToString(); //su_mtel:供应商移动电话
|
|
|
strArrayInfo[7] = dtTemp[0].VendorAddr.ToString(); //su_addr:供应商联系地址
|
|
|
strArrayInfo[8] = dtTemp[0].VendorMail.ToString(); //su_mile:供应商联系Mail
|
|
|
strArrayInfo[19] = dtTemp[0].IsPrint.ToString().Trim().ToUpper(); //供应商是否要打印打码
|
|
|
strArrayInfo[20] = dtTemp[0].VendorPwd.ToString().Trim().ToUpper();//供应商压缩密码
|
|
|
strArrayInfo[21] = dtTemp[0].VendorId.ToString().Trim(); //供应商信息所属行ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
strArrayInfo[0] = "供应商[" + strSupplierCode +
|
|
|
"]信息查询错误,请确认供应商基本信息已维护!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(5).GetCell(10);
|
|
|
string strSeDate = this.GetCellValue(hsCell);
|
|
|
if (strSeDate == "")
|
|
|
{
|
|
|
strArrayInfo[0] = "下单日期查询错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
strArrayInfo[9] = DateTime.FromOADate(Convert.ToInt32(strSeDate)).ToString("yyyy/MM/dd").Replace("-", "/"); //se_date:送货日期
|
|
|
|
|
|
hsCell = (HSSFCell)hsSheet.GetRow(7).GetCell(6);
|
|
|
string strOrderName = this.SeparateByColon(GetCellValue(hsCell));
|
|
|
if (strOrderName == "")
|
|
|
{
|
|
|
strArrayInfo[0] = "下单员信息查询错误,请确认订单格式!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
List<SysIssuser> dtiss = this.repository.QueryOrderInfo(strOrderName);
|
|
|
if (dtiss != null && dtiss.Count > 0)
|
|
|
{
|
|
|
strArrayInfo[10] = dtiss[0].IssAddr.ToString(); //se_addr:订单员联系地址
|
|
|
strArrayInfo[11] = dtiss[0].IssName.ToString(); //se_contact:订单员姓名
|
|
|
strArrayInfo[12] = dtiss[0].IssTel.ToString(); //se_tel:订单员电话
|
|
|
strArrayInfo[13] = dtiss[0].IssMtel.ToString(); //se_mtel:订单员移动电话
|
|
|
strArrayInfo[14] = dtiss[0].IssFax.ToString(); //se_fax:订单员传真
|
|
|
strArrayInfo[15] = dtiss[0].IssMail.ToString(); //se_mile:订单员联系Mail
|
|
|
strArrayInfo[22] = dtiss[0].IssId.ToString(); //订单员信息所属行ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
strArrayInfo[0] = "订单员[" + strOrderName +
|
|
|
"]信息查询错误,请确认订单员基本信息已维护!\r\nSheet Name:[" + hsSheet.SheetName + "]";
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
|
|
|
strArrayInfo[16] = factoryId; //wa_no:厂别
|
|
|
|
|
|
return strArrayInfo;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// NPOI获取EXCEL工作表中单元格内容
|
|
|
/// </summary>
|
|
|
/// <param name="hsCell">EXCEL单元格对象</param>
|
|
|
/// <returns></returns>
|
|
|
public string GetCellValue(HSSFCell hsCell)
|
|
|
{
|
|
|
if (hsCell == null)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
switch (hsCell.CellType)
|
|
|
{
|
|
|
case CellType.Numeric:
|
|
|
return hsCell.NumericCellValue.ToString();
|
|
|
case CellType.Formula:
|
|
|
return hsCell.NumericCellValue.ToString();
|
|
|
case CellType.String:
|
|
|
return hsCell.StringCellValue;
|
|
|
case CellType.Boolean:
|
|
|
return hsCell.BooleanCellValue.ToString();
|
|
|
default:
|
|
|
return "";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// NPOI获取EXCEL工作表中时间类型单元格内容
|
|
|
/// </summary>
|
|
|
/// <param name="hsCell">EXCEL单元格对象</param>
|
|
|
/// <returns></returns>
|
|
|
public string GetTimeCellValue(HSSFCell hsCell)
|
|
|
{
|
|
|
if (hsCell == null)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
if (hsCell.CellType != CellType.Numeric)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
string strResult = hsCell.DateCellValue.ToString();
|
|
|
try
|
|
|
{
|
|
|
DateTime dt = Convert.ToDateTime(strResult);
|
|
|
strResult = dt.ToString("HH:mm");
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
if (strResult.Length > 1)
|
|
|
{
|
|
|
string strLastChar = strResult.Substring(strResult.Length - 1, 1);
|
|
|
if (strLastChar == ":" || strLastChar == ":")
|
|
|
{
|
|
|
strResult = strResult.Substring(0, strResult.Length - 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return strResult;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// separate the string by colon
|
|
|
/// </summary>
|
|
|
/// <param name="src">source string</param>
|
|
|
/// <returns>return part content as string</returns>
|
|
|
public string SeparateByColon(string src)
|
|
|
{
|
|
|
string split = ":";
|
|
|
string[] strArray = null;
|
|
|
|
|
|
src = src.Replace(":", split);
|
|
|
|
|
|
if (src.IndexOf(split) < 0)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
strArray = src.Split(split.ToCharArray());
|
|
|
if (strArray.Length > 2)
|
|
|
{
|
|
|
string strTemp = "";
|
|
|
for (int i = 1; i < strArray.Length; i++)
|
|
|
{
|
|
|
if (strTemp == "")
|
|
|
{
|
|
|
strTemp += strArray[i];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
strTemp += split + strArray[i];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return strTemp;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return strArray[1];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// separate the string by split string & flag
|
|
|
/// </summary>
|
|
|
/// <param name="src">source string</param>
|
|
|
/// <param name="split">split string</param>
|
|
|
/// <param name="flag">part flag</param>
|
|
|
/// <returns>return part content as string</returns>
|
|
|
public string Separater(string src, string split, int flag)
|
|
|
{
|
|
|
string[] strArray = null;
|
|
|
|
|
|
if (src.IndexOf(split) < 0)
|
|
|
{
|
|
|
if (flag == 0)
|
|
|
{
|
|
|
return src;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
strArray = src.Split(split.ToCharArray());
|
|
|
if (flag == 0)
|
|
|
{
|
|
|
return strArray[0].Trim();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (strArray.Length > 2)
|
|
|
{
|
|
|
string strTemp = "";
|
|
|
for (int i = 1; i < strArray.Length; i++)
|
|
|
{
|
|
|
if (strTemp == "")
|
|
|
{
|
|
|
strTemp += strArray[i];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
strTemp += split + strArray[i];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return strTemp;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return strArray[1];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// verdict the src is number
|
|
|
/// </summary>
|
|
|
/// <param name="src">source string</param>
|
|
|
/// <returns>return a value as bool</returns>
|
|
|
public bool IsNumeric(string src)
|
|
|
{
|
|
|
if (src == "")
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (src.Substring(0, 1) == "-")
|
|
|
{
|
|
|
src = src.Substring(1);
|
|
|
}
|
|
|
|
|
|
Regex regex = new Regex("[0-9]");
|
|
|
for (int i = 0; i < src.Length; i++)
|
|
|
{
|
|
|
if (!regex.IsMatch(src.Substring(i, 1)))
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取日期、时间
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string GetDateTimeFlag()
|
|
|
{
|
|
|
int iStartCount = 30;
|
|
|
int iEndCount = 255;
|
|
|
|
|
|
StringBuilder sbResult = new StringBuilder();
|
|
|
sbResult.Length = 0;
|
|
|
for (int i = 0; i < iStartCount; i++)
|
|
|
{
|
|
|
sbResult.Append("-");
|
|
|
}
|
|
|
|
|
|
sbResult.Append("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]");
|
|
|
|
|
|
for (int i = 0; i < iEndCount; i++)
|
|
|
{
|
|
|
sbResult.Append("-");
|
|
|
}
|
|
|
|
|
|
return sbResult.ToString();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} |