60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#ifndef MEDICINE_SERVICE_H
|
||
#define MEDICINE_SERVICE_H
|
||
|
||
#include <functional>
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
#include "core/his_context.h"
|
||
|
||
namespace core {
|
||
|
||
class MedicineService {
|
||
public:
|
||
explicit MedicineService(HisContext& ctx);
|
||
|
||
size_t medicineCount() const;
|
||
|
||
const Medicine* findMedicine(const std::string& id) const;
|
||
Medicine* findMedicine(const std::string& id);
|
||
|
||
void for_eachMedicine(
|
||
const std::function<void(const std::string&, const Medicine&)>& visitor) const;
|
||
|
||
// 按名称(通用名/商品名/别名)模糊匹配
|
||
void searchByName(
|
||
const std::string& keyword,
|
||
const std::function<void(const std::string&, const Medicine&)>& visitor) const;
|
||
|
||
bool addMedicine(const Medicine& m);
|
||
bool updateMedicine(const std::string& id,
|
||
const std::string& generic,
|
||
const std::string& brand,
|
||
const std::vector<std::string>& aliases,
|
||
int stock,
|
||
const std::string& dept,
|
||
double price);
|
||
bool removeMedicine(const std::string& id, std::string& outError);
|
||
|
||
bool addOrUpdateMedicine(const Medicine& m);
|
||
|
||
// 创建新药品(自动生成UUID)
|
||
Medicine createMedicine(const std::string& generic, const std::string& brand,
|
||
const std::vector<std::string>& aliases, int stock,
|
||
const std::string& dept, double price);
|
||
|
||
// 入库:增加库存(不能为负)
|
||
bool increaseStock(const std::string& id, int amount);
|
||
|
||
// 出库/发药:减少库存,库存不足时必须失败
|
||
bool decreaseStock(const std::string& id, int amount);
|
||
|
||
private:
|
||
HisContext& ctx_;
|
||
};
|
||
|
||
} // namespace core
|
||
|
||
#endif
|
||
|