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

446 lines
22 KiB

4 years ago
using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Linq;
using CK.SCP.Models;
using CK.SCP.Models.Enums;
using CK.SCP.Models.ScpEntity;
using CK.SCP.Models.UniApiEntity;
using CK.SCP.Utils;
using CK.SCP.Controller;
using System.Text;
using System.Data.Entity.Core;
namespace CK.SCP.GrupUniApi.Controller
{
public static class OdbcApiQadController
{
public static void GetNewCtrlList()
{
UniApiEntities idb = EntitiesFactory.CreateUniApiInstance();
idb.Database.CommandTimeout = 60 * 20;
var tableNameList = EnumHelper.EnumToList<QadTableName>();
// var qadCtrlList = idb.xxqad_ctrl.Where(p => p.xxqad_domain == ScpCache.Config.QAD�� && p.xxqad_scm == "0").ToList();
var qadCtrlList = idb.xxqad_ctrl.Where(p => p.xxqad_scm == "0" ).ToList();
foreach (var qadCtrl in qadCtrlList)
{
if (tableNameList.All(p => p.Name != qadCtrl.xxqad_table)) continue;
try
{
ScpEntities wdb = EntitiesFactory.CreateScpInstance();
QadTableName qadTableName;
Enum.TryParse(qadCtrl.xxqad_table, false, out qadTableName);
switch (qadTableName)
{
case QadTableName.xxqad_pt_mstr: //����
if (GlobalVar.ApiConfig.Qad)
{
Console.WriteLine($"���� QAD �ӿ����ݣ�{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}");
UpdateParts(idb, wdb, qadCtrl.xxqad_seq);
}
else
continue;
break;
case QadTableName.xxqad_vd_mstr: //��Ӧ��
if (GlobalVar.ApiConfig.QadӦ)
{
Console.WriteLine($"���� QAD �ӿ����ݣ�{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}");
UpdateVender(idb, wdb, qadCtrl.xxqad_seq);
}
else
continue;
break;
case QadTableName.xxqad_vp_mstr: //��Ӧ������
if (GlobalVar.ApiConfig.QadӦ)
{
Console.WriteLine($"���� QAD �ӿ����ݣ�{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}");
UpdateVendParts(idb, wdb, qadCtrl.xxqad_seq);
}
else
continue;
break;
case QadTableName.xxqad_pod_det: //�ɹ�����
if (GlobalVar.ApiConfig.Qadɹ)
{
Console.WriteLine($"���� QAD �ӿ����ݣ�{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}");
UpdatePurchaseOrders(idb, wdb, qadCtrl.xxqad_seq);
}
else
continue;
break;
case QadTableName.xxqad_pprice_det: //�ɹ��۸�
Console.WriteLine($"���� QAD �ӿ����ݣ�{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}");
UpdatePrice(idb, wdb, qadCtrl.xxqad_seq);
break;
}
qadCtrl.xxqad_scm = ((int)UniApiState.ɹ).ToString();
EntitiesFactory.SaveDb(wdb);
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)//����ʵ����֤�쳣
{
var sb = new StringBuilder();
foreach (var error in dbEx.EntityValidationErrors.ToList())
{
error.ValidationErrors.ToList().ForEach(i =>
{
sb.AppendFormat("����{0}���ֶΣ�{1}����Ϣ��{2}\r\n", error.Entry.Entity.GetType().Name, i.PropertyName, i.ErrorMessage);
});
}
qadCtrl.xxqad_scm = ((int)UniApiState.ʧ).ToString();
qadCtrl.xxqad_rmks += " SCM:" + sb.ToString();
}
catch (OptimisticConcurrencyException ex)//������ͻ�쳣
{
qadCtrl.xxqad_scm = ((int)UniApiState.ʧ).ToString();
qadCtrl.xxqad_rmks += " SCM:" + ex.Message;
}
catch (Exception ex)
{
qadCtrl.xxqad_scm = ((int)UniApiState.ʧ).ToString();
qadCtrl.xxqad_rmks += " SCM:" + ex.Message;
}
finally
{
EntitiesFactory.SaveDb(idb);
}
}
}
/// <summary>
/// ���²ɹ�����
/// </summary>
/// <param name="idb"></param>
/// <param name="wdb"></param>
/// <param name="seq"></param>
private static void UpdatePurchaseOrders(UniApiEntities idb, ScpEntities wdb, string seq)
{
// var qadPoDetailList = idb.xxqad_pod_det.Where(p => p.xxqad_pod_seq == seq).ToList(); ԭ���� xxqad_pod_modtype 1Ϊ�󶩵�
var qadPoDetailList = idb.xxqad_pod_det.Where(p => p.xxqad_pod_seq == seq && p.xxqad_pod_scmread == "0").ToList();
var wmsPoList = new List<TB_PO>();
var wmsPoDetailList = new List<TB_PO_DETAIL>();
var qadPoNbrList = qadPoDetailList.Select(p => p.xxqad_pod_nbr.ToUpper()).DistinctBy(p => p);
foreach (var qadPoNbr in qadPoNbrList)
{
var qadDataList = qadPoDetailList.Where(p => p.xxqad_pod_nbr == qadPoNbr).ToList();
if (qadDataList.Count == 0)
{
continue;
}
var firstqadData = qadDataList[0];
//var wmsPo = wdb.TF_PO.SingleOrDefault(p => p.ErpBillNum == qadPoNbr);
var wmsPo = wdb.TB_PO.SingleOrDefault(p => p.ErpBillNum == qadPoNbr);
if (wmsPo == null)
{
int temp;
string strPoBillNum = SCP_BILLCODE_CONTROLLER.MakePOCode();
wmsPo = new TB_PO
{
PoBillNum = qadPoNbr,//������
ErpBillNum = qadPoNbr,//ERP������
VendId = firstqadData.xxqad_pod_vend,//��Ӧ�̱���
ModType = Int32.TryParse(firstqadData.xxqad_pod_modtype, out temp) ? temp : (int?)null, //��������(1:�ճ̵�,2:��ɢ����)
Contacter = firstqadData.xxqad_pod_attn,//��ϵ��
Site = firstqadData.xxqad_pod_domain,//�ص�
//Buyer = firstqadData.xxqad_pod_buyer,//�ɹ�Ա
//BuyerPhone = firstqadData.xxqad_pod_buyer_phone,//�ɹ�Ա�绰
State = (int)FormState.,//״̬
Remark = firstqadData.xxqad_pod_site,//˵��
CreateTime = firstqadData.xxqad_pod_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_pod_createdt,//��������
CreateUser = firstqadData.xxqad_pod_createur,//�����û�
//UpdateTime = firstqadData.xxqad_pod_updatedt,//��������
//UpdateUser = firstqadData.xxqad_pod_updateur,//�����û�
IsDeleted = false,
GUID = System.Guid.NewGuid(),
BeginTime = firstqadData.xxqad_pod_createdt,//��������
EndTime = firstqadData.xxqad_pod_due_date//�ջ�����ʱ��
};
wmsPoList.Add(wmsPo);
}
wmsPo.Contacter = firstqadData.xxqad_pod_attn;
wmsPo.Buyer = firstqadData.xxqad_pod_buyer;
wmsPo.BuyerPhone = firstqadData.xxqad_pod_buyer_phone;
wmsPo.UpdateTime = firstqadData.xxqad_pod_updatedt;//��������
wmsPo.UpdateUser = firstqadData.xxqad_pod_updateur;//�����û�
foreach (var qadData in qadDataList)
{
try
{
var lineNum = Convert.ToInt32(qadData.xxqad_pod_line);
//var wmsPoDetail =
// wdb.TF_PO_DETAIL.SingleOrDefault(
// p => p.ErpBillNum == qadPoNbr && p.LineNum == lineNum);
var wmsPoDetail =
wdb.TB_PO_DETAIL.SingleOrDefault(
p => p.PoBillNum == qadPoNbr && p.PoLine == lineNum);
if (wmsPoDetail == null)
{
wmsPoDetail = new TB_PO_DETAIL
{
PoBillNum = qadPoNbr,//������
PoLine = lineNum,//������
IsDeleted = false,
GUID = System.Guid.NewGuid()
};
wmsPoDetailList.Add(wmsPoDetail);
}
wmsPoDetail.PartCode = qadData.xxqad_pod_part.ToUpper();//������-���Ϻ�
wmsPoDetail.PlanQty = qadData.xxqad_pod_qty_ord;//��������-�ɹ���
//wmsPoDetail.ShippedQty = qadData.xxqad_pod_qty_rct;//�ѷ�����-���ջ���
//wmsPoDetail.ReceivedQty = qadData.xxqad_pod_qty_rct;//��������-���ջ���
//wmsPoDetail.RejectQty = qadData.xxqad_pod_qty_rct;//��������-���ջ���
wmsPoDetail.BeginTime = firstqadData.xxqad_pod_createdt;//�ջ���ʼʱ��
wmsPoDetail.EndTime = qadData.xxqad_pod_due_date;//�ջ�����ʱ��
wmsPoDetail.PoUnit = qadData.xxqad_pod_um;//�ɹ���λ
wmsPoDetail.LocUnit = qadData.xxqad_pod_loc_um.ToUpper();//�洢��λ
wmsPoDetail.DockCode = qadData.xxqad_pod_loc;
wmsPoDetail.Price = ScpCache.Config.Ŀ == ProjectName.ģ.ToString()
? 0
: qadData.xxqad_pod_price;
wmsPoDetail.Currency = qadData.xxqad_pod_curr;//����
wmsPoDetail.PackQty = qadData.xxqad_pod_qty_std;//��������
wmsPoDetail.UnConv = qadData.xxqad_pod_um_conv;//ת����
wmsPoDetail.DockCode = qadData.xxqad_pod_loc;
//wmsPoDetail.DockCode = ?;//
wmsPoDetail.State = Convert.ToInt32(qadData.xxqad_pod_status);//״̬
wmsPoDetail.Remark = qadData.xxqad_pod_domain;//��ע
wmsPoDetail.CreateTime = firstqadData.xxqad_pod_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_pod_createdt;//��������
wmsPoDetail.CreateUser = firstqadData.xxqad_pod_createur;//�����û�
wmsPoDetail.UpdateTime = firstqadData.xxqad_pod_updatedt;//��������
wmsPoDetail.UpdateUser = firstqadData.xxqad_pod_updateur;//�����û�
//if (wmsPoDetail.BillQty != 0 && wmsPoDetail.BillQty <= wmsPoDetail.ReceivedQty)
// wmsPoDetail.State = (int)FormState.�ر�;
if (wmsPoDetail.PlanQty != 0 && wmsPoDetail.PlanQty <= wmsPoDetail.ReceivedQty)
wmsPoDetail.State = (int)FormState.ر;
qadData.xxqad_pod_scmread = ((int)UniApiState.ɹ).ToString();
}
catch (Exception ex)
{
qadData.xxqad_pod_scmread = ((int)UniApiState.ʧ).ToString();
qadData.xxqad_pod_rmks += " SCM:" + ex.Message;
}
qadData.xxqad_pod_updateur = ScpCache.Config.SCPû;
qadData.xxqad_pod_updatedt = DateTime.Now;
}
wmsPo.State = qadDataList.All(p => p.xxqad_pod_status == ((int)FormState.ر).ToString())
? (int)FormState.ر
: (int)FormState.;
}
wdb.TB_PO.AddOrUpdate(wmsPoList.ToArray());
wdb.TB_PO_DETAIL.AddOrUpdate(wmsPoDetailList.ToArray());
Console.WriteLine($"���� �ɹ����� ���ݣ�{qadPoDetailList.Count}");
}
/// <summary>
/// ���²ɹ�����
/// </summary>
/// <param name="idb"></param>
/// <param name="wdb"></param>
/// <param name="seq"></param>
private static void UpdatePrice(UniApiEntities idb, ScpEntities scpdb, string seq)
{
var _list = idb.xxqad_pprice_det.Where(p => p.xxqad_pprice_seq == seq && p.xxqad_pprice_scmread == "0").ToList();
var PriceList = new List<TB_PRICE>();
foreach (var itm in _list)
{
var _price= new TB_PRICE
{
VendId = itm.xxqad_pprice_list,
Unit = itm.xxqad_pprice_um,
PartCode = itm.xxqad_pprice_part,
Site = itm.xxqad_pprice_domain,
Remarks = itm.xxqad_pprice_rmks,
StartTime = itm.xxqad_pprice_start,
EndTime = itm.xxqad_pprice_end,
Curr = itm.xxqad_pprice_curr
};
_price.Amt = itm.xxqad_pprice_amt;
PriceList.Add(_price);
}
scpdb.TB_PRICE.AddOrUpdate(PriceList.ToArray());
Console.WriteLine($"���²ɹ��۸����ݣ�{PriceList.Count}");
}
/// <summary>
/// ���¹�Ӧ������
/// </summary>
/// <param name="idb"></param>
/// <param name="wdb"></param>
/// <param name="seq"></param>
private static void UpdateVendParts(UniApiEntities idb, ScpEntities wdb, string seq)
{
var qadDataList = idb.xxqad_vp_mstr.Where(p => p.xxqad_vp_seq == seq ).ToList();
var wmsDataList = new List<TA_VEND_PART>();
foreach (var qadData in qadDataList)
{
try
{
if (string.IsNullOrEmpty(qadData.xxqad_vp_vend_part))
qadData.xxqad_vp_vend_part = qadData.xxqad_vp_part;
var wmsData =
wdb.TA_VEND_PART.SingleOrDefault(
p => p.VendId == qadData.xxqad_vp_addr.ToUpper()
&& p.PartCode == qadData.xxqad_vp_part.ToUpper()
&& p.VendPartCode == qadData.xxqad_vp_vend_part.ToUpper() && p.Site==qadData.xxqad_vp_domain
) ??
new TA_VEND_PART
{
VendId = qadData.xxqad_vp_addr.ToUpper(),//��Ӧ�̱���
PartCode = qadData.xxqad_vp_part.ToUpper(),//��Ӧ���Ϻ�
VendPartCode = qadData.xxqad_vp_vend_part.ToUpper(),//��Ӧ�����Ϻ�
VendPackQty = qadData.xxqad_vp_comment,//��Ӧ�����Ϻ�
//PoUnit = qadData.,//�ɹ���λ
State = 1,//״̬��0��ʧЧ 1:��Ч��
Remark = "",
CreateTime = qadData.xxqad_vp_createdt == null ? DateTime.Now : (DateTime)qadData.xxqad_vp_createdt,//��������
CreateUser = qadData.xxqad_vp_createur,//�����û�
UpdateTime = qadData.xxqad_vp_updatedt,//��������
UpdateUser = qadData.xxqad_vp_updateur,//�����û�
TransportationTime=qadData.xxqad_vp_vend_lead,
IsDeleted = false,
GUID = new Guid()
};
wmsData.Site = string.IsNullOrEmpty(wmsData.Site) ? qadData.xxqad_vp_domain : wmsData.Site;
wmsData.VendPartCode = qadData.xxqad_vp_vend_part?.ToUpper() ?? qadData.xxqad_vp_part.ToUpper();
wmsData.VendPackQty = qadData.xxqad_vp_comment;
wmsData.TransportationTime = qadData.xxqad_vp_vend_lead;
wmsDataList.Add(wmsData);
qadData.xxqad_vp_scmread = ((int)UniApiState.ɹ).ToString();
}
catch (Exception ex)
{
qadData.xxqad_vp_scmread = ((int)UniApiState.ʧ).ToString();
qadData.xxqad_vp_rmks += " SCM:" + ex.Message;
}
qadData.xxqad_vp_updateur = ScpCache.Config.SCPû;
qadData.xxqad_vp_updatedt = DateTime.Now;
}
wdb.TA_VEND_PART.AddOrUpdate(p=>new { p.PartCode,p.VendId, p.Site }, wmsDataList.ToArray());
Console.WriteLine($"���� ��Ӧ������ ���ݣ�{wmsDataList.Count}");
}
/// <summary>
/// ���¹�Ӧ��
/// </summary>
/// <param name="idb"></param>
/// <param name="wdb"></param>
/// <param name="seq"></param>
private static void UpdateVender(UniApiEntities idb, ScpEntities wdb, string seq)
{
var qadDataList = idb.xxqad_vd_mstr.Where(p => p.xxqad_vd_seq == seq ).ToList();
var wmsDataList = new List<TA_VENDER>();
foreach (var qadData in qadDataList)
{
try
{
var wmsData = wdb.TA_VENDER.SingleOrDefault(p => p.VendId == qadData.xxqad_vd_addr.ToUpper() && p.Site==qadData.xxqad_vd_domain) ??
new TA_VENDER { VendId = qadData.xxqad_vd_addr.ToUpper(), VendAbbCode = "0", State = 1 };
wmsData.VendName = string.IsNullOrEmpty(qadData.xxqad_vd_name)?qadData.xxqad_vd_addr:qadData.xxqad_vd_name;
wmsData.VendType = qadData.xxqad_vd_type.ToUpper().ToString();
wmsData.Country = qadData.xxqad_vd_country;
wmsData.City = qadData.xxqad_vd_city;
wmsData.Currency = qadData.xxqad_vd_curr.ToUpper();
wmsData.Address = qadData.xxqad_vd_line1 + qadData.xxqad_vd_line2 + qadData.xxqad_vd_line3;
wmsData.ZipCode = qadData.xxqad_vd_pst_id;
wmsData.Contacter = qadData.xxqad_vd_attn;
wmsData.Phone = qadData.xxqad_vd_phone;
wmsData.Fax = qadData.xxqad_vd_fax;
wmsData.Site = string.IsNullOrEmpty(wmsData.Site)? qadData.xxqad_vd_domain:wmsData.Site;
wmsData.Tax = qadData.xxqad_vd_tax;//˰��
wmsDataList.Add(wmsData);
qadData.xxqad_vd_scmread = ((int)UniApiState.ɹ).ToString();
}
catch (Exception ex)
{
qadData.xxqad_vd_scmread = ((int)UniApiState.ʧ).ToString();
qadData.xxqad_vd_rmks += " SCM:" + ex.Message;
}
qadData.xxqad_vd_updateur = ScpCache.Config.SCPû;
qadData.xxqad_vd_updatedt = DateTime.Now;
}
if (wmsDataList.Count == 0)
{
Console.WriteLine("���� ��Ӧ�� ����:"+ seq+"������");
return;
}
wdb.TA_VENDER.AddOrUpdate(p=>new {p.VendId,p.Site } ,wmsDataList.ToArray());
Console.WriteLine($"���� ��Ӧ�� ���ݣ�{qadDataList.Count}");
}
/// <summary>
/// ��������
/// </summary>
/// <param name="idb"></param>
/// <param name="wdb"></param>
/// <param name="seq"></param>
private static void UpdateParts(UniApiEntities idb, ScpEntities wdb, string seq)
{
var qadDataList = idb.xxqad_pt_mstr.Where(p => p.xxqad_pt_seq == seq ).ToList();
var wmsDataList = new List<TA_PART>();
foreach (var qadData in qadDataList)
{
try
{
var wmsData = wdb.TA_PART.SingleOrDefault(p => p.ErpPartCode == qadData.xxqad_pt_part.ToUpper() && p.Site==qadData.xxqad_pt_domain) ??
new TA_PART
{
PartCode = qadData.xxqad_pt_part.ToUpper(),
ErpPartCode = qadData.xxqad_pt_part.ToUpper(),
};
wmsData.PartDesc1 = qadData.xxqad_pt_desc1;
wmsData.PartDesc2 = qadData.xxqad_pt_desc2;
wmsData.ProjectId = qadData.xxqad_pt_group.ToUpper();
wmsData.Unit = !string.IsNullOrEmpty(qadData.xxqad_pt_um)? qadData.xxqad_pt_um.ToUpper():"EA";
wmsData.PartGroup = qadData.xxqad_pt_dsgn_grp.ToUpper();
wmsData.State = qadData.xxqad_pt_status.ToUpper();
wmsData.Site = qadData.xxqad_pt_domain;
wmsDataList.Add(wmsData);
qadData.xxqad_pt_scmread = ((int)UniApiState.ɹ).ToString();
}
catch (Exception ex)
{
qadData.xxqad_pt_scmread = ((int)UniApiState.ʧ).ToString();
qadData.xxqad_pt_rmks += " SCM:" + ex.Message;
}
qadData.xxqad_pt_updateur = ScpCache.Config.SCPû;
qadData.xxqad_pt_updatedt = DateTime.Now;
}
wdb.TA_PART.AddOrUpdate(p =>new { p.PartCode, p.Site }, wmsDataList.ToArray());
Console.WriteLine($"���� ������Ϣ ���ݣ�{qadDataList.Count}");
}
}
}