Przeglądaj źródła

11月8日库存管理

XMLWAN 2 lat temu
rodzic
commit
d2e591e8b7

+ 2 - 2
controllers/drug_stock_api_contorller.go Wyświetl plik

@@ -1669,7 +1669,7 @@ func (c *StockDrugApiController) CreateDrugWarehouseOut() {
1669 1669
 			drup, _ := service.FindBaseDrugLibRecord(item.OrgId, item.DrugId)
1670 1670
 			if drup.ID > 0 {
1671 1671
 				prescribingNumber := item.Count
1672
-				service.AutoDrugDeliverInfoTwenty(item.OrgId, prescribingNumber, &warehouseOut, &drup, item)
1672
+				service.AutoDrugDeliverInfoTwentyOne(item.OrgId, prescribingNumber, &warehouseOut, &drup, item)
1673 1673
 			}
1674 1674
 			prescribing_number_total = 0
1675 1675
 			total_count = 0
@@ -2195,7 +2195,7 @@ func (c *StockDrugApiController) EditDrugWarehouseOut() {
2195 2195
 				drup, _ := service.FindBaseDrugLibRecord(item.OrgId, item.DrugId)
2196 2196
 				if drup.ID > 0 {
2197 2197
 					prescribingNumber := item.Count
2198
-					service.AutoDrugDeliverInfoTwenty(item.OrgId, prescribingNumber, &tempWarehouseOut, &drup, item)
2198
+					service.AutoDrugDeliverInfoTwentyOne(item.OrgId, prescribingNumber, &tempWarehouseOut, &drup, item)
2199 2199
 				}
2200 2200
 			}
2201 2201
 

+ 8 - 0
controllers/his_summary_controller.go Wyświetl plik

@@ -52,6 +52,9 @@ func (this *HisSummaryApiController) GetHisSummaryDetailList() {
52 52
 
53 53
 	//获取所有的科室
54 54
 	hisDepatment, _ := service.GetHisDepatment(adminUser.CurrentOrgId)
55
+
56
+	//获取个人支付总额
57
+	orderList, _ := service.GetAllHisOrderList(adminUser.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime)
55 58
 	if err == nil {
56 59
 		this.ServeSuccessJSON(map[string]interface{}{
57 60
 			"list":               list,
@@ -60,6 +63,7 @@ func (this *HisSummaryApiController) GetHisSummaryDetailList() {
60 63
 			"hisDepatment":       hisDepatment,
61 64
 			"order":              order,
62 65
 			"his_record_patient": his_record_patient,
66
+			"orderList":          orderList,
63 67
 		})
64 68
 		return
65 69
 	} else {
@@ -120,6 +124,9 @@ func (this *HisSummaryApiController) GetGatherDetaiList() {
120 124
 	bedNumber, _ := service.GetAllBedNumberSix(adminUser.CurrentOrgId)
121 125
 	orderInfo, _ := service.GetHisLastOrder(adminUser.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime)
122 126
 
127
+	//获取个人支付总额
128
+	orderList, _ := service.GetAllHisOrderList(adminUser.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime)
129
+
123 130
 	if err == nil {
124 131
 		this.ServeSuccessJSON(map[string]interface{}{
125 132
 			"list":                      list,
@@ -135,6 +142,7 @@ func (this *HisSummaryApiController) GetGatherDetaiList() {
135 142
 			"schedule":                  schedule,
136 143
 			"bedNumber":                 bedNumber,
137 144
 			"orderInfo":                 orderInfo,
145
+			"orderList":                 orderList,
138 146
 		})
139 147
 		return
140 148
 	} else {

+ 11 - 6
controllers/mobile_api_controllers/dialysis_api_controller.go Wyświetl plik

@@ -540,6 +540,7 @@ func (this *DialysisAPIController) DialysisRecord() {
540 540
 	projects, _ = service.GetHisPrescriptionProjects(adminInfo.Org.Id, patientID, date.Unix())
541 541
 	temp_team_projects, _ := service.GetHisPrescriptionTeamProjects(adminInfo.Org.Id, patientID, date.Unix())
542 542
 
543
+	prescriptionConfig, _ := service.FindPrescriptionConfigById(adminInfo.Org.Id)
543 544
 	var team_projects []*models.HisPrescriptionProject
544 545
 	//var index int64 = 0
545 546
 	for _, item := range temp_team_projects {
@@ -601,6 +602,7 @@ func (this *DialysisAPIController) DialysisRecord() {
601 602
 		"project":                        projects,
602 603
 		"team_projects":                  team_projects,
603 604
 		"is_advice_open":                 is_advice_open,
605
+		"prescription_open":              prescriptionConfig.IsOpen,
604 606
 	}
605 607
 	this.ServeSuccessJSON(returnData)
606 608
 }
@@ -3256,6 +3258,8 @@ func (c *DialysisAPIController) GetLongAdvice() {
3256 3258
 	_, config := service.FindDoctorAdviceRecordByOrgId(adminUserInfo.Org.Id)
3257 3259
 	_, hisConfig := service.FindXTHisRecordByOrgId(adminUserInfo.Org.Id)
3258 3260
 	is_advice_open, _ := service.FindAdviceSettingById(adminUserInfo.Org.Id)
3261
+
3262
+	prescription_open, _ := service.FindPrescriptionConfigById(adminUserInfo.Org.Id)
3259 3263
 	//patient, _ := service.FindPatientIsOpenRemindById(patient_id, adminUserInfo.Org.Id)
3260 3264
 	if config.IsOpenRemind == 0 { //针对老用户,即没开启推送功能,也没有	不开启推送功能,不做任何处理
3261 3265
 		c.ServeSuccessJSON(map[string]interface{}{
@@ -3332,12 +3336,13 @@ func (c *DialysisAPIController) GetLongAdvice() {
3332 3336
 		}
3333 3337
 		if err == nil {
3334 3338
 			c.ServeSuccessJSON(map[string]interface{}{
3335
-				"status":          "2",
3336
-				"advices":         advices,
3337
-				"advices_two":     RemoveRepeatedElement(advice_three),
3338
-				"is_open_remind":  config.IsOpenRemind,
3339
-				"his_config_open": hisConfig.IsOpen,
3340
-				"is_advice_open":  is_advice_open.IsAdviceOpen,
3339
+				"status":            "2",
3340
+				"advices":           advices,
3341
+				"advices_two":       RemoveRepeatedElement(advice_three),
3342
+				"is_open_remind":    config.IsOpenRemind,
3343
+				"his_config_open":   hisConfig.IsOpen,
3344
+				"is_advice_open":    is_advice_open.IsAdviceOpen,
3345
+				"prescription_open": prescription_open.IsOpen,
3341 3346
 			})
3342 3347
 		}
3343 3348
 	}

+ 98 - 0
models/his_models.go Wyświetl plik

@@ -2009,3 +2009,101 @@ type NewCustomTwo struct {
2009 2009
 	ProjectId        int64
2010 2010
 	ItemId           int64
2011 2011
 }
2012
+
2013
+type VmHisOrder struct {
2014
+	ID                      int64     `gorm:"column:id" json:"id" form:"id"`
2015
+	UserOrgId               int64     `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
2016
+	HisPatientId            int64     `gorm:"column:his_patient_id" json:"his_patient_id" form:"his_patient_id"`
2017
+	SettleAccountsDate      int64     `gorm:"column:settle_accounts_date" json:"settle_accounts_date" form:"settle_accounts_date"`
2018
+	Ctime                   int64     `gorm:"column:ctime" json:"ctime" form:"ctime"`
2019
+	Mtime                   int64     `gorm:"column:mtime" json:"mtime" form:"mtime"`
2020
+	Status                  int64     `gorm:"column:status" json:"status" form:"status"`
2021
+	Number                  string    `gorm:"column:number" json:"number" form:"number"`
2022
+	PatientId               int64     `gorm:"column:patient_id" json:"patient_id" form:"patient_id"`
2023
+	Infcode                 int64     `gorm:"column:infcode" json:"infcode" form:"infcode"`
2024
+	WarnMsg                 string    `gorm:"column:warn_msg" json:"warn_msg" form:"warn_msg"`
2025
+	Cainfo                  string    `gorm:"column:cainfo" json:"cainfo" form:"cainfo"`
2026
+	ErrMsg                  string    `gorm:"column:err_msg" json:"err_msg" form:"err_msg"`
2027
+	RespondTime             string    `gorm:"column:respond_time" json:"respond_time" form:"respond_time"`
2028
+	InfRefmsgid             string    `gorm:"column:inf_refmsgid" json:"inf_refmsgid" form:"inf_refmsgid"`
2029
+	OrderStatus             int64     `gorm:"column:order_status" json:"order_status" form:"order_status"`
2030
+	MdtrtId                 string    `gorm:"column:mdtrt_id" json:"mdtrt_id" form:"mdtrt_id"`
2031
+	SetlId                  string    `gorm:"column:setl_id" json:"setl_id" form:"setl_id"`
2032
+	PsnNo                   string    `gorm:"column:psn_no" json:"psn_no" form:"psn_no"`
2033
+	PsnName                 string    `gorm:"column:psn_name" json:"psn_name" form:"psn_name"`
2034
+	PsnCertType             string    `gorm:"column:psn_cert_type" json:"psn_cert_type" form:"psn_cert_type"`
2035
+	Certno                  string    `gorm:"column:certno" json:"certno" form:"certno"`
2036
+	Gend                    string    `gorm:"column:gend" json:"gend" form:"gend"`
2037
+	Naty                    string    `gorm:"column:naty" json:"naty" form:"naty"`
2038
+	Brdy                    time.Time `gorm:"column:brdy" json:"brdy" form:"brdy"`
2039
+	Age                     float64   `gorm:"column:age" json:"age" form:"age"`
2040
+	Insutype                string    `gorm:"column:insutype" json:"insutype" form:"insutype"`
2041
+	PsnType                 string    `gorm:"column:psn_type" json:"psn_type" form:"psn_type"`
2042
+	CvlservFlag             string    `gorm:"column:cvlserv_flag" json:"cvlserv_flag" form:"cvlserv_flag"`
2043
+	SetlTime                string    `gorm:"column:setl_time" json:"setl_time" form:"setl_time"`
2044
+	MdtrtCertType           string    `gorm:"column:mdtrt_cert_type" json:"mdtrt_cert_type" form:"mdtrt_cert_type"`
2045
+	MedType                 string    `gorm:"column:med_type" json:"med_type" form:"med_type"`
2046
+	MedfeeSumamt            float64   `gorm:"column:medfee_sumamt" json:"medfee_sumamt" form:"medfee_sumamt"`
2047
+	FulamtOwnpayAmt         float64   `gorm:"column:fulamt_ownpay_amt" json:"fulamt_ownpay_amt" form:"fulamt_ownpay_amt"`
2048
+	OverlmtSelfPay          float64   `gorm:"column:overlmt_self_pay" json:"overlmt_self_pay" form:"overlmt_self_pay"`
2049
+	PreselfpayAmt           float64   `gorm:"column:preselfpay_amt" json:"preselfpay_amt" form:"preselfpay_amt"`
2050
+	InscpScpAmt             float64   `gorm:"column:inscp_scp_amt" json:"inscp_scp_amt" form:"inscp_scp_amt"`
2051
+	ActPayDedc              float64   `gorm:"column:act_pay_dedc" json:"act_pay_dedc" form:"act_pay_dedc"`
2052
+	HifpPay                 float64   `gorm:"column:hifp_pay" json:"hifp_pay" form:"hifp_pay"`
2053
+	CvlservPay              float64   `gorm:"column:cvlserv_pay" json:"cvlserv_pay" form:"cvlserv_pay"`
2054
+	PoolPropSelfpay         float64   `gorm:"column:pool_prop_selfpay" json:"pool_prop_selfpay" form:"pool_prop_selfpay"`
2055
+	HifesPay                float64   `gorm:"column:hifes_pay" json:"hifes_pay" form:"hifes_pay"`
2056
+	HifmiPay                float64   `gorm:"column:hifmi_pay" json:"hifmi_pay" form:"hifmi_pay"`
2057
+	HifobPay                float64   `gorm:"column:hifob_pay" json:"hifob_pay" form:"hifob_pay"`
2058
+	MafPay                  float64   `gorm:"column:maf_pay" json:"maf_pay" form:"maf_pay"`
2059
+	OthPay                  float64   `gorm:"column:oth_pay" json:"oth_pay" form:"oth_pay"`
2060
+	FundPaySumamt           float64   `gorm:"column:fund_pay_sumamt" json:"fund_pay_sumamt" form:"fund_pay_sumamt"`
2061
+	PsnPartAmt              float64   `gorm:"column:psn_part_amt" json:"psn_part_amt" form:"psn_part_amt"`
2062
+	AcctPay                 float64   `gorm:"column:acct_pay" json:"acct_pay" form:"acct_pay"`
2063
+	PsnCashPay              float64   `gorm:"column:psn_cash_pay" json:"psn_cash_pay" form:"psn_cash_pay"`
2064
+	HospPartAmt             float64   `gorm:"column:hosp_part_amt" json:"hosp_part_amt" form:"hosp_part_amt"`
2065
+	Balc                    float64   `gorm:"column:balc" json:"balc" form:"balc"`
2066
+	AcctMulaidPay           float64   `gorm:"column:acct_mulaid_pay" json:"acct_mulaid_pay" form:"acct_mulaid_pay"`
2067
+	MedinsSetlId            string    `gorm:"column:medins_setl_id" json:"medins_setl_id" form:"medins_setl_id"`
2068
+	ClrOptins               string    `gorm:"column:clr_optins" json:"clr_optins" form:"clr_optins"`
2069
+	ClrWay                  string    `gorm:"column:clr_way" json:"clr_way" form:"clr_way"`
2070
+	ClrType                 string    `gorm:"column:clr_type" json:"clr_type" form:"clr_type"`
2071
+	SetlDetail              string    `gorm:"column:setl_detail" json:"setl_detail" form:"setl_detail"`
2072
+	PayWay                  int64     `gorm:"column:pay_way" json:"pay_way" form:"pay_way"`
2073
+	PayPrice                float64   `gorm:"column:pay_price" json:"pay_price" form:"pay_price"`
2074
+	PayCardNo               string    `gorm:"column:pay_card_no" json:"pay_card_no" form:"pay_card_no"`
2075
+	DiscountPrice           float64   `gorm:"column:discount_price" json:"discount_price" form:"discount_price"`
2076
+	PreferentialPrice       float64   `gorm:"column:preferential_price" json:"preferential_price" form:"preferential_price"`
2077
+	RealityPrice            float64   `gorm:"column:reality_price" json:"reality_price" form:"reality_price"`
2078
+	FoundPrice              float64   `gorm:"column:found_price" json:"found_price" form:"found_price"`
2079
+	MedicalInsurancePrice   float64   `gorm:"column:medical_insurance_price" json:"medical_insurance_price" form:"medical_insurance_price"`
2080
+	PrivatePrice            float64   `gorm:"column:private_price" json:"private_price" form:"private_price"`
2081
+	IsMedicineInsurance     int64     `gorm:"column:is_medicine_insurance" json:"is_medicine_insurance" form:"is_medicine_insurance"`
2082
+	SettleType              int64     `gorm:"column:settle_type" json:"settle_type" form:"settle_type"`
2083
+	SettleStartTime         int64     `gorm:"column:settle_start_time" json:"settle_start_time" form:"settle_start_time"`
2084
+	SettleEndTime           int64     `gorm:"column:settle_end_time" json:"settle_end_time" form:"settle_end_time"`
2085
+	Creator                 int64     `gorm:"column:creator" json:"creator" form:"creator"`
2086
+	Modify                  int64     `gorm:"column:modify" json:"modify" form:"modify"`
2087
+	SzChargeInfo            string    `gorm:"column:sz_charge_info" json:"sz_charge_info" form:"sz_charge_info"`
2088
+	SzProjectInfo           string    `gorm:"column:sz_project_info" json:"sz_project_info" form:"sz_project_info"`
2089
+	SzMedicineInsuranceInfo string    `gorm:"column:sz_medicine_insurance_info" json:"sz_medicine_insurance_info" form:"sz_medicine_insurance_info"`
2090
+	AccountPrice            float64   `gorm:"column:account_price" json:"account_price" form:"account_price"`
2091
+	MzNumber                string    `gorm:"column:mz_number" json:"mz_number" form:"mz_number"`
2092
+	OrgSetlNumber           string    `gorm:"column:org_setl_number" json:"org_setl_number" form:"org_setl_number"`
2093
+	YiliaoNumber            string    `gorm:"column:yiliao_number" json:"yiliao_number" form:"yiliao_number"`
2094
+	RefundLog               string    `gorm:"column:refund_log" json:"refund_log" form:"refund_log"`
2095
+	DetailLog               string    `gorm:"column:detail_log" json:"detail_log" form:"detail_log"`
2096
+	RequestLog              string    `gorm:"column:request_log" json:"request_log" form:"request_log"`
2097
+	RefundRequestLog        string    `gorm:"column:refund_request_log" json:"refund_request_log" form:"refund_request_log"`
2098
+	FaPiaoCode              string    `gorm:"column:fa_piao_code" json:"fa_piao_code" form:"fa_piao_code"`
2099
+	FaPiaoNumber            string    `gorm:"column:fa_piao_number" json:"fa_piao_number" form:"fa_piao_number"`
2100
+	PType                   int64     `gorm:"column:p_type" json:"p_type" form:"p_type"`
2101
+	IsPre                   int64     `gorm:"column:is_pre" json:"is_pre" form:"is_pre"`
2102
+	Diagnosis               string    `gorm:"column:diagnosis" json:"diagnosis" form:"diagnosis"`
2103
+	FaPiaoBatchnumberId     int64     `gorm:"column:fa_piao_batchnumber_id" json:"fa_piao_batchnumber_id" form:"fa_piao_batchnumber_id"`
2104
+	Decimal                 float64   `gorm:"column:decimal" json:"decimal" form:"decimal"`
2105
+}
2106
+
2107
+func (VmHisOrder) TableName() string {
2108
+	return "his_order"
2109
+}

+ 23 - 0
service/his_summary_service.go Wyświetl plik

@@ -329,3 +329,26 @@ func GetHisChargeOrder(org_id int64, patient_id int64, start_time int64, end_tim
329 329
 	}).Error
330 330
 	return order, err
331 331
 }
332
+
333
+func GetAllHisOrderList(org_id int64, patient_id int64, start_time int64, end_time int64) (order []*models.VmHisOrder, err error) {
334
+
335
+	db := XTReadDB().Model(&order).Where("status = 1")
336
+
337
+	if org_id > 0 {
338
+		db = db.Where("user_org_id = ?", org_id)
339
+	}
340
+	if patient_id > 0 {
341
+		db = db.Where("patient_id = ?", patient_id)
342
+	}
343
+
344
+	if start_time > 0 {
345
+		db = db.Where("settle_accounts_date >=?", start_time)
346
+	}
347
+	if end_time > 0 {
348
+		db = db.Where("settle_accounts_date<=?", end_time)
349
+	}
350
+
351
+	err = db.Find(&order).Error
352
+
353
+	return order, err
354
+}

+ 310 - 1
service/warhouse_service.go Wyświetl plik

@@ -4238,7 +4238,7 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4238 4238
 	//开启事物
4239 4239
 
4240 4240
 	warehouse, err := FindLastDrugWarehousingInfoByID(advice.DrugId, warehouseout.StorehouseId)
4241
-	fmt.Println("h2h332322323232323233232233223", deliver_number)
4241
+
4242 4242
 	if err != nil {
4243 4243
 
4244 4244
 		return err
@@ -4279,6 +4279,10 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4279 4279
 			AdminUserId:             advice.AdminUserId,
4280 4280
 		}
4281 4281
 
4282
+		if warehouse.RetailPrice == 0 {
4283
+			warehouseOutInfo.Price = advice.Price
4284
+		}
4285
+
4282 4286
 		warehouseOutInfo.Count = prescribingNumber
4283 4287
 		warehouseOutInfo.CountUnit = advice.CountUnit
4284 4288
 
@@ -4314,6 +4318,9 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4314 4318
 			StorehouseId:            advice.StorehouseId,
4315 4319
 			AdminUserId:             advice.AdminUserId,
4316 4320
 		}
4321
+		if warehouse.RetailPrice == 0 {
4322
+			drugflow.Price = advice.Price
4323
+		}
4317 4324
 
4318 4325
 		CreateDrugFlowOne(drugflow)
4319 4326
 		// 出库完成后,要减去对应批次的库存数量
@@ -4440,6 +4447,9 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4440 4447
 			StorehouseId:            advice.StorehouseId,
4441 4448
 			AdminUserId:             advice.AdminUserId,
4442 4449
 		}
4450
+		if warehouse.RetailPrice == 0 {
4451
+			warehouseOutInfo.Price = advice.Price
4452
+		}
4443 4453
 		warehouseOutInfo.Count = stock_number
4444 4454
 
4445 4455
 		//warehouseOutInfo.CountUnit = advice.CountUnit
@@ -4475,6 +4485,9 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4475 4485
 			StorehouseId:            advice.StorehouseId,
4476 4486
 			AdminUserId:             advice.AdminUserId,
4477 4487
 		}
4488
+		if warehouse.RetailPrice == 0 {
4489
+			drugflow.Price = advice.Price
4490
+		}
4478 4491
 		CreateDrugFlowOne(drugflow)
4479 4492
 		// 出库完成后,要将该批次库存清零
4480 4493
 		//扣减库存
@@ -4514,3 +4527,299 @@ func AutoDrugDeliverInfoTwenty(orgID int64, prescribingNumber int64, warehouseou
4514 4527
 
4515 4528
 	return
4516 4529
 }
4530
+
4531
+// 药品手动出库 递归方式
4532
+func AutoDrugDeliverInfoTwentyOne(orgID int64, prescribingNumber int64, warehouseout *models.DrugWarehouseOut, drup *models.BaseDrugLib, advice *models.DrugWarehouseOutInfo) (err error) {
4533
+
4534
+	// 判断处方里药品单位是拆零单位还是包装单位,	如果是包装单位,则根据规格,将包装数量转为拆零数量
4535
+	var deliver_number int64 = 0
4536
+	var stock_number int64 = 0
4537
+
4538
+	if advice.CountUnit == drup.MaxUnit {
4539
+		deliver_number = prescribingNumber * drup.MinNumber
4540
+	} else {
4541
+		deliver_number = prescribingNumber
4542
+	}
4543
+
4544
+	// 根据先进先出原则,查询最先入库的批次,进行出库
4545
+	// 如果没有对应的库存,则报错
4546
+	//开启事物
4547
+
4548
+	warehouse, err := FindLastDrugWarehousingInfoByID(advice.DrugId, warehouseout.StorehouseId)
4549
+
4550
+	if err != nil {
4551
+
4552
+		return err
4553
+	}
4554
+
4555
+	// 将该批次的剩余库存数量转换为拆零数量
4556
+
4557
+	stock_number = warehouse.StockMaxNumber*drup.MinNumber + warehouse.StockMinNumber
4558
+
4559
+	// 当库存数量大于或等于出库数量的话,则正常出库该批次
4560
+	if stock_number >= deliver_number {
4561
+
4562
+		warehouseOutInfo := &models.DrugWarehouseOutInfo{
4563
+			WarehouseOutOrderNumber: warehouseout.WarehouseOutOrderNumber,
4564
+			WarehouseOutId:          warehouseout.ID,
4565
+			Status:                  1,
4566
+			Ctime:                   time.Now().Unix(),
4567
+			Remark:                  advice.Remark,
4568
+			OrgId:                   orgID,
4569
+			Type:                    1,
4570
+			Manufacturer:            advice.Manufacturer,
4571
+			Dealer:                  warehouse.Dealer,
4572
+			IsSys:                   0,
4573
+			SysRecordTime:           advice.Ctime,
4574
+			DrugId:                  advice.DrugId,
4575
+			ExpiryDate:              advice.ExpiryDate,
4576
+			ProductDate:             advice.ProductDate,
4577
+			Number:                  advice.Number,
4578
+			BatchNumber:             warehouse.BatchNumber,
4579
+			Count:                   deliver_number,
4580
+			RetailPrice:             advice.RetailPrice,
4581
+			Price:                   advice.Price,
4582
+			WarehouseInfoId:         warehouse.ID,
4583
+			CountUnit:               drup.MinUnit,
4584
+			AdviceId:                advice.ID,
4585
+			SupplyWarehouseId:       warehouse.SupplyWarehouseId,
4586
+			StorehouseId:            advice.StorehouseId,
4587
+			AdminUserId:             advice.AdminUserId,
4588
+		}
4589
+
4590
+		warehouseOutInfo.Count = prescribingNumber
4591
+		warehouseOutInfo.CountUnit = advice.CountUnit
4592
+
4593
+		errOne := AddSigleDrugWarehouseOutInfo(warehouseOutInfo)
4594
+		if errOne != nil {
4595
+			return errOne
4596
+		}
4597
+
4598
+		drugWareInfo, _ := GetLastWarehouseOutInfoById(advice.DrugId)
4599
+		drugflow := models.DrugFlow{
4600
+			WarehouseOutId:          warehouseout.ID,
4601
+			WarehouseOutOrderNumber: warehouseout.WarehouseOutOrderNumber,
4602
+			DrugId:                  advice.DrugId,
4603
+			Number:                  warehouse.Number,
4604
+			ProductDate:             advice.ProductDate,
4605
+			ExpireDate:              advice.ExpiryDate,
4606
+			Count:                   deliver_number,
4607
+			Price:                   advice.Price,
4608
+			Status:                  1,
4609
+			Ctime:                   time.Now().Unix(),
4610
+			UserOrgId:               advice.OrgId,
4611
+			Manufacturer:            advice.Manufacturer,
4612
+			Dealer:                  advice.Dealer,
4613
+			BatchNumber:             warehouse.BatchNumber,
4614
+			MaxUnit:                 drup.MinUnit,
4615
+			ConsumableType:          2,
4616
+			IsEdit:                  1,
4617
+			Creator:                 0,
4618
+			IsSys:                   0,
4619
+			WarehouseOutDetailId:    drugWareInfo.ID,
4620
+			AdviceId:                advice.ID,
4621
+			SupplyWarehouseId:       warehouse.SupplyWarehouseId,
4622
+			StorehouseId:            advice.StorehouseId,
4623
+			AdminUserId:             advice.AdminUserId,
4624
+		}
4625
+		if warehouse.RetailPrice == 0 {
4626
+			drugflow.Price = advice.Price
4627
+		}
4628
+
4629
+		CreateDrugFlowOne(drugflow)
4630
+		// 出库完成后,要减去对应批次的库存数量
4631
+		// 判断处方里药品单位是拆零单位还是包装单位,	如果是拆零单位,则根据规格,将拆零数量转为包装数量
4632
+		var maxNumber int64 = 0
4633
+		var minNumber int64 = 0
4634
+		var stock_max_number int64 = 0
4635
+		stock_max_number = warehouse.StockMaxNumber
4636
+
4637
+		maxNumber = deliver_number / drup.MinNumber
4638
+		minNumber = deliver_number % drup.MinNumber
4639
+
4640
+		if warehouse.StockMaxNumber == 0 && drup.MaxUnit == drup.MinUnit {
4641
+			minNumber = maxNumber
4642
+		}
4643
+
4644
+		if drup.MaxUnit != drup.MinUnit {
4645
+			if warehouse.StockMaxNumber < maxNumber && warehouse.StockMinNumber < minNumber {
4646
+				return errors.New("库存数量不足")
4647
+			}
4648
+		}
4649
+
4650
+		warehouse.StockMaxNumber = warehouse.StockMaxNumber - maxNumber
4651
+
4652
+		if warehouse.StockMaxNumber < 0 {
4653
+			warehouse.StockMaxNumber = 0
4654
+		}
4655
+		if warehouse.StockMinNumber < 0 {
4656
+			warehouse.StockMinNumber = 0
4657
+		}
4658
+
4659
+		warehouse.Mtime = time.Now().Unix()
4660
+
4661
+		if warehouse.StockMinNumber < minNumber {
4662
+
4663
+			warehouse.StockMaxNumber = warehouse.StockMaxNumber - 1
4664
+			warehouse.StockMinNumber = warehouse.StockMinNumber + drup.MinNumber - minNumber
4665
+		} else {
4666
+			if minNumber > 0 {
4667
+				if minNumber == 1 && maxNumber == 1 && drup.MaxUnit != drup.MinUnit {
4668
+					warehouse.StockMinNumber = warehouse.StockMinNumber - deliver_number
4669
+				} else {
4670
+					warehouse.StockMinNumber = warehouse.StockMinNumber - minNumber
4671
+				}
4672
+			}
4673
+
4674
+			if minNumber == 0 && maxNumber != 1 {
4675
+				warehouse.StockMinNumber = warehouse.StockMinNumber - deliver_number
4676
+			}
4677
+
4678
+		}
4679
+
4680
+		if maxNumber == 1 && minNumber == 0 && drup.MaxUnit != drup.MinUnit {
4681
+			warehouse.StockMinNumber = warehouse.StockMinNumber - deliver_number
4682
+			if warehouse.StockMinNumber == 0 {
4683
+				warehouse.StockMaxNumber = stock_max_number
4684
+			}
4685
+		}
4686
+
4687
+		if drup.MaxUnit != drup.MinUnit {
4688
+			if warehouse.StockMaxNumber < 0 && warehouse.StockMinNumber < 0 {
4689
+				return errors.New("库存数量不足")
4690
+			}
4691
+		}
4692
+		if warehouse.StockMinNumber <= 0 {
4693
+			warehouse.StockMinNumber = 0
4694
+		}
4695
+
4696
+		errThree := UpDateDrugWarehouseInfoByStock(&warehouse)
4697
+
4698
+		if errThree != nil {
4699
+			return errThree
4700
+		}
4701
+
4702
+		//查询默认仓库
4703
+		houseConfig, _ := GetAllStoreHouseConfig(orgID)
4704
+		//查询默认仓库剩余多少库存
4705
+		list, _ := GetDrugSumCountByStorehouseId(houseConfig.DrugStorehouseOut, orgID, warehouse.DrugId)
4706
+		var sum_count int64
4707
+		var sum_in_count int64
4708
+		for _, it := range list {
4709
+			baseDrug, _ := GetBaseDrugMedical(it.DrugId)
4710
+			if it.MaxUnit == baseDrug.MaxUnit {
4711
+				it.StockMaxNumber = it.StockMaxNumber * baseDrug.MinNumber
4712
+				it.WarehousingCount = it.WarehousingCount * baseDrug.MinNumber
4713
+				sum_count += it.StockMaxNumber + it.StockMinNumber
4714
+				sum_in_count += it.WarehousingCount
4715
+			}
4716
+		}
4717
+		UpdateMedicalSumCount(warehouse.DrugId, sum_count, sum_in_count, orgID)
4718
+
4719
+		return nil
4720
+
4721
+	} else {
4722
+		// 当该批次的库存数量小于出库数量的话,则先把该批次出库完后,再进行递归出库
4723
+		warehouseOutInfo := &models.DrugWarehouseOutInfo{
4724
+			WarehouseOutOrderNumber: warehouseout.WarehouseOutOrderNumber,
4725
+			WarehouseOutId:          warehouseout.ID,
4726
+			Status:                  1,
4727
+			Ctime:                   time.Now().Unix(),
4728
+			Remark:                  advice.Remark,
4729
+			OrgId:                   orgID,
4730
+			Type:                    1,
4731
+			Manufacturer:            advice.Manufacturer,
4732
+			Dealer:                  warehouse.Dealer,
4733
+			IsSys:                   0,
4734
+			SysRecordTime:           advice.Ctime,
4735
+			DrugId:                  advice.DrugId,
4736
+			ExpiryDate:              warehouse.ExpiryDate,
4737
+			ProductDate:             warehouse.ProductDate,
4738
+			Number:                  warehouse.Number,
4739
+			BatchNumber:             warehouse.BatchNumber,
4740
+			Count:                   stock_number,
4741
+			RetailPrice:             advice.RetailPrice,
4742
+			Price:                   advice.Price,
4743
+			WarehouseInfoId:         warehouse.ID,
4744
+			CountUnit:               drup.MinUnit,
4745
+			AdviceId:                advice.ID,
4746
+			SupplyWarehouseId:       warehouse.SupplyWarehouseId,
4747
+			StorehouseId:            advice.StorehouseId,
4748
+			AdminUserId:             advice.AdminUserId,
4749
+		}
4750
+
4751
+		warehouseOutInfo.Count = stock_number
4752
+
4753
+		//warehouseOutInfo.CountUnit = advice.CountUnit
4754
+
4755
+		errOne := AddSigleDrugWarehouseOutInfo(warehouseOutInfo)
4756
+		if errOne != nil {
4757
+			return errOne
4758
+		}
4759
+		drugWareInfo, _ := GetLastWarehouseOutInfoById(advice.DrugId)
4760
+		drugflow := models.DrugFlow{
4761
+			WarehouseOutId:          warehouseout.ID,
4762
+			WarehouseOutOrderNumber: warehouseout.WarehouseOutOrderNumber,
4763
+			DrugId:                  advice.DrugId,
4764
+			Number:                  warehouse.Number,
4765
+			ProductDate:             advice.ProductDate,
4766
+			ExpireDate:              advice.ExpiryDate,
4767
+			Count:                   stock_number,
4768
+			Price:                   advice.Price,
4769
+			Status:                  1,
4770
+			Ctime:                   time.Now().Unix(),
4771
+			UserOrgId:               advice.OrgId,
4772
+			Manufacturer:            advice.Manufacturer,
4773
+			Dealer:                  advice.Dealer,
4774
+			BatchNumber:             warehouse.BatchNumber,
4775
+			MaxUnit:                 drup.MinUnit,
4776
+			ConsumableType:          2,
4777
+			IsEdit:                  1,
4778
+			Creator:                 0,
4779
+			IsSys:                   0,
4780
+			WarehouseOutDetailId:    drugWareInfo.ID,
4781
+			AdviceId:                advice.ID,
4782
+			SupplyWarehouseId:       warehouse.SupplyWarehouseId,
4783
+			StorehouseId:            advice.StorehouseId,
4784
+			AdminUserId:             advice.AdminUserId,
4785
+		}
4786
+
4787
+		CreateDrugFlowOne(drugflow)
4788
+		// 出库完成后,要将该批次库存清零
4789
+		//扣减库存
4790
+
4791
+		warehouse.StockMaxNumber = 0
4792
+		warehouse.StockMinNumber = 0
4793
+		warehouse.Mtime = time.Now().Unix()
4794
+
4795
+		errThree := UpDateDrugWarehouseInfoByStock(&warehouse)
4796
+
4797
+		//查询默认仓库
4798
+		houseConfig, _ := GetAllStoreHouseConfig(orgID)
4799
+		//查询默认仓库剩余多少库存
4800
+		list, _ := GetDrugSumCountByStorehouseId(houseConfig.DrugStorehouseOut, orgID, warehouse.DrugId)
4801
+		var sum_count int64
4802
+		var sum_in_count int64
4803
+		for _, it := range list {
4804
+			baseDrug, _ := GetBaseDrugMedical(it.DrugId)
4805
+			if it.MaxUnit == baseDrug.MaxUnit {
4806
+				it.StockMaxNumber = it.StockMaxNumber * baseDrug.MinNumber
4807
+				it.WarehousingCount = it.WarehousingCount * baseDrug.MinNumber
4808
+				sum_count += it.StockMaxNumber + it.StockMinNumber
4809
+				sum_in_count += it.WarehousingCount
4810
+			}
4811
+		}
4812
+		UpdateMedicalSumCount(warehouse.DrugId, sum_count, sum_in_count, orgID)
4813
+		if errThree != nil {
4814
+			return errThree
4815
+		}
4816
+		// 清零完该库存后,还有剩余出库未出完,进行对应的递归操作
4817
+		prescribingNumber_two_temp := deliver_number - stock_number
4818
+
4819
+		advice.CountUnit = drup.MinUnit
4820
+
4821
+		AutoDrugDeliverInfoTwentyOne(orgID, prescribingNumber_two_temp, warehouseout, drup, advice)
4822
+	}
4823
+
4824
+	return
4825
+}