This commit is contained in:
PastSaid
2024-08-29 09:42:49 +08:00
parent fa480006a8
commit 5472714e30
66 changed files with 7417 additions and 243 deletions

View File

@@ -1,5 +1,5 @@
using HandleUtils;
using HUIWEI.Lexmark.sftp.SDK.Doamin;
using HUIWEI.Lexmark.sftp.SDK.Domain;
using Kingdee.BOS;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core;
@@ -18,9 +18,11 @@ using Newtonsoft.Json;
using System.Data;
using System.IO;
using System.ComponentModel;
using HUIWEI.Lexmark.sftp.SDK.Domain;
using Kingdee.BOS.WebApi.DataEntities;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.App;
using Kingdee.BOS.Orm;
namespace HUIWEI.Lexmark.sftp.SDK.PO
{
@@ -46,6 +48,7 @@ SELECT t0.FID,t0.FNUMBER,t0.FSALEORGID
,t0.FSFTPUSER,t0.FSFTPCLIENT,t0.FSFTPPASSWORD,t0.FSFTPLINKPATH,t0.FSFTPPORT
,t0.FSFTPPUTPATH,t0.FSFTPGETPATH
,t0.FSFTPBEFORESAVEPATH,t0.FSFTPAFTERSAVEPATH
,t0.FEncoding
,t1.FNUMBER AS 'OrgNumber'
,t2.FNUMBER AS 'CustNumber'
,t3.FNUMBER AS 'DeliveryWay'
@@ -94,11 +97,21 @@ WHERE 1=1
//文件接收地址
var receivePath = row["FSFTPBEFORESAVEPATH"].ToString() + "/RECEIVE/";
var encoding = row["FEncoding"].Long2Int();
//设置上下文组织
ctx.CurrentOrganizationInfo = new OrganizationInfo();
ctx.CurrentOrganizationInfo.ID = row["FSALEORGID"].Long2Int();
if (encoding == 0)
encoding = 65001;
//encoding = 1252;
if (!Directory.Exists(receivePath))
Directory.CreateDirectory(receivePath);
SFTPHelper helper = new SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort);
//%LEXMK_SFTP_PRD%HUIWE_SFTP_PRD%BINARY%
helper.Mget(FSFTPGetPath, receivePath, (List<string> fileNames) =>
{
var diInfos = new DirectoryInfo(receivePath);
@@ -106,12 +119,10 @@ WHERE 1=1
foreach (var fileInfo in fileInfos)
{
var fileName = fileInfo.Name;
var result = false;
var orderTypePath = "";
var moveReceivePath = "";
var poNo = "";
var billNo = "";
@@ -119,7 +130,7 @@ WHERE 1=1
var resMsg = "";
try
{
using (StreamReader sr = new StreamReader(receivePath + fileName, Encoding.GetEncoding(1252)))
using (StreamReader sr = new StreamReader(receivePath + fileName, Encoding.GetEncoding(encoding)))
{
var xml = XmlUtils.LoadSecureXmlDocByReader(sr);
@@ -153,7 +164,11 @@ WHERE 1=1
Logger.Error($"服务器插件:{schedule.Name}", ex.Message, ex);
}
ReceiveLog(ctx, fileName, moveReceivePath, poNo, billNo, billId, orderTypePath, result ? "1" : "-1", resMsg);
var receiveResult = ReceiveLog(ctx, fileName, moveReceivePath, poNo, billNo, billId, orderTypePath, result ? "1" : "-1", resMsg);
if (receiveResult != null && !receiveResult.IsSuccess)
{
Logger.Info($"服务器插件:{schedule.Name},日志记录", JsonUtil.Serialize(receiveResult));
}
}
return true;
@@ -176,36 +191,64 @@ WHERE 1=1
BillNo = "";
BillId = 0;
var sqlL = $@"/*dialect*/
SELECT t0.FID,t0f.FENTRYID AS FINID,t0e.FENTRYID,t0e.FCPOITEMNO,t0.FHeadPO
FROM T_SAL_ORDER t0
INNER JOIN T_SAL_ORDERFIN t0f on t0f.FID = t0.FID
INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID
WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}'
";
// sqlL = $@"/*dialect*/
//SELECT * FROM TMP_SALEORDER_20240628 t0
//WHERE t0.FHeadPO = '{header.PurchaseOrderNumber}'
// var sqlL = $@"/*dialect*/
//SELECT t0.FID,t0f.FENTRYID AS FINID,t0e.FENTRYID,t0e.FCPOITEMNO,t0.FHeadPO
// ,t0.FDOCUMENTSTATUS
//FROM T_SAL_ORDER t0
// INNER JOIN T_SAL_ORDERFIN t0f on t0f.FID = t0.FID
// INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID
//WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}'
//";
var sqlL = $@"/*dialect*/
EXEC PROC_SELECT_SAL_ORDER_BY_LEX '{purchaseOrder.Header.PurchaseOrderNumber}'
";
var dbSet = DBServiceHelper.ExecuteDynamicObject(ctx, sqlL);
string result = string.Empty;
//Logger.Info("AAAAAA", purchaseOrder.Header.OrderType);
if (purchaseOrder.Header.OrderType.Equals("ORDERS"))
{
if (dbSet == null || dbSet.Count == 0)
result = Add(ctx, purchaseOrder, sftpBaseInfo);
}
else if (purchaseOrder.Header.OrderType.Equals("ORDCHG"))
else
{
result = Update(ctx, purchaseOrder, sftpBaseInfo, dbSet);
if (dbSet != null && dbSet.Count > 0)
{
var data = dbSet[0];
var documentStatus = data["FDOCUMENTSTATUS"] == null ? "" : data["FDOCUMENTSTATUS"].ToString();
var doUnAudit = data["DoUnAudit"] == null ? "" : data["DoUnAudit"].ToString();
//如果但是是审核状态先反审核
if (doUnAudit.Equals("Y") && (documentStatus.Equals("C")))
{
//审核\反审核id为10001的物料数据
//获取单据状态转换服务
ISetStatusService setStatusService = ServiceHelper.GetService<ISetStatusService>();
//获取元数据服务
IMetaDataService metaDataService = ServiceHelper.GetService<IMetaDataService>();
//构建id为10001的数据集合
List<KeyValuePair<object, object>> lstKeyValuePairs = new List<KeyValuePair<object, object>>();
KeyValuePair<object, object> keyValuePair = new KeyValuePair<object, object>(data["FID"], "");
lstKeyValuePairs.Add(keyValuePair);
//获取物料元数据
FormMetadata materialMetaData = metaDataService.Load(ctx, "SAL_SaleOrder") as FormMetadata;
//反审核
IOperationResult unAuditResult = setStatusService.SetBillStatus(ctx, materialMetaData.BusinessInfo, lstKeyValuePairs, null, "UnAudit");
}
result = Update(ctx, purchaseOrder, sftpBaseInfo, dbSet);
}
}
if (result.IsNullOrEmpty())
if (!result.Contains("{"))
{
resMsg = result;
return false;
}
var resultData = JsonConvert.DeserializeObject<ResultData>(result);
ResultData resultData = JsonConvert.DeserializeObject<ResultData>(result);
if (resultData != null)
{
@@ -219,16 +262,162 @@ WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}'
BillNo = resReturn.FBillNo;
Logger.Info("EID转换", $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber},销售订单号:{res.Number},类型:{purchaseOrder.Header.OrderType}");
return res.ResponseStatus.IsSuccess;
}
else
{
resMsg = JsonUtil.SerializeWithOutNull(res.ResponseStatus.Errors);
Logger.Info("EID转换", $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber},错误信息:{resMsg}");
}
resMsg = JsonUtil.SerializeWithOutNull(res.ResponseStatus);
return res.ResponseStatus.IsSuccess;
}
return false;
}
/// <summary>
/// app层代码
/// </summary>
/// <param name="ctx"></param>
/// <param name="purchaseOrder"></param>
/// <param name="sftpBaseInfo"></param>
/// <param name="BillNo"></param>
/// <param name="BillId"></param>
/// <param name="resMsg"></param>
/// <returns></returns>
private bool AddOrUpdate(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, ref string BillNo, ref long BillId, ref string resMsg)
{
BillNo = "";
BillId = 0;
resMsg = "";
var header = purchaseOrder.Header;
var lineItem = purchaseOrder.LineItem;
try
{
var sqlL = $@"/*dialect*/
EXEC PROC_SELECT_SAL_ORDER_BY_LEX '{purchaseOrder.Header.PurchaseOrderNumber}'
";
var dbSet = DBServiceHelper.ExecuteDynamicObject(ctx, sqlL);
string result = string.Empty;
//获取元数据服务
IMetaDataService metaDataService = ServiceHelper.GetService<IMetaDataService>();
//获取物料元数据
FormMetadata saleOrderMetaData = metaDataService.Load(ctx, "SAL_SaleOrder") as FormMetadata;
DynamicObject dataObj = null;
var dynaicObjType = saleOrderMetaData.BusinessInfo.GetDynamicObjectType();
if (purchaseOrder.Header.OrderType.Equals("ORDERS"))
{
if (dbSet == null || dbSet.Count == 0)
{
////代码调用的话再Option中传入忽略警告参数
//OperateOption operation = OperateOption.Create(); operation.SetIgnoreWarning(true);
dataObj = new DynamicObject(dynaicObjType);
result = AddSalOrder(ctx, purchaseOrder, sftpBaseInfo, dataObj);
}
else
{
var data = dbSet[0];
resMsg = $"客户订单号:{purchaseOrder.Header.PurchaseOrderNumber}已存在,ERP销售订单号:{data["FBILLNO"]},请重新核对数据!";
return false;
}
}
else
{
if (dbSet != null && dbSet.Count > 0)
{
var data = dbSet[0];
var documentStatus = data["FDOCUMENTSTATUS"] == null ? "" : data["FDOCUMENTSTATUS"].ToString();
var doUnAudit = data["DoUnAudit"] == null ? "" : data["DoUnAudit"].ToString();
BillId = data["FID"].Long2Int();
//如果但是是审核状态先反审核
if (doUnAudit.Equals("Y") && (documentStatus.Equals("C")))
{
//审核\反审核id为10001的物料数据
//获取单据状态转换服务
ISetStatusService setStatusService = ServiceHelper.GetService<ISetStatusService>();
var lstDict = new Dictionary<object, object>
{
{ BillId, "" }
};
//反审核
IOperationResult unAuditResult = setStatusService.SetBillStatus(ctx, saleOrderMetaData.BusinessInfo, lstDict.ToList(), null, "UnAudit");
if (unAuditResult == null || !unAuditResult.IsSuccess)
{
var unAuditResMsg = unAuditResult.OperateResult.ToList();
var r = unAuditResMsg[0];
}
}
//获取加载数据服务
IViewService viewService = ServiceHelper.GetService<IViewService>();
var option = OperateOption.Create();
option.SetThrowExceptionWhenNotFind(false);//内码不存在时返回null
//var saleOrderObj = viewService.LoadSingle(ctx, BillId, dynaicObjType, option);
dataObj = viewService.LoadSingle(ctx, BillId, dynaicObjType, option);
result = UpdateSalOrder(ctx, purchaseOrder, sftpBaseInfo, dataObj);
}
}
}
catch (Exception ex)
{
throw ex;
}
return true;
}
private string AddSalOrder(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, DynamicObject dataObj)
{
try
{
}
catch (Exception ex)
{
}
finally
{
}
return "";
}
private string UpdateSalOrder(Context ctx, PurchaseOrderDoamin purchaseOrder, DynamicObject sftpBaseInfo, DynamicObject dataObj)
{
try
{
}
catch (Exception ex)
{
}
finally
{
}
return "";
}
/// <summary>
/// 更新
/// </summary>
@@ -335,26 +524,7 @@ WHERE t0.FHeadPO = '{purchaseOrder.Header.PurchaseOrderNumber}'
var materials = lineItem.Select(x => x.MaterialNumber).ToList();
var materialSqlL = $@"/*dialect*/
SELECT *
FROM (
SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME,t0_l.FSPECIFICATION,t1.FNUMBER Unit
,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID'
,CONVERT(int,t0ap.FISENABLE) FISENABLE
FROM T_BD_MATERIAL t0
INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID
AND t0_l.FLOCALEID = 2052
INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID
INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID
LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID
WHERE 1=1
AND t0.FUSEORGID = {sftpBaseInfo["FSALEORGID"].Long2Int()}
AND t0_l.FSPECIFICATION IN ('{string.Join("','", materials)}')
) t0
PIVOT
(
SUM(t0.FISENABLE) FOR
t0.FAUXPROPERTYID IN (FF100001,FF100002)
) t1
EXEC CHECK_MATERIAL_BY_LEX {sftpBaseInfo["FSALEORGID"].Long2Int()},'{string.Join(",", materials)}'
";
// materialSqlL = $@"/*dialect*/
@@ -379,6 +549,7 @@ PIVOT
if (dbEntry != null)
entryRow.Add("FENTRYID", dbEntry["FENTRYID"].Long2Int());
entryRow.Add("FLexMaterialNumber", item.MaterialNumber);
//要货日期
entryRow.Add("F_PAEZ_Datetime", requestedDeliveryDate);
//客户订单号
@@ -529,34 +700,11 @@ PIVOT
var materials = lineItem.Select(x => x.MaterialNumber).ToList();
var materialSqlL = $@"/*dialect*/
SELECT *
FROM (
SELECT t0.FMATERIALID,t0.FNUMBER,t0_l.FNAME,t0_l.FSPECIFICATION,t1.FNUMBER Unit
,CONCAT('FF',ISNULL(t0ap.FAUXPROPERTYID,0)) AS 'FAUXPROPERTYID'
,CONVERT(int,t0ap.FISENABLE) FISENABLE
FROM T_BD_MATERIAL t0
INNER JOIN T_BD_MATERIAL_L t0_l on t0_l.FMATERIALID = t0.FMATERIALID
AND t0_l.FLOCALEID = 2052
INNER JOIN T_BD_MATERIALSALE t0s on t0s.FMATERIALID = t0.FMATERIALID
INNER JOIN T_BD_UNIT t1 on t1.FUNITID = t0s.FSALEUNITID
LEFT JOIN t_BD_MaterialAuxPty t0ap on t0.FMATERIALID = t0ap.FMATERIALID
WHERE 1=1
AND t0.FUSEORGID = {sftpBaseInfo["FSALEORGID"].Long2Int()}
AND t0_l.FSPECIFICATION IN ('{string.Join("','", materials)}')
) t0
PIVOT
(
SUM(t0.FISENABLE) FOR
t0.FAUXPROPERTYID IN (FF100001,FF100002)
) t1
EXEC CHECK_MATERIAL_BY_LEX {sftpBaseInfo["FSALEORGID"].Long2Int()},'{string.Join(",", materials)}'
";
// materialSqlL = $@"/*dialect*/
//SELECT * FROM TMP_MATERIAL_20240628 WHERE FSPECIFICATION IN ('{string.Join("','", materials)}')
//";
var datas = DBServiceHelper.ExecuteDynamicObject(ctx, materialSqlL);
if (datas == null || datas.Count == 0)
return "";
return $"对应客户产品:{string.Join(",", materials)},不存在。";
// 通过循环创建单据体行:
foreach (var item in lineItem)
@@ -569,6 +717,9 @@ PIVOT
var materialNumber = item.MaterialNumber;
var material = datas.FirstOrDefault(w => w["FSPECIFICATION"].ToString().Equals(materialNumber));
if (material == null)
return $"对应客户产品:{materialNumber},不存在。";
//要货日期
entryRow.Add("F_PAEZ_Datetime", requestedDeliveryDate);
//客户订单号
@@ -576,6 +727,8 @@ PIVOT
//客户订单行号
entryRow.Add("FCPOItemNo", item.ItemLineNumber);
entryRow.Add("FLexMaterialNumber", item.MaterialNumber);
entryRow.Add("FMaterialId", new JObject { { "FNumber", material["FNUMBER"].ToString() } });
entryRow.Add("FUnitID", new JObject { { "FNumber", material["Unit"].ToString() } });
entryRow.Add("FPriceUnitId", new JObject { { "FNumber", material["Unit"].ToString() } });
@@ -600,10 +753,10 @@ PIVOT
entryRow.Add("FOUTLMTUNIT", "SAL");
}
var dataJson = jsonRoot.ToString();
//Logger.Info("测试EDI转换", jsonRoot.ToString());
Logger.Info("测试EDI转换", jsonRoot.ToString());
var result = Save("SAL_SaleOrder", jsonRoot.ToString(), ctx);
Logger.Info($"服务器插件EDI 返回结果日志记录", result);
return result;
}
@@ -613,7 +766,6 @@ PIVOT
}
}
/// <summary>
/// 时间格式转换
/// </summary>
@@ -668,7 +820,7 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi
return result;
}
private bool ReceiveLog(Context ctx, string FFileName, string FFilePath, string FPO, string FERPBillNo, long FERPBillId, string FFileTypeText, string FIsSuccess, string msg)
private IOperationResult ReceiveLog(Context ctx, string FFileName, string FFilePath, string FPO, string FERPBillNo, long FERPBillId, string FFileTypeText, string FIsSuccess, string msg)
{
//AddSftpOpRecord(FFileName, FFilePath, FPO, FERPBillNo, FERPBillId, FFileTypeText):
@@ -681,6 +833,7 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi
newObj["FReceiveOrSend"] = "1";
newObj["FFileName"] = FFileName;
newObj["FFilePath"] = FFilePath;
newObj["FDate"] = DateTime.Now;
newObj["FPO"] = FPO;
newObj["FERPBillNo"] = FERPBillNo;
newObj["FERPBillId"] = FERPBillId;
@@ -696,7 +849,9 @@ SELECT * FROM VIEW_Lexmark_SFTP_Link_WebApi
//# 例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库
var saveRslt = BusinessDataServiceHelper.Save(ctx, meta.BusinessInfo, ObjList.ToArray(), null, "Save");
return true;
Logger.Info($"服务器插件EDI日志记录信息ReceiveLog", JsonUtil.SerializeWithOutNull(saveRslt));
return saveRslt;
}
}