✨作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
随着医药行业的快速发展,药店的数量和规模都在不断扩大,药店管理面临着越来越多的挑战。传统的手工管理方式已经无法满足药店管理的需要,因此,开发一款药店管理系统变得十分必要。本课题旨在开发一款适用于药店管理的系统,以提高药店管理的效率和质量。
目前,市面上已经存在一些药店管理系统,但是它们存在一些问题。首先,它们的功能比较简单,往往只涵盖了药品管理、进货管理等基础功能,而忽视了其他重要的管理环节,如供应商信息管理、销售管理等。其次,它们的数据管理方式比较落后,往往采用传统的数据库管理方式,操作复杂,效率低下。再次,它们缺乏智能化数据分析功能,无法为药店提供数据支持。
本课题旨在开发一款功能完善、操作简便、智能化程度高的药店管理系统。该系统将涵盖员工、管理人员两个角色,员工可以进行供应商信息管理、药品管理、进货管理、销售管理等操作,管理人员可以进行员工管理、基础数据管理(供应商类型、供应商信用等级类型、商品类型管理)、供应商信息管理、药品管理、进货管理、销售管理、销售数据统计报表等操作。该系统的研究目的在于提高药店管理的效率和质量,为药店的发展提供有力的支持。
本课题的研究意义在于为药店提供一套科学的管理方案,帮助药店更好地进行资源规划和管理。该系统可以实现以下功能:
提高药店管理的效率:通过系统化的管理方式,可以快速地完成各项管理任务,减少人工操作失误和时间成本。
提高药店管理的质量:通过系统化的管理方式,可以更好地掌握药品库存情况、销售情况等数据信息,及时调整经营策略和采购计划。
为药店提供数据支持:通过智能化数据分析功能,可以为药店提供销售数据统计报表等数据支持,帮助药店更好地了解市场需求和竞争情况。
提升药店竞争力:通过科学的管理方式,可以提高药店的服务质量和客户满意度,提升药店的竞争力和市场占有率。
为医药行业发展做出贡献:通过推广和应用本课题研究成果,可以为医药行业的发展做出贡献,提高整个行业的效率和水平。
二、开发环境
- 开发语言:Java
- 数据库:MySQL
- 系统架构:B/S
- 后端:SpringBoot
- 前端:Vue
三、系统功能模块
- 角色:员工、管理员
- 功能:
员工:
供应商信息管理、药品管理、进货管理、销售管理;
管理员:
员工管理、基础数据管理(供应商类型、供应商信用等级类型、商品类型管理)、供应商信息管理、药品管理、进货管理、销售管理、销售数据统计报表。
四 、系统界面展示
- 药店管理系统-界面展示:
五、代码参考
- Java项目实战-代码参考:
/**
* 药品信息
*
* @author ggk-911
* @version 1.0 2023/3/9 12:17
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
@RequestMapping("/drug")
@Api(tags = "药品信息控制层")
public class DrugInfoController {
private final DrugInfoServiceImpl service;
private final DrugInfoTypeServiceImpl drugInfoTypeService;
private final DrugPriceServiceImpl drugPriceService;
//GET查询
@GetMapping("/queryAll")
@ApiOperation("查询所有药品信息")
public RestResult queryAll(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
@RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
@RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
@RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
@RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
@ApiParam("类型搜索") Integer typeId) {
Page<DrugInfo> drugInfoPage = new Page<>(page, size);
LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();
//wrapper条件
wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);
try {
service.page(drugInfoPage, wrapper);
// drugInfoPage.getRecords().forEach(System.out::println);
} catch (Exception e) {
log.error(String.valueOf(e));
return RestResult.error("查询错误");
}
return RestResult.ok("查询成功", drugInfoPage);
}
//GET获取所有数据集合
@GetMapping("/list")
public RestResult getList(@RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
@RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
@RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
@RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
@RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
@ApiParam("类型搜索") Integer typeId) {
LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();
//wrapper条件
wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);
wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
List<DrugInfo> drugInfoList = service.list(wrapper);
return RestResult.ok("获取成功", drugInfoList);
}
//GET获取所有数据集合listExcel
@SneakyThrows
@GetMapping("/listExcel")
public void getListExcel(@RequestParam(defaultValue = "") @ApiParam("名称,别名关键字") String keyName,
@RequestParam(defaultValue = "") @ApiParam("制造商关键字") String manufacturer,
@RequestParam(defaultValue = "") @ApiParam("适应症关键字") String indications,
@RequestParam(defaultValue = "") @ApiParam("药品国家代码搜索") String nationalCode,
@RequestParam(defaultValue = "") @ApiParam("批准文号搜索") String approvalNo,
@ApiParam("类型搜索") Integer typeId,
HttpServletResponse response) {
LambdaQueryWrapper<DrugInfo> wrapper = new LambdaQueryWrapper<>();
//wrapper条件
wrapper.and(!"".equals(keyName), a -> a.like(DrugInfo::getDrugInfoName, keyName).or().like(DrugInfo::getDrugInfoAlias, keyName));
wrapper.like(!"".equals(manufacturer), DrugInfo::getDrugInfoManufacturer, manufacturer);
wrapper.like(!"".equals(nationalCode), DrugInfo::getDrugInfoNationalCode, nationalCode);
wrapper.like(!"".equals(indications), DrugInfo::getDrugInfoIndications, indications);
wrapper.eq(typeId != null, DrugInfo::getDrugInfoTypeId, typeId);
wrapper.like(!"".equals(approvalNo), DrugInfo::getDrugInfoApprovalNo, approvalNo);
List<DrugInfo> drugInfoList = service.list(wrapper);
drugInfoList.forEach(System.out::println);
//逻辑暂时放在controller
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 设置防止中文名乱码
String filename = URLEncoder.encode("用户列表", "utf-8");
// 文件下载方式(附件下载还是在当前浏览器打开)
response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");
// 生成excel
ExportParams exportParams = new ExportParams();
exportParams.setSheetName("药品信息");
exportParams.setTitle("药品信息");
Workbook sheets = ExcelExportUtil.exportExcel(exportParams, DrugInfo.class, drugInfoList);
sheets.write(response.getOutputStream());
sheets.close();
}
//POST表格导入
@SneakyThrows
@PostMapping("/importExcel")
public RestResult importExcel(MultipartFile file) {
//逻辑暂时放在controller
if (file.isEmpty()) {
throw new RuntimeException("上传文件为空");
}
ImportParams importParams = new ImportParams();
importParams.setTitleRows(1);
importParams.setHeadRows(1);
InputStream inputStream = file.getInputStream();
List<DrugInfoDTO> list = ExcelImportUtil.importExcel(inputStream, DrugInfoDTO.class, importParams);
//拿到要导入的信息长度
int size1 = list.size();
inputStream.close();
List<DrugInfo> drugInfoList = new ArrayList<>();
list.forEach(item -> {
//查询是否重复
DrugInfo drugInfoTest = service.selectByDrugInfoNationalCode(item.getDrugInfoNationalCode());
//类型不能为空
if (item.getDrugInfoTypeName() != null && !"".equals(item.getDrugInfoName()) && drugInfoTest == null) {
//通过名称取到类型ID
int drugInfoTypeId = 0;
try {
drugInfoTypeId = drugInfoTypeService.getIdByName(item.getDrugInfoTypeName());
} catch (Exception e) {
return;
}
drugInfoList.add(new DrugInfo(item.getDrugInfoId(), item.getDrugInfoName(), item.getDrugInfoAlias(), drugInfoTypeId, item.getDrugInfoStrength(), item.getDrugInfoIndications(), item.getDrugInfoAdverseReactions(), item.getDrugInfoInteractions(), item.getDrugInfoDosage(), item.getDrugInfoSpecifications(), item.getDrugInfoStorageMethod(), item.getDrugInfoValidTime(), item.getDrugInfoManufacturer(), item.getDrugInfoNationalCode(), item.getDrugInfoApprovalNo(), item.getDrugInfoListingLicenseHolder(), null, null));
}
});
//筛选后的长度
int size = drugInfoList.size();
if (size == 0) return RestResult.error("表中无数据或数据重复");
if (service.saveBatch(drugInfoList)) {
//批量导入成功后自动生成价格列
drugInfoList.forEach(item -> {
drugPriceService.save(new DrugPrice(item.getDrugInfoId(), 0D, null));
log.info("添加价格ID:{}", item.getDrugInfoId());
});
return RestResult.ok("批量导入成功,总:" + size1 + ",成功导入:" + size);
}
return RestResult.error("批量导入失败");
}
//GET查询单个
@GetMapping("/query/{id}")
@ApiOperation("查询单个药品信息")
public RestResult queryOne(@PathVariable Integer id) {
DrugInfo drugInfo = null;
try {
drugInfo = service.getById(id);
} catch (Exception e) {
log.error("查询单个药品信息错误" + e);
return RestResult.error("查询错误");
}
return RestResult.ok("查询成功", drugInfo);
}
//PUT插入
@PutMapping("/insert")
@ApiOperation("插入一条药品信息")
public RestResult insert(DrugInfo drugInfo) {
try {
if (service.save(drugInfo)) {
//药品插入成功后,药品价格插入
if (drugPriceService.save(new DrugPrice(drugInfo.getDrugInfoId(), 0D, null))) {
return RestResult.ok("插入成功,药品信息编号为:" + drugInfo.getDrugInfoId(), drugInfo.getDrugInfoId());
}
}
} catch (Exception e) {
log.error(String.valueOf(e));
}
log.info("插入药品信息:" + drugInfo.toString());
return RestResult.error("插入失败");
}
//DELETE删除
@DeleteMapping("/delete")
@ApiOperation("批量删除药品信息")
public RestResult delete(Integer[] ids) {
if (ids == null) return RestResult.error("删除失败,编号为空");
if (!service.removeBatchByIds(Arrays.asList(ids))) return RestResult.error("删除失败");
log.info("删除药品信息,编号为:" + Arrays.toString(ids));
if (!drugPriceService.deleteByDrugInfoId(ids[0])) return RestResult.error("删除失败");
return RestResult.ok("删除成功");
}
//POST更新
@PostMapping("/update")
@ApiOperation("更新一条药品信息")
public RestResult update(DrugInfo drugInfo) {
try {
if (service.updateById(drugInfo)) return RestResult.ok("更新成功");
} catch (Exception e) {
log.error(String.valueOf(e));
}
return RestResult.error("更新失败");
}
}
/**
* 药品种类控制层
*
* @author ggk-911
* @version 1.0 2023/3/19 18:39
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
@RequestMapping("/drugInfoType")
@Api("药品分类信息控制层")
public class DrugInfoTypeController {
private final DrugInfoTypeServiceImpl service;
//GET查询所有类别
@GetMapping("/queryAll")
public RestResult queryAll(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(defaultValue = "") String keyName) {
Page<DrugInfoType> drugInfoTypePage = new Page<>(page, size);
QueryWrapper<DrugInfoType> wrapper = new QueryWrapper<>();
wrapper.like(!"".equals(keyName), "drug_info_type_name", keyName);
service.page(drugInfoTypePage, wrapper);
return RestResult.ok("查询成功", drugInfoTypePage);
}
//GET获取所有数据集合
@GetMapping("/list")
public RestResult getList(@RequestParam(defaultValue = "") String keyName) {
QueryWrapper<DrugInfoType> wrapper = new QueryWrapper<>();
wrapper.like(!"".equals(keyName), "drug_info_type_name", keyName);
List<DrugInfoType> drugInfoTypeList = service.list(wrapper);
return RestResult.ok("获取成功", drugInfoTypeList);
}
//PUT添加
@PutMapping("/insert")
public RestResult insert(DrugInfoType drugInfoType) {
if (service.save(drugInfoType)) {
return RestResult.ok("添加成功,返回编号:" + drugInfoType.getDrugInfoTypeId(), drugInfoType.getDrugInfoTypeId());
}
return RestResult.error("添加失败");
}
//DELETE删除
@DeleteMapping("/delete")
public RestResult delete(Integer id) {
if (service.removeById(id)) {
return RestResult.ok("删除成功");
}
return RestResult.error("删除失败");
}
//POST更新
@PostMapping("/update")
public RestResult update(DrugInfoType drugInfoType) {
if (service.updateById(drugInfoType)) {
return RestResult.ok("更新成功");
}
return RestResult.error("更新失败");
}
}
六、论文参考
- 计算机毕业设计选题推荐-药店管理系统-论文参考:
七、系统视频
药店管理系统-项目视频:
基于SpringBoot的药店管理系统
结语
计算机毕业设计选题推荐-药店管理系统-Java项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我