|
@@ -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
|
+}
|