|
|
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() + "行行项目状态为空,状态只能使用 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<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
|
|
|
}
|
|
|
} |