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);
+ }
+ }
+}