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

@@ -11,7 +11,6 @@ clr.AddReference("HandleUtils")
clr.AddReference("HUIWEI.Lexmark.sftp.SDK")
from Kingdee.BOS import *
# from Kingdee.BOS.App import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Contracts import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
@@ -36,7 +35,6 @@ def BarItemClick(e):
billObj = this.View.Model.DataObject;
if billObj.CustId_Id != 957286:
return
# raise Exception(JsonUtil.Serialize(billObj))
sqlL = """/*dialect*/
WITH #辅助资料 AS (
@@ -72,7 +70,8 @@ FROM T_CLIENT_SFTP_LINK t0
LEFT JOIN #辅助资料 t9 on t9.FNAME = '包装方式' AND t9.FENTRYID = t0.FMODESOFPACKING
LEFT JOIN #辅助资料 t10 on t10.FNAME = '包装方式' AND t10.FENTRYID = t0.FMODESOFPACKING1
WHERE 1=1
AND t0.FNUMBER = 'SFTP202407071'
--AND t0.FNUMBER = 'SFTP202407071' --测试
AND t0.FNUMBER = 'SFTP202407311'
AND t0.FDOCUMENTSTATUS = 'C'
AND t0.FFORBIDSTATUS = 'A'
""";
@@ -91,11 +90,16 @@ WHERE 1=1
FSFTPLinkPath = row["FSFTPLINKPATH"];
# //端口号
FSFTPPort = int(row["FSFTPPORT"]);
# //推送地址/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKORDERACK
FSFTPPutPath = row["FSFTPPUTPATH"] + "/LEXMKORDERACK";
# FSFTPPutPath = str(row["FSFTPPUTPATH"]);
# FSFTPPutPath = FSFTPPutPath + '/LEXMKORDERACK/'
# 测试地址
# FSFTPPutPath = '/HUIWE_SFTP_TST/LEXMK_SFTP_TST/LEXMKORDERACK/'
# 正式地址
FSFTPPutPath = '/HUIWE_SFTP_PRD/LEXMK_SFTP_PRD/LEXMKORDERACK/'
# //存放地址
sendPath = row["FSFTPBEFORESAVEPATH"]+ "/SEND/POACK/";
sendPath = row["FSFTPBEFORESAVEPATH"] + "/SEND/POACK/";
helper = SFTPHelper(FSFTPLinkPath, FSFTPUser, FSFTPPassword, FSFTPPort)
@@ -112,15 +116,20 @@ WHERE 1=1
POAckHeader.EndUserOrderNumber = billObj["BillNo"]
POAckHeader.PurchaseOrderDate = (str(billObj["Date"])[0:10]).replace("-","")
if POAckHeader.PurchaseOrderNumber == None or POAckHeader.PurchaseOrderNumber.strip() == "":
raise Exception("回复交期失败PO#:不能为空!")
POAckLineItem = List[PurchaseOrderAckLineItem]()
saleOrderEntry = billObj.SaleOrderEntry
message = "";
tempNum = 0
for saleOrder in saleOrderEntry:
# 已回复交期
IsReplyDelDate = saleOrder["FIsReplyDeliveryDate"]
if IsReplyDelDate == 1:
tempNum = tempNum + 1;
continue;
POAckItem = PurchaseOrderAckLineItem()
@@ -128,26 +137,47 @@ WHERE 1=1
if requestDate != None:
if message == "":
POAckItem.DeliveryDate = str(DateTimeFormatUtils.ToString(requestDate,"yyyyMMdd"))
POAckItem.ItemLineNumber = saleOrder["FCPOItemNo"]
poItemNo = saleOrder["FCPOItemNo"]
if poItemNo == None or poItemNo == "":
message += "{0}行,产品编码:{1},客户序列号不存在!",format(saleOrder["Seq"] ,POAckItem.MaterialNumber)
# poItemNo = str(saleOrder["Seq"]).rjust(4,'0').ljust(5,'0')
continue;
POAckItem.ItemLineNumber = poItemNo
POAckItem.ItemQuantity = saleOrder["Qty"]
POAckItem.ItemUOM = "EA"
materialId = saleOrder["MaterialId"]
specification = materialId["Specification"]
for speci in specification:
if speci.Key == 2052:
POAckItem.MaterialNumber = speci.Value
break;
materialNumber= saleOrder["FLexMaterialNumber"]
# if materialNumber == None or materialNumber == "":
# message += "产品编码:{0},客户产品编码无效!/r/n".format(saleOrder["MaterialId"]["Number"])
# break;
# POAckItem.MaterialNumber = materialNumber
if materialNumber != None or materialNumber != "":
POAckItem.MaterialNumber = materialNumber
else:
materialId = saleOrder["MaterialId"]
specification = materialId["Specification"]
for speci in specification:
if speci.Key == 2052:
POAckItem.MaterialNumber = speci.Value
break;
POAckLineItem.Add(POAckItem)
else:
message += "物料编码:{0},回复交期未填写!/r/n".format(saleOrder["MaterialId"]["Number"])
message += "产品编码:{0},回复交期未填写!/r/n".format(saleOrder["MaterialId"]["Number"])
if tempNum == saleOrderEntry.Count:
raise Exception("交期均已回复!");
if message != "":
raise Exception(message)
if POAckLineItem.Count == 0:
return;
raise Exception("无提交数据");
purchaseOrderAck.Header = POAckHeader
purchaseOrderAck.LineItem = POAckLineItem
@@ -164,28 +194,30 @@ WHERE 1=1
xmldoc.Save(sendPath + fileName);
# 推送对应文件到SFTP
helper.Put(sendPath + fileName, FSFTPPutPath);
helper.Put(sendPath + fileName, FSFTPPutPath + fileName);
# updSql = """
# UPDATE t0e SET t0e.FIsReplyDeliveryDate = '1'
# FROM T_SAL_ORDER t0
# INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID
# WHERE t0.FID = {0}
# AND t0e.FIsReplyDeliveryDate != '1'
# """.format(billObj.Id)
# raise Exception(FSFTPPutPath)
# num = DBServiceHelper.Execute(this.Context, updSql)
updSql = """/*dialect*/
UPDATE t0e SET t0e.FIsReplyDeliveryDate = '1'
FROM T_SAL_ORDER t0
INNER JOIN T_SAL_ORDERENTRY t0e on t0e.FID = t0.FID
WHERE t0.FID = {0}
AND t0e.FIsReplyDeliveryDate != '1'
""".format(billObj.Id)
num = DBServiceHelper.Execute(this.Context, updSql)
AddSftpOpRecord(fileName,sendPath,POAckHeader.PurchaseOrderNumber,billObj.BillNo,billObj.Id,"PoAck")
this.View.ShowMessage("POACK推送完成PO{0},文件名:{1}".format(POAckHeader.PurchaseOrderNumber,fileName))
def GetFileName():
fileName = ""
dateTime = DateTime.Now
# fileName = fileName + dateTime.ToString("yyyyMMdd") + str(DateTimeFormatUtils.GetTimestamp(dateTime))
fileName = "{0}{1}{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime)))
fileName = "{0}_{1}_{2}.xml".format(fileName,dateTime.ToString("yyyyMMdd"),str(DateTimeFormatUtils.GetTimestamp(dateTime)))
return fileName
@@ -201,6 +233,7 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText)
newObj["FReceiveOrSend"] = "2"
newObj["FFileName"] = FFileName
newObj["FFilePath"] = FFilePath
newObj["FDate"] = DateTime.Now
newObj["FPO"] = FPO
newObj["FERPBillNo"] = FERPBillNo
newObj["FERPBillId"] = FERPBillId
@@ -215,6 +248,6 @@ def AddSftpOpRecord(FFileName,FFilePath,FPO,FERPBillNo,FERPBillId,FFileTypeText)
#Q:既然是Save方法为什么还要传操作代码"Save"呢?
#A:Save方法调用的是单据操作列表中,"操作类型=保存"的操作,可以为单据添加多个"操作类型=保存"的操作。
#例如,可以添加一个"OnlySave",这个操作不注册任何服务插件和服务端服务,仅用于保存单据数据到数据库
saveRslt=BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save");
saveRslt = BusinessDataServiceHelper.Save(this.Context, meta.BusinessInfo,ObjList.ToArray(), None, "Save");
# raise Exception(JsonUtil.Serialize(newObj))