diff --git a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs index b71273a..10da1b9 100644 --- a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs +++ b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs @@ -663,7 +663,7 @@ namespace Lskj.QueryEssentialInfo } })); SetProcessMsg($"正在同步收入..."); - string dsfxzCode = QueryApiUtil.GetDSFXZ(out string dsfxzResult, out string dsfxzMsg); + string dsfxzCode = QueryApiUtil.GetIncome(out string dsfxzResult, out string dsfxzMsg); if (!dsfxzCode.Equals("0")) { throw new Exception($"同步收入失败\r\n{dsfxzMsg}"); @@ -678,17 +678,35 @@ namespace Lskj.QueryEssentialInfo /// private void GSSBQuery() { - SetProcessMsg($"正在进行个税申报..."); - string submitCode = QueryApiUtil.Submit(out string submitResult, out string submitMsg); - if (!submitCode.Equals("0")) + SetProcessMsg($"正在同步收入..."); + string incomeCode = QueryApiUtil.GetIncome(out string incomeResult, out string incomeMsg); + if (!incomeCode.Equals("0")) { - throw new Exception($"个税申报失败\r\n{submitMsg}"); + throw new Exception($"同步收入失败\r\n{incomeMsg}"); } - SetProcessMsg($"正在查询个税申报结果..."); - string submitQueryCode = "-99"; - while (!submitQueryCode.Equals("0")) + SetProcessMsg($"正在生成批次信息..."); + string batchCode = QueryApiUtil.GetBatch(out string batchResult, "101060100", out string batchMsg); + if (!batchCode.Equals("0")) { - submitQueryCode = QueryApiUtil.SubmitQuery(out string submitQueryResult, out string submitQueryMsg); - if (!submitQueryCode.Equals("0")) - { - \ No newline at end of file + throw new Exception($"生成批次信息失败\r\n{batchMsg}"); + } + SetProcessMsg($"正在获取计算结果..."); + string resultCode = QueryApiUtil.GetResult(out string resultResult, "101060100", out string resultMsg); + if (!resultCode.Equals("0")) + { + throw new Exception($"获取计算结果\r\n{resultMsg}"); + } + //SetProcessMsg($"正在进行个税申报..."); + //string submitCode = QueryApiUtil.Submit(out string submitResult, out string submitMsg); + //if (!submitCode.Equals("0")) + //{ + // throw new Exception($"个税申报失败\r\n{submitMsg}"); + //} + //SetProcessMsg($"正在查询个税申报结果..."); + //string submitQueryCode = "-99"; + //while (!submitQueryCode.Equals("0")) + //{ + // submitQueryCode = QueryApiUtil.SubmitQuery(out string submitQueryResult, out string submitQueryMsg); + // if (!submitQueryCode.Equals("0")) + // { + // if \ No newline at end of file diff --git a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs index 2a29d65..990ce0c 100644 --- a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs +++ b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs @@ -810,12 +810,12 @@ namespace Lskj.QueryEssentialInfo return code; } /// - /// 发起个人养老金查询 + /// 同步收入 /// /// /// /// - public static string GetDSFXZ(out string resultRead, out string resultMsg) + public static string GetIncome(out string resultRead, out string resultMsg) { string code = "-9999"; resultRead = ""; @@ -842,24 +842,45 @@ namespace Lskj.QueryEssentialInfo pmsJObject.Add("skssqZ", mainRow["qysh"] + ""); JArray bizDataListJArry = new JArray(); JArray incomeDataListJArry = new JArray(); - foreach (DataRow detailRow in detailTab.Rows) + var groupedRows = detailTab.AsEnumerable().Where(row => (row["p_emp_addTag"] + "") == "1").GroupBy(row => row["incomeTypeCode"] + ""); + foreach (var group in groupedRows) { - JObject incomeDataJObject = new JObject(); - string addTag = detailRow["p_emp_addTag"] + ""; - if (!addTag.Equals("1")) + JObject bizDataJObject = new JObject(); + string typeCode = group.Key; //当前的分组编码 + foreach (DataRow detailRow in group) { - continue; + JObject incomeDataJObject = new JObject(); + incomeDataJObject.Add("name", detailRow["name"] + ""); + incomeDataJObject.Add("idType", detailRow["idType"] + ""); + incomeDataJObject.Add("idNumber", detailRow["idNumber"] + ""); + incomeDataJObject.Add("income", detailRow["income"] + ""); + JObject externFieldsJObject = new JObject(); + if (typeCode.Equals("101060100010100")) + { + externFieldsJObject.Add("endowmentInsurance", detailRow["endowmentInsurance"] + ""); + externFieldsJObject.Add("medicalInsurance", detailRow["medicalInsurance"] + ""); + externFieldsJObject.Add("unemploymentInsurance", detailRow["unemploymentInsurance"] + ""); + externFieldsJObject.Add("housingFund", detailRow["housingFund"] + ""); + } + else if (typeCode.Equals("101060100010300")) + { + externFieldsJObject.Add("sfkcjcfy", detailRow["sfkcjcfy"] + ""); + externFieldsJObject.Add("employedDate", detailRow["employedDate"] + ""); + } + else if (typeCode.Equals("101060100010400")) + { + + } + else if (typeCode.Equals("101060100010500")) + { + + } + incomeDataListJArry.Add(incomeDataJObject); } - incomeDataJObject.Add("name", detailRow["name"] + ""); - incomeDataJObject.Add("idType", detailRow["idType"] + ""); - incomeDataJObject.Add("idNumber", detailRow["idNumber"] + ""); - incomeDataJObject.Add("income", detailRow["income"] + ""); - incomeDataListJArry.Add(incomeDataJObject); + bizDataJObject.Add("incomeTypeCode", typeCode); + bizDataJObject.Add("incomeDataList", incomeDataListJArry); + bizDataListJArry.Add(bizDataJObject); } - JObject bizDataJObject = new JObject(); - bizDataJObject.Add("incomeTypeCode", "101060100010500"); - bizDataJObject.Add("incomeDataList", incomeDataListJArry); - bizDataListJArry.Add(bizDataJObject); pmsJObject.Add("bizDataList", bizDataListJArry); HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); @@ -877,6 +898,99 @@ namespace Lskj.QueryEssentialInfo return code; } /// + /// 生成批次信息 + /// + /// + /// + /// + public static string GetBatch(out string resultRead, string incomeTypeCode, out string resultMsg) + { + string code = "-9999"; + resultRead = ""; + resultMsg = ""; + try + { + string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/gen/batch"; + HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8); + Dictionary headerDic = new Dictionary(); + DateTime utcNow = DateTime.UtcNow; + string date = utcNow.ToString("r", CultureInfo.InvariantCulture); + string host = "api.baiwangjs.com"; + string x_htjs_nonce = Guid.NewGuid().ToString().ToLower(); + string x_htjs_ua = "1.8.0_181 64 bit, sdk-ver=1.0.0"; + headerDic.Add("Date", DateTime.UtcNow.ToString()); + headerDic.Add("host", host); + headerDic.Add("x-htjs-nonce", x_htjs_nonce); + headerDic.Add("x-htjs-ua", x_htjs_ua); + headerDic.Add("Authorization", $"{GetAuthorization(date, host, x_htjs_nonce, x_htjs_ua)}"); + JObject pmsJObject = new JObject(); + pmsJObject.Add("qysh", mainRow["qysh"] + ""); + pmsJObject.Add("ysyf", mainRow["ysyf"] + ""); + pmsJObject.Add("nsrlxdm", mainRow["nsrlxdm"] + ""); + pmsJObject.Add("incomeTypeCode", incomeTypeCode); + HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); + resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); + if (webResponse != null && !string.IsNullOrEmpty(resultRead)) + { + JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead); + code = resultJObject["code"] + ""; + resultMsg = resultJObject["msg"] + ""; + } + } + catch (Exception) + { + throw; + } + return code; + } + /// + /// 获取计算结果 + /// + /// + /// + /// + /// + public static string GetResult(out string resultRead, string incomeTypeCode, out string resultMsg) + { + string code = "-9999"; + resultRead = ""; + resultMsg = ""; + try + { + string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/acquire/compute/result"; + HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8); + Dictionary headerDic = new Dictionary(); + DateTime utcNow = DateTime.UtcNow; + string date = utcNow.ToString("r", CultureInfo.InvariantCulture); + string host = "api.baiwangjs.com"; + string x_htjs_nonce = Guid.NewGuid().ToString().ToLower(); + string x_htjs_ua = "1.8.0_181 64 bit, sdk-ver=1.0.0"; + headerDic.Add("Date", DateTime.UtcNow.ToString()); + headerDic.Add("host", host); + headerDic.Add("x-htjs-nonce", x_htjs_nonce); + headerDic.Add("x-htjs-ua", x_htjs_ua); + headerDic.Add("Authorization", $"{GetAuthorization(date, host, x_htjs_nonce, x_htjs_ua)}"); + JObject pmsJObject = new JObject(); + pmsJObject.Add("qysh", mainRow["qysh"] + ""); + pmsJObject.Add("skssqQ", mainRow["skssqQ"] + ""); + pmsJObject.Add("skssqZ", mainRow["skssqZ"] + ""); + pmsJObject.Add("incomeTypeCode", incomeTypeCode); + HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); + resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); + if (webResponse != null && !string.IsNullOrEmpty(resultRead)) + { + JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead); + code = resultJObject["code"] + ""; + resultMsg = resultJObject["msg"] + ""; + } + } + catch (Exception) + { + throw; + } + return code; + } + /// /// 获取Authorization /// public static string GetAuthorization(string date, string host, string x_htjs_nonce, string x_htjs_ua)