using Newtonsoft.Json.Linq; using PTMedicalInsurance.Common; using PTMedicalInsurance.Entity; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PTMedicalInsurance.Business { class LocalMedDirDownloadProcess : AbstractProcess { int maxNo = 0; /// /// 药品、诊疗目录 /// /// /// public override CallResult Process(JObject input) { // sbjgbh传需要查询的社保局编号,济南医疗传370100(或37010101),工伤传37019L(或37019L01)省医保37000000 if(!string.IsNullOrEmpty(input["ver"].Text())) { maxNo = int.Parse(input["ver"].Text()); } bool hasMore = true; while (hasMore) { //核心目录 //var ret = FetchDirectory(TradeEnum.DirectoryDownload, "ylxm_ds", "sxzfbl_ds", "xj_ds"); //医院项目 //var ret = FetchDirectory(TradeEnum.DirectoryDownload, "yyxm_ds", "", "xj_ds"); var ret = FetchDirectory(TradeEnum.DirectoryDownloadExt, "yyxm_ds", "", "xj_ds"); hasMore = ret.hasMore; updateDirectory(ret.data); updateLimitPrice(ret.limitData); // 多自费项目 updateSelfPercent(ret.percentData); } return IrisReturn("更新成功!", null); } private void updateDirectory(JArray data) { List list = new List(); try { foreach (var dir in data) { HBMedInsuDirectory obj = ConvertToEntity((JObject)dir); list.Add(obj); } // 保存 saveToServer(list); } catch (Exception ex) { } } private JObject saveToServer(List data) { JObject joIn = new JObject(); JObject joRtn = new JObject(); string outParam = ""; try { joIn.Add("params", JArray.Parse(JsonHelper.toJsonString(data))); joIn.Add("code", "09010035"); joIn.Add("updateUserID", Global.user.ID); InvokeHelper invoker = new InvokeHelper(); string sInput = joIn.ToString(); joRtn = invoker.invokeInsuService(sInput, "applyDataToIris"); outParam = joRtn.ToString(); return joRtn; } catch (Exception ex) { joRtn = JsonHelper.setExceptionJson(-1, "applyDataToIris", ex.Message); outParam = joRtn.ToString(); return joRtn; } } private (bool hasMore, JArray data, JArray percentData, JArray limitData) FetchDirectory(TradeEnum trade, string dsName) { return FetchDirectory(trade,dsName,null,null); } private (bool hasMore, JArray data,JArray percentData,JArray limitData) FetchDirectory(TradeEnum trade, string dsName,string percentName,string limitName) { JObject joInput = new JObject(); joInput["p_sxh"] = maxNo.ToString(); //全量下载0,后面传最大 Global.pat.insuplc_admdvs = "370100"; JObject joRtn = invoker.invokeCenterService(trade, joInput); if ("0".Equals(JsonHelper.getDestValue(joRtn, "resultcode"))) { // 是否还有数据 bool hasMore = "1".Equals(JsonHelper.getDestValue(joRtn, "sfjxxz")); JArray data = JArray.Parse(JsonHelper.getDestValue(joRtn, dsName)); JArray percent = new JArray(); if (!string.IsNullOrEmpty(percentName)) { percent = JArray.Parse(JsonHelper.getDestValue(joRtn, percentName)); } else { //自付比例在项目中 foreach (var item in data) { if (!string.IsNullOrEmpty(item["zfbl"].Text())) { dynamic percentObj = new JObject(); percentObj.ylxmbm = item["gbxmbm"].Text(); percentObj.rqlb = item["rqlb"].Text(); percentObj.yltclb = item["yltclb"].Text(); percentObj.sm = item["sm"].Text(); percentObj.qsrq = item["qsrq"].Text(); percentObj.zzrq = item["zzrq"].Text(); percentObj.xzbz = item["xzbz"].Text(); percentObj.sxzfbl = item["zfbl"].Text(); percent.Add(percentObj); } } } JArray limit = new JArray(); if (!string.IsNullOrEmpty(limitName)) { limit = JArray.Parse(JsonHelper.getDestValue(joRtn, limitName)); } return (hasMore, data, percent, limit); } else { MessageBox.Show(JsonHelper.getDestValue(joRtn, "err_msg")); } return (false, new JArray(), new JArray(), new JArray()); } public CallResult DownloadSelfpay(JObject input) { string code = input["code"].Text(); //if (!string.IsNullOrEmpty(code)) //{ dynamic joInput = new JObject(); joInput.p_yyxmbm = code; joInput.p_rq = ""; //单个更新比例 Global.pat.insuplc_admdvs = "370100"; JObject joRtn = invoker.invokeCenterService(TradeEnum.SelfPayPercent, joInput); if ("0".Equals(JsonHelper.getDestValue(joRtn, "resultcode"))) { JArray percent = new JArray(); JArray data = JArray.Parse(JsonHelper.getDestValue(joRtn, "zfbl_ds")); foreach (var item in data) { if (!string.IsNullOrEmpty(item["zfbl"].Text())) { dynamic percentObj = new JObject(); percentObj.ylxmbm = code; percentObj.rqlb = item["rqlb"].Text(); percentObj.yltclb = "6"; percentObj.sm = item["sm"].Text(); percentObj.sxzfbl = item["zfbl"].Text(); percent.Add(percentObj); } } updateSelfPercent(percent); } //} return Success(); } /// /// 诊断目录下载 /// /// /// public CallResult DownloadDiagnosis(JObject input) { //sbjgbh传需要查询的社保局编号,济南医疗传370100(或37010101),工伤传37019L(或37019L01) if (!string.IsNullOrEmpty(input["ver"].Text())) { maxNo = int.Parse(input["ver"].Text()); } bool hasMore = true; while (hasMore) { var ret = FetchDirectory(TradeEnum.DirectoryDownloadCore, "ybjb_ds"); hasMore = ret.hasMore; List list = new List(); foreach (var d in ret.data) { list.Add(NewDiagnosis((JObject)d)); } saveToServer(list); } return IrisReturn("下载成功",null); } /// /// 科室查询 /// /// /// public CallResult QueryDepartment() { JObject joInput = new JObject(); joInput["p_ksbm"] = ""; //全量下载 Global.pat.insuplc_admdvs = "370100"; JObject joRtn = invoker.invokeCenterService(TradeEnum.DepartmentQuery, joInput); if ("0".Equals(JsonHelper.getDestValue(joRtn, "resultcode"))) { // 是否还有数据 outParam = JsonHelper.getDestValue(joRtn, "dept_ds"); } return Success(); } private HBMedInsuDirectory NewDiagnosis(JObject obj) { HBMedInsuDirectory jsonTemp = new HBMedInsuDirectory(); jsonTemp.updateUserID = Global.user.ID; jsonTemp.HospitalDr = Global.inf.hospitalDr; jsonTemp.InterfaceDr = Global.inf.interfaceDr; jsonTemp.Code = obj["jbbm"].Text(); jsonTemp.Name = obj["jbmc"].Text(); jsonTemp.HisType = "4"; jsonTemp.HisTypeName = "诊断"; jsonTemp.ValidFlag = "1".Equals(obj["zxbz"].Text()) ? 0 : 1; jsonTemp.Note = obj["bz"].Text(); jsonTemp.PinyinSearchCode = obj["py"].Text(); jsonTemp.DrugSafetyStandardCode = ""; return jsonTemp; } private HBMedInsuDirectory ConvertToEntity(JObject obj) { string hisType = obj["ypbz"].Text() ?? "2"; string hisTypeName = hisType.Equals("1") ? "药品" : "诊疗"; HBMedInsuDirectory insu = new HBMedInsuDirectory(); maxNo = Math.Max(maxNo, int.Parse(obj["sxh"].ToString())); insu.ID = ""; insu.updateUserID = Global.user.ID; insu.HospitalDr = Global.inf.hospitalDr; insu.InterfaceDr = Global.inf.interfaceDr; insu.Code = obj["ylxmbm"].Text(); insu.Name = obj["ylxmbzmc"].Text(); insu.NationalCode = obj["gbxmbm"].Text(); insu.NationalName = obj["gbxmmc"].Text(); insu.HisType = hisType; insu.HisTypeName = hisTypeName; insu.LocateCode = obj["pms_id"].Text(); insu.LocateName = obj["pms_name"].Text(); insu.DosageFormCode = obj["jxm"].Text(); insu.DosageFormName = obj["jxm"].Text(); insu.CategoryCode = obj["listtype"].Text(); insu.CategoryName = ""; // 规格 insu.Specification = obj["bzgg"].Text(); insu.SpecificationCode = obj["gg"].Text(); insu.UnitOfPackag = obj["dw"].Text(); insu.UnitOfValuation = obj["ms_charge_unit"].Text(); //insu.StartDate = obj["qsrq"].Text(); //insu.EndDate = obj["zzrq"].Text(); insu.PinyinSearchCode = obj["py"].Text(); insu.Instructions = obj["ms_explain"].Text(); insu.ExceptContent = obj["cwnr"].Text(); insu.Connotation = obj["xmnh"].Text(); insu.ValidFlag = obj["spbz"].Int(); insu.Note = ""; insu.VersionNO = obj["sxh"].Text(); insu.VersionName = obj["sxh"].Text(); string cancelFlag = obj["zxbz"].Text(); insu.UseFlag = "1".Equals(cancelFlag)?0:1; insu.DrugSafetyStandardCode = obj["ypbwm"].Text(); insu.ApprovalNO = obj["bzwh"].Text(); ; //insu.SpecialFlag = obj[""].Int(); //insu.LimitFlag = obj[""].Int(); //insu.LimitRange = obj[""].Text(); insu.UniqueRecordNO = obj["sxh"].Text(); insu.Manufacturers = obj["scqy"].Text(); insu.SelfPercent = obj["zfbl"].Text(); insu.ChargeItemLevelName = obj["mldj"].Text(); insu.MinPackagingQuantity = obj["zxbzsl"].Text(); insu.MinPackagingUnit = obj["gjjzxbzdw"].Text(); insu.UpdateTime = obj["gxsj"].Text(); if (insu.SelfPercent == "0") { insu.ChargeItemLevel = "01"; insu.ChargeItemLevelName = "甲"; } else if (insu.ChargeItemLevelName == "1") { insu.ChargeItemLevel = "03"; insu.ChargeItemLevelName = "丙"; } else { insu.ChargeItemLevel = "02"; insu.ChargeItemLevelName = "乙"; } return insu; } private int updateLimitPrice(JArray data) { if (data?.Count < 1) return 0; string errMsg = ""; JArray joArray = new JArray(); try { foreach (var dir in data) { dynamic joTmp = new JObject(); joTmp.HospitalDr = Global.inf.hospitalDr; joTmp.InterfaceDr = Global.inf.interfaceDr; joTmp.updateUserID = Global.user.ID; joTmp.Code = dir["ylxmbm"].Text(); joTmp.PersonnelType = dir["rqlb"].Text(); //人群类别 joTmp.LimitType = dir["yltclb"].Text(); //限价类型(统筹类别) joTmp.BeginDate = Utils.ConvertShortDate(dir["qsrq"].Text()); joTmp.EndDate = Utils.ConvertShortDate(dir["zzrq"].Text()); joTmp.UpLimitAmount = dir["xj"].Text(); //限价 joArray.Add(joTmp); } JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010084", joArray).ToString(), "更新限价信息"); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } else { outParam = joRtn.ToString(); return 0; } } catch (Exception ex) { outParam = "更新项目自费比例:" + ex.Message; return -1; } } /// /// 如果存在同一个目录多个比例,则保存在比例扩展表 /// /// /// private int updateSelfPercent(JArray data) { if (data?.Count < 1) return 0; string errMsg = ""; JArray joArray = new JArray(); try { foreach (var dir in data) { dynamic joTmp = new JObject(); joTmp.HospitalDr = Global.inf.hospitalDr; joTmp.InterfaceDr = Global.inf.interfaceDr; joTmp.updateUserID = Global.user.ID; joTmp.Code = dir["ylxmbm"].Text(); string personType = dir["rqlb"].Text(); //人群类别 if (string.IsNullOrEmpty(personType)) { personType = "A"; //职工 } joTmp.PersonnelType = personType; string proportionType = dir["yltclb"].Text(); //自费类型(统筹类别) if (string.IsNullOrEmpty(proportionType)) { proportionType = "6"; //普通门诊 } joTmp.ProportionType = proportionType; joTmp.BeginDate = Utils.ConvertShortDate(dir["qsrq"].Text()); joTmp.EndDate = Utils.ConvertShortDate(dir["zzrq"].Text()); joTmp.Proportion = dir["sxzfbl"].Text(); joArray.Add(joTmp); } JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010085", joArray).ToString(), "更新项目自费比例"); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { return -1; } else { outParam = joRtn.ToString(); return 0; } } catch (Exception ex) { outParam = "更新项目自费比例:" + ex.Message; return -1; } } } }