his_export_data_controller.go 17KB

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