You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2297 lines
104 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// SAP指令导入模块业务类
/// </summary>
public class SAPOrderImportService : BaseService<BaseEntity>, 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 公共方法
/// <summary>
/// 读取采购订单文件并更新至数据库
/// </summary>
/// <param name="inputStream">文件全路径</param>
/// <param name="userInfo">登录用户信息</param>
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;
}
/// <summary>
/// 判断字符串是否为日期
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public bool IsDate(string date)
{
try
{
DateTime.Parse(date);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 判断字符串是否为月数
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
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 采购计划导入--自动生成订单号版本
/// <summary>
/// 检查待导入的数据
/// </summary>
/// <param name="dtCheck"></param>
/// <returns></returns>
private bool CheckSAPOInput(DataTable dtCheck, int orderType)
{
string erpWarehouse = dtCheck.Rows[0][1].ToString().Trim();
List<SysWarehouse> 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<SysPart> partInfo;
List<SysVendor> 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;
}
/// <summary>
/// 检查待日计划导入的数据
/// </summary>
/// <param name="dtCheck"></param>
/// <returns></returns>
private bool CheckDayPlanSAPOInput(DataTable dtCheck, int orderType)
{
string erpWarehouse = dtCheck.Rows[0][1].ToString().Trim();
List<SysWarehouse> 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<SysPart> partInfo;
List<SysVendor> 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;
}
/// <summary>
/// 导入采购计划
/// </summary>
/// <param name="dtFile"></param>
/// <param name="empId"></param>
/// <returns></returns>
//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<Hashtable> insertList = new List<Hashtable>();
// List<string> sqlList = new List<string>();
// 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<SysFactory> 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<SysPart> partDt = new List<SysPart>();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List<DynamicParameters> insertList = new List<DynamicParameters>();
List<string> sqlList = new List<string>();
//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<DynamicParameters>();
sqlList = new List<string>();
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<SapDspo> 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<SysPart> partInfo;
string vendor;
List<SysVendor> vendorInfo;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
string sendDate;
string sendTime;
List<string> SqlStrings = new List<string>();
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() + "行行项目状态为空,状态只能使用 NM, C 三个字符,请检查数据!");
result.Add("flag", "error");
return false;
}
if (!"NMC".Contains(itemStatus))
{
result.Add("message", "行项目状态只能使用 NM, 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<SapDspo> 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<SysFactory> 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<SysPart> partDt = new List<SysPart>();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List<DynamicParameters> insertList = new List<DynamicParameters>();
List<string> sqlList = new List<string>();
//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<DynamicParameters>();
sqlList = new List<string>();
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<SapDspo> 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
/// <summary>
/// 日计划
/// </summary>
/// <param name="dtFile"></param>
/// <param name="empId"></param>
/// <param name="orderType"></param>
/// <returns></returns>
private int DayPlanImportSAPOData(DataTable dtFile, int empId, int orderType)
{
int count = 0;
bool isNewOrderNo = true;
try
{
string erpWarehouse = dtFile.Rows[0][1].ToString();
List<SysFactory> 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<SysPart> partDt = new List<SysPart>();
double qty = 0.0;
string date = "";
string orderNo = "";
int seq = 0;
string weekNo = "";
weekNo = repository.GetWeekNo();
DynamicParameters insertHt = new DynamicParameters();
List<DynamicParameters> insertList = new List<DynamicParameters>();
List<string> sqlList = new List<string>();
//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<DynamicParameters>();
sqlList = new List<string>();
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<SapDspo> 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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
List<SapMisco> sapMiscoInfo;
List<string> SqlStrings = new List<string>();
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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
string customerCode;
List<SysCustomer> customerInfo;
string planDate;
List<SapDn> sapDnInfo;
List<string> SqlStrings = new List<string>();
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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
string vendor;
List<SysVendor> vendorInfo;
List<SapReto> sapRetoInfo;
List<string> SqlStrings = new List<string>();
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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
string goErpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
List<SapMovo> sapMovoInfo;
List<string> SqlStrings = new List<string>();
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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
List<SapCyco> sapCycoInfo;
List<string> SqlStrings = new List<string>();
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<WmsCheckStock> checkStockInfo;
string factoryCode;
List<SysFactory> factoryInfo;
List<SapCyco> sapCycoInfo;
List<SapDifo> sapDifoInfo;
List<string> SqlStrings = new List<string>();
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<SysPart> partInfo;
string uom;
string factoryCode;
List<SysFactory> factoryInfo;
string erpWarehouse;
List<SysWarehouse> erpWarehouseInfo;
string customerCode;
List<SysCustomer> customerInfo;
List<SapRdn> sapRdnInfo;
List<string> SqlStrings = new List<string>();
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
}
}