|
@@ -2,14 +2,14 @@ package service
|
2
|
2
|
|
3
|
3
|
import (
|
4
|
4
|
"XT_New/models"
|
5
|
|
- _"fmt"
|
6
|
|
- "strings"
|
7
|
|
- "time"
|
8
|
|
- "math"
|
9
|
5
|
"XT_New/utils"
|
10
|
|
- "strconv"
|
11
|
6
|
"errors"
|
|
7
|
+ _ "fmt"
|
12
|
8
|
"github.com/jinzhu/gorm"
|
|
9
|
+ "math"
|
|
10
|
+ "strconv"
|
|
11
|
+ "strings"
|
|
12
|
+ "time"
|
13
|
13
|
)
|
14
|
14
|
|
15
|
15
|
// 药品出库
|
|
@@ -58,24 +58,25 @@ func DrugsDelivery(orgID int64, advice *models.DoctorAdvice) (err error) {
|
58
|
58
|
} else {
|
59
|
59
|
out = warehouseOut
|
60
|
60
|
}
|
61
|
|
- }
|
|
61
|
+ }
|
62
|
62
|
|
63
|
63
|
// 出库流程
|
64
|
64
|
// 1.查询改药品在药品库的规格信息,并将处方里的规格进行换算(尽量将拆零单位转换成包装单位)
|
65
|
|
- drup,_ := FindBaseDrugLibRecord(orgID,advice.DrugId)
|
|
65
|
+ drup, _ := FindBaseDrugLibRecord(orgID, advice.DrugId)
|
66
|
66
|
if drup.ID > 0 {
|
67
|
67
|
prescribingNumber := advice.PrescribingNumber
|
68
|
|
- DrugDeliverInfo(orgID ,prescribingNumber ,&out ,&drup ,advice)
|
|
68
|
+ DrugDeliverInfo(orgID, prescribingNumber, &out, &drup, advice)
|
69
|
69
|
} else {
|
70
|
70
|
return errors.New("药品信息不存在")
|
71
|
71
|
}
|
72
|
|
-
|
|
72
|
+
|
73
|
73
|
}
|
74
|
74
|
|
75
|
75
|
return
|
76
|
|
-}
|
|
76
|
+}
|
|
77
|
+
|
77
|
78
|
// 药品出库 递归方式
|
78
|
|
-func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.DrugWarehouseOut,drup *models.BaseDrugLib,advice *models.DoctorAdvice) (err error) {
|
|
79
|
+func DrugDeliverInfo(orgID int64, prescribingNumber float64, warehouseout *models.DrugWarehouseOut, drup *models.BaseDrugLib, advice *models.DoctorAdvice) (err error) {
|
79
|
80
|
// 判断处方里药品单位是拆零单位还是包装单位, 如果是包装单位,则根据规格,将包装数量转为拆零数量
|
80
|
81
|
var deliver_number int64 = 0
|
81
|
82
|
var stock_number int64 = 0
|
|
@@ -90,13 +91,13 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
90
|
91
|
|
91
|
92
|
// 根据先进先出原则,查询最先入库的批次,进行出库
|
92
|
93
|
// 如果没有对应的库存,则报错
|
93
|
|
- warehouse,err := FindLastWarehousingInfoByID(advice.DrugId)
|
|
94
|
+ warehouse, err := FindLastWarehousingInfoByID(advice.DrugId)
|
94
|
95
|
if err != nil {
|
95
|
96
|
return err
|
96
|
97
|
}
|
97
|
98
|
|
98
|
99
|
// 将该批次的剩余库存数量转换为拆零数量
|
99
|
|
- stock_number = warehouse.StockMaxNumber * drup.MinNumber + warehouse.StockMinNumber
|
|
100
|
+ stock_number = warehouse.StockMaxNumber*drup.MinNumber + warehouse.StockMinNumber
|
100
|
101
|
// 当库存数量大于或等于出库数量的话,则正常出库该批次
|
101
|
102
|
if stock_number >= deliver_number {
|
102
|
103
|
warehouseOutInfo := &models.DrugWarehouseOutInfo{
|
|
@@ -132,7 +133,7 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
132
|
133
|
OrgId: orgID,
|
133
|
134
|
DrugId: advice.DrugId,
|
134
|
135
|
Count: deliver_number,
|
135
|
|
- CountUnit: drup.MinUnit,
|
|
136
|
+ CountUnit: drup.MinUnit,
|
136
|
137
|
}
|
137
|
138
|
errTwo := AddSigleDrugAutoReduceRecordInfo(details)
|
138
|
139
|
if errTwo != nil {
|
|
@@ -172,7 +173,7 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
172
|
173
|
}
|
173
|
174
|
|
174
|
175
|
return nil
|
175
|
|
- } else {
|
|
176
|
+ } else {
|
176
|
177
|
// 当改批次的库存数量小于出库数量的话,则先把该批次出库完后,再进行递归出库
|
177
|
178
|
warehouseOutInfo := &models.DrugWarehouseOutInfo{
|
178
|
179
|
WarehouseOutOrderNumber: warehouseout.WarehouseOutOrderNumber,
|
|
@@ -192,7 +193,7 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
192
|
193
|
// count, _ := strconv.ParseInt(prescribingNumber, 10, 64)
|
193
|
194
|
warehouseOutInfo.Count = stock_number
|
194
|
195
|
warehouseOutInfo.CountUnit = drup.MinUnit
|
195
|
|
-
|
|
196
|
+
|
196
|
197
|
errOne := AddSigleDrugWarehouseOutInfo(warehouseOutInfo)
|
197
|
198
|
if errOne != nil {
|
198
|
199
|
return errOne
|
|
@@ -208,7 +209,7 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
208
|
209
|
OrgId: orgID,
|
209
|
210
|
DrugId: advice.DrugId,
|
210
|
211
|
Count: stock_number,
|
211
|
|
- CountUnit: drup.MinUnit,
|
|
212
|
+ CountUnit: drup.MinUnit,
|
212
|
213
|
}
|
213
|
214
|
errTwo := AddSigleDrugAutoReduceRecordInfo(details)
|
214
|
215
|
if errTwo != nil {
|
|
@@ -227,6 +228,7 @@ func DrugDeliverInfo(orgID int64,prescribingNumber float64,warehouseout *models.
|
227
|
228
|
prescribingNumber_two_temp := deliver_number - stock_number
|
228
|
229
|
advice.PrescribingNumber = float64(prescribingNumber_two_temp)
|
229
|
230
|
advice.PrescribingNumberUnit = drup.MinUnit
|
230
|
|
- DrugDeliverInfo(orgID ,prescribingNumber,warehouseout,drup ,advice )
|
|
231
|
+ DrugDeliverInfo(orgID, prescribingNumber, warehouseout, drup, advice)
|
231
|
232
|
}
|
232
|
|
-}
|
|
233
|
+ return
|
|
234
|
+}
|