diff --git a/GZ_LTHPilot_ORDER.csproj b/GZ_LTHPilot_ORDER.csproj index 977a5ac..e5d80ea 100644 --- a/GZ_LTHPilot_ORDER.csproj +++ b/GZ_LTHPilot_ORDER.csproj @@ -132,6 +132,10 @@ ..\..\派诺-斌哥\git\6、程序\GZ_KD_Parino\dll\Kingdee.BOS.DataEntity.dll + + False + Library\Kingdee.BOS.ServiceFacade.KDServiceFx.dll + ..\..\派诺-斌哥\git\6、程序\GZ_KD_Parino\dll\Kingdee.BOS.ServiceHelper.dll @@ -328,6 +332,14 @@ + + + + + + + + @@ -337,8 +349,8 @@ - - + + @@ -362,6 +374,7 @@ + @@ -379,6 +392,7 @@ + diff --git a/Library/Kingdee.BOS.ServiceFacade.KDServiceFx.dll b/Library/Kingdee.BOS.ServiceFacade.KDServiceFx.dll new file mode 100644 index 0000000..24234a8 Binary files /dev/null and b/Library/Kingdee.BOS.ServiceFacade.KDServiceFx.dll differ diff --git a/Models/K3Request/ReportDataParam.cs b/Models/K3Request/ReportDataParam.cs new file mode 100644 index 0000000..64b39ce --- /dev/null +++ b/Models/K3Request/ReportDataParam.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.Models.K3Request +{ + + + public class ReportDataParam + { + public bool ReturnJsonData { get; set; } + public string FieldKeys { get; set; } + public string SchemeId { get; set; } + public int StartRow { get; set; } + public int Limit { get; set; } + public bool IsVerifyBaseDataField { get; set; } + public object[] FilterString { get; set; } + public Model Model { get; set; } + } + + public class Model + { + public string FSaleOrgList { get; set; } + public DateTime FSoFromDate { get; set; } + public DateTime FSoToDate { get; set; } + + public string FSaleOFrom { get; set; } + public string FSaleOTo { get; set; } + public string FFormCloseStatus { get; set; } + public string FFormStatus { get; set; } + public string FPriceFrom { get; set; } + public string FBusCloseStatus { get; set; } + public bool FMergingSOHeader { get; set; } + public bool FIncludedUnfilledOrders { get; set; } + public bool FIsRecWithMat { get; set; } + public string FSuite { get; set; } + public string FSetAccountType { get; set; } + public bool FIsGroup { get; set; } + public bool FIncludedFree { get; set; } + } + +} diff --git a/Models/K3Result/KingdeeResult.cs b/Models/K3Result/KingdeeResult.cs new file mode 100644 index 0000000..6a6592b --- /dev/null +++ b/Models/K3Result/KingdeeResult.cs @@ -0,0 +1,15 @@ +using GZ_LTHPilot_ORDER.Models.K3Result.Model; + +namespace GZ_LTHPilot_ORDER.Models.K3Result +{ + /// + /// 金蝶云星空返回类 + /// + public class KingdeeResult + { + /// + /// 返回对象 + /// + public K3CloudResult Result { get; set; } + } +} diff --git a/Models/K3Result/ListResult.cs b/Models/K3Result/ListResult.cs new file mode 100644 index 0000000..f2d2ea5 --- /dev/null +++ b/Models/K3Result/ListResult.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace GZ_LTHPilot_ORDER.Models.K3Result +{ + /// + /// 列表查询输出类 + /// + public class ListResult + { + + /// + /// 列表 + /// + public List List { get; set; } + + /// + /// 构造函数 + /// + /// + public ListResult(List list) + { + List = list; + } + } +} diff --git a/Models/K3Result/Model/K3CloudResponseStatus.cs b/Models/K3Result/Model/K3CloudResponseStatus.cs new file mode 100644 index 0000000..dd7def9 --- /dev/null +++ b/Models/K3Result/Model/K3CloudResponseStatus.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; + +namespace GZ_LTHPilot_ORDER.Models.K3Result.Model +{ + /// + /// 响应对象 + /// + public class K3CloudResponseStatus + { + /// + /// 错误代码 + /// + public int ErrorCode { get; set; } + /// + /// 是否成功 + /// + public bool IsSuccess { get; set; } + /// + /// 错误信息列表 + /// + public List Errors { get; set; } + /// + /// 成功实体 + /// + public List SuccessEntitys { get; set; } + /// + /// 成功消息 + /// + public List SuccessMessages { get; set; } + /// + /// 消息代码 + /// + public int MsgCode { get; set; } + } +} diff --git a/Models/K3Result/Model/K3CloudResult.cs b/Models/K3Result/Model/K3CloudResult.cs new file mode 100644 index 0000000..56189eb --- /dev/null +++ b/Models/K3Result/Model/K3CloudResult.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace GZ_LTHPilot_ORDER.Models.K3Result.Model +{ + /// + /// 返回类 + /// + public class K3CloudResult + { + /// + /// 响应对象 + /// + public K3CloudResponseStatus ResponseStatus { get; set; } + + /// + /// 转换响应对象 + /// + public K3CloudResponseStatus ConvertResponseStatus { get; set; } + + /// + /// 返回结果,用于查看单据 + /// + public object Result { get; set; } + + /// + /// 开始索引 + /// + public long? StartIndex { get; set; } + /// + /// 是否最后 + /// + public bool? IsLast { get; set; } + /// + /// 文件大小 + /// + public long? FileSize { get; set; } + /// + /// 文件名称 + /// + public string FileName { get; set; } + /// + /// 文件内容(Base64) + /// + public string FilePart { get; set; } + + /// + /// 返回数据行数 + /// + public int? RowCount { get; set; } + + public List Rows { get; set; } + } +} diff --git a/Models/K3Result/Model/K3CloudResultInfo.cs b/Models/K3Result/Model/K3CloudResultInfo.cs new file mode 100644 index 0000000..dba61fe --- /dev/null +++ b/Models/K3Result/Model/K3CloudResultInfo.cs @@ -0,0 +1,21 @@ +namespace GZ_LTHPilot_ORDER.Models.K3Result.Model +{ + /// + /// 金蝶云星空查看错误信息类 + /// + public class K3CloudResultInfo + { + /// + /// 字段名称 + /// + public string FieldName { get; set; } + /// + /// 错误信息 + /// + public string Message { get; set; } + /// + /// 序号 + /// + public int DIndex { get; set; } + } +} diff --git a/Models/K3Result/Model/K3CloudSuccessEntity.cs b/Models/K3Result/Model/K3CloudSuccessEntity.cs new file mode 100644 index 0000000..1788f75 --- /dev/null +++ b/Models/K3Result/Model/K3CloudSuccessEntity.cs @@ -0,0 +1,25 @@ +namespace GZ_LTHPilot_ORDER.Models.K3Result.Model +{ + /// + /// 成功实体 + /// + public class K3CloudSuccessEntity + { + /// + /// 单据Id + /// + public int Id { get; set; } + /// + /// 单据编号 + /// + public string Number { get; set; } + /// + /// 实体索引 + /// + public int DIndex { get; set; } + /// + /// 分录Id + /// + public object EntryIds { get; set; } + } +} diff --git a/Models/VO/SaleExecuteOut.cs b/Models/VO/SaleExecuteOut.cs new file mode 100644 index 0000000..5b25998 --- /dev/null +++ b/Models/VO/SaleExecuteOut.cs @@ -0,0 +1,18 @@ + + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.Models.VO +{ + public class SaleExecuteOut + { + public string FSALEORGNAME { get; set; } + public string FBILLNO { get; set; } + public string FDate { get; set; } + public string FALLMATCHAMOUNT { get; set; } + } +} diff --git a/Service/SaleOrderService.cs b/Service/SaleOrderService.cs deleted file mode 100644 index b65262e..0000000 --- a/Service/SaleOrderService.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Kingdee.BOS; -using Kingdee.BOS.Orm.DataEntity; -using Kingdee.BOS.ServiceHelper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace GZ_LTHPilot_ORDER.Service -{ - /// - /// 销售订单服务类 - /// - public class SaleOrderService - { - private Context ctx; - - public SaleOrderService(Context ctx) - { - this.ctx = ctx; - } - - /// - /// 根据纸质合同号、组织获取销售订单 - /// - /// - public DynamicObjectCollection GetSaleOrderByOrgIdAndContractNo(string orgId, string contractNo) - { - var sqlTemp = @"/*dialect*/SELECT - * -FROM - T_SAL_ORDER t1 - LEFT JOIN T_SAL_ORDERFIN t1fin ON t1.FID = t1fin.FID -WHERE - 1 = 1 - AND t1.FDOCUMENTSTATUS = 'C' - AND t1.FCANCELSTATUS = 'A' - AND t1.FSALEORGID = '{0}' - AND t1.F_CONTRACTNUMBER = '{1}' -"; - var sql = string.Format(sqlTemp, orgId, contractNo); - var resultData = DBServiceHelper.ExecuteDynamicObject(ctx, sql); - return resultData; - } - } -} diff --git a/Services/SaleOrderService.cs b/Services/SaleOrderService.cs new file mode 100644 index 0000000..abec21c --- /dev/null +++ b/Services/SaleOrderService.cs @@ -0,0 +1,144 @@ +using GZ_LTHPilot_ORDER.Models.K3Request; +using GZ_LTHPilot_ORDER.Models.K3Result; +using GZ_LTHPilot_ORDER.Models.VO; +using Kingdee.BOS; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.ServiceHelper; +using Kingdee.BOS.WebApi.FormService; +using Kingdee.K3.FIN.App.Core.Match.Object; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.Service +{ + /// + /// 销售订单服务类 + /// + public class SaleOrderService + { + private Context ctx; + + public SaleOrderService(Context ctx) + { + this.ctx = ctx; + } + + /// + /// 根据纸质合同号、组织获取销售订单 + /// + /// + public DynamicObjectCollection GetSaleOrderByOrgIdAndContractNo(string orgId, string contractNo) + { + var sqlTemp = @"/*dialect*/SELECT + * +FROM + T_SAL_ORDER t1 + LEFT JOIN T_SAL_ORDERFIN t1fin ON t1.FID = t1fin.FID +WHERE + 1 = 1 + AND t1.FDOCUMENTSTATUS = 'C' + AND t1.FCANCELSTATUS = 'A' + AND t1.FSALEORGID = '{0}' + AND t1.F_CONTRACTNUMBER = '{1}' +"; + var sql = string.Format(sqlTemp, orgId, contractNo); + var resultData = DBServiceHelper.ExecuteDynamicObject(ctx, sql); + return resultData; + } + + /// + /// 获取销售订单收款金额 + /// + /// + public decimal GetSaleOrderReceiveAmount(string orgId, string billNo) + { + var saleOrder = this.GetSaleOrderByBillNoAndOrgId(orgId, billNo); + var date = Convert.ToDateTime(saleOrder["FDATE"]); + ReportDataParam param = new ReportDataParam() + { + ReturnJsonData = true, + FieldKeys = "FSALEORGNAME,FBILLNO,FDate,FALLMATCHAMOUNT", + IsVerifyBaseDataField = true, + Model = new Model() + { + FSaleOrgList = orgId, + FSoFromDate = date.AddDays(-2), + FSoToDate = date.AddDays(1), + FSaleOFrom = billNo, + FSaleOTo = billNo, + FFormCloseStatus = "ALL", + FFormStatus = "C", + FPriceFrom = "SALORDERBILL", + FBusCloseStatus = "ALL", + FMergingSOHeader = true, + FIncludedUnfilledOrders = false, + FIsRecWithMat = true, + } + }; + var paramString = JsonConvert.SerializeObject(param); + var reusltString = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString).ToString(); + var result = JsonConvert.DeserializeObject>(reusltString); + var rows = result.Result.Rows; + var dataRow = rows.Where(n => n.FBILLNO == billNo).FirstOrDefault(); + if (dataRow != null) + { + return Convert.ToDecimal(dataRow.FALLMATCHAMOUNT); + } + return 0m; + } + + + public DynamicObject GetSaleOrderByBillNoAndOrgId(string orgId, string billNo) + { + var sqlTemp = @"/*dialect*/SELECT + * +FROM + T_SAL_ORDER t1 +WHERE + 1 = 1 + AND t1.FSALEORGID = '{0}' + AND t1.FBILLNO = '{1}' +"; + var sql = string.Format(sqlTemp, orgId, billNo); + var result = DBServiceHelper.ExecuteDynamicObject(this.ctx, sql); + if (result.Count == 0) + { + throw new Exception($"组织:{orgId},没有找到编号为 {billNo} 的销售订单"); + } + return result[0]; + } + + public List GetSaleOrderReceiveAmountByDate(string orgId, DateTime startDate, DateTime endDate) + { + ReportDataParam param = new ReportDataParam() + { + ReturnJsonData = true, + FieldKeys = "FSALEORGNAME,FBILLNO,FDate,FALLMATCHAMOUNT", + IsVerifyBaseDataField = true, + Model = new Model() + { + FSaleOrgList = orgId, + FSoFromDate = startDate, + FSoToDate = startDate, + FFormCloseStatus = "ALL", + FFormStatus = "C", + FPriceFrom = "SALORDERBILL", + FBusCloseStatus = "ALL", + FMergingSOHeader = true, + FIncludedUnfilledOrders = false, + FIsRecWithMat = true, + } + }; + var paramString = JsonConvert.SerializeObject(param); + var reusltString = WebApiServiceCall.GetSysReportData(this.ctx, "SAL_DetailReport", paramString).ToString(); + var result = JsonConvert.DeserializeObject>(reusltString); + var rows = result.Result.Rows; + var dataRow = rows.Where(n => n.FBILLNO.Trim() == string.Empty).ToList(); + return dataRow; + } + } +} diff --git a/Service/SaleSicsService.cs b/Services/SaleSicsService.cs similarity index 100% rename from Service/SaleSicsService.cs rename to Services/SaleSicsService.cs diff --git a/WebApiService/SaleOrderApiService.cs b/WebApiService/SaleOrderApiService.cs new file mode 100644 index 0000000..c1662d1 --- /dev/null +++ b/WebApiService/SaleOrderApiService.cs @@ -0,0 +1,39 @@ + +using GZ_LTHPilot_ORDER.Models.VO; +using GZ_LTHPilot_ORDER.Service; +using Kingdee.BOS.App.Data; +using Kingdee.BOS.ServiceFacade.KDServiceFx; +using Kingdee.BOS.Util; +using Kingdee.BOS; +using Kingdee.BOS.WebApi.Client; +using Kingdee.BOS.WebApi.ServicesStub; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GZ_LTHPilot_ORDER.WebApiService +{ + [Description("商品类型"), HotUpdate] + public class SaleOrderApiService : AbstractWebApiBusinessService + { + public SaleOrderApiService(KDServiceContext context) : base(context) + { + + } + + public decimal GetSaleOrderReceiveAmount(string orgId, string billNo) + { + SaleOrderService saleOrderService = new SaleOrderService(this.KDContext.Session.AppContext); + return saleOrderService.GetSaleOrderReceiveAmount(orgId, billNo); + } + + public List GetSaleOrderReceiveAmountByDate(string orgId, DateTime startDate, DateTime endDate) + { + SaleOrderService saleOrderService = new SaleOrderService(this.KDContext.Session.AppContext); + return saleOrderService.GetSaleOrderReceiveAmountByDate(orgId, startDate, endDate); + } + } +}