LocalMedDirDownloadProcess.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Common;
  3. using PTMedicalInsurance.Entity;
  4. using PTMedicalInsurance.Helper;
  5. using PTMedicalInsurance.Variables;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace PTMedicalInsurance.Business
  13. {
  14. class LocalMedDirDownloadProcess : AbstractProcess
  15. {
  16. int maxNo = 0;
  17. /// <summary>
  18. /// 药品、诊疗目录
  19. /// </summary>
  20. /// <param name="input"></param>
  21. /// <returns></returns>
  22. public override CallResult Process(JObject input)
  23. {
  24. // sbjgbh传需要查询的社保局编号,济南医疗传370100(或37010101),工伤传37019L(或37019L01)省医保37000000
  25. if(!string.IsNullOrEmpty(input["ver"].Text()))
  26. {
  27. maxNo = int.Parse(input["ver"].Text());
  28. }
  29. bool hasMore = true;
  30. while (hasMore)
  31. {
  32. var ret = FetchDirectory(TradeEnum.DirectoryDownloadCore, "ylxm_ds", "sxzfbl_ds", "xj_ds");
  33. hasMore = ret.hasMore;
  34. updateDirectory(ret.data);
  35. updateLimitPrice(ret.limitData);
  36. // 多自费项目
  37. updateSelfPercent(ret.percentData);
  38. }
  39. return IrisReturn("更新成功!", null);
  40. }
  41. private void updateDirectory(JArray data)
  42. {
  43. List<HBMedInsuDirectory> list = new List<HBMedInsuDirectory>();
  44. try
  45. {
  46. foreach (var dir in data)
  47. {
  48. HBMedInsuDirectory obj = ConvertToEntity((JObject)dir);
  49. list.Add(obj);
  50. }
  51. // 保存
  52. saveToServer(list);
  53. }
  54. catch (Exception ex)
  55. {
  56. }
  57. }
  58. private JObject saveToServer(List<HBMedInsuDirectory> data)
  59. {
  60. JObject joIn = new JObject();
  61. JObject joRtn = new JObject();
  62. string outParam = "";
  63. try
  64. {
  65. joIn.Add("params", JArray.Parse(JsonHelper.toJsonString(data)));
  66. joIn.Add("code", "09010035");
  67. joIn.Add("updateUserID", Global.user.ID);
  68. InvokeHelper invoker = new InvokeHelper();
  69. string sInput = joIn.ToString();
  70. joRtn = invoker.invokeInsuService(sInput, "applyDataToIris");
  71. outParam = joRtn.ToString();
  72. return joRtn;
  73. }
  74. catch (Exception ex)
  75. {
  76. joRtn = JsonHelper.setExceptionJson(-1, "applyDataToIris", ex.Message);
  77. outParam = joRtn.ToString();
  78. return joRtn;
  79. }
  80. }
  81. private (bool hasMore, JArray data, JArray percentData, JArray limitData) FetchDirectory(TradeEnum trade, string dsName)
  82. {
  83. return FetchDirectory(trade,dsName,null,null);
  84. }
  85. private (bool hasMore, JArray data,JArray percentData,JArray limitData) FetchDirectory(TradeEnum trade, string dsName,string percentName,string limitName)
  86. {
  87. JObject joInput = new JObject();
  88. joInput["p_sxh"] = maxNo.ToString(); //全量下载0,后面传最大
  89. Global.pat.insuplc_admdvs = "370100";
  90. JObject joRtn = invoker.invokeCenterService(trade, joInput);
  91. if ("0".Equals(JsonHelper.getDestValue(joRtn, "resultcode")))
  92. {
  93. // 是否还有数据
  94. bool hasMore = "1".Equals(JsonHelper.getDestValue(joRtn, "sfjxxz"));
  95. JArray data = JArray.Parse(JsonHelper.getDestValue(joRtn, dsName));
  96. JArray percent = new JArray();
  97. if (!string.IsNullOrEmpty(percentName))
  98. {
  99. percent = JArray.Parse(JsonHelper.getDestValue(joRtn, percentName));
  100. }
  101. JArray limit = new JArray();
  102. if (!string.IsNullOrEmpty(limitName))
  103. {
  104. limit = JArray.Parse(JsonHelper.getDestValue(joRtn, limitName));
  105. }
  106. return (hasMore, data, percent, limit);
  107. }
  108. else
  109. {
  110. MessageBox.Show(JsonHelper.getDestValue(joRtn, "err_msg"));
  111. }
  112. return (false, new JArray(), new JArray(), new JArray());
  113. }
  114. /// <summary>
  115. /// 诊断目录下载
  116. /// </summary>
  117. /// <param name="input"></param>
  118. /// <returns></returns>
  119. public CallResult DownloadDiagnosis(JObject input)
  120. {
  121. //sbjgbh传需要查询的社保局编号,济南医疗传370100(或37010101),工伤传37019L(或37019L01)
  122. if (!string.IsNullOrEmpty(input["ver"].Text()))
  123. {
  124. maxNo = int.Parse(input["ver"].Text());
  125. }
  126. bool hasMore = true;
  127. while (hasMore)
  128. {
  129. var ret = FetchDirectory(TradeEnum.DirectoryDownloadCore, "ybjb_ds");
  130. hasMore = ret.hasMore;
  131. List<HBMedInsuDirectory> list = new List<HBMedInsuDirectory>();
  132. foreach (var d in ret.data)
  133. {
  134. list.Add(NewDiagnosis((JObject)d));
  135. }
  136. saveToServer(list);
  137. }
  138. return IrisReturn("下载成功",null);
  139. }
  140. /// <summary>
  141. /// 科室查询
  142. /// </summary>
  143. /// <param name="input"></param>
  144. /// <returns></returns>
  145. public CallResult QueryDepartment()
  146. {
  147. JObject joInput = new JObject();
  148. joInput["p_ksbm"] = ""; //全量下载
  149. Global.pat.insuplc_admdvs = "370100";
  150. JObject joRtn = invoker.invokeCenterService(TradeEnum.DepartmentQuery, joInput);
  151. if ("0".Equals(JsonHelper.getDestValue(joRtn, "resultcode")))
  152. {
  153. // 是否还有数据
  154. outParam = JsonHelper.getDestValue(joRtn, "dept_ds");
  155. }
  156. return Success();
  157. }
  158. private HBMedInsuDirectory NewDiagnosis(JObject obj)
  159. {
  160. HBMedInsuDirectory jsonTemp = new HBMedInsuDirectory();
  161. jsonTemp.updateUserID = Global.user.ID;
  162. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  163. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  164. jsonTemp.Code = obj["jbbm"].Text();
  165. jsonTemp.Name = obj["jbmc"].Text();
  166. jsonTemp.HisType = "4";
  167. jsonTemp.HisTypeName = "诊断";
  168. jsonTemp.ValidFlag = "1".Equals(obj["zxbz"].Text()) ? 0 : 1;
  169. jsonTemp.Note = obj["bz"].Text();
  170. jsonTemp.PinyinSearchCode = obj["py"].Text();
  171. jsonTemp.DrugSafetyStandardCode = "";
  172. return jsonTemp;
  173. }
  174. private HBMedInsuDirectory ConvertToEntity(JObject obj)
  175. {
  176. string hisType = obj["ypbz"].Text() ?? "2";
  177. string hisTypeName = hisType.Equals("1") ? "药品" : "诊疗"; HBMedInsuDirectory insu = new HBMedInsuDirectory();
  178. maxNo = Math.Max(maxNo, int.Parse(obj["sxh"].ToString()));
  179. insu.ID = "";
  180. insu.updateUserID = Global.user.ID;
  181. insu.HospitalDr = Global.inf.hospitalDr;
  182. insu.InterfaceDr = Global.inf.interfaceDr;
  183. insu.Code = obj["ylxmbm"].Text();
  184. insu.Name = obj["ylxmbzmc"].Text();
  185. insu.NationalCode = obj["gbxmbm"].Text();
  186. insu.NationalName = obj["gbxmmc"].Text();
  187. insu.HisType = hisType;
  188. insu.HisTypeName = hisTypeName;
  189. insu.LocateCode = obj["pms_id"].Text();
  190. insu.LocateName = obj["pms_name"].Text();
  191. insu.DosageFormCode = obj["jxm"].Text();
  192. insu.DosageFormName = obj["jxm"].Text();
  193. insu.CategoryCode = obj["listtype"].Text();
  194. insu.CategoryName = "";
  195. // 规格
  196. insu.Specification = obj["bzgg"].Text();
  197. insu.SpecificationCode = obj["gg"].Text();
  198. insu.UnitOfPackag = obj["dw"].Text();
  199. insu.UnitOfValuation = obj["ms_charge_unit"].Text();
  200. //insu.StartDate = obj["qsrq"].Text();
  201. //insu.EndDate = obj["zzrq"].Text();
  202. insu.PinyinSearchCode = obj["py"].Text();
  203. insu.Instructions = obj["ms_explain"].Text();
  204. insu.ExceptContent = obj["cwnr"].Text();
  205. insu.Connotation = obj["xmnh"].Text();
  206. insu.ValidFlag = obj["spbz"].Int();
  207. insu.Note = "";
  208. insu.VersionNO = obj["sxh"].Text();
  209. insu.VersionName = obj["sxh"].Text();
  210. string cancelFlag = obj["zxbz"].Text();
  211. insu.UseFlag = "1".Equals(cancelFlag)?0:1;
  212. insu.DrugSafetyStandardCode = obj["ypbwm"].Text();
  213. insu.ApprovalNO = obj["bzwh"].Text(); ;
  214. //insu.SpecialFlag = obj[""].Int();
  215. //insu.LimitFlag = obj[""].Int();
  216. //insu.LimitRange = obj[""].Text();
  217. insu.UniqueRecordNO = obj["sxh"].Text();
  218. insu.Manufacturers = obj["scqy"].Text();
  219. insu.SelfPercent = obj["zfbl"].Text();
  220. insu.ChargeItemLevelName = obj["mldj"].Text();
  221. insu.MinPackagingQuantity = obj["zxbzsl"].Text();
  222. insu.MinPackagingUnit = obj["gjjzxbzdw"].Text();
  223. insu.UpdateTime = obj["gxsj"].Text();
  224. if (insu.SelfPercent == "100")
  225. {
  226. insu.ChargeItemLevel = "01";
  227. insu.ChargeItemLevelName = "甲";
  228. }
  229. else if (insu.ChargeItemLevelName == "0")
  230. {
  231. insu.ChargeItemLevel = "03";
  232. insu.ChargeItemLevelName = "丙";
  233. }
  234. else
  235. {
  236. insu.ChargeItemLevel = "02";
  237. insu.ChargeItemLevelName = "乙";
  238. }
  239. return insu;
  240. }
  241. private int updateLimitPrice(JArray data)
  242. {
  243. if (data?.Count < 1) return 0;
  244. string errMsg = "";
  245. JArray joArray = new JArray();
  246. try
  247. {
  248. foreach (var dir in data)
  249. {
  250. dynamic joTmp = new JObject();
  251. joTmp.HospitalDr = Global.inf.hospitalDr;
  252. joTmp.InterfaceDr = Global.inf.interfaceDr;
  253. joTmp.updateUserID = Global.user.ID;
  254. joTmp.Code = dir["ylxmbm"].Text();
  255. joTmp.PersonnelType = dir["rqlb"].Text(); //人群类别
  256. joTmp.LimitType = dir["yltclb"].Text(); //限价类型(统筹类别)
  257. joTmp.BeginDate = Utils.ConvertShortDate(dir["qsrq"].Text());
  258. joTmp.EndDate = Utils.ConvertShortDate(dir["zzrq"].Text());
  259. joTmp.UpLimitAmount = dir["xj"].Text(); //限价
  260. joArray.Add(joTmp);
  261. }
  262. JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010084", joArray).ToString(), "更新限价信息");
  263. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  264. {
  265. return -1;
  266. }
  267. else
  268. {
  269. outParam = joRtn.ToString();
  270. return 0;
  271. }
  272. }
  273. catch (Exception ex)
  274. {
  275. outParam = "更新项目自费比例:" + ex.Message;
  276. return -1;
  277. }
  278. }
  279. /// <summary>
  280. /// 如果存在同一个目录多个比例,则保存在比例扩展表
  281. /// </summary>
  282. /// <param name="data"></param>
  283. /// <returns></returns>
  284. private int updateSelfPercent(JArray data)
  285. {
  286. if (data?.Count < 1) return 0;
  287. string errMsg = "";
  288. JArray joArray = new JArray();
  289. try
  290. {
  291. foreach (var dir in data)
  292. {
  293. dynamic joTmp = new JObject();
  294. joTmp.HospitalDr = Global.inf.hospitalDr;
  295. joTmp.InterfaceDr = Global.inf.interfaceDr;
  296. joTmp.updateUserID = Global.user.ID;
  297. joTmp.Code = dir["ylxmbm"].Text();
  298. joTmp.PersonnelType = "C";
  299. joTmp.ProportionType = "6"; //自费类型(统筹类别)
  300. joTmp.BeginDate = Utils.ConvertShortDate(dir["qsrq"].Text());
  301. joTmp.EndDate = Utils.ConvertShortDate(dir["zzrq"].Text());
  302. joTmp.Proportion = dir["sxzfbl"].Text();
  303. joArray.Add(joTmp);
  304. }
  305. JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010085", joArray).ToString(), "更新项目自费比例");
  306. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  307. {
  308. return -1;
  309. }
  310. else
  311. {
  312. outParam = joRtn.ToString();
  313. return 0;
  314. }
  315. }
  316. catch (Exception ex)
  317. {
  318. outParam = "更新项目自费比例:" + ex.Message;
  319. return -1;
  320. }
  321. }
  322. }
  323. }