|
@@ -12,14 +12,72 @@ import (
|
|
|
"fmt"
|
|
|
"github.com/beego/beego/v2/core/logs"
|
|
|
"gorm.io/gorm"
|
|
|
+ "math/rand"
|
|
|
"sort"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type StockTemplate struct {
|
|
|
}
|
|
|
|
|
|
+func (e *StockTemplate) GetStockNumber(stock string) (number string, err error) {
|
|
|
+
|
|
|
+ switch stock {
|
|
|
+ case models.TypeStockIn:
|
|
|
+ var stockIn models.StockIn
|
|
|
+
|
|
|
+ for {
|
|
|
+ rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
+ // 生成随机数后八位
|
|
|
+ randomSuffix := rand.Intn(99999999)
|
|
|
+
|
|
|
+ // 格式化年月日
|
|
|
+ date := time.Now().Format("20060102")
|
|
|
+
|
|
|
+ // 组合成16位随机数
|
|
|
+ randomNumber := fmt.Sprintf("%s%08d", date, randomSuffix)
|
|
|
+
|
|
|
+ // 查询数据库,检查随机数是否存在
|
|
|
+ if err = db.DB.Where("number = ?", randomNumber).First(&stockIn).Error; err != nil {
|
|
|
+ if err == gorm.ErrRecordNotFound {
|
|
|
+ return "RK" + randomNumber, nil
|
|
|
+ } else {
|
|
|
+ logs.Error("db error: %s", err)
|
|
|
+ return number, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ case models.TypeStockOut:
|
|
|
+ var stockOut models.StockOut
|
|
|
+ for {
|
|
|
+ rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
+ // 生成随机数后八位
|
|
|
+ randomSuffix := rand.Intn(99999999)
|
|
|
+
|
|
|
+ // 格式化年月日
|
|
|
+ date := time.Now().Format("20060102")
|
|
|
+
|
|
|
+ // 组合成16位随机数
|
|
|
+ randomNumber := fmt.Sprintf("%s%08d", date, randomSuffix)
|
|
|
+
|
|
|
+ // 查询数据库,检查随机数是否存在
|
|
|
+ if err = db.DB.Where("number = ?", randomNumber).First(&stockOut).Error; err != nil {
|
|
|
+ if err == gorm.ErrRecordNotFound {
|
|
|
+ return "CK" + randomNumber, nil
|
|
|
+ } else {
|
|
|
+ logs.Error("db error: %s", err)
|
|
|
+ return number, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return number, errors.New("生成随机数失败")
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
// GetMedicineInfo 通过名称、生产企业、规格、批号查询药品信息
|
|
|
func (e *StockTemplate) GetMedicineInfo(deptId int, medicine map[string]interface{}) (medicineInfo map[string]interface{}, err error) {
|
|
|
|
|
@@ -31,6 +89,65 @@ func (e *StockTemplate) GetMedicineInfo(deptId int, medicine map[string]interfac
|
|
|
err = db.DB.Raw(sql, productID, enterpriseID, specID, batchNumber).Scan(&medicineInfo).Error
|
|
|
return
|
|
|
}
|
|
|
+func (e *StockTemplate) GetMedicineInfoForImg(medicine map[string]interface{}) (medicineImg models.MedicineImg, err error) {
|
|
|
+ productID := utils.ToInt(medicine[models.FieldProductID])
|
|
|
+ enterpriseID := utils.ToInt(medicine[models.FieldEnterpriseID])
|
|
|
+ specID := utils.ToInt(medicine[models.FieldSpecID])
|
|
|
+ unitID := utils.ToInt(medicine[models.FieldUnitID])
|
|
|
+ dosageFormID := utils.ToInt(medicine[models.FieldDosageFormID])
|
|
|
+ batchNumber := utils.ToString(medicine[models.FieldBatchNumber])
|
|
|
+
|
|
|
+ medicineImg.BatchNumber = batchNumber
|
|
|
+ medicineImg.ApprovalNumber = utils.ToString(medicine[models.FieldApprovalNumber])
|
|
|
+ medicineImg.QualificationNumber = utils.ToString(medicine[models.FieldQualificationNumber])
|
|
|
+ medicineImg.ProductionDate = utils.ToString(medicine[models.FieldProducedDate])
|
|
|
+ medicineImg.ExpiryDate = utils.ToString(medicine[models.FieldExpiryDate])
|
|
|
+ product := models.Product{}
|
|
|
+ if err = db.DB.Model(&product).First(&product, productID).Error; err != nil {
|
|
|
+ medicineImg.Product = product.Name
|
|
|
+ }
|
|
|
+
|
|
|
+ enterprise := models.Enterprise{}
|
|
|
+ if err = db.DB.Model(&enterprise).First(&enterprise, enterpriseID).Error; err != nil {
|
|
|
+ medicineImg.Enterprise = enterprise.Name
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ spec := models.Spec{}
|
|
|
+ if err = db.DB.Model(&spec).First(&spec, specID).Error; err != nil {
|
|
|
+ medicineImg.Spec = spec.Name
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ unit := models.Unit{}
|
|
|
+ if unitID > 0 {
|
|
|
+ if err = db.DB.Model(&unit).First(&unit, unitID).Error; err != nil {
|
|
|
+ medicineImg.Unit = unit.Name
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dosageForm := models.DosageForm{}
|
|
|
+ if dosageFormID > 0 {
|
|
|
+ if err = db.DB.Model(&dosageForm).First(&dosageForm, dosageFormID).Error; err != nil {
|
|
|
+ medicineImg.DosageForm = dosageForm.Name
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+func (e *StockTemplate) GetMedicineInfoScanCodeForImg(medicine map[string]interface{}) (medicineImg models.MedicineImg, err error) {
|
|
|
+ medicineImg.Product = utils.ToString(medicine[models.FieldProductName])
|
|
|
+ medicineImg.Enterprise = utils.ToString(medicine[models.FieldEnterpriseName])
|
|
|
+ medicineImg.Spec = utils.ToString(medicine[models.FieldSpecName])
|
|
|
+ medicineImg.Unit = utils.ToString(medicine[models.FieldUnitName])
|
|
|
+ medicineImg.DosageForm = utils.ToString(medicine[models.FieldDosageFormName])
|
|
|
+ medicineImg.BatchNumber = utils.ToString(medicine[models.FieldBatchNumber])
|
|
|
+ medicineImg.ApprovalNumber = utils.ToString(medicine[models.FieldApprovalNumber])
|
|
|
+ medicineImg.QualificationNumber = utils.ToString(medicine[models.FieldQualificationNumber])
|
|
|
+ medicineImg.ProductionDate = utils.ToString(medicine[models.FieldProducedDate])
|
|
|
+ medicineImg.ExpiryDate = utils.ToString(medicine[models.FieldExpiryDate])
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
// FirstOrCreateMedicineInfo 查询或创建 品名、生产企业、规格、单位、剂型
|
|
|
func (e *StockTemplate) FirstOrCreateMedicineInfo(deptId, createBy int, medicine *map[string]interface{}) (err error) {
|
|
@@ -116,6 +233,13 @@ func (e *StockTemplate) FirstOrCreateMedicineInfo(deptId, createBy int, medicine
|
|
|
|
|
|
// BatchStockTemplateIn 批量入库
|
|
|
func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsertReq) error {
|
|
|
+
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
//var err error
|
|
|
tx := db.DB.Begin()
|
|
|
|
|
@@ -135,7 +259,7 @@ func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsert
|
|
|
for k, v := range c.MedicineInfo {
|
|
|
sql += fmt.Sprintf("`%s`='%v',", k, v)
|
|
|
}
|
|
|
- sql += fmt.Sprintf("`%s`='%v',", "purchase_unit_price", c.UnitPrice)
|
|
|
+ sql += fmt.Sprintf("`%s`='%v',", "unit_price", c.UnitPrice)
|
|
|
|
|
|
sql = sql[:len(sql)-1]
|
|
|
err = tx.Exec(sql).Error
|
|
@@ -150,9 +274,32 @@ func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsert
|
|
|
logs.Error("db error: %s", err)
|
|
|
return global.CreateFailedErr
|
|
|
}
|
|
|
+ // 添加药品图片信息
|
|
|
+ medicineImg, err := e.GetMedicineInfoForImg(c.MedicineInfo)
|
|
|
+ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("获取药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ medicineImg.DeptId = req.DeptId
|
|
|
+ medicineImg.CreateBy = req.CreateBy
|
|
|
+ err = tx.Where(models.MedicineImg{
|
|
|
+ Product: medicineImg.Product,
|
|
|
+ Enterprise: medicineImg.Enterprise,
|
|
|
+ Spec: medicineImg.Spec,
|
|
|
+ BatchNumber: medicineImg.BatchNumber,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ DeptId: req.DeptId,
|
|
|
+ }}).
|
|
|
+ Assign(medicineImg).FirstOrCreate(&medicineImg).Error
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("添加药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
} else {
|
|
|
medicineInfoId = utils.ToInt(medicineInfo["id"])
|
|
|
- err = tx.Table(models.GetMedicineInfoTableName(req.DeptId)).Where("id = ?", medicineInfoId).Update("purchase_unit_price", c.UnitPrice).Error
|
|
|
+ err = tx.Table(models.GetMedicineInfoTableName(req.DeptId)).Where("id = ?", medicineInfoId).Update("unit_price", c.UnitPrice).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -168,6 +315,7 @@ func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsert
|
|
|
Operator: c.Operator,
|
|
|
ForwardingUnit: c.ForwardingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: req.DeptId,
|
|
|
CreateBy: req.CreateBy,
|
|
@@ -182,7 +330,7 @@ func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsert
|
|
|
c.Id = stockInRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, req.DeptId).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -217,13 +365,59 @@ func (e *StockTemplate) BatchStockTemplateIn(req *dto.BatchStockTemplateInInsert
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func (e *StockTemplate) CheckStockForQrcode(Qrcode string, stock string) error {
|
|
|
+ var err error
|
|
|
+ if !strings.HasPrefix(Qrcode, "9") {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ switch stock {
|
|
|
+ case models.TypeStockIn:
|
|
|
+ var stockIn models.StockIn
|
|
|
+ err = db.DB.Where("qrcode = ?", Qrcode).First(&stockIn).Error
|
|
|
+ if err != nil {
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ return errors.New("通过条码信息查询入库记录失败")
|
|
|
+ }
|
|
|
+ return errors.New(fmt.Sprintf("条码[%s]已入库,禁止重复入库", Qrcode))
|
|
|
+ case models.TypeStockOut:
|
|
|
+ var stockOut models.StockOut
|
|
|
+ err = db.DB.Where("qrcode = ?", Qrcode).First(&stockOut).Error
|
|
|
+ if err != nil {
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ return errors.New("通过条码信息查询入库记录失败")
|
|
|
+ }
|
|
|
+ return errors.New(fmt.Sprintf("条码[%s]已出库,禁止重复出库", Qrcode))
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
// BatchStockTemplateIn 扫码入库
|
|
|
func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInInsertReq) error {
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, s := range req.StockInList {
|
|
|
+ err := e.CheckStockForQrcode(s.Qrcode, models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//var err error
|
|
|
tx := db.DB.Begin()
|
|
|
|
|
|
for _, c := range req.StockInList {
|
|
|
-
|
|
|
+ mi := make(map[string]interface{})
|
|
|
+ for k, v := range c.MedicineInfo {
|
|
|
+ mi[k] = v
|
|
|
+ }
|
|
|
// 检查药品信息是否已存在
|
|
|
err := e.FirstOrCreateMedicineInfo(req.DeptId, req.CreateBy, &c.MedicineInfo)
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
@@ -248,6 +442,7 @@ func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInIns
|
|
|
sql += fmt.Sprintf("`%s`='%v',", k, v)
|
|
|
}
|
|
|
sql += fmt.Sprintf("`%s`='%v',", "unit_price", c.UnitPrice)
|
|
|
+ sql += fmt.Sprintf("`%s`='%v',", "qrcode", c.Qrcode)
|
|
|
|
|
|
sql = sql[:len(sql)-1]
|
|
|
err = tx.Exec(sql).Error
|
|
@@ -262,6 +457,30 @@ func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInIns
|
|
|
logs.Error("db error: %s", err)
|
|
|
return global.CreateFailedErr
|
|
|
}
|
|
|
+ // 添加药品图片信息
|
|
|
+ medicineImg, err := e.GetMedicineInfoScanCodeForImg(mi)
|
|
|
+ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("获取药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ medicineImg.Qrcode = c.Qrcode
|
|
|
+ medicineImg.DeptId = req.DeptId
|
|
|
+ medicineImg.CreateBy = req.CreateBy
|
|
|
+ err = tx.Where(models.MedicineImg{
|
|
|
+ Product: medicineImg.Product,
|
|
|
+ Enterprise: medicineImg.Enterprise,
|
|
|
+ Spec: medicineImg.Spec,
|
|
|
+ BatchNumber: medicineImg.BatchNumber,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ DeptId: req.DeptId,
|
|
|
+ }}).
|
|
|
+ Assign(medicineImg).FirstOrCreate(&medicineImg).Error
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("添加药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
} else {
|
|
|
medicineInfoId = utils.ToInt(medicineInfo["id"])
|
|
|
err = tx.Table(models.GetMedicineInfoTableName(req.DeptId)).Where("id = ?", medicineInfoId).Update("unit_price", c.UnitPrice).Error
|
|
@@ -280,6 +499,8 @@ func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInIns
|
|
|
Operator: c.Operator,
|
|
|
ForwardingUnit: c.ForwardingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Qrcode: c.Qrcode,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: req.DeptId,
|
|
|
CreateBy: req.CreateBy,
|
|
@@ -294,7 +515,7 @@ func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInIns
|
|
|
c.Id = stockInRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, req.DeptId).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -332,6 +553,11 @@ func (e *StockTemplate) StockTemplateInScanCode(req *dto.BatchStockTemplateInIns
|
|
|
// StockTemplateIn 入库
|
|
|
func (e *StockTemplate) StockTemplateIn(c *dto.StockTemplateInInsertReq) error {
|
|
|
var err error
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
// 检查药品信息是否已存在
|
|
|
medicineInfo, err := e.GetMedicineInfo(c.DeptId, c.MedicineInfo)
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
@@ -362,9 +588,33 @@ func (e *StockTemplate) StockTemplateIn(c *dto.StockTemplateInInsertReq) error {
|
|
|
logs.Error("db error: %s", err)
|
|
|
return global.CreateFailedErr
|
|
|
}
|
|
|
+ // 添加药品图片信息
|
|
|
+ medicineImg, err := e.GetMedicineInfoForImg(c.MedicineInfo)
|
|
|
+ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("获取药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ medicineImg.DeptId = c.DeptId
|
|
|
+ medicineImg.CreateBy = c.CreateBy
|
|
|
+ err = tx.Where(models.MedicineImg{
|
|
|
+ Product: medicineImg.Product,
|
|
|
+ Enterprise: medicineImg.Enterprise,
|
|
|
+ Spec: medicineImg.Spec,
|
|
|
+ BatchNumber: medicineImg.BatchNumber,
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ DeptId: c.DeptId,
|
|
|
+ }}).
|
|
|
+ Assign(medicineImg).FirstOrCreate(&medicineImg).Error
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ logs.Error("添加药品图片信息失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
} else {
|
|
|
medicineInfoId = utils.ToInt(medicineInfo["id"])
|
|
|
- err = tx.Table(models.GetMedicineInfoTableName(c.DeptId)).Where("id = ?", medicineInfoId).Update("purchase_unit_price", c.UnitPrice).Error
|
|
|
+ err = tx.Table(models.GetMedicineInfoTableName(c.DeptId)).Where("id = ?", medicineInfoId).Update("unit_price", c.UnitPrice).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -380,6 +630,7 @@ func (e *StockTemplate) StockTemplateIn(c *dto.StockTemplateInInsertReq) error {
|
|
|
Operator: c.Operator,
|
|
|
ForwardingUnit: c.ForwardingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: c.DeptId,
|
|
|
CreateBy: c.CreateBy,
|
|
@@ -394,7 +645,7 @@ func (e *StockTemplate) StockTemplateIn(c *dto.StockTemplateInInsertReq) error {
|
|
|
c.Id = stockInRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, c.DeptId).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -461,7 +712,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
}
|
|
|
} else {
|
|
|
medicineInfoId = utils.ToInt(medicineInfo["id"])
|
|
|
- c.MedicineInfo["purchase_unit_price"] = c.UnitPrice
|
|
|
+ c.MedicineInfo["unit_price"] = c.UnitPrice
|
|
|
err = tx.Table(models.GetMedicineInfoTableName(c.DeptId)).Where("id = ?", medicineInfoId).Updates(c.MedicineInfo).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -532,7 +783,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
}
|
|
|
|
|
|
// 3、修改的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id >= ?", medicineInfoId, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id >= ? AND dept_id = ?", medicineInfoId, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance + ?", c.Quantity-medicineInventory.TotalIn)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -545,7 +796,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
|
|
|
// 2 查询收发记录
|
|
|
newMedicineInventory := models.MedicineInventory{}
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ?", medicineInventory.Id, medicineInfoId).Last(&newMedicineInventory).Error
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, medicineInfoId, c.DeptId).Last(&newMedicineInventory).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -568,7 +819,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
// 查询原药品id当前收发记录结余最小值
|
|
|
var balance *int
|
|
|
err = tx.Model(&models.MedicineInventory{}).Select("MIN(balance)").
|
|
|
- Where("id >= ? AND medicine_id = ?", medicineInventory.Id, StockInInfo.MedicineID).Scan(&balance).Error
|
|
|
+ Where("id >= ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, StockInInfo.MedicineID, c.DeptId).Scan(&balance).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -581,7 +832,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
}
|
|
|
|
|
|
// 3、修改原药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInventory.MedicineID, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInventory.MedicineID, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance - ?", c.Quantity)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -589,7 +840,7 @@ func (e *StockTemplate) StockTemplateInEdit(c *dto.StockTemplateInEditReq) error
|
|
|
return global.UpdateFailedErr
|
|
|
}
|
|
|
// 4、修改新药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInfoId, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInfoId, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance + ?", c.Quantity)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -626,7 +877,7 @@ func (e *StockTemplate) StockTemplateInDelete(c *dto.StockTemplateInDeleteReq) e
|
|
|
// 3 查询当前收发记录结余最小值
|
|
|
var balance *int
|
|
|
err = tx.Model(&models.MedicineInventory{}).Select("MIN(balance)").
|
|
|
- Where("id > ? AND medicine_id = ?", medicineInventory.Id, StockInInfo.MedicineID).Scan(&balance).Error
|
|
|
+ Where("id > ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, StockInInfo.MedicineID, c.DeptId).Scan(&balance).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -655,7 +906,7 @@ func (e *StockTemplate) StockTemplateInDelete(c *dto.StockTemplateInDeleteReq) e
|
|
|
}
|
|
|
|
|
|
// 6 修改原药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInventory.MedicineID, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInventory.MedicineID, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance - ?", medicineInventory.TotalIn)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -670,7 +921,11 @@ func (e *StockTemplate) StockTemplateInDelete(c *dto.StockTemplateInDeleteReq) e
|
|
|
// StockTemplateOut 出库
|
|
|
func (e *StockTemplate) StockTemplateOut(c *dto.StockTemplateOutInsertReq) error {
|
|
|
var err error
|
|
|
-
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
// 检查药品信息是否已存在
|
|
|
medicineInfo, err := e.GetMedicineInfo(c.DeptId, c.MedicineInfo)
|
|
|
if err != nil {
|
|
@@ -710,6 +965,7 @@ func (e *StockTemplate) StockTemplateOut(c *dto.StockTemplateOutInsertReq) error
|
|
|
Operator: c.Operator,
|
|
|
ReceivingUnit: c.ReceivingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: c.DeptId,
|
|
|
CreateBy: c.CreateBy,
|
|
@@ -724,7 +980,7 @@ func (e *StockTemplate) StockTemplateOut(c *dto.StockTemplateOutInsertReq) error
|
|
|
c.Id = stockOutRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, c.DeptId).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -824,7 +1080,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
|
|
|
// 查询收发记录
|
|
|
lastMedicineInventory := models.MedicineInventory{}
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ?", medicineInventory.Id, medicineInfoId).Last(&lastMedicineInventory).Error
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, medicineInfoId, c.DeptId).Last(&lastMedicineInventory).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -838,7 +1094,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
// 查询新药品id当前收发记录结余最小值
|
|
|
var balance *int
|
|
|
err = tx.Model(&models.MedicineInventory{}).Select("MIN(balance)").
|
|
|
- Where("id >= ? AND medicine_id = ?", medicineInventory.Id, medicineInfoId).Scan(&balance).Error
|
|
|
+ Where("id >= ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, medicineInfoId, c.DeptId).Scan(&balance).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -863,7 +1119,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
}
|
|
|
|
|
|
// 3、修改的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id >= ?", medicineInfoId, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id >= ? AND dept_id = ?", medicineInfoId, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance - ?", c.Quantity-medicineInventory.TotalOut)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -876,7 +1132,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
|
|
|
// 2 查询收发记录
|
|
|
newMedicineInventory := models.MedicineInventory{}
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ?", medicineInventory.Id, medicineInfoId).Last(&newMedicineInventory).Error
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("id < ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, medicineInfoId, c.DeptId).Last(&newMedicineInventory).Error
|
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -891,7 +1147,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
// 3 查询新药品id当前收发记录结余最小值
|
|
|
var balance *int
|
|
|
err = tx.Model(&models.MedicineInventory{}).Select("MIN(balance)").
|
|
|
- Where("id >= ? AND medicine_id = ?", medicineInventory.Id, medicineInfoId).Scan(&balance).Error
|
|
|
+ Where("id >= ? AND medicine_id = ? AND dept_id = ?", medicineInventory.Id, medicineInfoId, c.DeptId).Scan(&balance).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -917,7 +1173,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
}
|
|
|
|
|
|
// 3、修改原药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInventory.MedicineID, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInventory.MedicineID, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance + ?", c.Quantity)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -925,7 +1181,7 @@ func (e *StockTemplate) StockTemplateOutEdit(c *dto.StockTemplateOutEditReq) err
|
|
|
return global.UpdateFailedErr
|
|
|
}
|
|
|
// 4、修改新药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInfoId, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInfoId, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance - ?", c.Quantity)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -978,7 +1234,7 @@ func (e *StockTemplate) StockTemplateOutDelete(c *dto.StockTemplateOutDeleteReq)
|
|
|
}
|
|
|
|
|
|
// 6 修改原药品id的数量差
|
|
|
- err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ?", medicineInventory.MedicineID, medicineInventory.Id).
|
|
|
+ err = tx.Model(models.MedicineInventory{}).Where("medicine_id = ? AND id > ? AND dept_id = ?", medicineInventory.MedicineID, medicineInventory.Id, c.DeptId).
|
|
|
UpdateColumn("balance", gorm.Expr("balance + ?", medicineInventory.TotalOut)).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
@@ -992,6 +1248,11 @@ func (e *StockTemplate) StockTemplateOutDelete(c *dto.StockTemplateOutDeleteReq)
|
|
|
|
|
|
// BatchStockTemplateOut 批量出库
|
|
|
func (e *StockTemplate) BatchStockTemplateOut(req *dto.BatchStockTemplateOutInsertReq) error {
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
tx := db.DB.Begin()
|
|
|
for _, c := range req.StockOutList {
|
|
|
// 检查药品信息是否已存在
|
|
@@ -1036,6 +1297,7 @@ func (e *StockTemplate) BatchStockTemplateOut(req *dto.BatchStockTemplateOutInse
|
|
|
Operator: c.Operator,
|
|
|
ReceivingUnit: c.ReceivingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: req.DeptId,
|
|
|
CreateBy: req.CreateBy,
|
|
@@ -1050,7 +1312,7 @@ func (e *StockTemplate) BatchStockTemplateOut(req *dto.BatchStockTemplateOutInse
|
|
|
c.Id = stockOutRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, req.DeptId).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -1087,6 +1349,18 @@ func (e *StockTemplate) BatchStockTemplateOut(req *dto.BatchStockTemplateOutInse
|
|
|
|
|
|
// StockTemplateOutScanCode 扫码出库
|
|
|
func (e *StockTemplate) StockTemplateOutScanCode(req *dto.BatchStockTemplateOutInsertReq) error {
|
|
|
+ number, err := e.GetStockNumber(models.TypeStockIn)
|
|
|
+ if err != nil {
|
|
|
+ logs.Error("获取: %s", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, s := range req.StockOutList {
|
|
|
+ err := e.CheckStockForQrcode(s.Qrcode, models.TypeStockOut)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
tx := db.DB.Begin()
|
|
|
for _, c := range req.StockOutList {
|
|
|
medicineName := c.MedicineInfo[models.FieldProductName]
|
|
@@ -1139,6 +1413,8 @@ func (e *StockTemplate) StockTemplateOutScanCode(req *dto.BatchStockTemplateOutI
|
|
|
Operator: c.Operator,
|
|
|
ReceivingUnit: c.ReceivingUnit,
|
|
|
Date: c.Date,
|
|
|
+ Qrcode: c.Qrcode,
|
|
|
+ Number: number,
|
|
|
ControlBy: model2.ControlBy{
|
|
|
DeptId: req.DeptId,
|
|
|
CreateBy: req.CreateBy,
|
|
@@ -1153,7 +1429,7 @@ func (e *StockTemplate) StockTemplateOutScanCode(req *dto.BatchStockTemplateOutI
|
|
|
c.Id = stockOutRecord.Id
|
|
|
|
|
|
var inventory models.MedicineInventory
|
|
|
- err = tx.Last(&inventory, "medicine_id = ?", medicineInfoId).Error
|
|
|
+ err = tx.Last(&inventory, "medicine_id = ? and dept_id = ?", medicineInfoId, req.DeptId).Error
|
|
|
if err != nil {
|
|
|
tx.Rollback()
|
|
|
logs.Error("db error: %s", err)
|
|
@@ -1513,7 +1789,7 @@ func (e *StockTemplate) StockOperatorList(c *dto.StockOperatorListReq, deptId in
|
|
|
func (e *StockTemplate) StockInquiryList(c *dto.StockStatListReq, deptId int) (list []map[string]interface{}, count int64, err error) {
|
|
|
|
|
|
mtable := models.GetMedicineInfoTableName(deptId)
|
|
|
- whereSql := " WHERE mi.dept_id = " + strconv.Itoa(deptId)
|
|
|
+ whereSql := ""
|
|
|
if c.ProductID > 0 {
|
|
|
whereSql += " AND m_info.product_id = " + strconv.Itoa(c.ProductID)
|
|
|
}
|
|
@@ -1529,16 +1805,16 @@ func (e *StockTemplate) StockInquiryList(c *dto.StockStatListReq, deptId int) (l
|
|
|
if len(c.EndDate) > 0 {
|
|
|
whereSql += " AND m_info.expiry_date <= '" + c.EndDate + "'"
|
|
|
}
|
|
|
-
|
|
|
+ if len(whereSql) > 0 {
|
|
|
+ whereSql = " WHERE " + strings.TrimLeft(whereSql, " AND ")
|
|
|
+ }
|
|
|
offset := (c.Page - 1) * c.PageSize
|
|
|
- //sql := "SELECT * FROM (SELECT a.* FROM (SELECT * FROM medicine_inventory ORDER BY id DESC LIMIT 100) a GROUP BY a.medicine_id) b " +
|
|
|
- // "LEFT JOIN " + mtable + " ON b.medicine_id=" + mtable + ".id WHERE " + whereSql
|
|
|
|
|
|
- sql := "SELECT mi.*,m_info.* FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
+ sql := "SELECT mi.*,m_info.* FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
"JOIN medicine_inventory AS mi ON mi.medicine_id=mi_latest.medicine_id AND mi.id=mi_latest.latest_id " +
|
|
|
"LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id" + whereSql + " order by m_info.expiry_date limit ? offset ?;"
|
|
|
|
|
|
- sqlWhereCount := "SELECT COUNT(1) FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
+ sqlWhereCount := "SELECT COUNT(1) FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
"JOIN medicine_inventory AS mi ON mi.medicine_id=mi_latest.medicine_id AND mi.id=mi_latest.latest_id " +
|
|
|
"LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id" + whereSql
|
|
|
|
|
@@ -1581,7 +1857,7 @@ func (e *StockTemplate) StockInquiryList(c *dto.StockStatListReq, deptId int) (l
|
|
|
func (e *StockTemplate) StockInquiryExcel(c *dto.StockStatListReq, deptId int) (list []map[string]interface{}, err error) {
|
|
|
|
|
|
mtable := models.GetMedicineInfoTableName(deptId)
|
|
|
- whereSql := " WHERE mi.dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null"
|
|
|
+ whereSql := ""
|
|
|
if c.ProductID > 0 {
|
|
|
whereSql += " AND m_info.product_id = " + strconv.Itoa(c.ProductID)
|
|
|
}
|
|
@@ -1597,8 +1873,10 @@ func (e *StockTemplate) StockInquiryExcel(c *dto.StockStatListReq, deptId int) (
|
|
|
if len(c.EndDate) > 0 {
|
|
|
whereSql += " AND m_info.expiry_date <= '" + c.EndDate + "'"
|
|
|
}
|
|
|
-
|
|
|
- sql := "SELECT mi.*,m_info.* FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory GROUP BY medicine_id) AS mi_latest " +
|
|
|
+ if len(whereSql) > 0 {
|
|
|
+ whereSql = " WHERE " + strings.TrimLeft(whereSql, " AND ")
|
|
|
+ }
|
|
|
+ sql := "SELECT mi.*,m_info.* FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
"JOIN medicine_inventory AS mi ON mi.medicine_id=mi_latest.medicine_id AND mi.id=mi_latest.latest_id " +
|
|
|
"LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id" + whereSql + " order by m_info.expiry_date"
|
|
|
|
|
@@ -1633,15 +1911,18 @@ func (e *StockTemplate) StockInquiryExcel(c *dto.StockStatListReq, deptId int) (
|
|
|
func (e *StockTemplate) StockStat(c *dto.StockStatReq, deptId int) (list []map[string]interface{}, count int64, err error) {
|
|
|
|
|
|
mtable := models.GetMedicineInfoTableName(deptId)
|
|
|
- whereSql := " WHERE mi.dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null"
|
|
|
+ whereSql := ""
|
|
|
if c.ProductID > 0 {
|
|
|
whereSql += " AND m_info.product_id = " + strconv.Itoa(c.ProductID)
|
|
|
}
|
|
|
if c.SpecID > 0 {
|
|
|
whereSql += " AND m_info.spec_id = " + strconv.Itoa(c.SpecID)
|
|
|
}
|
|
|
+ if len(whereSql) > 0 {
|
|
|
+ whereSql = " WHERE " + strings.TrimLeft(whereSql, " AND ")
|
|
|
+ }
|
|
|
var result []map[string]interface{}
|
|
|
- sql := "SELECT mi.balance,m_info.product_id,m_info.spec_id,m_info.unit_id FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory GROUP BY medicine_id) AS mi_latest " +
|
|
|
+ sql := "SELECT mi.balance,m_info.product_id,m_info.spec_id,m_info.unit_id FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
"JOIN medicine_inventory AS mi ON mi.medicine_id=mi_latest.medicine_id AND mi.id=mi_latest.latest_id " +
|
|
|
"LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id" + whereSql
|
|
|
|
|
@@ -1712,11 +1993,10 @@ func (e *StockTemplate) StockStat(c *dto.StockStatReq, deptId int) (list []map[s
|
|
|
func (e *StockTemplate) StockHomeStat(deptId int) (list map[string]interface{}, count int64, err error) {
|
|
|
|
|
|
mtable := models.GetMedicineInfoTableName(deptId)
|
|
|
- whereSql := " WHERE mi.dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null"
|
|
|
var result []map[string]interface{}
|
|
|
- sql := "SELECT mi.balance,m_info.unit_price FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory GROUP BY medicine_id) AS mi_latest " +
|
|
|
+ sql := "SELECT mi.balance,m_info.unit_price FROM (SELECT medicine_id,MAX(id) AS latest_id FROM medicine_inventory WHERE dept_id = " + strconv.Itoa(deptId) + " AND deleted_at is null GROUP BY medicine_id) AS mi_latest " +
|
|
|
"JOIN medicine_inventory AS mi ON mi.medicine_id=mi_latest.medicine_id AND mi.id=mi_latest.latest_id " +
|
|
|
- "LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id" + whereSql
|
|
|
+ "LEFT JOIN " + mtable + " AS m_info ON mi.medicine_id=m_info.id"
|
|
|
|
|
|
err = db.DB.Raw(sql).Scan(&result).Error
|
|
|
if err != nil {
|