王 垚
2021-12-17 3c0476574421400224948808c08279dae66ce30c
收料通知单 反审核 删除 同步删除金蝶收料单数据
4个文件已修改
2个文件已添加
623 ■■■■■ 已修改文件
WebAPI/Controllers/CGGL/Cg_POInStockBillController.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/Controllers/CGGL/Cg_POOrderBillController.cs 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/HttpClient.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/InvokeHelper.cs 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/LogService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/WebAPI.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/Controllers/CGGL/Cg_POInStockBillController.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Pub_Class;
using System;
using System.Collections;
@@ -31,7 +32,7 @@
            try
            {
                ds = oCN.RunProcReturn("select * from h_v_IF_POInStockBillList where HitemID=" + HInterID, "h_v_IF_POInStockBillList");
                ds = oCN.RunProcReturn("select * from h_v_IF_POInStockBillList where hmainid=" + HInterID, "h_v_IF_POInStockBillList");
                if (ds == null || ds.Tables[0].Rows.Count == 0)
                {
                    objJsonResult.code = "0";
@@ -244,6 +245,11 @@
        {
            try
            {
                //先删除 金蝶数据
                objJsonResult = DeleteKingDee(HInterID);
                if (objJsonResult.code == "0")
                    return objJsonResult;
                oCN.BeginTran();
                oCN.RunProc("Delete From Cg_POInStockBillMain where HInterID = " + HInterID);
                oCN.RunProc("Delete From Cg_POInStockBillSub where HInterID = " + HInterID);
@@ -265,6 +271,83 @@
            }
        }
        /// <summary>
        /// 反审核
        /// </summary>
        [Route("Cg_POInStockBill/DeAuditPOInStockBill")]
        [HttpGet]
        public object DeAuditPOInStockBill(string HInterID)
        {
            try
            {
                //先删除 金蝶数据
                objJsonResult = DeleteKingDee(HInterID);
                if (objJsonResult.code == "0")
                    return objJsonResult;
                oCN.BeginTran();
                oCN.RunProc("update  Cg_POInStockBillMain  set HERPBillNO='',HERPInterID = 0 ,HBillStatus =5 where HInterID = " + HInterID);
                oCN.Commit();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "操作成功!";
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        //审核 删除 删除金蝶数据库对应 收料通知到数据
        public json DeleteKingDee(string hinterid)
        {
            string sql = string.Format("select HinterID,HERPBillNO,HERPInterID from Cg_POInStockBillMain where HERPInterID>0 and hinterid in (" + hinterid + ")");
            DataTable dt = oCN.RunProcReturn(sql, "deleteDt").Tables[0];
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    var sJson = new
                    {
                        Numbers = dr["HERPBillNO"].ToString(),
                        Ids = ""
                    };
                    var loginRet = InvokeHelper.Login();
                    var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                    if (isSuccess == 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "操作失败,金蝶账号登录异常。" + loginRet;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    var result = InvokeHelper.Delete("PUR_ReceiveBill", JsonConvert.SerializeObject(sJson));
                    //LogService.Write(result);
                    if (JObject.Parse(result)["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE")
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "对应金蝶收料通知单删除失败 !" + result;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
            }
            objJsonResult.code = "1";
            objJsonResult.count = 1;
            objJsonResult.Message = "Sucess!";
            objJsonResult.data = null;
            return objJsonResult;
        }
        //
    }
WebAPI/Controllers/CGGL/Cg_POOrderBillController.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Pub_Class;
using System;
using System.Collections;
@@ -211,6 +212,172 @@
            }
        }
        [Route("AuditPOInStockBill")]
        [HttpGet]
        public object AuditPOInStockBill(string HInterID, string CurUserName)
        {
            json objjson = new json();
            try
            {
                SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
                string kdTbaleName = "AIS20210811135644";
                string sql = string.Format(@"
 SELECT B.HINTERID,c.FID,c.FENTRYID, D.FBILLNO,B.HQTY,CD.FRECEIVEORGID,CDOO.FNUMBER AS FRECEIVENUMBER,D.FSUPPLIERID,DS.FNUMBER AS FSUPPLIERNUMBER,D.FPURCHASEORGID,DOO.FNUMBER AS FPURCHASEORGNUMBER,CROO.FNUMBER  AS FSETTLEORGNUMBER,E.FPRICETIMEPOINT,E.FSETTLECURRID,EC.FNUMBER AS FSETTLECURRNUMBER,C.FMATERIALID,CM.FNUMBER AS FMATERIALNUMBER ,C.FUNITID ,CU.FNUMBER AS FUNITNUMBER FROM
   CG_POINSTOCKBILLSUB B
 JOIN CG_POINSTOCKBILLMAIN M ON B.HINTERID = M.HINTERID
 JOIN AIS20210811135644..T_PUR_POORDERENTRY C ON B.HSOURCEINTERID = C.FID AND B.HSOURCEENTRYID = C.FENTRYID
 LEFT JOIN AIS20210811135644..T_BD_MATERIAL CM ON C.FMATERIALID =CM.FMASTERID
 LEFT JOIN AIS20210811135644..T_BD_UNIT CU ON C.FUNITID =CU.FUNITID
 JOIN AIS20210811135644..T_PUR_POORDERENTRY_D CD ON    C.FENTRYID = CD.FENTRYID
 LEFT JOIN AIS20210811135644..T_ORG_ORGANIZATIONS CDOO ON CD.FRECEIVEORGID = CDOO.FORGID
 JOIN AIS20210811135644..T_PUR_POORDERENTRY_F CR ON    C.FENTRYID = CR.FENTRYID
 LEFT JOIN AIS20210811135644..T_ORG_ORGANIZATIONS CROO ON CR.FSETTLEORGID = CROO.FORGID
 JOIN AIS20210811135644..T_PUR_POORDER D ON C.FID =D.FID
 LEFT JOIN AIS20210811135644..T_BD_SUPPLIER DS ON D.FSUPPLIERID = DS.FSUPPLIERID
 LEFT JOIN AIS20210811135644..T_ORG_ORGANIZATIONS DOO ON D.FPURCHASEORGID = DOO.FORGID
 JOIN AIS20210811135644..T_PUR_POORDERFIN E ON C.FENTRYID =E.FENTRYID
 LEFT JOIN AIS20210811135644..T_BD_CURRENCY EC ON E. FSETTLECURRID =EC.FCURRENCYID
 WHERE b.hinterid in ({1}) and M.HERPInterID = 0
", kdTbaleName, HInterID);
                DataTable dt = oCn.RunProcReturn(sql, "sltz").Tables[0];
                List<string> fidList = new List<string>();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (fidList.Contains(dr["FID"].ToString() + dr["HINTERID"].ToString()))
                            continue;
                        else
                            fidList.Add(dr["FID"].ToString() + dr["HINTERID"].ToString());
                        DataRow[] drs = dt.Select("FID = " + dr["FID"].ToString() + " and HINTERID = "+dr["HINTERID"].ToString());
                        JObject model = new JObject();
                        model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = "SLD01_SYS" }); //单据类型
                        model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
                        model.Add("FStockOrgId", new JObject() { ["Fnumber"] = dr["FRECEIVENUMBER"].ToString() }); // 收料组织
                        model.Add("FPurOrgId", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() }); //采购组织
                        model.Add("FSupplierId", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() }); //供应商
                        model.Add("FOwnerTypeIdHead", "BD_OwnerOrg");//  货主类型
                        model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
                        JArray Fentity = new JArray();
                        foreach (var item in drs)
                        {
                            JObject FentityModel = new JObject();
                            FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = item["FMATERIALNUMBER"].ToString() }); // 物料编码
                            FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 单位
                            FentityModel.Add("FPreDeliveryDate", DateTime.Now.ToString("yyyy-MM-dd")); //预计到货日期
                            FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); // 计价单位
                            FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = item["FUNITNUMBER"].ToString() }); //  库存单位
                            FentityModel.Add("FActReceiveQty", Convert.ToDecimal(item["HQTY"])); // 供应商送货数量(提料计划数量 - 已生成送货单数量)
                            FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//货主类型
                            FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
                            FentityModel.Add("FSrcId", item["FID"].ToString());//源单内码
                            FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//源单类型
                            FentityModel.Add("FSrcBillNo", item["FBILLNO"].ToString());//源单单号
                            FentityModel.Add("FSRCENTRYID", item["FENTRYID"].ToString());//源单分录内码
                            FentityModel.Add("FORDERBILLNO", item["FBILLNO"].ToString());//源单单号
                            FentityModel.Add("FPOORDERENTRYID", item["FENTRYID"].ToString());//源单分录内码
                            JArray Fentity2 = new JArray();
                            JObject FentityModel2 = new JObject();
                            FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
                            FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
                            FentityModel2.Add("FDetailEntity_Link_FSBillId", item["FID"].ToString());
                            FentityModel2.Add("FDetailEntity_Link_FSId", item["FEntryID"].ToString());
                            Fentity2.Add(FentityModel2);
                            FentityModel.Add("FDetailEntity_Link", Fentity2);
                            Fentity.Add(FentityModel);
                        }
                        model.Add("FDetailEntity", Fentity); //明细信息
                        JObject _FentityModel = new JObject();
                        _FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = dr["FSETTLEORGNUMBER"].ToString() }); //  结算组织
                        _FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = dr["FSETTLECURRNUMBER"].ToString() }); //  结算币别
                        _FentityModel.Add("FPricePoint", 0); //  定价时点
                        model.Add("FinanceEntity ", _FentityModel);//财务信息
                        JObject jsonRoot = new JObject()
                        {
                            ["Creator"] = "",
                            ["NeedUpDateFields"] = new JArray(),
                            ["NeedReturnFields"] = new JArray(),
                            ["IsDeleteEntry"] = "false",
                            ["SubSystemId"] = "",
                            ["IsVerifyBaseDataField"] = "false",
                            ["Model"] = model
                        };
                        LogService.Write(JsonConvert.SerializeObject(jsonRoot));
                        var loginRet = InvokeHelper.Login();
                        var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                        if (isSuccess == 0)
                        {
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = loginRet;
                            objjson.data = null;
                            return objjson;
                        }
                        var result = InvokeHelper.Save("PUR_ReceiveBill", jsonRoot.ToString());
                        LogService.Write(result);
                        if (JObject.Parse(result)["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() == "TRUE")
                        {
                            //更新送货单 主表 ERP单据号 以及 ERP主内玛
                            string FBillNo = JObject.Parse(result)["Result"]["Number"].ToString();
                            string FID = JObject.Parse(result)["Result"]["Id"].ToString();
                            string updateSql = string.Format(@"
 update a set
 a.HERPInterID = {0} ,
 a.HERPBillNO   ='{1}'
 from Cg_POInStockBillMain a
 join Cg_POInStockBillSub b on a.hinterid = b.hinterid
 where b.HInterID in ({2})
 and b. HSOURCEINTERID = {3}
 and a.HERPInterID = 0
", FID, FBillNo, HInterID, dr["FID"].ToString());
                            oCn.RunProc(updateSql);
                        }
                        else
                        {
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = result;
                            objjson.data = null;
                            return objjson;
                        }
                    }
                }
                sql = string.Format(@"update Cg_POInStockBillMain set
HBillStatus = 2 ,
HChecker   ='{0}',
HCheckDate   = getdate()
where HInterID in ({1})", CurUserName, HInterID);
                oCn.RunProc(sql);
                objjson.code = "1";
                objjson.count = 1;
                objjson.Message = "操作成功";
                objjson.data = null;
                return objjson;
            }
            catch (Exception ex)
            {
                objjson.code = "0";
                objjson.count = 0;
                objjson.Message = "操作失败" + ex.Message.ToString();
                objjson.data = null;
                return objjson;
            }
        }
        //判断是否存在权限,并写入日志
        public static bool Security_Log(string gnsy, int LogTF, bool Msg, string CurUserName)
        {
WebAPI/HttpClient.cs
New file
@@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Threading.Tasks;
namespace WebAPI
{
    public class HttpClient
    {
        /// <summary>
        /// Seivice URL
        /// </summary>
        public string Url { get; set; }
        /// <summary>
        /// 内容
        /// </summary>
        public string Content { get; set; }
        /// <summary>
        /// Cookie,保证登录后,所有访问持有一个Cookie;
        /// </summary>
        static CookieContainer Cookie = new CookieContainer();
        /// <summary>
        /// HTTP访问
        /// </summary>
        public string SyncRequest()
        {
            HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;
            httpRequest.Method = "POST";
            httpRequest.ContentType = "application/json";
            httpRequest.CookieContainer = Cookie;
            httpRequest.Timeout = 1000 * 60 * 10;//10min
            using (Stream reqStream = httpRequest.GetRequestStream())
            {
                JObject jObj = new JObject();
                jObj.Add("format", 1);
                jObj.Add("useragent", "ApiClient");
                jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());
                jObj.Add("parameters", Content);
                jObj.Add("timestamp", DateTime.Now);
                jObj.Add("v", "1.0");
                string sContent = jObj.ToString();
                var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);
                reqStream.Write(bytes, 0, bytes.Length);
                reqStream.Flush();
            }
            using (var repStream = httpRequest.GetResponse().GetResponseStream())
            {
                using (var reader = new StreamReader(repStream))
                {
                    return ValidateResult(reader.ReadToEnd());
                }
            }
        }
        public async Task<string> AsyncRequest()
        {
            HttpWebRequest httpRequest = WebRequest.Create(Url) as HttpWebRequest;
            httpRequest.Method = "POST";
            httpRequest.ContentType = "application/json";
            httpRequest.CookieContainer = Cookie;
            httpRequest.Timeout = 1000 * 60 * 10;//10min
            using (Stream reqStream = await httpRequest.GetRequestStreamAsync())
            {
                JObject jObj = new JObject();
                jObj.Add("format", 1);
                jObj.Add("useragent", "ApiClient");
                jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());
                jObj.Add("parameters", Content);
                jObj.Add("timestamp", DateTime.Now);
                jObj.Add("v", "1.0");
                string content = jObj.ToString();
                var bytes = Encoding.UTF8.GetBytes(content);
                reqStream.Write(bytes, 0, bytes.Length);
                reqStream.Flush();
            }
            using (var repStream = (await httpRequest.GetResponseAsync()).GetResponseStream())
            {
                using (var reader = new StreamReader(repStream))
                {
                    return ValidateResult(await reader.ReadToEndAsync());
                }
            }
        }
        private static string ValidateResult(string responseText)
        {
            if (responseText.StartsWith("response_error:"))
            {
                responseText.TrimStart("response_error:".ToCharArray());
            }
            return responseText;
        }
    }
}
WebAPI/InvokeHelper.cs
New file
@@ -0,0 +1,244 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace WebAPI
{
    public static class InvokeHelper
    {
        //private static string CloudUrl = "http://localhost/k3cloud/";//K/3 Cloud 业务站点地址
        //private static string CloudUrl = "http://60.190.4.42:9002/k3cloud/";//K/3 Cloud 业务站点地址
        private static string CloudUrl = "http://47.96.97.237/k3cloud/";//K/3 Cloud 业务站点地址
        /// <summary>
        /// 登陆
        /// </summary>
        public static string Login()
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc");
            List<object> Parameters = new List<object>();
            Parameters.Add("61aec029faed1a");//账套标示
            Parameters.Add("Administrator");//用户名
            Parameters.Add("qaz!@#123");//密码
            Parameters.Add(2052);//2052代表中文
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static async Task<string> LoginAsync()
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc");
            List<object> Parameters = new List<object>();
            Parameters.Add("5f9258a311401c");//账套标示
            Parameters.Add("Administrator");//用户名
            Parameters.Add("qaz!@#123");//密码
            Parameters.Add(2052);//2052代表中文
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return await httpClient.AsyncRequest();
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="formId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Save(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static string BatchSave(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static async Task<string> SaveAsync(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return await httpClient.AsyncRequest();
        }
        /// <summary>
        /// 提交
        /// </summary>
        /// <param name="formId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Submit(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="formId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Delete(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static async Task<string> DeleteAsync(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return await httpClient.AsyncRequest();
        }
        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="formId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string Audit(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="formId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string View(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static string UnAudit(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.UnAudit.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static string Push(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Push.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        public static string Query(string formId, string content)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc");
            List<object> Parameters = new List<object>();
            //业务对象Id
            //Parameters.Add(formId);
            //Json字串
            Parameters.Add(content);
            httpClient.Content = JsonConvert.SerializeObject(Parameters);
            return httpClient.SyncRequest();
        }
        /// <summary>
        /// 自定义
        /// </summary>
        /// <param name="key">自定义方法标识</param>
        /// <param name="args">参数</param>
        /// <returns></returns>
        public static string AbstractWebApiBusinessService(string key, List<object> args)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.Url = string.Concat(CloudUrl, key, ".common.kdsvc");
            httpClient.Content = JsonConvert.SerializeObject(args);
            return httpClient.SyncRequest();
        }
    }
}
WebAPI/LogService.cs
@@ -11,7 +11,23 @@
    public class LogService
    {
        private static readonly object lockObj = new object();
        public static void WriteAsync(object obj, string filePath = "Vlog", bool isAppend = true)
        {
            Task.Run(() =>
            {
                Write(obj, filePath, isAppend);
            });
        }
        public static void WriteAsync<T>(object obj, string filePath = "Vlog", bool isAppend = true)
        {
            Task.Run(() =>
            {
                Write(obj, $@"{filePath}\{typeof(T).Name}", isAppend);
            });
        }
        #region 日志
        public static void Write(object obj, string filePath = "Vlog", bool isAppend = true)
        {
WebAPI/WebAPI.csproj
@@ -453,6 +453,8 @@
    <Compile Include="DLL\ClsSc_PackUnionBill.cs" />
    <Compile Include="DLL\工资管理\ClsPay_GroupBalBill.cs" />
    <Compile Include="DLL\工资管理\ClsPay_WorkTimesBill.cs" />
    <Compile Include="HttpClient.cs" />
    <Compile Include="InvokeHelper.cs" />
    <Compile Include="Models\ClsGy_StockCheckItemBill.cs" />
    <Compile Include="Models\ClsSc_PackUnionBillMain.cs" />
    <Compile Include="Models\ClsSc_PackUnionBillSub.cs" />