his_export_data_controller.go 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package controllers
  2. import (
  3. "XT_New/enums"
  4. "XT_New/models"
  5. "XT_New/service"
  6. "github.com/astaxie/beego"
  7. "github.com/shopspring/decimal"
  8. "time"
  9. )
  10. type HisExportDataController struct {
  11. BaseAuthAPIController
  12. }
  13. func HisExportDataApiRegistRouters() {
  14. beego.Router("/api/export", &HisExportDataController{}, "Get:GetExportData")
  15. beego.Router("/api/batchsettle/get", &HisExportDataController{}, "Get:GetExportSettleData")
  16. beego.Router("/api/export/10726/detail", &HisExportDataController{}, "Get:Get10726DetailExportData")
  17. beego.Router("/api/export/10726/summary", &HisExportDataController{}, "Get:Get10726SummaryExportData")
  18. beego.Router("/api/export/10697/summary", &HisExportDataController{}, "Get:Get10697SummaryExportData")
  19. }
  20. func (c *HisExportDataController) Get10726DetailExportData() {
  21. start_time := c.GetString("start_time")
  22. end_time := c.GetString("end_time")
  23. result, _ := service.GetHisOrderBy10726Detail(start_time, end_time)
  24. c.ServeSuccessJSON(map[string]interface{}{
  25. "result": result,
  26. })
  27. }
  28. func (c *HisExportDataController) Get10726SummaryExportData() {
  29. start_time := c.GetString("start_time")
  30. end_time := c.GetString("end_time")
  31. result, _ := service.GetHisOrderBy10726Summary(start_time, end_time)
  32. c.ServeSuccessJSON(map[string]interface{}{
  33. "result": result,
  34. })
  35. }
  36. func (c *HisExportDataController) Get10697SummaryExportData() {
  37. start_time := c.GetString("start_time")
  38. end_time := c.GetString("end_time")
  39. ins := c.GetString("ins")
  40. result, _ := service.GetHisOrderBy10697Summary(start_time, end_time, ins)
  41. c.ServeSuccessJSON(map[string]interface{}{
  42. "result": result,
  43. })
  44. }
  45. func (c *HisExportDataController) GetExportSettleData() {
  46. patient_id, _ := c.GetInt64("patient_id", 0)
  47. start_time := c.GetString("start_time")
  48. end_time := c.GetString("end_time")
  49. admin_user_id, _ := c.GetInt64("admin_user_id")
  50. var order models.HisOrder
  51. orders, _ := service.GetHisOrderByTime(patient_id, start_time, end_time)
  52. order = orders[len(orders)-1]
  53. order.MedfeeSumamt = 0
  54. order.FundPaySumamt = 0
  55. order.PsnCashPay = 0
  56. order.ActPayDedc = 0
  57. order.PreselfpayAmt = 0
  58. order.HifpPay = 0
  59. order.HifmiPay = 0
  60. order.HifesPay = 0
  61. order.MafPay = 0
  62. order.CvlservPay = 0
  63. order.OthPay = 0
  64. order.AcctPay = 0
  65. decimal.DivisionPrecision = 2
  66. var orderInfos []models.BatchHisOrderInfo
  67. for _, item := range orders {
  68. order.MedfeeSumamt, _ = decimal.NewFromFloat(order.MedfeeSumamt).Add(decimal.NewFromFloat(item.MedfeeSumamt)).Float64()
  69. order.FundPaySumamt, _ = decimal.NewFromFloat(order.FundPaySumamt).Add(decimal.NewFromFloat(item.FundPaySumamt)).Float64()
  70. order.PsnCashPay, _ = decimal.NewFromFloat(order.PsnCashPay).Add(decimal.NewFromFloat(item.PsnCashPay)).Float64()
  71. order.ActPayDedc, _ = decimal.NewFromFloat(order.ActPayDedc).Add(decimal.NewFromFloat(item.ActPayDedc)).Float64()
  72. order.PreselfpayAmt, _ = decimal.NewFromFloat(order.PreselfpayAmt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  73. order.HifpPay, _ = decimal.NewFromFloat(order.HifpPay).Add(decimal.NewFromFloat(item.HifpPay)).Float64()
  74. order.HifmiPay, _ = decimal.NewFromFloat(order.HifmiPay).Add(decimal.NewFromFloat(item.HifmiPay)).Float64()
  75. order.HifesPay, _ = decimal.NewFromFloat(order.HifesPay).Add(decimal.NewFromFloat(item.HifesPay)).Float64()
  76. order.MafPay, _ = decimal.NewFromFloat(order.MafPay).Add(decimal.NewFromFloat(item.MafPay)).Float64()
  77. order.CvlservPay, _ = decimal.NewFromFloat(order.CvlservPay).Add(decimal.NewFromFloat(item.CvlservPay)).Float64()
  78. order.OthPay, _ = decimal.NewFromFloat(order.OthPay).Add(decimal.NewFromFloat(item.OthPay)).Float64()
  79. order.AcctPay, _ = decimal.NewFromFloat(order.AcctPay).Add(decimal.NewFromFloat(item.AcctPay)).Float64()
  80. orderInfo, _ := service.GetBatchHisOrderInfoByNumber(item.Number)
  81. orderInfos = append(orderInfos, orderInfo...)
  82. }
  83. //role, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, c.GetAdminUserInfo().AdminUser.Id)
  84. if order.ID == 0 {
  85. c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrong)
  86. return
  87. }
  88. miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
  89. org_id := c.GetAdminUserInfo().CurrentOrgId
  90. //adminInfo, _ := service.GetAdminUserInfoByID(org_id, order.Creator)
  91. patient, _ := service.GetFaPiaoPatientByID(org_id, order.PatientId)
  92. printor_admin, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
  93. charge_admin, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, order.Creator)
  94. var bedCostTotal float64 = 0 //床位总费
  95. var bedCostSelfTotal float64 = 0 //床位自费
  96. var bedCostPartSelfTotal float64 = 0 //床位部分项目自费
  97. var operationCostTotal float64 = 0 //手术费
  98. var operationCostSelfTotal float64 = 0 //手术费
  99. var operationCostPartSelfTotal float64 = 0 //手术费
  100. var otherCostTotal float64 = 0 //其他费用
  101. var otherCostSelfTotal float64 = 0 //其他费用
  102. var otherCostPartSelfTotal float64 = 0 //其他费用
  103. var materialCostTotal float64 = 0 //材料费
  104. var materialCostSelfTotal float64 = 0 //材料费
  105. var materialCostPartSelfTotal float64 = 0 //材料费
  106. var westernMedicineCostTotal float64 = 0 //西药费
  107. var westernMedicineCostSelfTotal float64 = 0 //西药费
  108. var westernMedicineCostPartSelfTotal float64 = 0 //西药费
  109. var chineseTraditionalMedicineCostTotal float64 = 0 //中成药
  110. var chineseTraditionalMedicineCostSelfTotal float64 = 0 //中成药
  111. var chineseTraditionalMedicineCostPartSelfTotal float64 = 0 //中成药
  112. var checkCostTotal float64 = 0 //检查费
  113. var checkCostSelfTotal float64 = 0 //检查费
  114. var checkCostPartSelfTotal float64 = 0 //检查费
  115. var laboratoryCostTotal float64 = 0 //化验费
  116. var laboratoryCostSelfTotal float64 = 0 //化验费
  117. var laboratoryCostPartSelfTotal float64 = 0 //化验费
  118. var treatCostTotal float64 = 0 //治疗费用
  119. var treatCostSelfTotal float64 = 0 //治疗费用
  120. var treatCostPartSelfTotal float64 = 0 //治疗费用
  121. var hiliCostTotal float64 = 0 //护理费
  122. var hiliCostSelfTotal float64 = 0 //护理费
  123. var hiliCostPartSelfTotal float64 = 0 //护理费
  124. decimal.DivisionPrecision = 2
  125. for _, item := range orderInfos {
  126. if item.MedChrgitmType == "01" { //床位费
  127. bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  128. bedCostSelfTotal, _ = decimal.NewFromFloat(bedCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  129. bedCostPartSelfTotal, _ = decimal.NewFromFloat(bedCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  130. }
  131. if item.MedChrgitmType == "07" { //床位费
  132. hiliCostTotal, _ = decimal.NewFromFloat(hiliCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  133. hiliCostSelfTotal, _ = decimal.NewFromFloat(hiliCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  134. hiliCostPartSelfTotal, _ = decimal.NewFromFloat(hiliCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  135. //hiliCostSelfTotal = hiliCostTotal
  136. }
  137. if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
  138. if item.MedChrgitmType == "03" { //检查费
  139. laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  140. laboratoryCostSelfTotal, _ = decimal.NewFromFloat(laboratoryCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  141. laboratoryCostPartSelfTotal, _ = decimal.NewFromFloat(laboratoryCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  142. }
  143. } else {
  144. if item.MedChrgitmType == "03" { //检查费
  145. checkCostTotal, _ = decimal.NewFromFloat(checkCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  146. checkCostSelfTotal, _ = decimal.NewFromFloat(checkCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  147. checkCostPartSelfTotal, _ = decimal.NewFromFloat(checkCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  148. }
  149. }
  150. if item.MedChrgitmType == "04" { //化验费
  151. laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  152. laboratoryCostSelfTotal, _ = decimal.NewFromFloat(laboratoryCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  153. laboratoryCostPartSelfTotal, _ = decimal.NewFromFloat(laboratoryCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  154. }
  155. if item.MedChrgitmType == "05" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" { //治疗费
  156. treatCostTotal, _ = decimal.NewFromFloat(treatCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  157. treatCostSelfTotal, _ = decimal.NewFromFloat(treatCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  158. treatCostPartSelfTotal, _ = decimal.NewFromFloat(treatCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  159. }
  160. if item.MedChrgitmType == "06" { //手术费
  161. operationCostTotal, _ = decimal.NewFromFloat(operationCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  162. operationCostSelfTotal, _ = decimal.NewFromFloat(operationCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  163. operationCostPartSelfTotal, _ = decimal.NewFromFloat(operationCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  164. }
  165. if item.MedChrgitmType == "08" { //材料费
  166. materialCostTotal, _ = decimal.NewFromFloat(materialCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  167. materialCostSelfTotal, _ = decimal.NewFromFloat(materialCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  168. materialCostPartSelfTotal, _ = decimal.NewFromFloat(materialCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  169. }
  170. if item.MedChrgitmType == "09" { //西药费
  171. westernMedicineCostTotal, _ = decimal.NewFromFloat(westernMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  172. westernMedicineCostSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  173. westernMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  174. }
  175. if item.MedChrgitmType == "11" { //中成费
  176. chineseTraditionalMedicineCostTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  177. chineseTraditionalMedicineCostSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  178. chineseTraditionalMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  179. }
  180. if item.MedChrgitmType == "14" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
  181. otherCostTotal, _ = decimal.NewFromFloat(otherCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
  182. otherCostSelfTotal, _ = decimal.NewFromFloat(otherCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
  183. otherCostPartSelfTotal, _ = decimal.NewFromFloat(otherCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
  184. }
  185. }
  186. t := time.Unix(orders[0].SettleAccountsDate, 0)
  187. t2 := time.Unix(orders[len(orders)-1].SettleAccountsDate, 0)
  188. // 使用Format方法将时间转换为字符串
  189. // 这里以 "2006-01-02 15:04:05" 为例,它是Go的预定义常量格式
  190. f_time := t.Format("2006-01-02")
  191. l_time := t2.Format("2006-01-02")
  192. c.ServeSuccessJSON(map[string]interface{}{
  193. "order_infos": orderInfos,
  194. "number": order.MdtrtId,
  195. "date": order.SettleAccountsDate,
  196. "charge_admin": charge_admin,
  197. "printor_admin": printor_admin,
  198. "info": order,
  199. "bedCostTotal": bedCostTotal,
  200. "bedCostSelfTotal": bedCostSelfTotal,
  201. "bedCostPartSelfTotal": bedCostPartSelfTotal,
  202. "operationCostTotal": operationCostTotal,
  203. "operationCostSelfTotal": operationCostSelfTotal,
  204. "operationCostPartSelfTotal": operationCostPartSelfTotal,
  205. "otherCostTotal": otherCostTotal,
  206. "otherCostSelfTotal": otherCostSelfTotal,
  207. "otherCostPartSelfTotal": otherCostPartSelfTotal,
  208. "materialCostTotal": materialCostTotal,
  209. "materialCostSelfTotal": materialCostSelfTotal,
  210. "materialCostPartSelfTotal": materialCostPartSelfTotal,
  211. "westernMedicineCostTotal": westernMedicineCostTotal,
  212. "westernMedicineCostSelfTotal": westernMedicineCostSelfTotal,
  213. "westernMedicineCostPartSelfTotal": westernMedicineCostPartSelfTotal,
  214. "chineseTraditionalMedicineCostTotal": chineseTraditionalMedicineCostTotal,
  215. "chineseTraditionalMedicineCostSelfTotal": chineseTraditionalMedicineCostSelfTotal,
  216. "chineseTraditionalMedicineCostPartSelfTotal": chineseTraditionalMedicineCostPartSelfTotal,
  217. "checkCostTotal": checkCostTotal,
  218. "checkCostSelfTotal": checkCostSelfTotal,
  219. "checkCostPartSelfTotal": checkCostPartSelfTotal,
  220. "laboratoryCostTotal": laboratoryCostTotal,
  221. "laboratoryCostSelfTotal": laboratoryCostSelfTotal,
  222. "laboratoryCostPartSelfTotal": laboratoryCostPartSelfTotal,
  223. "treatCostTotal": treatCostTotal,
  224. "treatCostSelfTotal": treatCostSelfTotal,
  225. "treatCostPartSelfTotal": treatCostPartSelfTotal,
  226. "hiliCostTotal": hiliCostTotal,
  227. "hiliCostSelfTotal": hiliCostSelfTotal,
  228. "hiliCostPartSelfTotal": hiliCostPartSelfTotal,
  229. "patient": patient,
  230. "org_name": miConfig.OrgName,
  231. "org_code": miConfig.Code,
  232. "num": len(orders),
  233. "f_time": f_time,
  234. "l_time": l_time,
  235. })
  236. }
  237. func (this *HisExportDataController) GetExportData() {
  238. start_time := this.GetString("start_time")
  239. start_time = start_time + " 00:00:00"
  240. end_time := this.GetString("end_time")
  241. end_time = end_time + " 23:59:59"
  242. type_str := this.GetString("type")
  243. if type_str == "1" {
  244. ps, _ := service.GetHisOrderDetailFor310(start_time, end_time, this.GetAdminUserInfo().CurrentOrgId)
  245. this.ServeSuccessJSON(map[string]interface{}{
  246. "order": ps,
  247. })
  248. } else {
  249. ps, _ := service.GetHisOrderDetailFor390(start_time, end_time, this.GetAdminUserInfo().CurrentOrgId)
  250. this.ServeSuccessJSON(map[string]interface{}{
  251. "order": ps,
  252. })
  253. }
  254. }