(免费分享)基于springboot医药进销存系统

news2025/1/11 19:55:28

源码获取:关注文末gongzhonghao,输入014领取下载链接

开发工具:IDEA,数据库mysql

技术:springboot+mybatis

系统主要分两个角色,客户和员工
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package cn.tedu.drug.controller;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.fasterxml.jackson.core.JsonProcessingException;

import cn.tedu.drug.controller.exception.FileContentTypeException;
import cn.tedu.drug.controller.exception.FileEmptyException;
import cn.tedu.drug.controller.exception.FileIOException;
import cn.tedu.drug.controller.exception.FileIllegalStateException;
import cn.tedu.drug.controller.exception.FileSizeException;
import cn.tedu.drug.entity.Customer;
import cn.tedu.drug.entity.CustomerTime;
import cn.tedu.drug.entity.domain.PaginationVO;
import cn.tedu.drug.service.ICustomerService;
import cn.tedu.drug.util.ResponseResult;

@RestController		//相当于配置文件(Controller,ResponseBody)
@RequestMapping("/customer")
public class CustomerController extends BaseController {
	@Autowired	//自动装配
	private ICustomerService customerService;
	
	/**
	 * 注册用户
	 * @param user
	 * @return	返回成功
	 */
	@RequestMapping("/reg")
	public ResponseResult<Void> reg(Customer customer) {
		customerService.reg(customer);
		return new ResponseResult<Void>(SUCCESS);
	}
	
	/**
	 * 登录
	 * @param username
	 * @param password
	 * @return
	 */
	@PostMapping("/login")
	public ResponseResult<Customer> login(String phone,String password,HttpSession session) {
		Customer customer = customerService.getloginCustomer(phone, password);
		session.setAttribute( "user", customer );
		session.setAttribute( "uid", customer.getUid());
		session.setAttribute( "username", customer.getUsername() );
		return new ResponseResult<Customer>(SUCCESS,customer);
	}
	
	/**
	 * 查询客户数据,多条件查询
	 * @param drugCategory
	 * @return
	 * @throws JsonProcessingException 
	 */
	@RequestMapping("/selectCustomer")
	public ResponseResult<PaginationVO<Customer>> selectCustomer
	(String username,String gender,String address,String pageNoStr,String pageSizeStr) throws JsonProcessingException {
		//获取参数
		long pageNo = 1;	//如果没有传数据,默认为第一页
		if( pageNoStr != null && pageNoStr.trim().length()>0 ){
			pageNo = Long.parseLong(pageNoStr);
		}
		int pageSize = 1;	//如果没有传数据,默认为10条数据
		if( pageSizeStr != null && pageSizeStr.trim().length()>0 ){
			pageSize = Integer.parseInt(pageSizeStr);
		}
		long beginNo = (pageNo-1)*pageSize;
		Map<String ,Object> map = new HashMap<String ,Object>();
		map.put("beginNo", beginNo);
		map.put("pageSize", pageSize);
		map.put("username", username);
		map.put("gender", gender);
		map.put("address", address);
		PaginationVO<Customer> vo = customerService.getSelectCustomer(map);
		return new ResponseResult<PaginationVO<Customer>>(SUCCESS,vo);
	}
	
	/**
	 * 删除客户数据
	 * @param uid
	 * @param session
	 * @return
	 */
	@RequestMapping("/deleteCustomer")
	public ResponseResult<Void> deleteCustomer(Integer uid,HttpSession session){
		String username = (String) session.getAttribute("username");
		customerService.getdeleteId(uid, username);
		return new ResponseResult<Void>(SUCCESS);
	}
	
	/**
	 * 修改客户数据
	 */
	@RequestMapping("/updateCustomer")
	public ResponseResult<Void> updateCustomer(Customer customer,HttpSession session){
		String username = (String) session.getAttribute("username");
		customerService.getupdateCustomer(customer, username);
		return new ResponseResult<Void>(SUCCESS);
	}
	
	/**
	 * 展示个人信息
	 */
	@RequestMapping("/getfindByUid")
	public ResponseResult<Customer> getfindByUid(Integer uid){
		Customer customer = customerService.getfindByUid(uid);
		return new ResponseResult<Customer>(SUCCESS,customer);
	}
	
	/**
	 * 修改密码
	 */
	@RequestMapping("/getfindByUidPassword")
	public ResponseResult<Void> getfindByUidPassword(Integer uid,HttpSession session,String oldPassword,String newPassword){
		String username = (String) session.getAttribute("username");
		customerService.getfindByUidPassword(uid, username, oldPassword, newPassword);
		return new ResponseResult<Void>(SUCCESS);
	}
	
	/**
	 * 上传头像
	 * @param request
	 * @param file
	 * @return MultipartFile file
	 */
	@RequestMapping("/change_avatar")
	public ResponseResult<String> changeAvatar(HttpServletRequest request,@RequestParam("file") MultipartFile file){
		if(file.isEmpty()) {
			throw new FileEmptyException("上传头像错误!上传文件不能为空!");
		}
		if(!UPLOAD_CONTENT_TYPE.contains(file.getContentType())) {
			throw new FileContentTypeException("上传头像错误!不支持所选的文件类型!");
		}
		if(file.getSize()>UPLOAD_MAX_SIZE) {
			throw new FileSizeException("上传文件过大!请选择小于"+UPLOAD_MAX_SIZE+"的文件!");
		}
		String parentPath = request.getServletContext().getRealPath(UPLOAD_DIR);
		File parent = new File(parentPath);
		if(!parent.exists()) {
			parent.mkdirs();
		}
		String originalFilename = file.getOriginalFilename();
		//使用系统纳秒值给头像命名
		//String prefic = System.nanoTime()+"";
		//使用uid+username为头像文件命名,新头像会将旧头像替换
		HttpSession session = request.getSession();
		String prefic = session.getAttribute("uid").toString()+session.getAttribute("username").toString();
		int beginIndex = originalFilename.lastIndexOf(".");
		String suffix = "";
		if(beginIndex > 0) {
			suffix = originalFilename.substring(beginIndex);
		}
		String filename = prefic+suffix;
		File dest = new File(parent,filename);
		try {
			file.transferTo(dest);
		} catch (IllegalStateException e) {
			e.printStackTrace();
			throw new FileIllegalStateException("上传头像错误!存储头像文件时状态异常!");
		} catch (IOException e) {
			e.printStackTrace();
			throw new FileIOException("上传头像错误!读写文件时出现错误!");
		}
		Integer uid = getUidFromSession(session);
		String avatar = "/"+UPLOAD_DIR+"/"+filename;
		
		customerService.changeAvatar(avatar,uid);
		return new ResponseResult<String>(SUCCESS,avatar);
	}
	
	/**
	 * 查询客户的数量
	 */
	@RequestMapping("/selectIdCount")
	public ResponseResult<Long> selectIdCount(){
		Long count = customerService.getselectIdCount();
		return new ResponseResult<Long>(SUCCESS,count);
	}
	
	/**
	 * 图表展示,客户流量,输入年份,展示该年每一个月的客户注册量
	 * @param createdTime
	 * @return
	 */
	@RequestMapping("/selectYearTime")
	public ResponseResult<List<CustomerTime>> selectYearTime(String createdTime){
		String str = createdTime.substring(0, createdTime.indexOf("-"));
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("createdTime", str);
		List<CustomerTime> customerTimeList = customerService.getselectYearMonth(map);
		return new ResponseResult<List<CustomerTime>>(SUCCESS,customerTimeList);
	}
	
	
	
	
	
}

package cn.tedu.drug.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonProcessingException;

import cn.tedu.drug.entity.Drug;
import cn.tedu.drug.entity.DrugANDDrugCategory;
import cn.tedu.drug.entity.DrugCategory;
import cn.tedu.drug.entity.domain.PaginationVO;
import cn.tedu.drug.service.IDrugCategoryService;
import cn.tedu.drug.service.IDrugService;
import cn.tedu.drug.util.ResponseResult;

@RestController
@RequestMapping(“/drug”)
public class DrugController extends BaseController{
@Autowired //自动装配
private IDrugService drugService;
@Autowired //自动装配
private IDrugCategoryService drugCategoryService;

/**
 * 添加数据。药品类别信息
 * @param user
 * @return	返回成功
 */
@RequestMapping("/addDrug")
public ResponseResult<Void> addDrug(Drug drug,HttpSession session) {
	String username = (String) session.getAttribute("username");
	drugService.addDrug(drug, username);
	return new ResponseResult<Void>(SUCCESS);
}

/**
 * 为添加药品时,药品类别选择所设计
 * @return
 */
@RequestMapping("/selectDrugCategory")
public ResponseResult<List<DrugCategory>> selectDrugCategory(){
	List<DrugCategory> list = drugCategoryService.getfindByCategoryIdCategoryName();
	return new ResponseResult<List<DrugCategory>>(SUCCESS,list);
}

/**
 * 查询药品数据(关联查询)药品类别表,后期改为多条件查询
 * @param drugCategory
 * @return
 * @throws JsonProcessingException 
 */
@RequestMapping("/selectDrug")
public ResponseResult<PaginationVO<DrugANDDrugCategory>> selectDrug(String drugName,String unit,String origin,Integer categoryId,String pageNoStr,String pageSizeStr) throws JsonProcessingException {
	//获取参数
	long pageNo = 1;	//如果没有传数据,默认为第一页
	if( pageNoStr != null && pageNoStr.trim().length()>0 ){
		pageNo = Long.parseLong(pageNoStr);
	}
	int pageSize = 1;	//如果没有传数据,默认为10条数据
	if( pageSizeStr != null && pageSizeStr.trim().length()>0 ){
		pageSize = Integer.parseInt(pageSizeStr);
	}
	long beginNo = (pageNo-1)*pageSize;
	Map<String ,Object> map = new HashMap<String ,Object>();
	map.put("drugName", drugName);
	map.put("unit", unit);
	map.put("origin", origin);
	map.put("beginNo", beginNo);
	map.put("categoryId", categoryId);
	map.put("pageSize", pageSize);
	PaginationVO<DrugANDDrugCategory> vo = drugService.getselectDrug(map);
	return new ResponseResult<PaginationVO<DrugANDDrugCategory>>(SUCCESS,vo);
}

/**
 * 根据uid查询药品全部数据
 * @param uid
 * @return
 */
@RequestMapping("/findId")
public ResponseResult<Drug> getfindId(Integer id){
	Drug data = drugService.getfindId(id);
	return new ResponseResult<Drug>(SUCCESS,data);
};

/**
 * 修改药品数据
 * @param drug
 * @param session
 * @return
 */
@RequestMapping("/updateIdDrug")
public ResponseResult<Void> updateIdDrug(Drug drug,HttpSession session) {
	String username = (String) session.getAttribute("username");
	drugService.getupdateIdDrug(drug, username);
	return new ResponseResult<Void>(SUCCESS);
}

/**
 * 根据id删除药品数据
 * @param id
 * @param session
 * @return
 */
@RequestMapping("/deleteIdDrug")
public ResponseResult<Void> deleteIdDrug(String id,HttpSession session) {
	String[] ids = id.split(",");
	String username = (String) session.getAttribute("username");
	drugService.getdeleteIdDrug(ids, username);
	return new ResponseResult<Void>(SUCCESS);
}


/**
 * 查询药品的数量
 */
@RequestMapping("/selectIdCount")
public ResponseResult<Long> selectIdCount(){
	Long count = drugService.getselectIdCount();
	return new ResponseResult<Long>(SUCCESS,count);
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pytorch with fastai】第 18 章 :使用 CAM 进行 CNN 解释

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Design a Facebook NewsFeed

title: Notes of System Design No.06 — Design a Facebook’s Newsfeed description: Design a Facebook’s Newsfeed ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is News Feed? 01.Functional Requirement 02. Non-Functional Requireme…

面试刷题---计算机网络部分(一)

1 请描述 TCP/IP 协议中主机与主机之间通信的三要素 答&#xff1a; IP 地址&#xff08;IP address&#xff09; 子网掩码&#xff08;subnet mask&#xff09; IP 路由&#xff08;IP router&#xff09; 扩展&#xff1a; TCP/IP定义&#xff1a;TCP/IP是基于TCP和IP这两个…

iHRM 人力资源管理系统_第11章_刷脸登录

iHRM 人力资源管理系统_第11章_刷脸登录 文章目录iHRM 人力资源管理系统_第11章_刷脸登录第11章 刷脸登录1 浅谈人工智能1.1 人工智能的概述1.2 人工智能的应用领域1.3 基于人工智能的刷脸登录介绍2 百度云AI概述2.1 概述2.2 百度云AI的开发步骤2.3 百度云AI的注册与认证3 百度…

web大作业 静态网页(地下城与勇士 10页 带视频)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游戏官网 | 游戏网站 | 电竞游戏 | 游戏介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 …

开源免费的对象存储Minio

什么是Minio&#xff1f; Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合存储大容量、非结构化的数据。例如&#xff0c;图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是…

机器学习:卷积神经网络

卷积神经网络卷积神经网络的结构及原理卷积层池化层激活函数全连接层反馈运算使用MNIST数据集进行代码解析数据介绍实现流程代码实现卷积神经网络的结构及原理 卷积层 卷积运算一个重要的特点就是&#xff1a;通过卷积运算&#xff0c;可以使原信号特征增强&#xff0c;并且降…

服务器常用的异常及性能排查

服务器常用的异常及性能排查 使用 top 命令查看性能指标 top 命令使用详细介绍&#xff1a;传送门 查看Tasks total 进程数 正常我们在使用过程中对每天的一个进程数大概是有一个谱的&#xff0c;比如正常就是1百多个&#xff0c;突然暴增几百&#xff0c;那就很明显这里有…

计算机网络:运输层

运输层 运输层主要解决了应用进程之间的通信&#xff0c;称之为端到端协议 1.运输层概述 计算机网-------络体系结构的角度 AP:应用进程之间的简称 2. 运输层端口号、复用与分用的概念 2.1 端口号 2.2 发送方的复用&#xff08;multiplexing&#xff09;和接收方的分用&…

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三明年实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…

锐捷RLDP理论及实验讲解

RLDP概念 RLDP&#xff08;Rapid Link Detection Protocol&#xff09;是一个用于快速检测以太网链路故障的链路协议&#xff0c;包括环路链路故障、单向链路故障、双向链路故障等 工作原理 RLDP定义了两种协议报文&#xff1a;探测报文&#xff08;Probe&#xff09;和探测响…

【Java第32期】:Spring 中普通Maven项目的创建

作者&#xff1a;有只小猪飞走啦 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 内容&#xff1a;Spring 中普通Maven项目的创建 文章目录前言一&#xff0c;创建Spring项目1.创建一个普通的Maven项目2&#xff0c;添加Spring框架3&#xff0c;添加启动类…

【数据库系统概论】关系数据理论、范式

数据库一二三范式简单解释 第一范式 一个关系模式应当是一个五元组。 R(U,D,DOM,F)R(U,D,DOM,F)R(U,D,DOM,F) 这里&#xff1a; 关系名RRR是符号化的元组语义UUU为一组属性DDD为属性组UUU中的属性所来自的域DOMDOMDOM为属性到域的映射FFF为属性组UUU上的一组数据依赖 由于D…

RabbitMQ_概述

RabbitMQ大致工作流程图 解释 Producer&#xff1a;生产者 Consumer&#xff1a;消费者 Connection&#xff1a;AMQP协议连接 Channel&#xff1a;信道&#xff0c;进行消息读写的通道&#xff0c;RabbitMQ的绝大部分操作在信道完成&#xff1b;客户端可以建立多个信道&…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (4)- 自定义功能块(上)

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

PTA题目 两个数的简单计算器

本题要求编写一个简单计算器程序&#xff0c;可根据输入的运算符&#xff0c;对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。 输入格式&#xff1a; 输入在一行中依次输入操作数1、运算符、操作数2&#xff0c;其间以1个空格分隔。操作数的数…

跟艾文学编程《Python基础》(7)pandas数据分析

作者&#xff1a; 艾文&#xff0c;计算机硕士学位&#xff0c;企业内训讲师和金牌面试官&#xff0c;公司资深算法专家&#xff0c;现就职BAT一线大厂。邮箱&#xff1a; 1121025745qq.com博客&#xff1a;https://wenjie.blog.csdn.net/内容&#xff1a;跟艾文学编程《Python…

汉字风格迁移篇---W-net:基于深度神经网络的一次任意风格汉字生成

文章目录一、摘要二、提出原因已有的一些模型解决方案依然存在的限制三、介绍与创新四、模型介绍预处理w-net结构优化策略和损失函数五、实验实验设置用zi2zi作为基线具体实现1、 W-Net训练期间的超参数设置如下&#xff1a;2、一些细节处理模型评估W-net、zi2zi-v1、zi2zi-v2不…

第2-3-7章 个人网盘服务接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章目录5.8 导入其他接口代码5.8.1 接口导入-分页查询附件5.8.2 接口导入-根据业务类型/业务id查询附件5.9 导入网盘服务接口5.9.1 导入FileController5.9.2 导入StatisticsController5.9.3 导入FileRestManager5.9.4 导入FileService5.9.5 导入FileServiceImpl5.9.6 扩展File…

面向OLAP的列式存储DBMS-8-[ClickHouse]的常用聚合函数

ClickHouse 中的常用聚合函数 1 聚合函数 ClickHouse 中的聚合函数&#xff0c;因为和关系型数据库的相似性&#xff0c;本来聚合函数不打算说的&#xff0c;但是 ClickHouse 提供了很多关系型数据库中没有的函数&#xff0c;所以我们还是从头了解一下。 1.1 count count&…