using BBWY.Client.Models;
using BBWY.Common.Models;
using GalaSoft.MvvmLight.Command;
using Microsoft.Win32;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Input;
namespace BBWY.Client.ViewModels
{
public class BillCorrectionViewModel : BaseVM, IDenpendency
{
public GlobalContext GlobalContext { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
///
/// 销售运费快递账单文件列表
///
public ObservableCollection SaleFreightBillFileList { get; set; }
///
/// 销售运费账单列表
///
public List SaleFreightBillList { get; set; }
///
/// 导入快递账单
///
public ICommand ImportSaleFreightBillCommand { get; set; }
public BillCorrectionViewModel()
{
SaleFreightBillFileList = new ObservableCollection();
SaleFreightBillList = new List();
StartDate = DateTime.Now.Date.AddDays((DateTime.Now.Day - 1) * -1).AddMonths(-1);
EndDate = StartDate.AddMonths(1).AddDays(-1);
ImportSaleFreightBillCommand = new RelayCommand(ImportSaleFreightBill);
}
private void ImportSaleFreightBill(string expressName)
{
var ofd = new OpenFileDialog() { Filter = "excel文件|*.xlsx;*.xls" };
if (ofd.ShowDialog() != true)
return;
var fileName = ofd.FileName.Substring(ofd.FileName.LastIndexOf("\\") + 1);
var filePath = ofd.FileName;
if (SaleFreightBillFileList.Contains(fileName))
{
MessageBox.Show("请勿重复导入快递账单", "导入快递账单");
return;
}
IWorkbook xbook = null;
try
{
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
if (filePath.EndsWith(".xls"))
xbook = new HSSFWorkbook(fs);
else if (filePath.EndsWith(".xlsx"))
xbook = new XSSFWorkbook(fs);
}
using (xbook)
{
IList billModelList = null;
if (expressName == "YT")
{
billModelList = LoadYTSaleBillFile(xbook, fileName, 0);
}
else if (expressName == "YZ")
{
billModelList = LoadYZSaleBillFile(xbook, fileName);
}
else if (expressName == "JD")
{
billModelList = LoadJDSaleBillFile(xbook, fileName);
}
if (billModelList != null && billModelList.Count() > 0)
{
SaleFreightBillList.AddRange(billModelList);
SaleFreightBillFileList.Add(fileName);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "导入账单失败提示");
return;
}
}
///
/// 读取圆通运费账单
///
///
///
/// 基础面单价格
///
///
private IList LoadYTSaleBillFile(IWorkbook xbook, string belongFileName, decimal basicSaleFreight)
{
var sheet = xbook.GetSheetAt(0);
var waybillNoCellTitle = sheet.GetRow(0).GetCell(1);
if (waybillNoCellTitle == null || waybillNoCellTitle.StringCellValue != "运单号码")
throw new Exception("验证圆通快递账单失败-未读取到运单号码");
var saleExpressFreightCellTitle = sheet.GetRow(0).GetCell(5);
if (saleExpressFreightCellTitle == null || saleExpressFreightCellTitle.StringCellValue != "补差")
throw new Exception("验证圆通快递账单失败-未读取到补差");
var rowCount = sheet.LastRowNum;
IList list = new List();
for (var i = 1; i < rowCount; i++)
{
var row = sheet.GetRow(i);
if (row == null)
break;
var waybillNoCell = row.GetCell(1);
if (string.IsNullOrEmpty(waybillNoCell.StringCellValue))
break;
var saleExpressFreightCell = row.GetCell(5);
list.Add(new BillModel()
{
Amount = Convert.ToDecimal(saleExpressFreightCell.NumericCellValue) + basicSaleFreight,
BillNo = waybillNoCell.StringCellValue,
BillType = BillCorrectionType.销售运费账单,
BelongFileName = belongFileName
});
}
return list;
}
///
/// 读取邮政运费账单
///
///
///
///
///
private IList LoadYZSaleBillFile(IWorkbook xbook, string belongFileName)
{
var sheet = xbook.GetSheetAt(0);
var waybillNoCellTitle = sheet.GetRow(0).GetCell(2);
if (waybillNoCellTitle == null || waybillNoCellTitle.StringCellValue != "邮件号")
throw new Exception("验证邮政快递账单失败-未读取到邮件号");
var saleExpressFreightCellTitle = sheet.GetRow(0).GetCell(8);
if (saleExpressFreightCellTitle == null || saleExpressFreightCellTitle.StringCellValue != "总邮资")
throw new Exception("验证邮政快递账单失败-未读取到总邮资");
var rowCount = sheet.LastRowNum;
IList list = new List();
for (var i = 1; i < rowCount; i++)
{
var row = sheet.GetRow(i);
if (row == null)
break;
var waybillNoCell = row.GetCell(2);
if (string.IsNullOrEmpty(waybillNoCell.StringCellValue))
break;
var saleExpressFreightCell = row.GetCell(8);
list.Add(new BillModel()
{
Amount = Convert.ToDecimal(saleExpressFreightCell.NumericCellValue),
BillNo = waybillNoCell.StringCellValue,
BillType = BillCorrectionType.销售运费账单,
BelongFileName = belongFileName
});
}
return list;
}
private IList LoadJDSaleBillFile(IWorkbook xbook, string belongFileName)
{
return null;
}
}
}