mobile_regist_controller.go 34KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208
  1. package new_mobile_api_controllers
  2. import (
  3. "XT_New/controllers/mobile_api_controllers"
  4. "XT_New/enums"
  5. "XT_New/models"
  6. "XT_New/service"
  7. "XT_New/utils"
  8. "bytes"
  9. "encoding/json"
  10. "fmt"
  11. "github.com/astaxie/beego"
  12. "io/ioutil"
  13. "log"
  14. "net/http"
  15. "net/url"
  16. "os"
  17. "path"
  18. "regexp"
  19. "runtime"
  20. "strconv"
  21. "time"
  22. )
  23. type MobileRegistController struct {
  24. mobile_api_controllers.MobileBaseAPIController
  25. }
  26. // /mobile/regist [get]
  27. // /mobile/regist/submit [post]
  28. // @param mobile:string
  29. // @param password:string
  30. // @param code:string
  31. func (this *MobileRegistController) RegistSubmit() {
  32. mobile := this.GetString("mobile")
  33. pwd := this.GetString("password")
  34. code := this.GetString("code")
  35. // 判断手机号是否存在
  36. if utils.CellPhoneRegexp().MatchString(mobile) == false {
  37. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMobileFormat)
  38. return
  39. }
  40. if len(pwd) == 0 {
  41. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePasswordEmpty)
  42. return
  43. }
  44. if len(code) == 0 {
  45. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeVerificationCodeWrong)
  46. return
  47. }
  48. if service.IsMobileRegister(mobile) == true {
  49. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMobileRegistered)
  50. return
  51. }
  52. if code == "13535547901" {
  53. admin, err := service.RegisterSuperAdmin(mobile, pwd)
  54. if err != nil {
  55. this.ServeFailJSONWithSGJErrorCode(err.Code)
  56. return
  57. } else {
  58. this.Ctx.SetCookie("mobile", mobile)
  59. this.SetSession("mobile_admin_user", admin)
  60. this.Data["json"] = enums.MakeSuccessResponseJSON(map[string]interface{}{
  61. "result": true,
  62. "id": admin.Id,
  63. })
  64. this.ServeJSON()
  65. }
  66. } else {
  67. redisClient := service.RedisClient()
  68. defer redisClient.Close()
  69. cache_code, _ := redisClient.Get("code_msg_" + mobile).Result()
  70. if cache_code != code {
  71. //this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeVerificationCodeWrong)
  72. //this.ServeJSON()
  73. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeVerificationCodeWrong)
  74. return
  75. }
  76. admin, err := service.RegisterSuperAdmin(mobile, pwd)
  77. if err != nil {
  78. this.ServeFailJSONWithSGJErrorCode(err.Code)
  79. return
  80. } else {
  81. this.Ctx.SetCookie("mobile", mobile)
  82. this.SetSession("mobile_admin_user", admin)
  83. // 注册成功后验证码就要使其失效
  84. redisClient.Del("code_msg_" + mobile)
  85. this.Data["json"] = enums.MakeSuccessResponseJSON(map[string]interface{}{
  86. "result": true,
  87. "id": admin.Id,
  88. })
  89. this.ServeJSON()
  90. }
  91. }
  92. }
  93. // /mobile/org/create/submit [post]
  94. // @param name:string
  95. // @param province:string 省名
  96. // @param city:string 市名
  97. // @param district:string 区县
  98. // @param address:string
  99. // @param category:int
  100. // @param contact_name:string
  101. // @param org_phone?:string
  102. // @param open_xt?:bool 是否开启血透系统
  103. // @param open_cdm?:bool 是否开启慢病系统
  104. // @param open_scrm?:bool 是否开启SCRM
  105. // @param open_mall?:bool 是否开启Mall
  106. func (this *MobileRegistController) CreateOrg() {
  107. adminUserObj := this.GetSession("mobile_admin_user")
  108. if adminUserObj == nil {
  109. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeLoginTimeout)
  110. this.ServeJSON()
  111. return
  112. }
  113. adminUser := adminUserObj.(*models.AdminUser)
  114. //if didCreateOrg, checkCreateOrgErr := service.DidAdminUserCreateOrg(adminUser.Id); checkCreateOrgErr != nil {
  115. // this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  116. // this.ServeJSON()
  117. // return
  118. //} else if didCreateOrg {
  119. // this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeRepeatCreateOrg)
  120. // this.ServeJSON()
  121. // return
  122. //}
  123. name := this.GetString("org_name")
  124. shortName := name
  125. provinceName := this.GetString("provinces_name")
  126. cityName := this.GetString("city_name")
  127. districtName := this.GetString("district_name")
  128. address := this.GetString("address")
  129. org_type := this.GetString("org_type")
  130. contactName := this.GetString("contact_name")
  131. //openXT, _ := this.GetBool("open_xt")
  132. //openCDM, _ := this.GetBool("open_cdm")
  133. //openSCRM, _ := this.GetBool("open_scrm")
  134. //openMall, _ := this.GetBool("open_mall")
  135. openXT := true
  136. openCDM := false
  137. openSCRM := false
  138. openMall := false
  139. if len(name) == 0 || len(shortName) == 0 || len(contactName) == 0 || len(address) == 0 || len(provinceName) <= 0 || len(cityName) <= 0 || len(districtName) <= 0 || len(org_type) <= 0 {
  140. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
  141. this.ServeJSON()
  142. return
  143. }
  144. orgPhone := this.GetString("telephone")
  145. //
  146. //if len(orgPhone) > 0 {
  147. // if utils.PhoneRegexp().MatchString(orgPhone) == false {
  148. // this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodePhone)
  149. // this.ServeJSON()
  150. // return
  151. // }
  152. //}
  153. provinceID := 0
  154. cityID := 0
  155. districtID := 0
  156. province, getProvinceErr := service.GetProvinceWithName(provinceName)
  157. if getProvinceErr != nil {
  158. utils.ErrorLog("查询省名失败:%v", getProvinceErr)
  159. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  160. this.ServeJSON()
  161. return
  162. } else if province != nil {
  163. provinceID = int(province.ID)
  164. city, getCityErr := service.GetCityWithName(province.ID, cityName)
  165. if getCityErr != nil {
  166. utils.ErrorLog("查询城市名失败:%v", getCityErr)
  167. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  168. this.ServeJSON()
  169. return
  170. } else if city != nil {
  171. cityID = int(city.ID)
  172. district, getDistrictErr := service.GetDistrictWithName(city.ID, districtName)
  173. if getDistrictErr != nil {
  174. utils.ErrorLog("查询区县名失败:%v", getDistrictErr)
  175. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  176. this.ServeJSON()
  177. return
  178. } else if district != nil {
  179. districtID = int(district.ID)
  180. }
  181. }
  182. }
  183. orgType := service.GetOrgTypeByName(org_type)
  184. org := &models.Org{
  185. Creator: adminUser.Id,
  186. OrgName: name,
  187. OrgShortName: shortName,
  188. Province: int64(provinceID),
  189. City: int64(cityID),
  190. District: int64(districtID),
  191. Address: address,
  192. OrgType: orgType.ID,
  193. Telephone: orgPhone,
  194. ContactName: contactName,
  195. Claim: 1,
  196. Evaluate: 5,
  197. Status: 1,
  198. CreateTime: time.Now().Unix(),
  199. ModifyTime: time.Now().Unix(),
  200. }
  201. adminUsers, _ := service.GetAdminUserByUserID(adminUser.Id)
  202. createErr := service.CreateOrg(org, adminUsers.Name, openXT, openCDM, openSCRM, openMall) // 创建机构以及所有类型的 app,如果有新类型的平台,则需要在这个方法里面把创建这一新类型的 app 的代码加上
  203. if createErr != nil {
  204. utils.ErrorLog("mobile=%v的超级管理员创建机构失败:%v", adminUser.Mobile, createErr)
  205. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeDBCreate)
  206. this.ServeJSON()
  207. } else {
  208. //初始化病人和排班相关数据
  209. InitPatientAndSchedule(org)
  210. //初始化透析方案
  211. InitSystemPrescrption(org)
  212. //初始化角色和权限
  213. InitRoleAndPurviews(org)
  214. //初始化设备管理org
  215. InitEquitMentInformation(org)
  216. //初始化显示配置和打印模版
  217. InitShowConfig(org)
  218. //创建完机构后进行登录验证操作
  219. ip := utils.GetIP(this.Ctx.Request)
  220. ssoDomain := beego.AppConfig.String("sso_domain")
  221. api := ssoDomain + "/m/login/pwd"
  222. values := make(url.Values)
  223. values.Set("mobile", adminUser.Mobile)
  224. values.Set("password", adminUser.Password)
  225. values.Set("app_type", "3")
  226. values.Set("ip", ip)
  227. resp, requestErr := http.PostForm(api, values)
  228. if requestErr != nil {
  229. utils.ErrorLog("请求SSO登录接口失败: %v", requestErr)
  230. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  231. return
  232. }
  233. defer resp.Body.Close()
  234. body, ioErr := ioutil.ReadAll(resp.Body)
  235. if ioErr != nil {
  236. utils.ErrorLog("SSO登录接口返回数据读取失败: %v", ioErr)
  237. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  238. return
  239. }
  240. var respJSON map[string]interface{}
  241. utils.InfoLog(string(body))
  242. if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
  243. utils.ErrorLog("SSO登录接口返回数据解析JSON失败: %v", err)
  244. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  245. return
  246. }
  247. if respJSON["state"].(float64) != 1 {
  248. msg := respJSON["msg"].(string)
  249. utils.ErrorLog("SSO登录接口请求失败: %v", msg)
  250. if int(respJSON["code"].(float64)) == 609 {
  251. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAccountOrPasswordWrong)
  252. return
  253. }
  254. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  255. return
  256. } else {
  257. utils.SuccessLog("SSO登录成功")
  258. // 下面这几段 Map=>JSON=>Struct 的流程可能会造成速度很慢
  259. userJSON := respJSON["data"].(map[string]interface{})["admin"].(map[string]interface{})
  260. userJSONBytes, _ := json.Marshal(userJSON)
  261. var adminUser models.AdminUser
  262. if err := json.Unmarshal(userJSONBytes, &adminUser); err != nil {
  263. utils.ErrorLog("解析管理员失败:%v", err)
  264. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  265. return
  266. }
  267. var org models.Org
  268. if respJSON["data"].(map[string]interface{})["org"] != nil {
  269. orgJSON := respJSON["data"].(map[string]interface{})["org"].(map[string]interface{})
  270. orgJSONBytes, _ := json.Marshal(orgJSON)
  271. if err := json.Unmarshal(orgJSONBytes, &org); err != nil {
  272. utils.ErrorLog("解析机构失败:%v", err)
  273. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  274. return
  275. }
  276. }
  277. var app models.OrgApp
  278. if respJSON["data"].(map[string]interface{})["app"] != nil {
  279. appJSON := respJSON["data"].(map[string]interface{})["app"].(map[string]interface{})
  280. appJSONBytes, _ := json.Marshal(appJSON)
  281. if err := json.Unmarshal(appJSONBytes, &app); err != nil {
  282. utils.ErrorLog("解析应用失败:%v", err)
  283. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  284. return
  285. }
  286. }
  287. var appRole models.App_Role
  288. if respJSON["data"].(map[string]interface{})["app_role"] != nil {
  289. appRoleJSON := respJSON["data"].(map[string]interface{})["app_role"].(map[string]interface{})
  290. appRoleJSONBytes, _ := json.Marshal(appRoleJSON)
  291. if err := json.Unmarshal(appRoleJSONBytes, &appRole); err != nil {
  292. utils.ErrorLog("解析AppRole失败:%v", err)
  293. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  294. return
  295. }
  296. }
  297. var subscibe models.ServeSubscibe
  298. if respJSON["data"].(map[string]interface{})["subscibe"] != nil {
  299. subscibeJSON := respJSON["data"].(map[string]interface{})["subscibe"].(map[string]interface{})
  300. subscibeJSONBytes, _ := json.Marshal(subscibeJSON)
  301. if err := json.Unmarshal(subscibeJSONBytes, &subscibe); err != nil {
  302. utils.ErrorLog("解析Subscibe失败:%v", err)
  303. this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
  304. return
  305. }
  306. }
  307. //service.GetOrgSubscibeState(&subscibe)
  308. templateInfo, _ := service.GetOrgInfoTemplate(org.Id)
  309. mobileAdminUserInfo := &mobile_api_controllers.MobileAdminUserInfo{
  310. AdminUser: &adminUser,
  311. Org: &org,
  312. App: &app,
  313. AppRole: &appRole,
  314. Subscibe: &subscibe,
  315. TemplateInfo: &templateInfo,
  316. }
  317. //设置seesion
  318. this.SetSession("mobile_admin_user_info", mobileAdminUserInfo)
  319. //设置cookie
  320. mobile := adminUser.Mobile + "-" + strconv.FormatInt(org.Id, 10) + "-" + strconv.FormatInt(appRole.Id, 10)
  321. token := utils.GenerateLoginToken(mobile)
  322. expiration, _ := beego.AppConfig.Int64("mobile_token_expiration_second")
  323. this.Ctx.SetCookie("token_cookie", token, expiration, "/")
  324. var configList interface{}
  325. var FiledList []*models.FiledConfig
  326. if org.Id > 0 {
  327. configList, _ = service.GetConfigList(org.Id)
  328. FiledList, _ = service.FindFiledByOrgId(org.Id)
  329. }
  330. if len(FiledList) == 0 {
  331. var err error
  332. if org.Id > 0 {
  333. err = service.BatchInsertFiledConfig(org.Id)
  334. if err == nil {
  335. FiledList, _ = service.FindFiledByOrgId(org.Id)
  336. } else {
  337. utils.ErrorLog("字段批量插入失败:%v", err)
  338. }
  339. } else {
  340. FiledList = make([]*models.FiledConfig, 0)
  341. }
  342. }
  343. if org.Id > 0 {
  344. major, requestErr := service.GetInspectionMajor(org.Id)
  345. if len(major) == 0 {
  346. QualityeList, err := service.FindQualityByOrgId(org.Id)
  347. if len(QualityeList) == 0 {
  348. err = service.BatchInsertQualityControl(org.Id)
  349. } else {
  350. utils.ErrorLog("字段批量插入失败:%v", err)
  351. }
  352. InspectionList, err := service.FindeInspectionByOrgId(org.Id)
  353. if len(InspectionList) == 0 {
  354. err = service.BatchInspectionConfiguration(org.Id)
  355. } else {
  356. utils.ErrorLog("字段批量插入失败:%v", err)
  357. }
  358. } else {
  359. utils.ErrorLog("字段批量插入失败:%v", requestErr)
  360. }
  361. }
  362. this.ServeSuccessJSON(map[string]interface{}{
  363. "admin": adminUser,
  364. "user": appRole,
  365. "org": org,
  366. "template_info": map[string]interface{}{
  367. "id": templateInfo.ID,
  368. "org_id": templateInfo.OrgId,
  369. "template_id": templateInfo.TemplateId,
  370. },
  371. "config_list": configList,
  372. "filed_list": FiledList,
  373. })
  374. }
  375. }
  376. }
  377. func InitAdviceTemplate(org *models.Org) {
  378. //初始化医嘱模版
  379. adviceInit := &models.AdviceInit{
  380. UserOrgId: org.Id,
  381. CreateTime: time.Now().Unix(),
  382. UpdateTime: time.Now().Unix(),
  383. Status: 1,
  384. IsInit: 1,
  385. }
  386. adviceParentTemplate := LoadConfig("./advice_template.json").Parent_template
  387. for _, item := range adviceParentTemplate {
  388. parentTemplate := &models.DoctorAdviceParentTemplate{
  389. OrgId: org.Id,
  390. Name: item.Name,
  391. Status: 1,
  392. CreatedTime: time.Now().Unix(),
  393. UpdatedTime: time.Now().Unix(),
  394. AdviceType: item.AdviceType,
  395. }
  396. createErr := service.CreateDoctorParentTemplate(parentTemplate)
  397. fmt.Println(parentTemplate.ID)
  398. if createErr == nil {
  399. for _, adviceTemplateItem := range item.DoctorAdviceTemplate {
  400. adviceTeplate := &models.DoctorAdviceTemplate{
  401. OrgId: org.Id,
  402. AdviceName: adviceTemplateItem.AdviceName,
  403. AdviceDesc: adviceTemplateItem.AdviceDesc,
  404. SingleDose: adviceTemplateItem.SingleDose,
  405. SingleDoseUnit: adviceTemplateItem.SingleDoseUnit,
  406. PrescribingNumber: adviceTemplateItem.PrescribingNumber,
  407. PrescribingNumberUnit: adviceTemplateItem.PrescribingNumberUnit,
  408. DeliveryWay: adviceTemplateItem.DeliveryWay,
  409. ExecutionFrequency: adviceTemplateItem.ExecutionFrequency,
  410. AdviceDoctor: adviceTemplateItem.AdviceDoctor,
  411. Status: 1,
  412. CreatedTime: time.Now().Unix(),
  413. UpdatedTime: time.Now().Unix(),
  414. TemplateId: parentTemplate.ID,
  415. DrugSpec: adviceTemplateItem.DrugSpec,
  416. DrugSpecUnit: adviceTemplateItem.DrugSpecUnit,
  417. ParentId: adviceTemplateItem.ParentId,
  418. AdviceType: adviceTemplateItem.AdviceType,
  419. DayCount: adviceTemplateItem.DayCount,
  420. WeekDays: adviceTemplateItem.WeekDays,
  421. FrequencyType: adviceTemplateItem.FrequencyType,
  422. }
  423. createErr := service.CreateDoctorTemplate(adviceTeplate)
  424. if createErr == nil {
  425. for _, childItem := range adviceTemplateItem.SubDoctorAdviceTemplate {
  426. adviceTeplate := &models.DoctorAdviceTemplate{
  427. OrgId: org.Id,
  428. AdviceName: childItem.AdviceName,
  429. AdviceDesc: childItem.AdviceDesc,
  430. SingleDose: childItem.SingleDose,
  431. SingleDoseUnit: childItem.SingleDoseUnit,
  432. PrescribingNumber: childItem.PrescribingNumber,
  433. PrescribingNumberUnit: childItem.PrescribingNumberUnit,
  434. DeliveryWay: childItem.DeliveryWay,
  435. ExecutionFrequency: childItem.ExecutionFrequency,
  436. AdviceDoctor: childItem.AdviceDoctor,
  437. Status: 1,
  438. CreatedTime: time.Now().Unix(),
  439. UpdatedTime: time.Now().Unix(),
  440. TemplateId: parentTemplate.ID,
  441. DrugSpec: childItem.DrugSpec,
  442. DrugSpecUnit: childItem.DrugSpecUnit,
  443. ParentId: adviceTeplate.ID,
  444. AdviceType: childItem.AdviceType,
  445. DayCount: childItem.DayCount,
  446. WeekDays: childItem.WeekDays,
  447. FrequencyType: childItem.FrequencyType,
  448. }
  449. service.CreateDoctorTemplate(adviceTeplate)
  450. }
  451. }
  452. }
  453. }
  454. }
  455. service.CreateAdviceInitConfig(adviceInit)
  456. }
  457. func InitSystemPrescrption(org *models.Org) {
  458. //初始化透析方案
  459. prescriptions := LoadPrescriptionConfig("./system_dialysis_prescription.json").Prescription
  460. for _, item := range prescriptions {
  461. item.UserOrgId = org.Id
  462. item.CreatedTime = time.Now().Unix()
  463. item.UpdatedTime = time.Now().Unix()
  464. service.CreateVMPrescription(item)
  465. }
  466. }
  467. func InitPatientAndSchedule(org *models.Org) {
  468. var ids []int64
  469. //数据初始化
  470. //创建两个虚拟病人
  471. patients := LoadPatientConfig("./patient.json").Patients
  472. for _, item := range patients {
  473. item.UserOrgId = org.Id
  474. item.CreatedTime = time.Now().Unix()
  475. item.UpdatedTime = time.Now().Unix()
  476. item.Status = 1
  477. service.CreateVMOrgPatient(item)
  478. ids = append(ids, item.ID)
  479. }
  480. //创建两个血透的虚拟病人到新表
  481. fmt.Print("patients", patients)
  482. for _, it := range patients {
  483. patientsNew := models.XtPatientsNew{
  484. UserOrgId: org.Id,
  485. CreatedTime: time.Now().Unix(),
  486. UpdatedTime: time.Now().Unix(),
  487. Status: 1,
  488. BloodId: it.ID,
  489. BloodPatients: 1,
  490. Name: it.Name,
  491. Avatar: it.Avatar,
  492. PatientType: it.PatientType,
  493. Source: it.Source,
  494. Lapseto: it.Lapseto,
  495. Gender: it.Gender,
  496. Nation: it.Nation,
  497. NativePlace: it.NativePlace,
  498. MaritalStatus: it.MaritalStatus,
  499. IdCardNo: it.IdCardNo,
  500. Birthday: it.Birthday,
  501. ReimbursementWayId: it.ReimbursementWayId,
  502. HealthCareNo: it.HealthCareNo,
  503. Phone: it.Phone,
  504. HomeAddress: it.HomeAddress,
  505. WorkUnit: it.WorkUnit,
  506. UnitAddress: it.UnitAddress,
  507. Children: it.Children,
  508. IsHospitalFirstDialysis: it.IsHospitalFirstDialysis,
  509. FirstDialysisDate: it.FirstDialysisDate,
  510. BindingState: it.BindingState,
  511. PatientComplains: it.PatientComplains,
  512. PresentHistory: it.PresentHistory,
  513. PastHistory: it.PastHistory,
  514. Temperature: it.Temperature,
  515. Pulse: it.Pulse,
  516. Respiratory: it.Respiratory,
  517. Age: it.Age,
  518. IsOpenRemind: it.IsOpenRemind,
  519. TellPhone: it.TellPhone,
  520. FirstTreatmentDate: it.FirstTreatmentDate,
  521. ContactName: it.ContactName,
  522. IsInfectious: it.IsInfectious,
  523. }
  524. service.CreateVMOrgNewPatient(&patientsNew)
  525. }
  526. //创建1个分组
  527. vmGroup := &models.VMDeviceGroup{
  528. OrgId: org.Id,
  529. Name: "护理一组",
  530. Status: 1,
  531. Ctime: time.Now().Unix(),
  532. Mtime: time.Now().Unix(),
  533. }
  534. service.CreateVMGroup(vmGroup)
  535. //创建两个虚拟分区
  536. vmZone1 := &models.VMDeviceZone{
  537. OrgId: org.Id,
  538. Name: "A区",
  539. Type: 1,
  540. Status: 1,
  541. Ctime: time.Now().Unix(),
  542. Mtime: time.Now().Unix(),
  543. }
  544. service.CreateVMZone(vmZone1)
  545. vmZone2 := &models.VMDeviceZone{
  546. OrgId: org.Id,
  547. Name: "B区",
  548. Type: 2,
  549. Status: 1,
  550. Ctime: time.Now().Unix(),
  551. Mtime: time.Now().Unix(),
  552. }
  553. service.CreateVMZone(vmZone2)
  554. //创建2个虚拟床位
  555. vmDeviceNumber1 := &models.VMDeviceNumber{
  556. OrgId: org.Id,
  557. Number: "1号床",
  558. GroupId: vmGroup.ID,
  559. ZoneId: vmZone1.ID,
  560. Status: 1,
  561. Ctime: time.Now().Unix(),
  562. Mtime: time.Now().Unix(),
  563. }
  564. service.CreateVMDeviceNumber(vmDeviceNumber1)
  565. vmDeviceNumber2 := &models.VMDeviceNumber{
  566. OrgId: org.Id,
  567. Number: "2号床",
  568. GroupId: vmGroup.ID,
  569. ZoneId: vmZone2.ID,
  570. Status: 1,
  571. Ctime: time.Now().Unix(),
  572. Mtime: time.Now().Unix(),
  573. }
  574. service.CreateVMDeviceNumber(vmDeviceNumber2)
  575. var dates []int64
  576. mondayDate := GetDateOfWeek(1)
  577. tuesdayDate := GetDateOfWeek(2)
  578. wednesdayDate := GetDateOfWeek(3)
  579. thursdayDate := GetDateOfWeek(4)
  580. fridayDate := GetDateOfWeek(5)
  581. saturdayDate := GetDateOfWeek(6)
  582. sundayDate := GetDateOfWeek(7)
  583. dates = append(dates, mondayDate)
  584. dates = append(dates, tuesdayDate)
  585. dates = append(dates, wednesdayDate)
  586. dates = append(dates, thursdayDate)
  587. dates = append(dates, fridayDate)
  588. dates = append(dates, saturdayDate)
  589. dates = append(dates, sundayDate)
  590. //创建两个虚拟病人本周的排班
  591. //stime, _ := time.Parse("2006-01-02", time.Now().Format("2006-01-02"))
  592. for week_type, date := range dates {
  593. for index, id := range ids {
  594. if index == 0 {
  595. sch := &models.VMSchedule{
  596. UserOrgId: org.Id,
  597. PartitionId: vmZone1.ID,
  598. BedId: vmDeviceNumber1.ID,
  599. PatientId: id,
  600. ScheduleDate: date,
  601. ScheduleType: 1,
  602. ScheduleWeek: int64(week_type + 1),
  603. ModeId: 1,
  604. Status: 1,
  605. CreatedTime: time.Now().Unix(),
  606. UpdatedTime: time.Now().Unix(),
  607. }
  608. service.CreateVMSch(sch)
  609. }
  610. if index == 1 {
  611. sch := &models.VMSchedule{
  612. UserOrgId: org.Id,
  613. PartitionId: vmZone2.ID,
  614. BedId: vmDeviceNumber2.ID,
  615. PatientId: id,
  616. ScheduleDate: date,
  617. ScheduleType: 2,
  618. ScheduleWeek: int64(week_type + 1),
  619. ModeId: 1,
  620. Status: 1,
  621. CreatedTime: time.Now().Unix(),
  622. UpdatedTime: time.Now().Unix(),
  623. }
  624. service.CreateVMSch(sch)
  625. }
  626. }
  627. }
  628. //创建单周模版
  629. //1.创建模版模式
  630. mode := &models.VMPatientScheduleTemplateMode{
  631. OrgId: org.Id,
  632. Mode: 1,
  633. ExecuteTimes: 0,
  634. Status: 1,
  635. Ctime: time.Now().Unix(),
  636. Mtime: time.Now().Unix(),
  637. }
  638. service.CreateVMSchMode(mode)
  639. //2.创建模版id
  640. templaeIdOne := &models.VMPatientScheduleTemplateId{
  641. OrgId: org.Id,
  642. Status: 1,
  643. Ctime: time.Now().Unix(),
  644. Mtime: time.Now().Unix(),
  645. }
  646. service.CreateVMSchTemplateId(templaeIdOne)
  647. templaeIdTwo := &models.VMPatientScheduleTemplateId{
  648. OrgId: org.Id,
  649. Status: 1,
  650. Ctime: time.Now().Unix(),
  651. Mtime: time.Now().Unix(),
  652. }
  653. service.CreateVMSchTemplateId(templaeIdTwo)
  654. //3.创建单周排班模版
  655. items := LoadSchTemplateConfig("./schedule_template.json").Item
  656. for _, item := range items {
  657. if item.TimeType == 1 {
  658. item.OrgId = org.Id
  659. item.TemplateId = templaeIdOne.ID
  660. item.DeviceNumberId = vmDeviceNumber1.ID
  661. item.PatientId = ids[0]
  662. item.Status = 1
  663. item.Ctime = time.Now().Unix()
  664. item.Mtime = time.Now().Unix()
  665. } else if item.TimeType == 2 {
  666. item.OrgId = org.Id
  667. item.TemplateId = templaeIdOne.ID
  668. item.DeviceNumberId = vmDeviceNumber2.ID
  669. item.PatientId = ids[1]
  670. item.Status = 1
  671. item.Ctime = time.Now().Unix()
  672. item.Mtime = time.Now().Unix()
  673. }
  674. service.CreateVMSchTemplate(item)
  675. }
  676. }
  677. func InitRoleAndPurviews(org *models.Org) {
  678. roles := LoadRoleConfig("./role.json").Roles
  679. app, _ := service.GetOrgApp(org.Id, 3)
  680. for _, item := range roles {
  681. role := &models.Role{
  682. RoleName: item.RoleName,
  683. RoleIntro: item.RoleIntroduction,
  684. Creator: 0,
  685. OrgId: org.Id,
  686. AppId: app.Id,
  687. IsSuperAdmin: false,
  688. Status: 1,
  689. CreateTime: time.Now().Unix(),
  690. ModifyTime: time.Now().Unix(),
  691. Number: item.Number,
  692. IsSystem: item.IsSystem,
  693. }
  694. err := service.CreateOrgRole(role)
  695. if err == nil {
  696. purview := &models.RolePurview{
  697. RoleId: role.Id,
  698. OrgId: org.Id,
  699. AppId: role.AppId,
  700. PurviewIds: item.PurviewIds,
  701. Status: 1,
  702. CreateTime: time.Now().Unix(),
  703. ModifyTime: time.Now().Unix(),
  704. }
  705. func_purview := &models.SgjUserRoleFuncPurview{
  706. RoleId: role.Id,
  707. OrgId: org.Id,
  708. AppId: role.AppId,
  709. PurviewIds: item.FuncIds,
  710. Status: 1,
  711. Ctime: time.Now().Unix(),
  712. Mtime: time.Now().Unix(),
  713. }
  714. service.CreateRolePurview(purview)
  715. service.CreateFuncRolePurview(func_purview)
  716. }
  717. }
  718. }
  719. func (this *MobileRegistController) ModifyName() {
  720. name := this.GetString("name")
  721. adminUserObj := this.GetSession("mobile_admin_user")
  722. adminUser := adminUserObj.(*models.AdminUser)
  723. err := service.ModifyAdminUserName(name, adminUser.Id)
  724. if err != nil {
  725. utils.ErrorLog("修改管理员名字失败:%v", err)
  726. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
  727. this.ServeJSON()
  728. } else {
  729. this.Data["json"] = enums.MakeSuccessResponseJSON(map[string]interface{}{})
  730. this.ServeJSON()
  731. }
  732. }
  733. func (this *MobileRegistController) Login() {
  734. mobile := this.Ctx.GetCookie("mobile")
  735. adminUser, err := service.GetValidAdminUserByMobileReturnErr(mobile)
  736. if err != nil {
  737. utils.ErrorLog("获取管理信息失败:%v", err)
  738. this.Data["json"] = enums.MakeFailResponseJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
  739. this.ServeJSON()
  740. } else {
  741. mobileAdminUserInfo := &mobile_api_controllers.MobileAdminUserInfo{
  742. AdminUser: adminUser,
  743. Org: nil,
  744. App: nil,
  745. AppRole: nil,
  746. Subscibe: nil,
  747. TemplateInfo: nil,
  748. }
  749. var org models.Org
  750. var user models.App_Role
  751. //设置seesion
  752. this.SetSession("mobile_admin_user_info", mobileAdminUserInfo)
  753. //设置cookie
  754. mobile = mobile + "-" + "0" + "-" + "0"
  755. token := utils.GenerateLoginToken(mobile)
  756. expiration, _ := beego.AppConfig.Int64("mobile_token_expiration_second")
  757. this.Ctx.SetCookie("token_cookie", token, expiration, "/")
  758. this.Data["json"] = enums.MakeSuccessResponseJSON(map[string]interface{}{
  759. "admin": adminUser,
  760. "user": user,
  761. "org": org,
  762. "template_info": map[string]interface{}{
  763. "id": 0,
  764. "org_id": 0,
  765. "template_id": 0,
  766. },
  767. "config_list": nil,
  768. "filed_list": nil,
  769. })
  770. this.ServeJSON()
  771. }
  772. }
  773. type RoleConfig struct {
  774. Roles []*models.VMUserRoleAndPurview "json:roles"
  775. }
  776. type PatientConfig struct {
  777. Patients []*models.VMOrgPatients "json:patients"
  778. }
  779. type SchTemplateConfig struct {
  780. Item []*models.VMPatientScheduleTemplateItem "json:item"
  781. }
  782. type PrescriptionConfig struct {
  783. Prescription []*models.SystemPrescription "json:prescription"
  784. }
  785. func LoadRoleConfig(dataFile string) *RoleConfig {
  786. var config RoleConfig
  787. _, filename, _, _ := runtime.Caller(1)
  788. datapath := path.Join(path.Dir(filename), dataFile)
  789. config_file, err := os.Open(datapath)
  790. if err != nil {
  791. emit("Failed to open config file '%s': %s\n", datapath, err)
  792. return &config
  793. }
  794. fi, _ := config_file.Stat()
  795. buffer := make([]byte, fi.Size())
  796. _, err = config_file.Read(buffer)
  797. buffer, err = StripComments(buffer) //去掉注释
  798. if err != nil {
  799. emit("Failed to strip comments from json: %s\n", err)
  800. return &config
  801. }
  802. buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
  803. err = json.Unmarshal(buffer, &config) //解析json格式数据
  804. if err != nil {
  805. emit("Failed unmarshalling json: %s\n", err)
  806. return &config
  807. }
  808. return &config
  809. }
  810. func LoadPatientConfig(dataFile string) *PatientConfig {
  811. var config PatientConfig
  812. _, filename, _, _ := runtime.Caller(1)
  813. datapath := path.Join(path.Dir(filename), dataFile)
  814. config_file, err := os.Open(datapath)
  815. if err != nil {
  816. emit("Failed to open config file '%s': %s\n", datapath, err)
  817. return &config
  818. }
  819. fi, _ := config_file.Stat()
  820. buffer := make([]byte, fi.Size())
  821. _, err = config_file.Read(buffer)
  822. buffer, err = StripComments(buffer) //去掉注释
  823. if err != nil {
  824. emit("Failed to strip comments from json: %s\n", err)
  825. return &config
  826. }
  827. buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
  828. err = json.Unmarshal(buffer, &config) //解析json格式数据
  829. if err != nil {
  830. emit("Failed unmarshalling json: %s\n", err)
  831. return &config
  832. }
  833. return &config
  834. }
  835. func LoadSchTemplateConfig(dataFile string) *SchTemplateConfig {
  836. var config SchTemplateConfig
  837. _, filename, _, _ := runtime.Caller(1)
  838. datapath := path.Join(path.Dir(filename), dataFile)
  839. config_file, err := os.Open(datapath)
  840. if err != nil {
  841. emit("Failed to open config file '%s': %s\n", datapath, err)
  842. return &config
  843. }
  844. fi, _ := config_file.Stat()
  845. buffer := make([]byte, fi.Size())
  846. _, err = config_file.Read(buffer)
  847. buffer, err = StripComments(buffer) //去掉注释
  848. if err != nil {
  849. emit("Failed to strip comments from json: %s\n", err)
  850. return &config
  851. }
  852. buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
  853. err = json.Unmarshal(buffer, &config) //解析json格式数据
  854. if err != nil {
  855. emit("Failed unmarshalling json: %s\n", err)
  856. return &config
  857. }
  858. return &config
  859. }
  860. func LoadPrescriptionConfig(dataFile string) *PrescriptionConfig {
  861. var config PrescriptionConfig
  862. _, filename, _, _ := runtime.Caller(1)
  863. datapath := path.Join(path.Dir(filename), dataFile)
  864. config_file, err := os.Open(datapath)
  865. if err != nil {
  866. emit("Failed to open config file '%s': %s\n", datapath, err)
  867. return &config
  868. }
  869. fi, _ := config_file.Stat()
  870. buffer := make([]byte, fi.Size())
  871. _, err = config_file.Read(buffer)
  872. buffer, err = StripComments(buffer) //去掉注释
  873. if err != nil {
  874. emit("Failed to strip comments from json: %s\n", err)
  875. return &config
  876. }
  877. buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
  878. err = json.Unmarshal(buffer, &config) //解析json格式数据
  879. if err != nil {
  880. emit("Failed unmarshalling json: %s\n", err)
  881. return &config
  882. }
  883. return &config
  884. }
  885. func emit(msgfmt string, args ...interface{}) {
  886. log.Printf(msgfmt, args...)
  887. }
  888. func StripComments(data []byte) ([]byte, error) {
  889. data = bytes.Replace(data, []byte("\r"), []byte(""), 0) // Windows
  890. lines := bytes.Split(data, []byte("\n")) //split to muli lines
  891. filtered := make([][]byte, 0)
  892. for _, line := range lines {
  893. match, err := regexp.Match(`^\s*#`, line)
  894. if err != nil {
  895. return nil, err
  896. }
  897. if !match {
  898. filtered = append(filtered, line)
  899. }
  900. }
  901. return bytes.Join(filtered, []byte("\n")), nil
  902. }
  903. func GetDateOfWeek(week_type int) (weekMonday int64) {
  904. thisTime := time.Now()
  905. weekDay := int(thisTime.Weekday())
  906. if weekDay == 0 {
  907. weekDay = 7
  908. }
  909. weekEnd := 7 - weekDay
  910. weekStart := weekEnd - 6
  911. weekTitle := make([]string, 0)
  912. days := make([]string, 0)
  913. for index := weekStart; index <= weekEnd; index++ {
  914. theDay := thisTime.AddDate(0, 0, index)
  915. indexYear, indexMonthTime, indexDay := theDay.Date()
  916. indexMonth := int(indexMonthTime)
  917. indexWeek := strconv.Itoa(indexYear) + "." + strconv.Itoa(indexMonth) + "." + strconv.Itoa(indexDay)
  918. weekTitle = append(weekTitle, indexWeek)
  919. days = append(days, theDay.Format("2006-01-02"))
  920. }
  921. var targetDayStr string
  922. switch week_type {
  923. case 1:
  924. targetDayStr = days[0]
  925. break
  926. case 2:
  927. targetDayStr = days[1]
  928. break
  929. case 3:
  930. targetDayStr = days[2]
  931. break
  932. case 4:
  933. targetDayStr = days[3]
  934. break
  935. case 5:
  936. targetDayStr = days[4]
  937. break
  938. case 6:
  939. targetDayStr = days[5]
  940. break
  941. case 7:
  942. targetDayStr = days[6]
  943. break
  944. }
  945. targetDay, _ := utils.ParseTimeStringToTime("2006-01-02", targetDayStr)
  946. return targetDay.Unix()
  947. }
  948. type Config struct {
  949. Parent_template []*models.VMDoctorAdviceParentTemplate "json:parent_template"
  950. }
  951. func LoadConfig(dataFile string) *Config {
  952. var config Config
  953. _, filename, _, _ := runtime.Caller(1)
  954. datapath := path.Join(path.Dir(filename), dataFile)
  955. config_file, err := os.Open(datapath)
  956. if err != nil {
  957. emit("Failed to open config file '%s': %s\n", datapath, err)
  958. return &config
  959. }
  960. fi, _ := config_file.Stat()
  961. buffer := make([]byte, fi.Size())
  962. _, err = config_file.Read(buffer)
  963. buffer, err = StripComments(buffer) //去掉注释
  964. if err != nil {
  965. emit("Failed to strip comments from json: %s\n", err)
  966. return &config
  967. }
  968. buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
  969. err = json.Unmarshal(buffer, &config) //解析json格式数据
  970. if err != nil {
  971. emit("Failed unmarshalling json: %s\n", err)
  972. return &config
  973. }
  974. return &config
  975. }
  976. func InitEquitMentInformation(org *models.Org) {
  977. //添加设备型号
  978. mode := models.VMDeviceMode{
  979. DeviceMode: "5008S",
  980. Status: 1,
  981. UserOrgId: org.Id,
  982. Ctime: time.Now().Unix(),
  983. Mtime: time.Now().Unix(),
  984. }
  985. service.CreatedDeviceMode(&mode)
  986. deviceMode := models.VMDeviceMode{
  987. DeviceMode: "4008S",
  988. Status: 1,
  989. UserOrgId: org.Id,
  990. Ctime: time.Now().Unix(),
  991. Mtime: time.Now().Unix(),
  992. }
  993. service.CreatedDeviceMode(&deviceMode)
  994. firstDeviceMode, _ := service.GetFirstDeviceMode(org.Id)
  995. //获取机构下对应的第一数据
  996. number, _ := service.GetFirstBedNumber(org.Id)
  997. //添加设备
  998. deviceAddmacher := models.VmDeviceAddmacher{
  999. SerialNumber: "8VSAHE13",
  1000. DeviceType: 1,
  1001. BedId: number.ID,
  1002. DeviceName: "费森尤斯",
  1003. UnitType: firstDeviceMode.ID,
  1004. MachineStatus: 1,
  1005. Status: 1,
  1006. UserOrgId: org.Id,
  1007. Ctime: time.Now().Unix(),
  1008. }
  1009. service.CreateDeviceAddMacher(&deviceAddmacher)
  1010. macher, _ := service.GetLastMacher(org.Id)
  1011. fmt.Print(macher.ID)
  1012. treatmentmode := models.VmDeviceTreatmentmode{
  1013. MachineId: macher.ID,
  1014. Status: 1,
  1015. Ctime: time.Now().Unix(),
  1016. Mtime: time.Now().Unix(),
  1017. UserOrgId: org.Id,
  1018. TreateMode: 1,
  1019. }
  1020. service.CreatedTreateMode(&treatmentmode)
  1021. treatmentmodeone := models.VmDeviceTreatmentmode{
  1022. MachineId: macher.ID,
  1023. Status: 1,
  1024. Ctime: time.Now().Unix(),
  1025. Mtime: time.Now().Unix(),
  1026. UserOrgId: org.Id,
  1027. TreateMode: 2,
  1028. }
  1029. service.CreatedTreateMode(&treatmentmodeone)
  1030. treatmentmodetwo := models.VmDeviceTreatmentmode{
  1031. MachineId: macher.ID,
  1032. Status: 1,
  1033. Ctime: time.Now().Unix(),
  1034. Mtime: time.Now().Unix(),
  1035. UserOrgId: org.Id,
  1036. TreateMode: 3,
  1037. }
  1038. service.CreatedTreateMode(&treatmentmodetwo)
  1039. treatmentmodethree := models.VmDeviceTreatmentmode{
  1040. MachineId: macher.ID,
  1041. Status: 1,
  1042. Ctime: time.Now().Unix(),
  1043. Mtime: time.Now().Unix(),
  1044. UserOrgId: org.Id,
  1045. TreateMode: 4,
  1046. }
  1047. service.CreatedTreateMode(&treatmentmodethree)
  1048. treatmentmodefour := models.VmDeviceTreatmentmode{
  1049. MachineId: macher.ID,
  1050. Status: 1,
  1051. Ctime: time.Now().Unix(),
  1052. Mtime: time.Now().Unix(),
  1053. UserOrgId: org.Id,
  1054. TreateMode: 5,
  1055. }
  1056. service.CreatedTreateMode(&treatmentmodefour)
  1057. treatmentmodefive := models.VmDeviceTreatmentmode{
  1058. MachineId: macher.ID,
  1059. Status: 1,
  1060. Ctime: time.Now().Unix(),
  1061. Mtime: time.Now().Unix(),
  1062. UserOrgId: org.Id,
  1063. TreateMode: 12,
  1064. }
  1065. service.CreatedTreateMode(&treatmentmodefive)
  1066. }
  1067. func InitShowConfig(org *models.Org) {
  1068. service.BatchInsertFiledSystemConfig(org.Id)
  1069. template := &models.VMGobalTemplate{
  1070. Status: 1,
  1071. Ctime: time.Now().Unix(),
  1072. Mtime: time.Now().Unix(),
  1073. OrgId: org.Id,
  1074. TemplateId: 2,
  1075. }
  1076. service.CreateVMPrintTemplate(template)
  1077. }