Browse Source

历史排班

28169 1 year ago
parent
commit
54773d90dd

File diff suppressed because it is too large
+ 1500 - 205
controllers/manage_api_controller.go


+ 28 - 4
controllers/mobile_api_controllers/dialysis_api_controller.go View File

@@ -2818,6 +2818,11 @@ func (this *DialysisAPIController) StartDialysis() {
2818 2818
 				value, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", prescription.TargetUltrafiltration/float64(totalMin)*60), 6)
2819 2819
 				ultrafiltration_rate = value
2820 2820
 			}
2821
+
2822
+			//针对医师汇
2823
+			if adminUserInfo.Org.Id == 10471 {
2824
+				ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration*60/float64(totalMin)*1000) / 1000
2825
+			}
2821 2826
 		}
2822 2827
 	}
2823 2828
 
@@ -3683,11 +3688,22 @@ func (this *DialysisAPIController) GetLastMonitorRecordTody() {
3683 3688
 				record.UltrafiltrationRate = ultrafiltration_rate
3684 3689
 			}
3685 3690
 
3686
-			if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10340 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 9829 || adminInfo.Org.Id == 10440 || adminInfo.Org.Id == 10469 || adminInfo.Org.Id == 10471 {
3691
+			if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10340 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 9829 || adminInfo.Org.Id == 10440 || adminInfo.Org.Id == 10469 {
3687 3692
 				ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / 1000 / float64(totalMin) * 1000)
3688 3693
 
3689 3694
 				record.UltrafiltrationRate = ultrafiltration_rate
3690 3695
 			}
3696
+
3697
+			if adminInfo.Org.Id == 10471 {
3698
+				ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / 1000 / float64(totalMin) * 1000)
3699
+
3700
+				record.UltrafiltrationRate = ultrafiltration_rate / 1000
3701
+			}
3702
+
3703
+			if adminInfo.Org.Id == 10471 {
3704
+				ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / 1000 / float64(totalMin) * 1000)
3705
+				record.UltrafiltrationRate = ultrafiltration_rate / 1000
3706
+			}
3691 3707
 			//if template.TemplateId == 47 {
3692 3708
 			//	ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin))
3693 3709
 			//	record.UltrafiltrationRate = ultrafiltration_rate
@@ -3714,15 +3730,22 @@ func (this *DialysisAPIController) GetLastMonitorRecordTody() {
3714 3730
 	}
3715 3731
 
3716 3732
 	//长沙南雅
3717
-	if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 10469 || adminInfo.Org.Id == 10471 {
3733
+	if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 10469 {
3718 3734
 
3719 3735
 		if ultrafiltration_rate > 0 {
3720 3736
 			ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate)
3721
-
3737
+			fmt.Println("ultrafiltration_volume", ultrafiltration_volume)
3722 3738
 			record.UltrafiltrationVolume = ultrafiltration_volume
3723 3739
 		}
3724 3740
 
3725 3741
 	}
3742
+
3743
+	if adminInfo.Org.Id == 10471 {
3744
+
3745
+		ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate)
3746
+		fmt.Println("ultrafiltration_volume", ultrafiltration_volume)
3747
+		record.UltrafiltrationVolume = ultrafiltration_volume / 1000
3748
+	}
3726 3749
 	//长沙南雅累计血容量自动计算
3727 3750
 	//if adminInfo.Org.Id == 10340 || adminInfo.Org.Id == 9671 ||  adminInfo.Org.Id == 3877{
3728 3751
 	//	record.AccumulatedBloodVolume = (record.BloodFlowVolume - 25) * (math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime)/3600) * 60) / 1000
@@ -4265,9 +4288,10 @@ func (c *DialysisAPIController) GetLongAdviceOne() {
4265 4288
 		//开启推送提醒逻辑    提交长期处方的时候,弹起长期医嘱推送
4266 4289
 		var advice_three []*models.DoctorAdvice
4267 4290
 
4268
-		//fmt.Println("theStartTime23434343433434433443434343434334", theStartTime)
4269 4291
 		advices, err := service.GetLastLongAdviceByGroupNo(adminUserInfo.Org.Id, patient_id, theStartTime)
4292
+		fmt.Println("advices++++++++++++++++", advices)
4270 4293
 		advices_two, err := service.GetLastLongAdviceByGroupNoThree(adminUserInfo.Org.Id, patient_id, theStartTime)
4294
+		fmt.Println("advices_two------------------------", advices_two)
4271 4295
 		for _, advice := range advices {
4272 4296
 			if advice.FrequencyType == 3 {
4273 4297
 				t := time.Now()

+ 3 - 1
controllers/mobile_api_controllers/patient_api_controller.go View File

@@ -1782,6 +1782,8 @@ func (c *PatientApiController) EditAssessmentBeforeDislysis() {
1782 1782
 				newprescribe.Sodium = 138
1783 1783
 				newprescribe.Bicarbonate = 31.1
1784 1784
 				newprescribe.DialysateFlow = 500
1785
+				newprescribe.PrescribingNumber = 1
1786
+
1785 1787
 			}
1786 1788
 			err := service.AddSigleRecord(&newprescribe)
1787 1789
 			//获取key,清空redis
@@ -3194,7 +3196,7 @@ func (c *PatientApiController) GetPatientMonitor() {
3194 3196
 	adminInfo := c.GetMobileAdminUserInfo()
3195 3197
 	orgID := adminInfo.Org.Id
3196 3198
 	monitor, err := service.GetMonitorRecord(orgID, theStartTime, partition, patient_id)
3197
-
3199
+	fmt.Println("monitor-------------------", monitor)
3198 3200
 	if err != nil {
3199 3201
 		c.ErrorLog("获取排班信息失败:%v", err)
3200 3202
 		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)

+ 31 - 28
controllers/pharmacy_controller.go View File

@@ -368,36 +368,39 @@ func (this *PharmacyController) DispensingMedicine() {
368 368
 		var total int64
369 369
 		var prescribing_number_total int64
370 370
 		for _, item := range advicelist {
371
-			houseConfig, _ := service.GetAllStoreHouseConfig(orgid)
372
-			//查询该药品是否有库存
373
-			list, _ := service.GetDrugTotalCountTwenty(item.DrugId, item.UserOrgId, houseConfig.DrugStorehouseOut)
374
-
375 371
 			//查询改药品信息
376 372
 			medical, _ := service.GetBaseDrugMedical(item.DrugId)
377
-			//判断单位是否相等
378
-			if medical.MaxUnit == item.PrescribingNumberUnit {
379
-				prescribingNumber_temp := strconv.FormatFloat(math.Abs(item.PrescribingNumber), 'f', 0, 64)
380
-				count, _ := strconv.ParseInt(prescribingNumber_temp, 10, 64)
381
-				//转化为最小单位
382
-				total = list.Count*medical.MinNumber + list.StockMinNumber
383
-				prescribing_number_total = count * medical.MinNumber
384
-			}
385
-			if medical.MinUnit == item.PrescribingNumberUnit {
386
-				prescribingNumber_temp := strconv.FormatFloat(math.Abs(item.PrescribingNumber), 'f', 0, 64)
387
-				count, _ := strconv.ParseInt(prescribingNumber_temp, 10, 64)
388
-				total = list.Count*medical.MinNumber + list.StockMinNumber
389
-				prescribing_number_total = count
390
-			}
391
-			fmt.Println("总库存", total)
392
-			fmt.Println("出库数量", prescribing_number_total)
393
-			if medical.IsUse != 1 {
394
-				//如果出库数量大于库存数量
395
-				if prescribing_number_total > total {
396
-					err := fmt.Errorf(service.FindDrugsName(item.DrugId) + "库存不足")
397
-					if err != nil {
398
-						utils.ErrorLog(err.Error())
399
-						this.ServeFailJsonSend(enums.ErrorCodeParamWrong, err.Error())
400
-						return
373
+			//通过药房发药
374
+			if medical.IsPharmacy == 1 {
375
+				houseConfig, _ := service.GetAllStoreHouseConfig(orgid)
376
+				//查询该药品是否有库存
377
+				list, _ := service.GetDrugTotalCountTwenty(item.DrugId, item.UserOrgId, houseConfig.DrugStorehouseOut)
378
+
379
+				//判断单位是否相等
380
+				if medical.MaxUnit == item.PrescribingNumberUnit {
381
+					prescribingNumber_temp := strconv.FormatFloat(math.Abs(item.PrescribingNumber), 'f', 0, 64)
382
+					count, _ := strconv.ParseInt(prescribingNumber_temp, 10, 64)
383
+					//转化为最小单位
384
+					total = list.Count*medical.MinNumber + list.StockMinNumber
385
+					prescribing_number_total = count * medical.MinNumber
386
+				}
387
+				if medical.MinUnit == item.PrescribingNumberUnit {
388
+					prescribingNumber_temp := strconv.FormatFloat(math.Abs(item.PrescribingNumber), 'f', 0, 64)
389
+					count, _ := strconv.ParseInt(prescribingNumber_temp, 10, 64)
390
+					total = list.Count*medical.MinNumber + list.StockMinNumber
391
+					prescribing_number_total = count
392
+				}
393
+				fmt.Println("总库存", total)
394
+				fmt.Println("出库数量", prescribing_number_total)
395
+				if medical.IsUse != 1 {
396
+					//如果出库数量大于库存数量
397
+					if prescribing_number_total > total {
398
+						err := fmt.Errorf(service.FindDrugsName(item.DrugId) + "库存不足")
399
+						if err != nil {
400
+							utils.ErrorLog(err.Error())
401
+							this.ServeFailJsonSend(enums.ErrorCodeParamWrong, err.Error())
402
+							return
403
+						}
401 404
 					}
402 405
 				}
403 406
 			}

+ 1 - 0
controllers/stock_in_api_controller.go View File

@@ -501,6 +501,7 @@ func (c *StockManagerApiController) GetWarehouseList() {
501 501
 		}
502 502
 	}
503 503
 	warehouseList, total, err := service.FindAllWarehousingList(adminUserInfo.CurrentOrgId, page, limit, startTime, endTime, types, keywords, ids, storehouse_id, check_type)
504
+	fmt.Println("ottal--------", total)
504 505
 	houselist, _ := service.GetAllStoreHouseList(adminUserInfo.CurrentOrgId)
505 506
 	if err == nil {
506 507
 		c.ServeSuccessJSON(map[string]interface{}{

+ 1 - 1
main.go View File

@@ -13,7 +13,7 @@ func init() {
13 13
 func main() {
14 14
 	//service.NewAutoCreateWeekSchedules()
15 15
 
16
-	//service.BeginAutoCreateWeekDisinfectionJob()
16
+	service.BeginAutoCreateWeekDisinfectionJob()
17 17
 	//service.BeginAutoCreatePlanJob()
18 18
 	//	//service.AutoClearSchedules()
19 19
 	//service.BeginAutoCreateStaffScheduleJob()

+ 156 - 0
models/device_models.go View File

@@ -454,6 +454,7 @@ type DevicePlans struct {
454 454
 	UserOrgId           int64  `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
455 455
 	EquimentId          int64  `gorm:"column:equiment_id" json:"equiment_id" form:"equiment_id"`
456 456
 	DeviceMode          string `gorm:"column:device_mode" json:"device_mode" form:"device_mode"`
457
+	BedWay              int64  `gorm:"column:bed_way" json:"bed_way" form:"bed_way"`
457 458
 }
458 459
 
459 460
 type DevicePlan struct {
@@ -472,6 +473,7 @@ type DevicePlan struct {
472 473
 	UserOrgId           int64 `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
473 474
 	EquimentId          int64 `gorm:"column:equiment_id" json:"equiment_id" form:"equiment_id"`
474 475
 	BedId               int64 `gorm:"column:bed_id" json:"bed_id" form:"bed_id"`
476
+	BedWay              int64 `gorm:"column:bed_way" json:"bed_way" form:"bed_way"`
475 477
 }
476 478
 
477 479
 func (DevicePlan) TableName() string {
@@ -1284,3 +1286,157 @@ func (XtScheduleSeven) TableName() string {
1284 1286
 
1285 1287
 	return "xt_schedule"
1286 1288
 }
1289
+
1290
+type XtDialysisDeviceWater struct {
1291
+	ID                                 int64   `gorm:"column:id" json:"id" form:"id"`
1292
+	UserOrgId                          int64   `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
1293
+	EquimentId                         int64   `gorm:"column:equiment_id" json:"equiment_id" form:"equiment_id"`
1294
+	RecordDate                         int64   `gorm:"column:record_date" json:"record_date" form:"record_date"`
1295
+	MachineStatus                      int64   `gorm:"column:machine_status" json:"machine_status" form:"machine_status"`
1296
+	FaultDescription                   string  `gorm:"column:fault_description" json:"fault_description" form:"fault_description"`
1297
+	WaterConductivity                  float64 `gorm:"column:water_conductivity" json:"water_conductivity" form:"water_conductivity"`
1298
+	WaterPressure                      float64 `gorm:"column:water_pressure" json:"water_pressure" form:"water_pressure"`
1299
+	Temperature                        float64 `gorm:"column:temperature" json:"temperature" form:"temperature"`
1300
+	ForcePumpStatus                    int64   `gorm:"column:force_pump_status" json:"force_pump_status" form:"force_pump_status"`
1301
+	FirstRoMembraneWater               float64 `gorm:"column:first_ro_membrane_water" json:"first_ro_membrane_water" form:"first_ro_membrane_water"`
1302
+	FirstRoFilmThickWater              float64 `gorm:"column:first_ro_film_thick_water" json:"first_ro_film_thick_water" form:"first_ro_film_thick_water"`
1303
+	FirstRoMembraneEffluent            float64 `gorm:"column:first_ro_membrane_effluent" json:"first_ro_membrane_effluent" form:"first_ro_membrane_effluent"`
1304
+	FirstProductionOfWaterConductivity float64 `gorm:"column:first_production_of_water_conductivity" json:"first_production_of_water_conductivity" form:"first_production_of_water_conductivity"`
1305
+	FirstWaterYield                    float64 `gorm:"column:first_water_yield" json:"first_water_yield" form:"first_water_yield"`
1306
+	LastRoMembraneWater                float64 `gorm:"column:last_ro_membrane_water" json:"last_ro_membrane_water" form:"last_ro_membrane_water"`
1307
+	LastRoFilmThickWater               float64 `gorm:"column:last_ro_film_thick_water" json:"last_ro_film_thick_water" form:"last_ro_film_thick_water"`
1308
+	LastRoMembraneEffluent             float64 `gorm:"column:last_ro_membrane_effluent" json:"last_ro_membrane_effluent" form:"last_ro_membrane_effluent"`
1309
+	LastProductionOfWaterConductivity  float64 `gorm:"column:last_production_of_water_conductivity" json:"last_production_of_water_conductivity" form:"last_production_of_water_conductivity"`
1310
+	LastWaterYield                     float64 `gorm:"column:last_water_yield" json:"last_water_yield" form:"last_water_yield"`
1311
+	CarbonTank                         float64 `gorm:"column:carbon_tank" json:"carbon_tank" form:"carbon_tank"`
1312
+	SndTank                            float64 `gorm:"column:snd_tank" json:"snd_tank" form:"snd_tank"`
1313
+	ResinTank                          float64 `gorm:"column:resin_tank" json:"resin_tank" form:"resin_tank"`
1314
+	Ultrafilter                        float64 `gorm:"column:ultrafilter" json:"ultrafilter" form:"ultrafilter"`
1315
+	HardnessMonitoring                 float64 `gorm:"column:hardness_monitoring" json:"hardness_monitoring" form:"hardness_monitoring"`
1316
+	TotalChlorineDetection             float64 `gorm:"column:total_chlorine_detection" json:"total_chlorine_detection" form:"total_chlorine_detection"`
1317
+	ConcentrationOfPeroxyaceticAcid    float64 `gorm:"column:concentration_of_peroxyacetic_acid" json:"concentration_of_peroxyacetic_acid" form:"concentration_of_peroxyacetic_acid"`
1318
+	ReverseOsmosisMembraneDisinfection int64   `gorm:"column:reverse_osmosis_membrane_disinfection" json:"reverse_osmosis_membrane_disinfection" form:"reverse_osmosis_membrane_disinfection"`
1319
+	FirstDisinfectionMethod            int64   `gorm:"column:first_disinfection_method" json:"first_disinfection_method" form:"first_disinfection_method"`
1320
+	LastDisinfectionMethod             int64   `gorm:"column:last_disinfection_method" json:"last_disinfection_method" form:"last_disinfection_method"`
1321
+	FirstDisinfectionTime              float64 `gorm:"column:first_disinfection_time" json:"first_disinfection_time" form:"first_disinfection_time"`
1322
+	LastDisinfectionTime               float64 `gorm:"column:last_disinfection_time" json:"last_disinfection_time" form:"last_disinfection_time"`
1323
+	Remark                             string  `gorm:"column:remark" json:"remark" form:"remark"`
1324
+	FilterReplacement                  int64   `gorm:"column:filter_replacement" json:"filter_replacement" form:"filter_replacement"`
1325
+	AdminUserId                        int64   `gorm:"column:admin_user_id" json:"admin_user_id" form:"admin_user_id"`
1326
+	Ctime                              int64   `gorm:"column:ctime" json:"ctime" form:"ctime"`
1327
+	Mtime                              int64   `gorm:"column:mtime" json:"mtime" form:"mtime"`
1328
+	Status                             int64   `gorm:"column:status" json:"status" form:"status"`
1329
+	PhDetection                        float64 `gorm:"column:ph_detection" json:"ph_detection" form:"ph_detection"`
1330
+	DisinfectionOfWaterPipeline        int64   `gorm:"column:disinfection_of_water_pipeline" json:"disinfection_of_water_pipeline" form:"disinfection_of_water_pipeline"`
1331
+}
1332
+
1333
+func (XtDialysisDeviceWater) TableName() string {
1334
+
1335
+	return "xt_dialysis_device_water"
1336
+}
1337
+
1338
+type XtNewAriDisinfect struct {
1339
+	ID                         int64  `gorm:"column:id" json:"id" form:"id"`
1340
+	UserOrgId                  int64  `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
1341
+	RecordDate                 int64  `gorm:"column:record_date" json:"record_date" form:"record_date"`
1342
+	FirstDisinfectionWater     string `gorm:"column:first_disinfection_water" json:"first_disinfection_water" form:"first_disinfection_water"`
1343
+	FirstDisinfectionMethods   string `gorm:"column:first_disinfection_methods" json:"first_disinfection_methods" form:"first_disinfection_methods"`
1344
+	FirstDisinfectionTime      string `gorm:"column:first_disinfection_time" json:"first_disinfection_time" form:"first_disinfection_time"`
1345
+	FirstStartTime             int64  `gorm:"column:first_start_time" json:"first_start_time" form:"first_start_time"`
1346
+	FirstEndTime               int64  `gorm:"column:first_end_time" json:"first_end_time" form:"first_end_time"`
1347
+	FirstTotalTime             string `gorm:"column:first_total_time" json:"first_total_time" form:"first_total_time"`
1348
+	FirstIsCheck               int64  `gorm:"column:first_is_check" json:"first_is_check" form:"first_is_check"`
1349
+	FirstModifications         int64  `gorm:"column:first_modifications" json:"first_modifications" form:"first_modifications"`
1350
+	FirstCreator               int64  `gorm:"column:first_creator" json:"first_creator" form:"first_creator"`
1351
+	SencondDisinfectionWater   string `gorm:"column:sencond_disinfection_water" json:"sencond_disinfection_water" form:"sencond_disinfection_water"`
1352
+	SencondDisinfectionMethods string `gorm:"column:sencond_disinfection_methods" json:"sencond_disinfection_methods" form:"sencond_disinfection_methods"`
1353
+	SencondDisinfectionTime    string `gorm:"column:sencond_disinfection_time" json:"sencond_disinfection_time" form:"sencond_disinfection_time"`
1354
+	SencondStartTime           int64  `gorm:"column:sencond_start_time" json:"sencond_start_time" form:"sencond_start_time"`
1355
+	SencondEndTime             int64  `gorm:"column:sencond_end_time" json:"sencond_end_time" form:"sencond_end_time"`
1356
+	SencondTotalTime           string `gorm:"column:sencond_total_time" json:"sencond_total_time" form:"sencond_total_time"`
1357
+	SencondIsCheck             int64  `gorm:"column:sencond_is_check" json:"sencond_is_check" form:"sencond_is_check"`
1358
+	SencondModifications       int64  `gorm:"column:sencond_modifications" json:"sencond_modifications" form:"sencond_modifications"`
1359
+	SencondCreator             int64  `gorm:"column:sencond_creator" json:"sencond_creator" form:"sencond_creator"`
1360
+	ThirdDisinfectionWater     string `gorm:"column:third_disinfection_water" json:"third_disinfection_water" form:"third_disinfection_water"`
1361
+	ThirdDisinfectionMethods   string `gorm:"column:third_disinfection_methods" json:"third_disinfection_methods" form:"third_disinfection_methods"`
1362
+	ThirdDisinfectionTime      string `gorm:"column:third_disinfection_time" json:"third_disinfection_time" form:"third_disinfection_time"`
1363
+	ThirdStartTime             int64  `gorm:"column:third_start_time" json:"third_start_time" form:"third_start_time"`
1364
+	ThirdEndTime               int64  `gorm:"column:third_end_time" json:"third_end_time" form:"third_end_time"`
1365
+	ThirdTotalTime             string `gorm:"column:third_total_time" json:"third_total_time" form:"third_total_time"`
1366
+	ThirdIsCheck               int64  `gorm:"column:third_is_check" json:"third_is_check" form:"third_is_check"`
1367
+	ThirdModifications         int64  `gorm:"column:third_modifications" json:"third_modifications" form:"third_modifications"`
1368
+	ThirdCreator               int64  `gorm:"column:third_creator" json:"third_creator" form:"third_creator"`
1369
+	LastStartTime              int64  `gorm:"column:last_start_time" json:"last_start_time" form:"last_start_time"`
1370
+	LastEndTime                int64  `gorm:"column:last_end_time" json:"last_end_time" form:"last_end_time"`
1371
+	LastTotalTime              string `gorm:"column:last_total_time" json:"last_total_time" form:"last_total_time"`
1372
+	LastIsCheck                int64  `gorm:"column:last_is_check" json:"last_is_check" form:"last_is_check"`
1373
+	LastModifications          int64  `gorm:"column:last_modifications" json:"last_modifications" form:"last_modifications"`
1374
+	LastCreator                int64  `gorm:"column:last_creator" json:"last_creator" form:"last_creator"`
1375
+	Ctime                      int64  `gorm:"column:ctime" json:"ctime" form:"ctime"`
1376
+	Mtime                      int64  `gorm:"column:mtime" json:"mtime" form:"mtime"`
1377
+	Status                     int64  `gorm:"column:status" json:"status" form:"status"`
1378
+}
1379
+
1380
+func (XtNewAriDisinfect) TableName() string {
1381
+
1382
+	return "xt_new_ari_disinfect"
1383
+}
1384
+
1385
+type XtNewObjectDisinfect struct {
1386
+	ID                         int64  `gorm:"column:id" json:"id" form:"id"`
1387
+	UserOrgId                  int64  `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
1388
+	RecordDate                 int64  `gorm:"column:record_date" json:"record_date" form:"record_date"`
1389
+	FirstDisinfectionWater     string `gorm:"column:first_disinfection_water" json:"first_disinfection_water" form:"first_disinfection_water"`
1390
+	FirstDisinfectionMethods   string `gorm:"column:first_disinfection_methods" json:"first_disinfection_methods" form:"first_disinfection_methods"`
1391
+	FirstDisinfectionTime      string `gorm:"column:first_disinfection_time" json:"first_disinfection_time" form:"first_disinfection_time"`
1392
+	FirstStartTime             int64  `gorm:"column:first_start_time" json:"first_start_time" form:"first_start_time"`
1393
+	FirstEndTime               int64  `gorm:"column:first_end_time" json:"first_end_time" form:"first_end_time"`
1394
+	FirstTotalTime             string `gorm:"column:first_total_time" json:"first_total_time" form:"first_total_time"`
1395
+	FirstIsCheck               int64  `gorm:"column:first_is_check" json:"first_is_check" form:"first_is_check"`
1396
+	FirstModifications         int64  `gorm:"column:first_modifications" json:"first_modifications" form:"first_modifications"`
1397
+	FirstCreator               int64  `gorm:"column:first_creator" json:"first_creator" form:"first_creator"`
1398
+	SencondDisinfectionWater   string `gorm:"column:sencond_disinfection_water" json:"sencond_disinfection_water" form:"sencond_disinfection_water"`
1399
+	SencondDisinfectionMethods string `gorm:"column:sencond_disinfection_methods" json:"sencond_disinfection_methods" form:"sencond_disinfection_methods"`
1400
+	SencondDisinfectionTime    string `gorm:"column:sencond_disinfection_time" json:"sencond_disinfection_time" form:"sencond_disinfection_time"`
1401
+	SencondStartTime           int64  `gorm:"column:sencond_start_time" json:"sencond_start_time" form:"sencond_start_time"`
1402
+	SencondEndTime             int64  `gorm:"column:sencond_end_time" json:"sencond_end_time" form:"sencond_end_time"`
1403
+	SencondTotalTime           string `gorm:"column:sencond_total_time" json:"sencond_total_time" form:"sencond_total_time"`
1404
+	SencondIsCheck             int64  `gorm:"column:sencond_is_check" json:"sencond_is_check" form:"sencond_is_check"`
1405
+	SencondModifications       int64  `gorm:"column:sencond_modifications" json:"sencond_modifications" form:"sencond_modifications"`
1406
+	SencondCreator             int64  `gorm:"column:sencond_creator" json:"sencond_creator" form:"sencond_creator"`
1407
+	ThirdDisinfectionWater     string `gorm:"column:third_disinfection_water" json:"third_disinfection_water" form:"third_disinfection_water"`
1408
+	ThirdDisinfectionMethods   string `gorm:"column:third_disinfection_methods" json:"third_disinfection_methods" form:"third_disinfection_methods"`
1409
+	ThirdDisinfectionTime      string `gorm:"column:third_disinfection_time" json:"third_disinfection_time" form:"third_disinfection_time"`
1410
+	ThirdStartTime             int64  `gorm:"column:third_start_time" json:"third_start_time" form:"third_start_time"`
1411
+	ThirdEndTime               int64  `gorm:"column:third_end_time" json:"third_end_time" form:"third_end_time"`
1412
+	ThirdTotalTime             string `gorm:"column:third_total_time" json:"third_total_time" form:"third_total_time"`
1413
+	ThirdIsCheck               int64  `gorm:"column:third_is_check" json:"third_is_check" form:"third_is_check"`
1414
+	ThirdModifications         int64  `gorm:"column:third_modifications" json:"third_modifications" form:"third_modifications"`
1415
+	ThirdCreator               int64  `gorm:"column:third_creator" json:"third_creator" form:"third_creator"`
1416
+	LastStartTime              int64  `gorm:"column:last_start_time" json:"last_start_time" form:"last_start_time"`
1417
+	LastEndTime                int64  `gorm:"column:last_end_time" json:"last_end_time" form:"last_end_time"`
1418
+	LastTotalTime              string `gorm:"column:last_total_time" json:"last_total_time" form:"last_total_time"`
1419
+	LastIsCheck                int64  `gorm:"column:last_is_check" json:"last_is_check" form:"last_is_check"`
1420
+	LastModifications          int64  `gorm:"column:last_modifications" json:"last_modifications" form:"last_modifications"`
1421
+	LastCreator                int64  `gorm:"column:last_creator" json:"last_creator" form:"last_creator"`
1422
+	Ctime                      int64  `gorm:"column:ctime" json:"ctime" form:"ctime"`
1423
+	Mtime                      int64  `gorm:"column:mtime" json:"mtime" form:"mtime"`
1424
+	Status                     int64  `gorm:"column:status" json:"status" form:"status"`
1425
+	FourthDisinfectionWater    string `gorm:"column:fourth_disinfection_water" json:"fourth_disinfection_water" form:"fourth_disinfection_water"`
1426
+	FourthDisinfectionMethods  string `gorm:"column:fourth_disinfection_methods" json:"fourth_disinfection_methods" form:"fourth_disinfection_methods"`
1427
+	FourthDisinfectionTime     string `gorm:"column:fourth_disinfection_time" json:"fourth_disinfection_time" form:"fourth_disinfection_time"`
1428
+	FourthStartTime            int64  `gorm:"column:fourth_start_time" json:"fourth_start_time" form:"fourth_start_time"`
1429
+	FourthEndTime              int64  `gorm:"column:fourth_end_time" json:"fourth_end_time" form:"fourth_end_time"`
1430
+	FourthTotalTime            string `gorm:"column:fourth_total_time" json:"fourth_total_time" form:"fourth_total_time"`
1431
+	FourthIsCheck              int64  `gorm:"column:fourth_is_check" json:"fourth_is_check" form:"fourth_is_check"`
1432
+	FourthModifications        int64  `gorm:"column:fourth_modifications" json:"fourth_modifications" form:"fourth_modifications"`
1433
+	FourthCreator              int64  `gorm:"column:fourth_creator" json:"fourth_creator" form:"fourth_creator"`
1434
+	LastDisinfectionWater      string `gorm:"column:last_disinfection_water" json:"last_disinfection_water" form:"last_disinfection_water"`
1435
+	LastDisinfectionMethods    string `gorm:"column:last_disinfection_methods" json:"last_disinfection_methods" form:"last_disinfection_methods"`
1436
+	LastDisinfectionTime       string `gorm:"column:last_disinfection_time" json:"last_disinfection_time" form:"last_disinfection_time"`
1437
+}
1438
+
1439
+func (XtNewObjectDisinfect) TableName() string {
1440
+
1441
+	return "xt_new_object_disinfect"
1442
+}

+ 1 - 0
models/new_monitor.go View File

@@ -116,6 +116,7 @@ type VMMonitoringRecord struct {
116 116
 	DiastolicBloodPressure float64 `gorm:"column:diastolic_blood_pressure" json:"diastolic_blood_pressure"`
117 117
 	Status                 int64   `gorm:"column:status" json:"status"`
118 118
 	AccumulatedBloodVolume float64 `gorm:"column:accumulated_blood_volume" json:"accumulated_blood_volume" form:"accumulated_blood_volume"`
119
+	UltrafiltrationVolume  float64 `gorm:"column:ultrafiltration_volume" json:"ultrafiltration_volume" form:"ultrafiltration_volume"`
119 120
 }
120 121
 
121 122
 func (VMMonitoringRecord) TableName() string {

+ 172 - 6
service/manage_service.go View File

@@ -153,15 +153,15 @@ func QueryPlan(orgid int64, devicetype int64, ids []int64, classids []int64, equ
153 153
 	return &pre, nil
154 154
 }
155 155
 
156
-func AddPlan(orgid int64, deviceType int64, disinfecTime string, ids []int64, classids []int64, way int64, machinedisinfectant int64, disinfectantway int64, disinfectant int64, equimentid int64, bedid int64) (err error) {
156
+func AddPlan(orgid int64, deviceType int64, disinfecTime string, ids []int64, classids []int64, way int64, machinedisinfectant int64, disinfectantway int64, disinfectant int64, equimentid int64, bedid int64, bed_way int64) (err error) {
157 157
 	xt := UserWriteDB().Begin()
158 158
 	if len(ids) > 0 {
159
-		thisSQL := "INSERT INTO xt_device_plan(device_type,disinfec_time,time,classtime,way,machine_disinfectant,disinfectan_way,disinfectant,status,ctime,user_org_id,equiment_id,bed_id) VALUES "
159
+		thisSQL := "INSERT INTO xt_device_plan(device_type,disinfec_time,time,classtime,way,machine_disinfectant,disinfectan_way,disinfectant,status,ctime,user_org_id,equiment_id,bed_id,bed_way) VALUES "
160 160
 		insertParams := make([]string, 0)
161 161
 		insertData := make([]interface{}, 0)
162 162
 		for _, id := range ids {
163 163
 			for _, classids := range classids {
164
-				insertParams = append(insertParams, "(?,?,?,?,?,?,?,?,?,?,?,?,?)")
164
+				insertParams = append(insertParams, "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
165 165
 				insertData = append(insertData, deviceType)
166 166
 				insertData = append(insertData, disinfecTime)
167 167
 				insertData = append(insertData, id)
@@ -175,6 +175,7 @@ func AddPlan(orgid int64, deviceType int64, disinfecTime string, ids []int64, cl
175 175
 				insertData = append(insertData, orgid)
176 176
 				insertData = append(insertData, equimentid)
177 177
 				insertData = append(insertData, bedid)
178
+				insertData = append(insertData, bed_way)
178 179
 			}
179 180
 		}
180 181
 		thisSQL += strings.Join(insertParams, ",")
@@ -199,7 +200,7 @@ func GetAllPlan(orgid int64) (plan []*models.DevicePlans, err error) {
199 200
 	//	//err = db.Select("p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,e.unit_type").Group("p.id").Joins("Left JOIN xt_device_addmacher as e On e.id = p.device_type").Order("e.unit_type asc,p.time").Scan(&plan).Error
200 201
 	//	//return plan, err
201 202
 
202
-	err = readUserDb.Raw("select DISTINCT p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,p.equiment_id,p.bed_id,e.device_mode from xt_device_plan as p  left join xt_device_mode as e On e.id = p.device_type where p.user_org_id = ? and p.status = 1", orgid).Order("e.device_mode asc,p.time").Scan(&plan).Error
203
+	err = readUserDb.Raw("select DISTINCT p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,p.equiment_id,p.bed_id,e.device_mode,p.bed_way from xt_device_plan as p  left join xt_device_mode as e On e.id = p.device_type where p.user_org_id = ? and p.status = 1", orgid).Order("e.device_mode asc,p.time").Scan(&plan).Error
203 204
 	return plan, err
204 205
 }
205 206
 
@@ -221,7 +222,7 @@ func GetAllPlanDetail(id int64, orgid int64) (plan []*models.DevicePlans, err er
221 222
 	//}
222 223
 	//err = db.Select("p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,e.unit_type").Group("p.id").Joins("Left JOIN xt_device_addmacher as e On e.id = p.equiment_id").Order("p.time asc").Scan(&plan).Error
223 224
 	//return plan, err
224
-	err = readUserDb.Raw("select DISTINCT p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,p.equiment_id,p.bed_id,e.device_mode from xt_device_plan as p left join xt_device_mode as e On e.id = p.device_type where p.user_org_id = ? and p.device_type = ? and p.status = 1", orgid, id).Order("p.time asc,p.classtime asc").Scan(&plan).Error
225
+	err = readUserDb.Raw("select DISTINCT p.id,p.device_type,p.disinfec_time,p.time,p.classtime,p.way,p.machine_disinfectant,p.disinfectan_way,p.disinfectant,p.equiment_id,p.bed_id,e.device_mode,p.bed_way from xt_device_plan as p left join xt_device_mode as e On e.id = p.device_type where p.user_org_id = ? and p.device_type = ? and p.status = 1", orgid, id).Order("p.time asc,p.classtime asc").Scan(&plan).Error
225 226
 	return plan, err
226 227
 }
227 228
 
@@ -889,7 +890,7 @@ func GetTotalNumber(id int64, orgid int64) (total int64, err error) {
889 890
 }
890 891
 
891 892
 func GetTimeWarning(equitid int64, orgId int64) (models.DeviceInformation, error) {
892
-	//fmt.Print("equitid是什么码字--------------------------------------------------------------------",equitid)
893
+
893 894
 	information := models.DeviceInformation{}
894 895
 	err = UserReadDB().Where(" user_org_id = ? AND status = 1 AND equiment_id = ?  AND (dialysis_checked = 1 or dialysis_checked = 0)", orgId, equitid).Last(&information).Error
895 896
 	return information, err
@@ -933,6 +934,15 @@ func GetInformation(eid int64, startdate int64, orgid int64, classtype int64) (*
933 934
 	return &information, nil
934 935
 }
935 936
 
937
+func GetLastInformationById(eid int64, orgid int64) (models.DeviceInformation, error) {
938
+
939
+	information := models.DeviceInformation{}
940
+
941
+	err := UserReadDB().Model(&information).Where("equiment_id = ? and user_org_id = ? and status = 1", eid, orgid).Last(&information).Error
942
+
943
+	return information, err
944
+}
945
+
936 946
 func ChangeBed(id int64, org int64) (number []*models.DeviceNumber, err error) {
937 947
 
938 948
 	err = XTReadDB().Model(&number).Where("zone_id = ? AND status = 1 AND org_id = ? ", id, org).Find(&number).Error
@@ -1563,3 +1573,159 @@ func DeleteDevicePh(id int64) error {
1563 1573
 	err := writeUserDb.Model(&ph).Where("id = ? ", id).Updates(map[string]interface{}{"status": 0}).Error
1564 1574
 	return err
1565 1575
 }
1576
+
1577
+func CretaDeviceWater(water models.XtDialysisDeviceWater) error {
1578
+
1579
+	err := XTWriteDB().Create(&water).Error
1580
+
1581
+	return err
1582
+}
1583
+
1584
+func SaveDeviceWater(water models.XtDialysisDeviceWater) error {
1585
+
1586
+	err := XTWriteDB().Save(&water).Error
1587
+
1588
+	return err
1589
+}
1590
+
1591
+func GetWaterFormList(equitment_id, start_timeunix, endtimeunix, limit, page, orgId int64) (water []*models.XtDialysisDeviceWater, total int64, err error) {
1592
+
1593
+	offset := (page - 1) * limit
1594
+
1595
+	db := XTReadDB().Model(&water).Where("status =1")
1596
+	if equitment_id > 0 {
1597
+		db = db.Where("equiment_id= ?", equitment_id)
1598
+	}
1599
+	if start_timeunix > 0 {
1600
+		db = db.Where("record_date>=?", start_timeunix)
1601
+	}
1602
+	if endtimeunix > 0 {
1603
+		db = db.Where("record_date<=?", endtimeunix)
1604
+	}
1605
+	if orgId > 0 {
1606
+		db = db.Where("user_org_id = ?", orgId)
1607
+	}
1608
+	err = db.Count(&total).Limit(limit).Offset(offset).Order("record_date desc").Find(&water).Error
1609
+
1610
+	return water, total, err
1611
+}
1612
+
1613
+func DelelteDialysisWater(id int64) error {
1614
+
1615
+	err := XTWriteDB().Model(&models.XtDialysisDeviceWater{}).Where("id = ? and status =1", id).Updates(map[string]interface{}{"status": 0}).Error
1616
+
1617
+	return err
1618
+}
1619
+
1620
+func GetDialysisWaterDetail(id int64) (models.XtDialysisDeviceWater, error) {
1621
+
1622
+	water := models.XtDialysisDeviceWater{}
1623
+
1624
+	err := XTReadDB().Where("id = ? and status = 1", id).Find(&water).Error
1625
+
1626
+	return water, err
1627
+}
1628
+
1629
+func DeleteBatchDialysisWater(orgid int64, ids []int64) (err error) {
1630
+	if len(ids) == 1 {
1631
+		err = XTWriteDB().Model(&models.XtDialysisDeviceWater{}).Where("id=? and user_org_id = ?", ids[0], orgid).Updates(map[string]interface{}{"status": 0, "mtime": time.Now().Unix()}).Error
1632
+	} else {
1633
+		err = XTWriteDB().Model(models.XtDialysisDeviceWater{}).Where("id IN(?) and user_org_id = ?", ids, orgid).Updates(map[string]interface{}{"status": 0, "mtime": time.Now().Unix()}).Error
1634
+	}
1635
+
1636
+	return
1637
+}
1638
+
1639
+func CreateNewAirDisinfect(disinfect models.XtNewAriDisinfect) error {
1640
+
1641
+	err := XTWriteDB().Create(&disinfect).Error
1642
+
1643
+	return err
1644
+}
1645
+
1646
+func GetNewAirDisinfectList(limit int64, page int64, start_time int64, end_time int64, user_org_id int64) (list []*models.XtNewAriDisinfect, total int64, err error) {
1647
+
1648
+	offset := (page - 1) * limit
1649
+
1650
+	db := XTReadDB().Model(&list).Where("status =1")
1651
+	if start_time > 0 {
1652
+		db = db.Where("record_date >= ?", start_time)
1653
+	}
1654
+	if end_time > 0 {
1655
+		db = db.Where("record_date <= ?", end_time)
1656
+	}
1657
+	if user_org_id > 0 {
1658
+		db = db.Where("user_org_id = ?", user_org_id)
1659
+	}
1660
+	err = db.Count(&total).Offset(offset).Limit(limit).Find(&list).Error
1661
+	return list, total, err
1662
+}
1663
+
1664
+func GetNewAirDisinfectByIdList(id int64) (models.XtNewAriDisinfect, error) {
1665
+
1666
+	disinfect := models.XtNewAriDisinfect{}
1667
+
1668
+	err := XTReadDB().Where("id = ? and status= 1", id).Find(&disinfect).Error
1669
+
1670
+	return disinfect, err
1671
+}
1672
+
1673
+func SaveNewAriDisinfect(disinfect models.XtNewAriDisinfect) error {
1674
+
1675
+	err := XTWriteDB().Save(&disinfect).Error
1676
+	return err
1677
+}
1678
+
1679
+func DeleteNewAirDisInfect(id int64) error {
1680
+
1681
+	err := XTWriteDB().Model(&models.XtNewAriDisinfect{}).Where("id= ? and status = 1", id).Updates(map[string]interface{}{"status": 0}).Error
1682
+
1683
+	return err
1684
+}
1685
+
1686
+func CreateObjectDisInfect(disinfect models.XtNewObjectDisinfect) error {
1687
+
1688
+	err := XTWriteDB().Create(&disinfect).Error
1689
+
1690
+	return err
1691
+}
1692
+
1693
+func GetObjectTableDisinfectList(limit int64, page int64, start_time int64, end_time int64, user_org_id int64) (list []*models.XtNewObjectDisinfect, total int64, err error) {
1694
+
1695
+	offset := (page - 1) * limit
1696
+
1697
+	db := XTReadDB().Model(&list).Where("status =1")
1698
+	if start_time > 0 {
1699
+		db = db.Where("record_date >= ?", start_time)
1700
+	}
1701
+	if end_time > 0 {
1702
+		db = db.Where("record_date <= ?", end_time)
1703
+	}
1704
+	if user_org_id > 0 {
1705
+		db = db.Where("user_org_id = ?", user_org_id)
1706
+	}
1707
+	err = db.Count(&total).Offset(offset).Limit(limit).Find(&list).Error
1708
+	return list, total, err
1709
+}
1710
+
1711
+func GetObjectTableDisinfectByList(id int64) (models.XtNewObjectDisinfect, error) {
1712
+
1713
+	disinfect := models.XtNewObjectDisinfect{}
1714
+
1715
+	err := XTReadDB().Where("id=? and status =1", id).Find(&disinfect).Error
1716
+
1717
+	return disinfect, err
1718
+}
1719
+
1720
+func UpdateObjectTableDisinfect(disinfect models.XtNewObjectDisinfect) error {
1721
+
1722
+	err := XTWriteDB().Save(&disinfect).Error
1723
+
1724
+	return err
1725
+}
1726
+
1727
+func DeleteObjectTableDisinfect(id int64) error {
1728
+
1729
+	err := XTWriteDB().Model(&models.XtNewObjectDisinfect{}).Where("id=? and status= 1", id).Updates(map[string]interface{}{"status": 0}).Error
1730
+	return err
1731
+}

+ 2 - 2
service/mobile_dialysis_service.go View File

@@ -1076,7 +1076,7 @@ func MobileGetAssessmentAfterDislysis(orgID int64, patientID int64, recordDate i
1076 1076
 	redis := RedisClient()
1077 1077
 	defer redis.Close()
1078 1078
 	key := strconv.FormatInt(orgID, 10) + ":" + strconv.FormatInt(patientID, 10) + ":" + strconv.FormatInt(recordDate, 10) + ":assessment_after_dislysis"
1079
-
1079
+	redis.Set(key, "", time.Second)
1080 1080
 	assessment_after_dislysis_str, _ := redis.Get(key).Result()
1081 1081
 
1082 1082
 	if len(assessment_after_dislysis_str) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis
@@ -2357,7 +2357,7 @@ func MobileGetDialysisPrescribeByModeId(orgID int64, patientID int64, recordDate
2357 2357
 
2358 2358
 	// cur_date := time.Now().Format("2006-01-02")
2359 2359
 	key := strconv.FormatInt(orgID, 10) + ":" + strconv.FormatInt(patientID, 10) + ":" + strconv.FormatInt(recordDate, 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_prescribe"
2360
-
2360
+	redis.Set(key, "", time.Second)
2361 2361
 	dialysis_prescribe_str, _ := redis.Get(key).Result()
2362 2362
 
2363 2363
 	if len(dialysis_prescribe_str) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis

+ 3 - 4
service/stock_service.go View File

@@ -870,7 +870,9 @@ func FindLastDrugWarehousingInfo(order string) (info models.DrugWarehouseInfo, e
870 870
 }
871 871
 
872 872
 func FindAllWarehousingList(orgId int64, page int64, limit int64, startTime int64, endTime int64, types int64, keywords string, ids []int64, storehouse_id int64, check_type int64) (list []*models.Warehousing, total int64, err error) {
873
+	offset := (page - 1) * limit
873 874
 	db := readDb.Model(&models.Warehousing{})
875
+
874 876
 	db = db.Where("xt_warehouse.org_id = ? AND xt_warehouse.status = 1 AND xt_warehouse.type = ?", orgId, types)
875 877
 
876 878
 	if len(keywords) > 0 {
@@ -897,10 +899,7 @@ func FindAllWarehousingList(orgId int64, page int64, limit int64, startTime int6
897 899
 	if check_type > 0 {
898 900
 		db = db.Where("xt_warehouse.is_check = ?", check_type)
899 901
 	}
900
-
901
-	db = db.Count(&total)
902
-	offset := (page - 1) * limit
903
-	err = db.Offset(offset).Limit(limit).Order("xt_warehouse.ctime desc").Find(&list).Error
902
+	err = db.Count(&total).Offset(offset).Limit(limit).Order("xt_warehouse.ctime desc").Find(&list).Error
904 903
 	return
905 904
 }
906 905