This commit is contained in:
余宇波 2025-04-10 09:38:34 +08:00
parent 5330246bdd
commit b68dfe67b8
3 changed files with 191 additions and 281 deletions

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
@ -175,5 +176,15 @@ namespace Pilot_KD_Parino.Common
/// </summary>
public double BenCi { get; set; }
/// <summary>
/// 行的主键
/// </summary>
public string FROWID { get; set; }
/// <summary>
/// 父级主键ID
/// </summary>
public string FPARENTROWID { get; set; }
}
}

View File

@ -1052,10 +1052,36 @@ namespace Pilot_KD_Parino.Common
}
return;
}
else if (saveResult.IsSuccess == false)
{
saveResult.IsShowMessage = true;
//billView.ShowErrMessage(saveResult.InteractionContext.SimpleMessage);
var dd=saveResult.ValidationErrors.FirstOrDefault();
if (dd != null)
billView.ShowErrMessage(dd.Message);
else
{
billView.ShowErrMessage("不知道为什么,反正就是保存失败了!");
}
return;
}
else if (saveResult.InteractionContext != null
&& saveResult.InteractionContext.Option.GetInteractionFlag().Count > 0)
{// 保存失败,需要用户确认问题
//billView.ShowErrMessage(saveResult.InteractionContext.SimpleMessage);
//saveResult.MergeValidateErrors();
//billView.ShowOperateResult(saveResult.OperateResult);
var dd = saveResult.ValidationErrors.FirstOrDefault();
if (dd != null)
billView.ShowErrMessage(dd.Message);
else
{
billView.ShowErrMessage("不知道为什么,反正就是保存失败了!");
}
return;
}
// 保存失败,显示错误信息
if (saveResult.IsShowMessage)

View File

@ -6,6 +6,7 @@ using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Enums;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Msg;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
@ -146,8 +147,9 @@ namespace Pilot_KD_Parino.QPHY_AutoWrire
this.View.Model.SetValue("F_MBBA_Decimal_lsn", ReceiveBILLLIST[i].FDAMOUNT, RowindexNew);
this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, RowindexNew);
this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, RowindexNew);
this.View.Model.SetValue("F_RowNew", ReceiveBILLLIST[i].F_RowNew, RowindexNew);
this.View.Model.SetValue("F_RowNew", ReceiveBILLLIST[i].F_RowNew, RowindexNew);
this.View.Model.SetValue("F_ISHX", false, RowindexNew);
}
this.View.UpdateView("FEntity2");
}
@ -843,7 +845,7 @@ namespace Pilot_KD_Parino.QPHY_AutoWrire
this.View.Model.SetValue("F_PendingAmount", item.FDAMOUNT, item.FRow);
this.View.Model.SetValue("F_BenCi", item.BenCi, item.FRow);
this.View.Model.SetValue("F_MBBA_Decimal_3iy", item.FYAMOUNT, item.FRow);
this.View.Model.SetValue("F_ISHX",false, item.FRow);
List<string> strings = new List<string>();
if (item.FCONTRACTNUMBER != null)
strings = item.FCONTRACTNUMBER.Split(',').ToList();
@ -868,6 +870,7 @@ namespace Pilot_KD_Parino.QPHY_AutoWrire
}
this.View.Model.SetValue("F_MBBA_Decimal_imu", tempList2[i].FALLAMOUNT, Rowindex + i);
this.View.Model.SetValue("FClient2", tempList2[i].FClient, Rowindex + i);
this.View.Model.SetValue("F_RowNew", 2, Rowindex + i);
this.View.Model.SetValue("FCreated2", tempList2[i].FCreated, Rowindex + i);
this.View.Model.SetValue("FCONTRACTNUMBER2", tempList2[i].FCONTRACTNUMBER, Rowindex + i);
this.View.Model.SetValue("FSalesman2", tempList2[i].FSalesman, Rowindex + i);
@ -969,7 +972,7 @@ namespace Pilot_KD_Parino.QPHY_AutoWrire
View.ShowMessage("确定要生成核销记录单吗?", MessageBoxOptions.YesNo, result =>
{
if (result == MessageBoxResult.Yes)
{
{
#region
//存储销售订单/应收单
@ -986,309 +989,179 @@ namespace Pilot_KD_Parino.QPHY_AutoWrire
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
//获取收款单单据体数据
DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection;
SaleBILLLIS = new List<CombinaClass>();
var ReceiveBILLLIST2 = new List<CombinaClass>();
ReceiveBILLLIST = new List<CombinaClass>();
foreach (var item in FEntity)
{
SaleBILLLIS.Add(new CombinaClass()
{
FBIllNO = item["FBILLNO"]?.ToString(),
FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(),
FClient = Convert.ToInt32(item["FClient_Id"]),
FDate = item["FDate"]?.ToString(),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]),
FSKBIllNO = item["FSKBILLNO"]?.ToString(),
FCreated = Convert.ToInt32(item["FCreated_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman_Id"]),
FType = item["FType"]?.ToString(),
FISHX = item["FISHX"]?.ToString(),
FWeiYi = item["FWeiYi"]?.ToString(),
});
}
foreach (var item in FEntity2)
{
ReceiveBILLLIST2.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBILLNO2"]),
FDate = Convert.ToString(item["FDate2"]),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_imu"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_3iy"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_lsn"]),
FClient = Convert.ToInt32(item["FClient2_Id"]),
FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(),
FRemark = Convert.ToString(item["FRemark"]),
FCreated = Convert.ToInt32(item["FCreated2_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman2_Id"]),
FISHX = item["FISHX2"]?.ToString(),
FWeiYi = item["FWeiYi2"]?.ToString(),
FRow = Convert.ToInt32(item["Seq"]) - 1,
F_RowNew = Convert.ToInt32(item["F_RowNew"])
});
}
ReceiveBILLLIST = ReceiveBILLLIST2.Where(a => a.F_RowNew == 1 && a.FISHX == "已核销配对").ToList();
//循环收款单
foreach (var item in FEntity2)
{
var s1 = Convert.ToInt32(item["F_RowNew"]);
var s2 = item["F_ISHX"]?.ToString();
var s3 = string.IsNullOrWhiteSpace(item["FISHX2"]?.ToString());
var s4 = string.IsNullOrWhiteSpace(item["FWeiYi2"]?.ToString());
//创建对象存储
var SKList = new CombinaAddSK();
//过滤未匹对上的数据/过滤除了收款单1对1、1对多的数据
if (Convert.ToInt32(item["F_RowNew"]) == 1 && item["F_ISHX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX2"]?.ToString()) && string.IsNullOrWhiteSpace(item["FWeiYi2"]?.ToString()))
{
//获取纸质合同号
var stringSplit = (item["FCONTRACTNUMBER2"])?.ToString()?.Split(',');
//找到对应销售订单
foreach (var item2 in FEntity.Where(a => stringSplit.Contains(a["FCONTRACTNUMBER"])))
{
var nTestList = new CombinaAddClass1();
nTestList.FBIllNO = item2["FBILLNO"]?.ToString();
nTestList.FClient = Convert.ToInt32(item2["FClient_Id"]);
nTestList.FDate = item2["FDate"]?.ToString();
nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_emq"]);
nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER"]?.ToString();
nTestList.FType = item2["FTYPE"]?.ToString();
nTestList.FCreated = Convert.ToInt32(item2["FCreated_Id"]);
nTestList.FSalesman = Convert.ToInt32(item2["FSalesman_Id"]);
SKList.XSAPList.Add(nTestList);
}
SKList.FBIllNO = item["FBILLNO2"]?.ToString();
SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString();
SKList.FClient = Convert.ToInt32(item["FClient2_Id"]);
SKList.FDate = item["FDate2"]?.ToString();
SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_lsn"]);
SKList.FRemark = item["FRemark"]?.ToString();
SKList.FCreated = Convert.ToInt32(item["FCreated2_Id"]);
SKList.FSalesman = Convert.ToInt32(item["FSalesman2_Id"]);
fCombinaAddSK.Add(SKList);
}
}
//循环销售订单/应收单
foreach (var item in FEntity)
{
//创建对象存储
var SKList = new CombinaAddClass1();
//过滤未匹对上的数据/过滤不是唯一的数据
if (item["F_ISGX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX"]?.ToString()) && !string.IsNullOrWhiteSpace(item["FWeiYi"]?.ToString()))
{
//获取纸质合同号
var stringSplit = (item["FSKBILLNO"])?.ToString()?.Split(',');
//找到对应销售订单
foreach (var item2 in FEntity2.Where(a => stringSplit.Contains(a["FBILLNO2"])))
{
var nTestList = new CombinaAddSK();
nTestList.FBIllNO = item2["FBILLNO2"]?.ToString();
nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER2"]?.ToString();
nTestList.FClient = Convert.ToInt32(item2["FClient2_Id"]);
nTestList.FDate = item2["FDate2"]?.ToString();
nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_lsn"]);
nTestList.FRemark = item2["FRemark"]?.ToString();
nTestList.FSalesman = Convert.ToInt32(item2["FSalesman2_Id"]);
nTestList.FCreated = Convert.ToInt32(item2["FCreated2_Id"]);
SKList.SKList.Add(nTestList);
}
SKList.FBIllNO = item["FBILLNO"]?.ToString();
SKList.FClient = Convert.ToInt32(item["FClient_Id"]);
SKList.FDate = item["FDate"]?.ToString();
SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_emq"]);
SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString();
SKList.FType = item["FType"]?.ToString();
SKList.FCreated = Convert.ToInt32(item["FCreated_Id"]);
SKList.FSalesman = Convert.ToInt32(item["FSalesman_Id"]);
fCombinaAddClass1.Add(SKList);
}
}
#endregion
if (fCombinaAddClass1.Count == 0 && fCombinaAddSK.Count == 0)
var selectList = FEntity2.Where(t => t["F_ISHX"] != null && t["F_ISHX"].ToString().ToLower() == "true").ToList();
if (selectList.Count == 0 && selectList.Count == 0)
{
this.View.ShowWarnningMessage("未选择核销数据!");
return;
}
string hetong = "";
//selectList.ForEach(t =>
//{
// hetong += "," + t["FBILLNO2"].ToString();
//});
//this.View.ShowWarnningMessage(hetong);
//return;
//this.View.Model.SetValue("FROWID", FROWID, RowindexNew);
//this.View.Model.SetValue("FPARENTROWID", FROWID, item.FRow);
var ReceiveBILLLIST2= selectList.Select(item=>new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBILLNO2"]),
FDate = Convert.ToString(item["FDate2"]),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_imu"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_3iy"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_lsn"]),
FClient = Convert.ToInt32(item["FClient2_Id"]),
FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(),
FRemark = Convert.ToString(item["FRemark"]),
FCreated = Convert.ToInt32(item["FCreated2_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman2_Id"]),
FISHX = item["FISHX2"]?.ToString(),
FWeiYi = item["FWeiYi2"]?.ToString(),
FRow = Convert.ToInt32(item["Seq"]),
F_RowNew = Convert.ToInt32(item["F_RowNew"]),
BenCi= Convert.ToDouble(item["BenCi"]),
FROWID= Convert.ToString(item["ROWID"]),
FPARENTROWID = Convert.ToString(item["PARENTROWID"]),
});
var shouKuanList = ReceiveBILLLIST2.Where(t => t.F_RowNew == 1).ToList();
List<string> errorList = new List<string>();
shouKuanList.ForEach(item=>
{
var sales = ReceiveBILLLIST2.Where(t => t.FPARENTROWID == item.FROWID && t.FROWID!= item.FROWID).ToList();
var heji = sales.Sum(t => t.BenCi);
if (heji != item.BenCi || heji==0 || sales.Count==0)
errorList.Add(item.FBIllNO+ $@" 明细={heji} 收款单={item.BenCi} ");
else
{
if (errorList.Count == 0)
{
//创建对象存储
var SKList = new CombinaAddSK();
//获取纸质合同号
var stringSplit = sales.Select(t => t.FCONTRACTNUMBER).Distinct().ToList();
//找到对应销售订单
var nTestList = sales.Select(item2 => new CombinaAddClass1
{
FBIllNO = item2.FBIllNO,
FClient = Convert.ToInt32(item2.FClient),
FDate = item2.FDate,
FALLAMOUNT = Convert.ToDecimal(item2.BenCi),
FCONTRACTNUMBER = item2.FCONTRACTNUMBER,
FType = "销售订单",
FCreated = item2.FCreated,
FSalesman = item2.FSalesman,
});
SKList.XSAPList.AddRange(nTestList);
SKList.FBIllNO = item.FBIllNO;
SKList.FCONTRACTNUMBER =string.Join(",", sales.Select(t=>t.FCONTRACTNUMBER).Distinct().ToList());
SKList.FClient = item.FClient;
SKList.FDate = item.FDate;
SKList.FALLAMOUNT = Convert.ToDecimal(item.BenCi);
SKList.FRemark = item.FRemark;
SKList.FCreated = item.FCreated;
SKList.FSalesman = item.FSalesman;
fCombinaAddSK.Add(SKList);
}
}
});
if (errorList.Count > 0)
{
ErrMessage = true;
hetong = string.Join(",", errorList);
Message =string.Format($"收款单号:'{hetong}'的本次核销金额不等于勾选的销售订单的合计本次核销金额,不允许核销\r\n");
if (ErrMessage)
{
this.View.ShowErrMessage(Message);
}
return;
}
#endregion
//用于存储生成成功的收款单
List<string> strings1 = new List<string>();
List<string> successFbillNo = new List<string>();
//用于存储生成成功的销售订单
List<string> strings2 = new List<string>();
int ISXSNUM = 0;
//循环收款单/新增核销记录
foreach (var item in fCombinaAddSK)
{
//获取销售订单/应收单
var list = item.XSAPList;
//汇总金额
var Amount = list.Sum(a => a.FALLAMOUNT);
//应收单/销售订单判断字段
int isTrue1 = list.GroupBy(t => t.FType).Count();
//收款单/销售订单-应收单判断客户字段
int isTrue2 = list.GroupBy(t => t.FClient).Count();
//判断是否存在应收单跟销售订单汇总核销
if (isTrue1 > 1)
//创建核销记录单
string FBILLNO = CommonHelper.CreateAutoWrireRecord2(this.Context, Convert.ToString(FOrgId), item.XSAPList, item);
if (FBILLNO != "")
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'存在销售订单与应收单合并核销的记录,不允许核销\r\n", item.FBIllNO);
continue;
}
//判断是否是同一个客户
else if (isTrue2 > 1 || item.FClient != list[0].FClient)
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'配对的(销售订单/应收单)的客户不一致,不允许核销\r\n", item.FBIllNO);
continue;
}
//判断是否存在两个销售订单/应收单汇总核销(不能小于汇总数)
else if (list.Count > 1 && item.FALLAMOUNT < Amount)
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'的核销金额小于多个(销售订单/应收单)的核销金额,不允许核销\r\n", item.FBIllNO);
continue;
}
else
{
//创建核销记录单
string FBILLNO = CommonHelper.CreateAutoWrireRecord2(this.Context, Convert.ToString(FOrgId), item.XSAPList, item);
Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO);
strings1.Add(item.FCONTRACTNUMBER);
successFbillNo.Add(item.FBIllNO);
ISXSNUM++;
}
}
//循环(销售订单/应收单)/新增核销记录
foreach (var item in fCombinaAddClass1)
this.View.ShowMessage(Message);
if (successFbillNo.Count > 0)
{
//获取收款单
var list = item.SKList;
//汇总金额
var Amount = list.Sum(a => a.FALLAMOUNT);
//收款单/销售订单-应收单判断客户字段
int isTrue2 = list.GroupBy(t => t.FClient).Count();
//判断是否是同一个客户
if (isTrue2 > 1 || item.FClient != list[0].FClient)
var tempRow = ReceiveBILLLIST2.Where(t => successFbillNo.Contains(t.FBIllNO)).ToList();
var pId = tempRow.Select(t => t.FROWID).ToList();
var allRows = FEntity2.Where(t => pId.Contains(t["PARENTROWID"].ToString())).ToList();
allRows.ForEach(t =>
{
ErrMessage = true;
Message = Message + string.Format("(销售订单/应收单)号:'{0}'配对的收款打那的客户不一致,不允许核销\r\n", item.FBIllNO);
continue;
}
//判断是否存在两个销售订单/应收单汇总核销(不能小于汇总数)
else if (list.Count > 1 && item.FALLAMOUNT < Amount)
{
ErrMessage = true;
Message = Message + string.Format("(销售订单/应收单)号:'{0}'的核销金额小于多个收款单的核销金额,不允许核销\r\n", item.FBIllNO);
continue;
}
else
{
//创建核销记录单
strings2.Add(item.FBIllNO);
strings1.Add(item.FCONTRACTNUMBER);
//创建核销记录单
string FBILLNO = CommonHelper.CreateAutoWrireRecord3(this.Context, Convert.ToString(FOrgId), item, item.SKList);
Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO);
ISXSNUM++;
}
this.Model.DeleteEntryRow("FEntity2", Convert.ToInt32(t["Seq"])-1);
});
//tempRow.ForEach(item =>
//{
// this.Model.DeleteEntryRow("FEntity2", item.FRow - 1);
//});
}
////如果存在生成成功的、也有生成失败的不走刷新功能直接将成功的单据体数据删除!
//List<CombinaClass> SaleBILLLIStext = new List<CombinaClass>();
//foreach (var item in SaleBILLLIS)
//{
// if (strings1.Contains(item?.FCONTRACTNUMBER))
// {
// SaleBILLLIStext.Add(item);
// }
//}
if (!ErrMessage)
{
this.View.ShowMessage(Message);
}
else
{
this.View.ShowErrMessage(Message);
}
//如果存在生成成功的、也有生成失败的不走刷新功能直接将成功的单据体数据删除!
List<CombinaClass> SaleBILLLIStext = new List<CombinaClass>();
foreach (var item in SaleBILLLIS)
{
if (strings2.Contains(item?.FBIllNO) || strings1.Contains(item?.FCONTRACTNUMBER))
{
SaleBILLLIStext.Add(item);
}
}
//foreach (var item in SaleBILLLIStext)
//{
// SaleBILLLIS.Remove(item);
//}
foreach (var item in SaleBILLLIStext)
{
SaleBILLLIS.Remove(item);
}
if (ISXSNUM == 1)
{
//删除只有一条数据的收款单
foreach (var item in strings1)
{
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
if (ReceiveBILLLIST[i]?.FCONTRACTNUMBER == item?.ToString())
{
this.Model.DeleteEntryRow("FEntity2", ReceiveBILLLIST[i].FRow);
}
}
}
//删除数据
this.View.Model.DeleteEntryData("FEntity");
//绑定销售订单数据
for (int i = 0; i < SaleBILLLIS.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i);
//单据编号(收款单)
this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i);
//是否核销匹对
this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLIS[i]?.FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLIS[i]?.FSalesman, i);
}
this.View.UpdateView("FEntity");
}
else
{
this.Model.SetValue("FShuaXin", "需要更新");
}
//if (ISXSNUM == 1)
//{
// //删除只有一条数据的收款单
// foreach (var item in strings1)
// {
// for (int i = 0; i < ReceiveBILLLIST.Count; i++)
// {
// if (ReceiveBILLLIST[i]?.FCONTRACTNUMBER == item?.ToString())
// {
// this.Model.DeleteEntryRow("FEntity2", ReceiveBILLLIST[i].FRow);
// }
// }
// }
//}
//else
//{
// this.Model.SetValue("FShuaXin", "需要更新");
//}
}
else
{