using Dapper;
using Estsh.Core.Base;
using Estsh.Core.Models;
using Estsh.Core.Repository.IRepositories;
using Estsh.Core.Services.IServices;
using Estsh.Core.Util;
using System.Collections;
using System.Data;
/***************************************************************************************************
*
* 更新人:sitong.dong
* 描述:SAP指令导入模块业务类
* 修改时间:2022.06.22
* 修改日志:系统迭代升级
*
**************************************************************************************************/
namespace Estsh.Core.Services
{
///
/// SAP指令导入模块业务类
///
public class SAPOrderImportService : BaseService, ISAPOrderImportService
{
private readonly ISAPOrderImportRepository repository;
public SAPOrderImportService(ISAPOrderImportRepository _repository) : base(_repository)
{
repository = _repository;
}
private Hashtable result = new Hashtable();
private const int SAPO = 10;
private const int SPORADIC_OUT = 20;
private const int SPORADIC_IN = 30;
private const int NC_DISASSEMBLY_OUT = 40;
private const int NC_DISASSEMBLY_IN = 50;
private const int NC_DISCARD = 60;
private const int NON_JIS_SHIPMENT = 70;
private const int SUPPLIER_RETURN = 80;
private const int NC_IN = 90;
private const int INVENTORY = 100;
private const int INVENTORY_ADJUST = 110;
private const int MONTHLY_PLAN = 120;
private const int ADDITIONAL_SAPO = 130;//追加采购指令
private const int DAYPLAN_SAPO = 140;//日计划采购指令
#region 公共方法
///
/// 读取采购订单文件并更新至数据库
///
/// 文件全路径
/// 登录用户信息
public Hashtable ReadExcelFile(Stream inputStream, int orderType, int userId)
{
DataTable dt;
//采购计划导入--自动生成订单号版本(启用此段代码)
if (orderType == SAPO || orderType == ADDITIONAL_SAPO || orderType == DAYPLAN_SAPO)
{
dt = AsposeExcelTools.ExcelFileToDataTable(inputStream);
}
else if (orderType == MONTHLY_PLAN)
{
dt = AsposeExcelTools.ExcelFileToDataTable(inputStream);
}
else
{
dt = AsposeExcelTools.ExcelFileToDataTable(inputStream, true);
}
//dt = AsposeExcelTools.ExcelFileToDataTable(inputStream, true);
if (dt == null || dt.Rows.Count <= 0)
{
result.Add("message", "Excel数据为空!");
result.Add("flag", "error");
}
else
{
try
{
switch (orderType)
{
case SAPO:
case ADDITIONAL_SAPO:
//采购计划导入--自动生成订单号版本(启用此段代码)
if (CheckSAPOInput(dt, orderType))
{
ImportSAPOData(dt, userId, orderType);
}
//采购计划导入
//ImportSapDspoData(dt);
break;
case MONTHLY_PLAN:
//月计划
if (CheckSAPOInput(dt, orderType))
{
ImportMonthlyPlanData(dt, userId);
}
break;
case DAYPLAN_SAPO:
//日计划
if (CheckDayPlanSAPOInput(dt, orderType))
{
DayPlanImportSAPOData(dt, userId, orderType);
}
break;
case SPORADIC_OUT:
case SPORADIC_IN:
case NC_DISASSEMBLY_OUT:
case NC_DISASSEMBLY_IN:
case NC_DISCARD:
ImportSapMiscoData(dt, orderType);
break;
case NON_JIS_SHIPMENT:
ImportSapDnData(dt);
break;
case SUPPLIER_RETURN:
ImportSapRetoData(dt);
break;
case NC_IN:
ImportSapMovoData(dt);
break;
case INVENTORY:
ImportSapCycoData(dt);
break;
case INVENTORY_ADJUST:
//
break;
default:
//
break;
}
}
catch (Exception e)
{
result.Clear();
result.Add("message", e.Message);
result.Add("flag", "error");
}
}
return result;
}
///
/// 判断字符串是否为日期
///
///
///
public bool IsDate(string date)
{
try
{
DateTime.Parse(date);
return true;
}
catch
{
return false;
}
}
///
/// 判断字符串是否为月数
///
///
///
public bool IsMonth(string date)
{
try
{
if (!(date.Length == 6))
{
return false;
}
date = date.Substring(4, 2);
string[] monthList = { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" };
if (monthList.Contains(date))
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
#endregion
#region 采购计划导入--自动生成订单号版本
///
/// 检查待导入的数据
///
///
///
private bool CheckSAPOInput(DataTable dtCheck, int orderType)
{
string erpWarehouse = dtCheck.Rows[0][1].ToString().Trim();
List erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("收货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
string time = dtCheck.Rows[0][3].ToString();
if (time.Length != 10)
{
result.Add("message", "交货时间格式不正确!");
result.Add("flag", "error");
return false;
}
string date = "";
int sycles = 0;
if (orderType == 10 || orderType == 130)
{
sycles = 7;
}
else if (orderType == 120)
{
sycles = 12;
}
for (int i = 0; i < sycles; i++)
{
date = dtCheck.Rows[1][i + 5].ToString();
if (date == null || date.Equals(""))
{
result.Add("message", string.Format("第2行,第{0}列处交货日期不能为空!", i + 6));
result.Add("flag", "error");
return false;
}
if (orderType == 10 || orderType == 130)
{
if (!IsDate(date))
{
result.Add("message", string.Format("第2行,第{0}列处交货日期不是日期格式!", i + 6));
result.Add("flag", "error");
return false;
}
}
else if (orderType == 120)
{
if (!IsMonth(date))
{
result.Add("message", string.Format("第2行,第{0}列处月数格式不正确!", i + 6));
result.Add("flag", "error");
return false;
}
}
}
string partNo;
string vendor;
List partInfo;
List vendorInfo;
for (int j = 2; j < dtCheck.Rows.Count; j++)
{
partNo = dtCheck.Rows[j][3].ToString();
vendor = dtCheck.Rows[j][1].ToString().Trim();
////第1天
//string date1 = dtCheck.Rows[2][5].ToString().Trim();
////第2天
//string date2 = dtCheck.Rows[2][5].ToString().Trim();
////第3天
//string date3 = dtCheck.Rows[2][5].ToString().Trim();
////第4天
//string date4 = dtCheck.Rows[2][5].ToString().Trim();
////第5天
//string date5 = dtCheck.Rows[2][5].ToString().Trim();
////第6天
//string date6 = dtCheck.Rows[2][5].ToString().Trim();
////第7天
//string date7 = dtCheck.Rows[2][5].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("第{0}行,第{1}列,物料编码{2}不存在,请确认基础数据!", j + 1, 4, partNo));
result.Add("flag", "error");
return false;
}
if (string.IsNullOrEmpty(partInfo[0].DefaultBoxQty.ToString()))
{
result.Add("message", string.Format("第{0}行,物料{1}最小包装未维护,请确认基础数据!", j + 1, partNo));
result.Add("flag", "error");
return false;
}
else
{
if (Convert.ToInt32(partInfo[0].DefaultBoxQty) <= 0)
{
result.Add("message", string.Format("第{0}行,物料{1}最小包装小于等于零,请确认基础数据!", j + 1, partNo));
result.Add("flag", "error");
return false;
}
}
vendorInfo = repository.getVendorInfo(vendor);
if (null == vendorInfo || vendorInfo.Count <= 0)
{
result.Add("message", string.Format("第{0}行,第{1}列,供应商代码{2}不存在,请确认基础数据!", j + 1, 4, vendor));
result.Add("flag", "error");
return false;
}
}
return true;
}
///
/// 检查待日计划导入的数据
///
///
///
private bool CheckDayPlanSAPOInput(DataTable dtCheck, int orderType)
{
string erpWarehouse = dtCheck.Rows[0][1].ToString().Trim();
List erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("收货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
string time = dtCheck.Rows[0][3].ToString();
string date = "";
int sycles = 0;
if (orderType == 140)
{
sycles = 24;
}
for (int i = 0; i < sycles; i++)
{
date = dtCheck.Rows[1][i + 5].ToString();
if (date == null || date.Equals(""))
{
result.Add("message", string.Format("第2行,第{0}列处交货日期不能为空!", i + 6));
result.Add("flag", "error");
return false;
}
}
string partNo;
string vendor;
List partInfo;
List vendorInfo;
for (int j = 2; j < dtCheck.Rows.Count; j++)
{
partNo = dtCheck.Rows[j][3].ToString();
vendor = dtCheck.Rows[j][1].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("第{0}行,第{1}列,物料编码{2}不存在,请确认基础数据!", j + 1, 4, partNo));
result.Add("flag", "error");
return false;
}
if (string.IsNullOrEmpty(partInfo[0].DefaultBoxQty.ToString()))
{
result.Add("message", string.Format("第{0}行,物料{1}最小包装未维护,请确认基础数据!", j + 1, partNo));
result.Add("flag", "error");
return false;
}
else
{
if (Convert.ToInt32(partInfo[0].DefaultBoxQty) <= 0)
{
result.Add("message", string.Format("第{0}行,物料{1}最小包装小于等于零,请确认基础数据!", j + 1, partNo));
result.Add("flag", "error");
return false;
}
}
vendorInfo = repository.getVendorInfo(vendor);
if (null == vendorInfo || vendorInfo.Count <= 0)
{
result.Add("message", string.Format("第{0}行,第{1}列,供应商代码{2}不存在,请确认基础数据!", j + 1, 4, vendor));
result.Add("flag", "error");
return false;
}
}
return true;
}
///
/// 导入采购计划
///
///
///
///
//private int ImportSAPOData(DataTable dtFile,int empId)
//{
// int count = 0;
// bool isNewOrderNo = true;
// try
// {
// string erpWarehouse = dtFile.Rows[0][1].ToString();
// DataTable factoryCodeList = repository.getFactoryCode();
// string factoryCode = factoryCodeList == null || factoryCodeList.Rows.Count <= 0 ? "" : factoryCodeList.Rows[0][0].ToString();
// string time = dtFile.Rows[0][3].ToString();
// DataTable dtCopy = new DataTable();
// dtCopy = dtFile.Copy();
// dtCopy.Rows.RemoveAt(0);
// dtCopy.Rows.RemoveAt(0);
// DataView dv = dtCopy.DefaultView;
// dv.Sort = "column2 asc";
// dtCopy = dv.ToTable();
// string vendor = "";
// string oldVendor = "";
// string partNo = "";
// string modelNo;
// DataTable partDt = new DataTable();
// double qty = 0.0;
// string date = "";
// string orderNo = "";
// int seq = 0;
// string weekNo = "";
// weekNo = repository.GetWeekNo();
// Hashtable insertHt = new Hashtable();
// List insertList = new List();
// List sqlList = new List();
// foreach (DataRow dr1 in dtCopy.Rows)
// {
// vendor = dr1[1].ToString().Trim();
// partNo = dr1[3].ToString().Trim();
// modelNo = dr1[4] == null ? "" : dr1[4].ToString().Trim();
// partDt = repository.getPartInfo(partNo);
// if (oldVendor.Equals("") || !oldVendor.Equals(vendor))
// {
// oldVendor = vendor;
// seq = 0;
// }
// for (int i = 0; i < 7; i++)
// {
// insertHt = new Hashtable();
// if (dr1[i + 5] == null || dr1[i + 5].ToString().Trim().Equals(""))
// {
// qty = 0.0;
// }
// else
// {
// qty = Convert.ToDouble(dr1[i + 5].ToString());
// }
// if (qty > 0)
// {
// if (isNewOrderNo)
// {
// orderNo = repository.GetOrderNo();
// //isNewOrderNo = false;
// }
// isNewOrderNo = true;
// count++;
// seq++;
// date = DateTime.Parse(dtFile.Rows[1][i + 5].ToString()).ToString("yyyyMMdd");
// insertHt.Add("@EBELN", orderNo);
// insertHt.Add("@REVNO", "1");
// insertHt.Add("@EVRTP", seq);
// insertHt.Add("@LIFNR", vendor);
// insertHt.Add("@MATNR", partNo);
// insertHt.Add("@MODEL_NO", modelNo);
// insertHt.Add("@ZDEV_NUM", qty);
// insertHt.Add("@UNIT", partDt.Rows[0]["uom"]);
// insertHt.Add("@ZDATE", date);
// insertHt.Add("@ZCJSJ", time);
// insertHt.Add("@WERKS", factoryCode);
// insertHt.Add("@LGORT", erpWarehouse);
// insertHt.Add("@ZPZPS", "4");
// insertHt.Add("@ZSTAS", "N");
// insertHt.Add("@BSTRF", partDt.Rows[0]["default_box_qty"]);
// insertHt.Add("@RECUSR", empId);
// insertHt.Add("@WEEKNO", weekNo);
// sqlList.Add(repository.InsertSAPOData());
// insertList.Add(insertHt);
// }
// }
// }
// repository.ExecuteSqlTransaction(sqlList, insertList);
// result.Add("message", string.Format("导入成功,共导入{0}条数据!周计划单号为:{1}", count, weekNo));
// result.Add("flag", "OK");
// }
// catch (Exception ex)
// {
// result.Add("message", ex.Message);
// result.Add("flag", "error");
// return 0;
// }
// return 1;
//}
private int ImportSAPOData(DataTable dtFile, int empId, int orderType)
{
int count = 0;
bool isNewOrderNo = true;
try
{
string erpWarehouse = dtFile.Rows[0][1].ToString();
List factoryCodeList = repository.getFactoryCode();
string factoryCode = factoryCodeList == null || factoryCodeList.Count <= 0 ? "" : factoryCodeList[0].FactoryCode.ToString();
string time = dtFile.Rows[0][3].ToString();
DataTable dtCopy = new DataTable();
dtCopy = dtFile.Copy();
dtCopy.Rows.RemoveAt(0);
dtCopy.Rows.RemoveAt(0);
DataView dv = dtCopy.DefaultView;
dv.Sort = "column2 asc";
dtCopy = dv.ToTable();
string vendor = "";
string oldVendor = "";
string partNo = "";
string modelNo;
List partDt = new List();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List insertList = new List();
List sqlList = new List();
//foreach (DataRow dr1 in dtCopy.Rows)
//{
ArrayList al = new ArrayList();
for (int j = 0; j < dtCopy.Rows.Count; j++)
{
string ifRepeat = dtCopy.Rows[j]["column2"].ToString();
if (!al.Contains(ifRepeat))
{
al.Add(ifRepeat);
}
}
for (int z = 0; z < al.Count; z++)
{
DataRow[] drRepeat = null;
insertList = new List();
sqlList = new List();
drRepeat = dtCopy.Select("column2='" + al[z].ToString() + "'");
for (int i = 0; i < 7; i++)
{
if (isNewOrderNo)
{
orderNo = repository.GetOrderNo();
isNewOrderNo = false;
}
for (int x = 0; x < drRepeat.Length; x++)
{
vendor = drRepeat[x]["column2"].ToString().Trim();
partNo = drRepeat[x]["column4"].ToString().Trim();
modelNo = drRepeat[x]["column5"] == null ? "" : drRepeat[x]["column5"].ToString().Trim();
partDt = repository.getPartInfo(partNo);
if (oldVendor.Equals("") || !oldVendor.Equals(vendor))
{
oldVendor = vendor;
seq = 0;
}
insertHt = new DynamicParameters();
if (drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim() == null || drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim().Equals(""))
{
qty = 0.0;
}
else
{
qty = Convert.ToDouble(drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim());
}
if (qty > 0)
{
isNewOrderNo = true;
count++;
seq++;
date = DateTime.Parse(dtFile.Rows[1][i + 5].ToString()).ToString("yyyyMMdd");
if (orderType != 130)
{
List dtDSPO = repository.IfZDATE(date, vendor, time);
if (dtDSPO.Count > 0)
{
string STAFLG = dtDSPO[0].Staflg.ToString();
if (STAFLG != " ")
{
result.Add("message", "订单已发布,不允许修改,请联系供应商!");
result.Add("flag", "error");
return 0;
}
repository.delDSPO(date, vendor);
}
}
insertHt.Add("@EBELN", orderNo);
insertHt.Add("@REVNO", "1");
insertHt.Add("@EVRTP", seq);
insertHt.Add("@LIFNR", vendor);
insertHt.Add("@MATNR", partNo);
//insertHt.Add("@MODEL_NO", modelNo);
insertHt.Add("@ZDEV_NUM", qty);
insertHt.Add("@UNIT", partDt[0].Unit);
insertHt.Add("@ZDATE", date);
insertHt.Add("@ZCJSJ", time);
insertHt.Add("@WERKS", factoryCode);
insertHt.Add("@LGORT", erpWarehouse);
insertHt.Add("@ZPZPS", "4");
insertHt.Add("@ZSTAS", "N");
insertHt.Add("@BSTRF", partDt[0].DefaultBoxQty);
insertHt.Add("@RECUSR", empId);
insertHt.Add("@WEEKNO", weekNo);
sqlList.Add(repository.InsertSAPOData());
insertList.Add(insertHt);
}
}
isNewOrderNo = true;
}
string msg = "";
bool bl = repository.ExecuteSqlTransaction(sqlList, insertList, ref msg);
if (bl == false)
{
result.Add("message", msg);
result.Add("flag", "error");
return 0;
}
}
if (orderType == 130)
{
result.Add("message", string.Format("导入成功,共导入{0}条数据!追加采购单号为:{1}", count, weekNo));
result.Add("flag", "OK");
}
else
{
result.Add("message", string.Format("导入成功,共导入{0}条数据!周计划单号为:{1}", count, weekNo));
result.Add("flag", "OK");
}
}
catch (Exception ex)
{
result.Add("message", ex.Message);
result.Add("flag", "error");
return 0;
}
return 1;
}
#endregion
#region 采购计划导入
private bool ImportSapDspoData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string uom;
string itemStatus;
string partNo;
List partInfo;
string vendor;
List vendorInfo;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
string sendDate;
string sendTime;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["SA_PO编号"] == null ? "" : dtCheck.Rows[j]["SA_PO编号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行项目"] == null ? "" : dtCheck.Rows[j]["行项目"].ToString().Trim();
if (orderNo.Equals("") || Convert.ToDecimal(dtCheck.Rows[j]["数量"].ToString()) == 0)
{
result.Add("message", "第" + j.ToString() + "行编号,行号,数量,不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
itemStatus = dtCheck.Rows[j]["行项目状态"] == null ? "" : dtCheck.Rows[j]["行项目状态"].ToString().Trim().ToUpper();
if ("".Equals(itemStatus))
{
result.Add("message", "第" + j.ToString() + "行行项目状态为空,状态只能使用 N,M, C 三个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
if (!"NMC".Contains(itemStatus))
{
result.Add("message", "行项目状态只能使用 N,M, C 三个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料编码"] == null ? "" : dtCheck.Rows[j]["物料编码"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
vendor = dtCheck.Rows[j]["供应商代码"] == null ? "" : dtCheck.Rows[j]["供应商代码"].ToString();
vendorInfo = repository.getVendorInfo(vendor);
if (null == vendorInfo || vendorInfo.Count <= 0)
{
result.Add("message", string.Format("供应商代码{0}不存在,请确认基础数据!", vendor));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["工厂代码"] == null ? "" : dtCheck.Rows[j]["工厂代码"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["收货库存地"] == null ? "" : dtCheck.Rows[j]["收货库存地"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("收货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
sendDate = dtCheck.Rows[j]["计划交货日期"].ToString();
sendTime = dtCheck.Rows[j]["计划交货时间"].ToString();
if (sendDate.Length != 8)
{
result.Add("message", "交货日期格式不正确!");
result.Add("flag", "error");
return false;
}
try
{
DateTime date = DateTime.ParseExact(sendDate, "yyyyMMdd", null);
}
catch (Exception ex)
{
result.Add("message", string.Format("第{0}行交货日期格式不正确,要货计划导入的日期为{1},请检查!" + ex.Message, j + 1, sendDate));
result.Add("flag", "error");
return false;
}
if (sendTime.Length != 6)
{
result.Add("message", "交货时间格式不正确!");
result.Add("flag", "error");
return false;
}
try
{
DateTime dt = DateTime.ParseExact(sendTime, "HHmmss", null);
}
catch (Exception e)
{
result.Add("message", string.Format("第{0}行交货时间格式不正确,要货计划导入的时间为{1},请检查!" + e.Message, j + 1, sendTime));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["计量单位"].ToString();
if (string.IsNullOrEmpty(uom))
{
result.Add("message", "第" + j.ToString() + "行计量单位为空,请检查数据!");
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}采购单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}采购单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "OK");
return false;
}
//partDefultBox = dtCheck.Rows[j]["最小包装数量"] == null ? "" : dtCheck.Rows[j]["最小包装数量"].ToString();
//if (!partInfo.Rows[0]["default_box_qty"].ToString().Trim().Equals(partDefultBox.Trim()))
//{
// result.Add("message", string.Format("物料编码{0}最小包装数量与标准包装数量不一致,取消导入!", partNo));
// result.Add("flag", "OK");
// return false;
//}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["SA_PO编号"].ToString().Trim() + "-" + dr1["行项目"].ToString().Trim()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复SA_PO编号-行项目:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
List sapDspoInfo = repository.getSapDspoInfo(orderNo, lineNo);
if (sapDspoInfo.Count > 0)
{
if (itemStatus.Equals("N"))
{
result.Add("message", string.Format("SA_PO编号-行项目:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else if (itemStatus.Equals("M") || itemStatus.Equals("C"))
{
//更新指令
SqlStrings.Add(repository.updateSapDspo(dtCheck.Rows[j]["SA_PO编号"].ToString().ToUpper(), dtCheck.Rows[j]["版本"].ToString(),
Convert.ToInt32(dtCheck.Rows[j]["行项目"]), dtCheck.Rows[j]["供应商代码"].ToString(), dtCheck.Rows[j]["物料编码"].ToString().Trim(),
dtCheck.Rows[j]["数量"].ToString(), dtCheck.Rows[j]["计量单位"].ToString(), dtCheck.Rows[j]["特殊采购标识"].ToString(),
dtCheck.Rows[j]["计划交货日期"].ToString(), dtCheck.Rows[j]["计划交货时间"].ToString(), dtCheck.Rows[j]["工厂代码"].ToString(),
dtCheck.Rows[j]["收货库存地"].ToString(), dtCheck.Rows[j]["凭证标识"].ToString(), dtCheck.Rows[j]["行项目状态"].ToString(),
Convert.ToDecimal(dtCheck.Rows[j]["最小包装数量"])));
}
}
else
{
if (!itemStatus.Equals("N"))
{
result.Add("message", string.Format("此为新增数据,编号-行号:{0}状态不正确,不允许导入!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.insertSapDspo(dtCheck.Rows[j]["SA_PO编号"].ToString().ToUpper(), dtCheck.Rows[j]["版本"].ToString(),
Convert.ToInt32(dtCheck.Rows[j]["行项目"]), dtCheck.Rows[j]["供应商代码"].ToString(),
dtCheck.Rows[j]["物料编码"].ToString().Trim(), dtCheck.Rows[j]["数量"].ToString(),
dtCheck.Rows[j]["计量单位"].ToString(), dtCheck.Rows[j]["特殊采购标识"].ToString(),
dtCheck.Rows[j]["计划交货日期"].ToString(), dtCheck.Rows[j]["计划交货时间"].ToString(),
dtCheck.Rows[j]["工厂代码"].ToString(), dtCheck.Rows[j]["收货库存地"].ToString(),
dtCheck.Rows[j]["凭证标识"].ToString(), dtCheck.Rows[j]["行项目状态"].ToString(),
Convert.ToDecimal(dtCheck.Rows[j]["最小包装数量"])));
}
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region 月计划导入
private int ImportMonthlyPlanData(DataTable dtFile, int empId)
{
int count = 0;
bool isNewOrderNo = true;
try
{
string erpWarehouse = dtFile.Rows[0][1].ToString();
List factoryCodeList = repository.getFactoryCode();
string factoryCode = factoryCodeList == null || factoryCodeList.Count <= 0 ? "" : factoryCodeList[0].FactoryCode.ToString();
string time = dtFile.Rows[0][3].ToString();
DataTable dtCopy = new DataTable();
dtCopy = dtFile.Copy();
dtCopy.Rows.RemoveAt(0);
dtCopy.Rows.RemoveAt(0);
DataView dv = dtCopy.DefaultView;
dv.Sort = "column2 asc";
dtCopy = dv.ToTable();
string vendor = "";
string oldVendor = "";
string partNo = "";
string modelNo;
List partDt = new List();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List insertList = new List();
List sqlList = new List();
//foreach (DataRow dr1 in dtCopy.Rows)
//{
ArrayList al = new ArrayList();
for (int j = 0; j < dtCopy.Rows.Count; j++)
{
string ifRepeat = dtCopy.Rows[j]["column2"].ToString();
if (!al.Contains(ifRepeat))
{
al.Add(ifRepeat);
}
}
for (int z = 0; z < al.Count; z++)
{
DataRow[] drRepeat = null;
insertList = new List();
sqlList = new List();
drRepeat = dtCopy.Select("column2='" + al[z].ToString() + "'");
for (int i = 0; i < 12; i++)
{
if (isNewOrderNo)
{
orderNo = repository.GetMonthOrderNo();
isNewOrderNo = false;
}
for (int x = 0; x < drRepeat.Length; x++)
{
vendor = drRepeat[x]["column2"].ToString().Trim();
partNo = drRepeat[x]["column4"].ToString().Trim();
modelNo = drRepeat[x]["column5"] == null ? "" : drRepeat[x]["column5"].ToString().Trim();
partDt = repository.getPartInfo(partNo);
if (oldVendor.Equals("") || !oldVendor.Equals(vendor))
{
oldVendor = vendor;
seq = 0;
}
insertHt = new DynamicParameters();
if (drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim() == null || drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim().Equals(""))
{
qty = 0.0;
}
else
{
qty = Convert.ToDouble(drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim());
}
if (qty > 0)
{
isNewOrderNo = true;
count++;
seq++;
date = dtFile.Rows[1][i + 5].ToString();
List dtDSPO = repository.IfZDATE(date, vendor, time);
if (dtDSPO.Count > 0)
{
string STAFLG = dtDSPO[0].Staflg.ToString();
if (STAFLG != " ")
{
result.Add("message", "订单已发布,不允许修改,请联系供应商!");
result.Add("flag", "error");
return 0;
}
repository.delDSPO(date, vendor);
}
insertHt.Add("@EBELN", orderNo);
insertHt.Add("@REVNO", "1");
insertHt.Add("@EVRTP", seq);
insertHt.Add("@LIFNR", vendor);
insertHt.Add("@MATNR", partNo);
insertHt.Add("@MODEL_NO", modelNo);
insertHt.Add("@ZDEV_NUM", qty);
insertHt.Add("@UNIT", partDt[0].Unit);
insertHt.Add("@ZDATE", date);
insertHt.Add("@ZCJSJ", time);
insertHt.Add("@WERKS", factoryCode);
insertHt.Add("@LGORT", erpWarehouse);
insertHt.Add("@ZPZPS", "4");
insertHt.Add("@ZSTAS", "N");
insertHt.Add("@BSTRF", partDt[0].DefaultBoxQty);
insertHt.Add("@RECUSR", empId);
insertHt.Add("@WEEKNO", weekNo);
sqlList.Add(repository.InsertMonthlyPlanData());
insertList.Add(insertHt);
}
}
isNewOrderNo = true;
}
string msg = "";
bool bl = repository.ExecuteSqlTransaction(sqlList, insertList, ref msg);
if (bl==false)
{
result.Add("message", msg);
result.Add("flag", "error");
return 0;
}
}
result.Add("message", string.Format("导入成功,共导入{0}条数据!月计划单号为:{1}", count, weekNo));
result.Add("flag", "OK");
}
catch (Exception ex)
{
result.Add("message", ex.Message);
result.Add("flag", "error");
return 0;
}
return 1;
}
#endregion
///
/// 日计划
///
///
///
///
///
private int DayPlanImportSAPOData(DataTable dtFile, int empId, int orderType)
{
int count = 0;
bool isNewOrderNo = true;
try
{
string erpWarehouse = dtFile.Rows[0][1].ToString();
List factoryCodeList = repository.getFactoryCode();
string factoryCode = factoryCodeList == null || factoryCodeList.Count <= 0 ? "" : factoryCodeList[0].FactoryCode.ToString();
string time = dtFile.Rows[0][3].ToString();
DataTable dtCopy = new DataTable();
dtCopy = dtFile.Copy();
dtCopy.Rows.RemoveAt(0);
dtCopy.Rows.RemoveAt(0);
DataView dv = dtCopy.DefaultView;
dv.Sort = "column2 asc";
dtCopy = dv.ToTable();
string vendor = "";
string oldVendor = "";
string partNo = "";
string modelNo;
List partDt = new List();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List insertList = new List();
List sqlList = new List();
//foreach (DataRow dr1 in dtCopy.Rows)
//{
ArrayList al = new ArrayList();
for (int j = 0; j < dtCopy.Rows.Count; j++)
{
string ifRepeat = dtCopy.Rows[j]["column2"].ToString();
if (!al.Contains(ifRepeat))
{
al.Add(ifRepeat);
}
}
for (int z = 0; z < al.Count; z++)
{
DataRow[] drRepeat = null;
insertList = new List();
sqlList = new List();
drRepeat = dtCopy.Select("column2='" + al[z].ToString() + "'");
for (int i = 0; i < 24; i++)
{
if (isNewOrderNo)
{
orderNo = repository.GetOrderNo();
isNewOrderNo = false;
}
for (int x = 0; x < drRepeat.Length; x++)
{
vendor = drRepeat[x]["column2"].ToString().Trim();
partNo = drRepeat[x]["column4"].ToString().Trim();
modelNo = drRepeat[x]["column5"] == null ? "" : drRepeat[x]["column5"].ToString().Trim();
partDt = repository.getPartInfo(partNo);
if (oldVendor.Equals("") || !oldVendor.Equals(vendor))
{
oldVendor = vendor;
seq = 0;
}
insertHt = new DynamicParameters();
if (drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim() == null || drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim().Equals(""))
{
qty = 0.0;
}
else
{
qty = Convert.ToDouble(drRepeat[x]["column" + (i + 6).ToString()].ToString().Trim());
}
if (qty > 0)
{
isNewOrderNo = true;
count++;
seq++;
string ReceivingTime = dtFile.Rows[1][i + 5].ToString().Replace(":", "");
if (ReceivingTime.Length == 3)
{
ReceivingTime = "0" + ReceivingTime + "00";
}
else
{
ReceivingTime = ReceivingTime + "00";
}
date = (DateTime.Parse(time).ToString("yyyyMMdd"));
if (orderType != 130)
{
List dtDSPO = repository.IfZDATE(date, vendor, ReceivingTime);
if (dtDSPO.Count > 0)
{
string STAFLG = dtDSPO[0].Staflg.ToString();
if (STAFLG != " ")
{
result.Add("message", "订单已发布,不允许修改,请联系供应商!");
result.Add("flag", "error");
return 0;
}
repository.delDSPO(date, vendor);
}
}
insertHt.Add("@EBELN", orderNo);
insertHt.Add("@REVNO", "1");
insertHt.Add("@EVRTP", seq);
insertHt.Add("@LIFNR", vendor);
insertHt.Add("@MATNR", partNo);
insertHt.Add("@MODEL_NO", modelNo);
insertHt.Add("@ZDEV_NUM", qty);
insertHt.Add("@UNIT", partDt[0].Unit);
insertHt.Add("@ZDATE", date);
insertHt.Add("@ZCJSJ", ReceivingTime);
insertHt.Add("@WERKS", factoryCode);
insertHt.Add("@LGORT", erpWarehouse);
insertHt.Add("@ZPZPS", "4");
insertHt.Add("@ZSTAS", "N");
insertHt.Add("@BSTRF", partDt[0].DefaultBoxQty);
insertHt.Add("@RECUSR", empId);
insertHt.Add("@WEEKNO", weekNo);
sqlList.Add(repository.InsertSAPOData());
insertList.Add(insertHt);
}
}
isNewOrderNo = true;
}
string msg = "";
bool bl = repository.ExecuteSqlTransaction(sqlList, insertList, ref msg);
if (bl == false)
{
result.Add("message", msg);
result.Add("flag", "error");
return 0;
}
}
result.Add("message", string.Format("导入成功,共导入{0}条数据!日计划单号为:{1}", count, weekNo));
result.Add("flag", "OK");
}
catch (Exception ex)
{
result.Add("message", ex.Message);
result.Add("flag", "error");
return 0;
}
return 1;
}
#region 零星领(退)料指令业务
private bool ImportSapMiscoData(DataTable dtCheck, int orderType)
{
int isflag = 0;
string orderNo;
string lineNo;
string orderStatus;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
List sapMiscoInfo;
List SqlStrings = new List();
int j = 0;
foreach (DataRow dr in dtCheck.Rows)
{
j++;
orderNo = dr["编号"] == null ? "" : dr["编号"].ToString().Trim();
lineNo = dr["行号"] == null ? "" : dr["行号"].ToString().Trim();
if (orderNo.Length < 1 || lineNo.Length < 1 || dr["数量"] == null || dr["数量"].ToString().Trim().Length < 1)
{
result.Add("message", "第" + j.ToString() + "行编号,行号,数量,不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
if (Convert.ToDecimal(dr["数量"].ToString()) == 0)
{
continue;
}
orderStatus = dr["状态"] == null ? "" : dr["状态"].ToString().Trim();
if (orderNo.Equals(""))
{
result.Add("message", "第" + j.ToString() + "行状态为空,状态只能使用 1, 2, 3, 4, 5 共5个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
if (!"12345".Contains(orderStatus))
{
result.Add("message", "状态只能使用 1, 2, 3, 4, 5 共5个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dr["物料编码"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dr["计量单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dr["工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dr["发出库存地点(退回库存地点)"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("收货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
if (dr["业务类型"].ToString().Length < 1)
{
result.Add("message", string.Format("业务类型{0}错误,不能为空!", dr["业务类型"].ToString()));
result.Add("flag", "error");
return false;
}
if ((!dr["业务类型"].ToString().Equals("C00") && orderType == SPORADIC_OUT) ||
(!dr["业务类型"].ToString().Equals("C01") && orderType == SPORADIC_IN) ||
(!dr["业务类型"].ToString().Equals("C02") && orderType == NC_DISASSEMBLY_OUT) ||
(!dr["业务类型"].ToString().Equals("C03") && orderType == NC_DISASSEMBLY_IN) ||
(!dr["业务类型"].ToString().Equals("C04") && orderType == NC_DISCARD))
{
result.Add("message", string.Format("业务类型{0}与指令类型不符!", dr["业务类型"].ToString()));
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["编号"].ToString().Trim() + "-" + dr1["行号"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复编号-行项目:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapMiscoInfo = repository.getSapMiscoInfo(orderNo, lineNo);
if (sapMiscoInfo.Count > 0)
{
if (orderStatus.Equals("1"))
{
result.Add("message", string.Format("编号-行号:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//更新指令
SqlStrings.Add(repository.getUpdateSapMisco(dr["编号"].ToString(), dr["行号"].ToString(), dr["工厂"].ToString(),
dr["发出库存地点(退回库存地点)"].ToString(), dr["物料编码"].ToString().Trim(), dr["数量"].ToString(),
dr["计量单位"].ToString(), dr["特殊库存标识"].ToString(), dr["特殊库存描述"].ToString(),
dr["状态"].ToString(), dr["业务类型"].ToString()));
}
}
else
{
if (!orderStatus.Equals("1"))
{
result.Add("message", string.Format("此为新增数据,编号-行号:{0}状态不正确,不允许导入!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapMisco(dr["编号"].ToString(), dr["行号"].ToString(), dr["工厂"].ToString(),
dr["发出库存地点(退回库存地点)"].ToString(), dr["物料编码"].ToString().Trim(), dr["数量"].ToString(),
dr["计量单位"].ToString(), dr["特殊库存标识"].ToString(), dr["特殊库存描述"].ToString(),
dr["状态"].ToString(), dr["业务类型"].ToString()));
}
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region 非JIS发运指令
private bool ImportSapDnData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
string customerCode;
List customerInfo;
string planDate;
List sapDnInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["销售交货单号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行项目"].ToString();
if (string.IsNullOrEmpty(orderNo) || dtCheck.Rows[j]["交货数量"].ToString().Trim().Length < 1)
{
result.Add("message", "销售交货单号或者交货数量不能为空,请确认基础数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料号"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["发货工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("发货工厂{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["发货库存地"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("发货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
customerCode = dtCheck.Rows[j]["客户编码"].ToString().Trim();
customerInfo = repository.getCustomerInfo(customerCode);
if (null == customerInfo || customerInfo.Count <= 0)
{
result.Add("message", string.Format("客户编码{0}不存在,请确认基础数据!", customerCode));
result.Add("flag", "error");
return false;
}
planDate = dtCheck.Rows[j]["计划交货日期"].ToString().Trim();
if (planDate.Length != 8)
{
result.Add("message", "交货日期格式不正确!");
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["销售交货单号"].ToString().Trim() + "-" + dr1["行项目"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复销售交货单号-行项目:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapDnInfo = repository.getSapDnInfo(orderNo, lineNo);
if (sapDnInfo.Count > 0)
{
result.Add("message", string.Format("销售交货单号-行项目:{0}已经存在,无法新增!!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapDn(dtCheck.Rows[j]["销售交货单号"].ToString().Trim(), dtCheck.Rows[j]["行项目"].ToString().Trim(),
dtCheck.Rows[j]["发货工厂"].ToString().Trim(), dtCheck.Rows[j]["发货库存地"].ToString().Trim(),
dtCheck.Rows[j]["计划交货日期"].ToString().Trim(), dtCheck.Rows[j]["客户编码"].ToString().Trim(),
dtCheck.Rows[j]["物料号"].ToString().Trim(), dtCheck.Rows[j]["客户物料号"].ToString().Trim(),
dtCheck.Rows[j]["交货数量"].ToString().Trim(), dtCheck.Rows[j]["单位"].ToString().Trim()));
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region 供应商退货(SMRR/DMR)
private bool ImportSapRetoData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string qty;
string orderStatus;
string orderType;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
string vendor;
List vendorInfo;
List sapRetoInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["编号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行号"].ToString().Trim();
qty = dtCheck.Rows[j]["退货数量"].ToString();
if (string.IsNullOrEmpty(qty) || string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(lineNo))
{
result.Add("message", "第" + j.ToString() + "行退货数量,行号或者编号不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
orderStatus = dtCheck.Rows[j]["状态"].ToString();
if (string.IsNullOrEmpty(orderStatus) || !"123".Contains(orderStatus))
{
result.Add("message", "第" + j.ToString() + "行状态为空或不正确,状态只能使用1,2,3共3个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料编码"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["计量单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["库存地点"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("库存地点{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
vendor = dtCheck.Rows[j]["供应商"].ToString();
vendorInfo = repository.getVendorInfo(vendor);
if (null == vendorInfo || vendorInfo.Count <= 0)
{
result.Add("message", string.Format("供应商{0}不存在,请确认基础数据!", vendor));
result.Add("flag", "error");
return false;
}
orderType = dtCheck.Rows[j]["业务类型"].ToString().Trim();
if (string.IsNullOrEmpty(orderType))
{
result.Add("message", string.Format("业务类型{0}错误,不能为空!", orderType));
result.Add("flag", "error");
return false;
}
if (!orderType.Equals("B00") && !orderType.Equals("B01"))
{
result.Add("message", string.Format("业务类型{0}错误!", orderType));
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["编号"].ToString().Trim() + "-" + dr1["行号"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复编号-行号:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapRetoInfo = repository.getSapRetoInfo(orderNo, lineNo);
if (sapRetoInfo.Count > 0)
{
if (orderStatus.Equals("1"))
{
result.Add("message", string.Format("编号-行号:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//更新指令
SqlStrings.Add(repository.getUpdateSapReto(dtCheck.Rows[j]["业务类型"].ToString().Trim(), dtCheck.Rows[j]["编号"].ToString().Trim(),
dtCheck.Rows[j]["行号"].ToString().Trim(), dtCheck.Rows[j]["供应商"].ToString().Trim(),
dtCheck.Rows[j]["工厂"].ToString().Trim(), dtCheck.Rows[j]["物料编码"].ToString().Trim(),
dtCheck.Rows[j]["库存地点"].ToString().Trim(), dtCheck.Rows[j]["退货数量"].ToString().Trim(),
dtCheck.Rows[j]["计量单位"].ToString().Trim(), dtCheck.Rows[j]["退货原因"].ToString().Trim(),
dtCheck.Rows[j]["SMRR号(或DMR号)"].ToString().Trim(), dtCheck.Rows[j]["状态"].ToString().Trim()));
}
}
else
{
if (!orderStatus.Equals("1"))
{
result.Add("message", string.Format("此为新增数据,编号-行号:{0}状态不正确,不允许导入!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapReto(dtCheck.Rows[j]["业务类型"].ToString().Trim(), dtCheck.Rows[j]["编号"].ToString().Trim(),
dtCheck.Rows[j]["行号"].ToString().Trim(), dtCheck.Rows[j]["供应商"].ToString().Trim(),
dtCheck.Rows[j]["工厂"].ToString().Trim(), dtCheck.Rows[j]["物料编码"].ToString().Trim(),
dtCheck.Rows[j]["库存地点"].ToString().Trim(), dtCheck.Rows[j]["退货数量"].ToString().Trim(),
dtCheck.Rows[j]["计量单位"].ToString().Trim(), dtCheck.Rows[j]["退货原因"].ToString().Trim(),
dtCheck.Rows[j]["SMRR号(或DMR号)"].ToString().Trim(), dtCheck.Rows[j]["状态"].ToString().Trim()));
}
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region NC入库指令
private bool ImportSapMovoData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string qty;
string orderStatus;
string orderType;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
string goErpWarehouse;
List erpWarehouseInfo;
List sapMovoInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["编号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行号"].ToString().Trim();
qty = dtCheck.Rows[j]["数量"].ToString().Trim();
if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(lineNo) || string.IsNullOrEmpty(qty))
{
result.Add("message", "第" + j.ToString() + "行编号,行号,数量,不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
orderStatus = dtCheck.Rows[j]["状态"].ToString().Trim();
if (string.IsNullOrEmpty(orderStatus) || !("1234".Contains(orderStatus)))
{
result.Add("message", "第" + j.ToString() + "行状态为空或不正确,状态只能使用1,2,3,4共4个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料编码"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["计量单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["接收库存地点"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("接收库存地点{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
goErpWarehouse = dtCheck.Rows[j]["发出库存地点"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(goErpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("发出库存地点{0}不存在,请确认基础数据!", goErpWarehouse));
result.Add("flag", "error");
return false;
}
orderType = dtCheck.Rows[j]["业务类型"].ToString().Trim();
if (string.IsNullOrEmpty(orderType))
{
result.Add("message", string.Format("业务类型{0}错误,不能为空!", orderType));
result.Add("flag", "error");
return false;
}
if (!(orderType.Equals("D01") || orderType.Equals("D00")))
{
result.Add("message", string.Format("业务类型{0}错误!", orderType));
result.Add("flag", "error");
return false;
}
//NC入库为空,指令移库为“I”
string ORDTYP = "";
if (orderType == "D00")
{ ORDTYP = "I"; }
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["编号"].ToString().Trim() + "-" + dr1["行号"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复编号-行号:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapMovoInfo = repository.getSapMovoInfo(orderNo, lineNo);
if (sapMovoInfo.Count > 0)
{
//if (orderStatus.Equals("1"))
//{
// result.Add("message", string.Format("编号-行号:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
// result.Add("flag", "error");
// return false;
//}
//else
//{
//更新指令
SqlStrings.Add(repository.getUpdateSapMovo(dtCheck.Rows[j]["编号"].ToString().Trim(), dtCheck.Rows[j]["业务类型"].ToString().Trim(),
dtCheck.Rows[j]["行号"].ToString().Trim(), dtCheck.Rows[j]["工厂"].ToString().Trim(),
dtCheck.Rows[j]["发出库存地点"].ToString().Trim(), dtCheck.Rows[j]["接收库存地点"].ToString().Trim(),
dtCheck.Rows[j]["物料编码"].ToString().Trim(), dtCheck.Rows[j]["旧物料编码(针对物料号切换)"].ToString().Trim(),
dtCheck.Rows[j]["数量"].ToString().Trim(), dtCheck.Rows[j]["计量单位"].ToString().Trim(),
dtCheck.Rows[j]["库存状态"].ToString().Trim(), dtCheck.Rows[j]["特殊库存标识"].ToString().Trim(),
dtCheck.Rows[j]["特殊库存描述"].ToString().Trim(), dtCheck.Rows[j]["状态"].ToString().Trim(),
dtCheck.Rows[j]["不合格单据号"].ToString().Trim(), ORDTYP));
//}
}
else
{
if (!orderStatus.Equals("1"))
{
result.Add("message", string.Format("此为新增数据,编号-行号:{0}状态不正确,不允许导入!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapMovo(dtCheck.Rows[j]["编号"].ToString().Trim(), dtCheck.Rows[j]["业务类型"].ToString().Trim(),
dtCheck.Rows[j]["行号"].ToString(), dtCheck.Rows[j]["工厂"].ToString().Trim(),
dtCheck.Rows[j]["发出库存地点"].ToString().Trim(), dtCheck.Rows[j]["接收库存地点"].ToString().Trim(),
dtCheck.Rows[j]["物料编码"].ToString().Trim(), dtCheck.Rows[j]["旧物料编码(针对物料号切换)"].ToString().Trim(),
dtCheck.Rows[j]["数量"].ToString().Trim(), dtCheck.Rows[j]["计量单位"].ToString().Trim(),
dtCheck.Rows[j]["库存状态"].ToString().Trim(), dtCheck.Rows[j]["特殊库存标识"].ToString().Trim(),
dtCheck.Rows[j]["特殊库存描述"].ToString().Trim(), dtCheck.Rows[j]["状态"].ToString().Trim(),
dtCheck.Rows[j]["不合格单据号"].ToString().Trim(), ORDTYP));
}
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "NC指令导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "NC指令导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region SAP盘点表指令
private bool ImportSapCycoData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
List sapCycoInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["盘点凭证号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行号"].ToString().Trim();
if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(lineNo))
{
result.Add("message", "第" + j.ToString() + "行盘点凭证号,行号不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
if (dtCheck.Rows[j]["特殊库存标识"].ToString().Trim().Length > 1)
{
result.Add("message", "第" + j.ToString() + "特殊库存标识长度不能大于1,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料编码"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["计量单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["库存地点"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("库存地点{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["盘点凭证号"].ToString().Trim() + "-" + dr1["行号"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复盘点凭证号-行号:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapCycoInfo = repository.getSapCycoInfo(orderNo, lineNo);
if (sapCycoInfo.Count > 0)
{
result.Add("message", string.Format("盘点凭证号-行号:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapCyco(dtCheck.Rows[j]["盘点凭证号"].ToString().Trim(), dtCheck.Rows[j]["行号"].ToString().Trim(),
dtCheck.Rows[j]["物料编码"].ToString().Trim(), dtCheck.Rows[j]["计量单位"].ToString().Trim(),
dtCheck.Rows[j]["工厂"].ToString().Trim(), dtCheck.Rows[j]["库存地点"].ToString().Trim(),
dtCheck.Rows[j]["库存状态"].ToString().Trim(), dtCheck.Rows[j]["特殊库存标识"].ToString().Trim(),
dtCheck.Rows[j]["项目号"].ToString().Trim(), dtCheck.Rows[j]["库存账冻结标识"].ToString().Trim(),
dtCheck.Rows[j]["删除标识"].ToString().Trim(), dtCheck.Rows[j]["年度"].ToString().Trim()));
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region SAP盘点调差指令
private bool CheckInput20(DataTable dtCheck, DataTable _dtExits20)
{
int isflag = 0;
string orderNo;
string lineNo;
string checkStockOrderNo;
List checkStockInfo;
string factoryCode;
List factoryInfo;
List sapCycoInfo;
List sapDifoInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["盘点凭证号"].ToString().Trim();
lineNo = dtCheck.Rows[j]["行号"].ToString().Trim();
if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(lineNo))
{
result.Add("message", "第" + j.ToString() + "行盘点凭证号,行号不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
if (dtCheck.Rows[j]["调整"].ToString().Trim().Equals("1"))
{
result.Add("message", "第" + j.ToString() + "调整必须填1,请检查数据!");
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("工厂代码{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
checkStockOrderNo = orderNo + dtCheck.Rows[j]["年度"].ToString().Trim();
checkStockInfo = repository.getCheckStockInfo(checkStockOrderNo);
if (null == checkStockInfo || checkStockInfo.Count <= 0)
{
result.Add("message", string.Format("单据号{0}不存在,或者未完成盘点或者已经关闭,请确认单号是否正确!", orderNo));
result.Add("flag", "error");
return false;
}
sapCycoInfo = repository.getSapCycoInfo(orderNo, lineNo);
if (null == checkStockInfo || checkStockInfo.Count <= 0)
{
result.Add("message", string.Format("单据号{0}和行号{1}不存在,请查看单号,行号是否正确", orderNo, lineNo));
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["盘点凭证号"].ToString().Trim() + "-" + dr1["行号"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复盘点凭证号-行号:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapDifoInfo = repository.getSapDifoInfo(orderNo, lineNo);
if (sapDifoInfo.Count > 0)
{
result.Add("message", string.Format("盘点凭证号-行号:{0}已经存在,无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapDifo(dtCheck.Rows[j]["工厂"].ToString().Trim(), dtCheck.Rows[j]["盘点凭证号"].ToString().Trim(),
dtCheck.Rows[j]["行号"].ToString().Trim(), dtCheck.Rows[j]["调整"].ToString().Trim(), dtCheck.Rows[j]["年度"].ToString().Trim()));
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
#region SAP销售退货收货指令
private bool ImportSapRdnData(DataTable dtCheck)
{
int isflag = 0;
string orderNo;
string lineNo;
string partNo;
List partInfo;
string uom;
string factoryCode;
List factoryInfo;
string erpWarehouse;
List erpWarehouseInfo;
string customerCode;
List customerInfo;
List sapRdnInfo;
List SqlStrings = new List();
for (int j = 0; j < dtCheck.Rows.Count; j++)
{
orderNo = dtCheck.Rows[j]["退货交货单"].ToString().Trim();
lineNo = dtCheck.Rows[j]["Item"].ToString();
if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(lineNo))
{
result.Add("message", "第" + j.ToString() + "行编号,行号,不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
if (dtCheck.Rows[j]["收货数量"] is DBNull || dtCheck.Rows[j]["收货数量"].ToString().Trim().Length < 1)
{
result.Add("message", "第" + j.ToString() + "行物料收货数量不能为空,请检查数据!");
result.Add("flag", "error");
return false;
}
partNo = dtCheck.Rows[j]["物料号"].ToString().Trim();
partInfo = repository.getPartInfo(partNo);
if (null == partInfo || partInfo.Count <= 0)
{
result.Add("message", string.Format("物料编码{0}不存在,请确认基础数据!", partNo));
result.Add("flag", "error");
return false;
}
uom = dtCheck.Rows[j]["物料单位"].ToString().Trim();
if (!partInfo[0].Unit.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom1.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom2.ToString().Trim().Equals(uom) &&
!partInfo[0].Uom3.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位不存在于零件基础数据中,无法导入,请检查!", partNo));
result.Add("flag", "error");
return false;
}
if (!partInfo[0].Unit.ToString().Trim().Equals(uom))
{
result.Add("message", string.Format("物料编码{0}单位与标准单位不一致,取消导入!", partNo));
result.Add("flag", "error");
return false;
}
factoryCode = dtCheck.Rows[j]["收货工厂"].ToString().Trim();
factoryInfo = repository.getFactoryInfo(factoryCode);
if (null == factoryInfo || factoryInfo.Count <= 0)
{
result.Add("message", string.Format("收货工厂{0}不存在,请确认基础数据!", factoryCode));
result.Add("flag", "error");
return false;
}
erpWarehouse = dtCheck.Rows[j]["收货库存地"].ToString().Trim();
erpWarehouseInfo = repository.getErpWarehouseInfo(erpWarehouse);
if (null == erpWarehouseInfo || erpWarehouseInfo.Count <= 0)
{
result.Add("message", string.Format("收货库存地{0}不存在,请确认基础数据!", erpWarehouse));
result.Add("flag", "error");
return false;
}
customerCode = dtCheck.Rows[j]["客户编码"].ToString().Trim();
customerInfo = repository.getCustomerInfo(customerCode);
if (null == customerInfo || customerInfo.Count <= 0)
{
result.Add("message", string.Format("客户编码{0}不存在,请确认基础数据!", customerCode));
result.Add("flag", "error");
return false;
}
if (dtCheck.Rows[j]["收货日期"].ToString().Length != 8)
{
result.Add("message", string.Format("收货日期{0}格式错误,请确认基础数据!", dtCheck.Rows[j]["收货日期"].ToString()));
result.Add("flag", "error");
return false;
}
try
{
int resINT = int.Parse(dtCheck.Rows[j]["收货日期"].ToString());
double CountINT = double.Parse(dtCheck.Rows[j]["收货数量"].ToString());
}
catch
{
result.Add("message", string.Format("收货日期或者收货数量格式错误,请确认基础数据!"));
result.Add("flag", "error");
return false;
}
//循环遍历Excel的编号-行号不能重复
foreach (DataRow dr1 in dtCheck.Rows)
{
if ((orderNo + "-" + lineNo).Equals(dr1["退货交货单"].ToString().Trim() + "-" + dr1["Item"].ToString()))
{
isflag = isflag + 1;
if (isflag > 1)
{
result.Add("message", string.Format("Excel里面有重复退交货单-Item:{0},无法新增!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
}
}
isflag = 0;
sapRdnInfo = repository.getSapRdnInfo(orderNo, lineNo);
if (sapRdnInfo.Count > 0)
{
result.Add("message", string.Format("退货交货单-Item:{0}已经存在,无法新增!!", orderNo + "-" + lineNo));
result.Add("flag", "error");
return false;
}
else
{
//插入指令
SqlStrings.Add(repository.getInsertSapRdn(dtCheck.Rows[j]["退货交货单"].ToString().Trim(), dtCheck.Rows[j]["Item"].ToString().Trim(),
dtCheck.Rows[j]["收货工厂"].ToString(), dtCheck.Rows[j]["收货库存地"].ToString().Trim(),
dtCheck.Rows[j]["收货日期"].ToString().Trim(), dtCheck.Rows[j]["客户编码"].ToString().Trim(),
dtCheck.Rows[j]["物料号"].ToString().Trim(), dtCheck.Rows[j]["收货数量"].ToString().Trim(),
dtCheck.Rows[j]["物料单位"].ToString().Trim()));
}
}
bool res = repository.ExecuteSqlTransaction(SqlStrings);
if (res)
{
result.Add("message", "导入成功!");
result.Add("flag", "OK");
}
else
{
result.Add("message", "导入数据库失败!");
result.Add("flag", "error");
}
return res;
}
#endregion
}
}