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

源码获取:关注文末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);
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
很抱歉,作为人工智能语言模型,我无法提供完整的基于SpringBoot进销存管理系统代码。不过,我可以为您提供一些基于SpringBoot进销存管理系统的基本结构和实现思路。 1. 数据库设计 进销存管理系统的核心是数据,因此数据库的设计至关重要。在设计数据库的时候,需要考虑以下几个问题: - 如何存储商品信息(包括商品名称、条码、品牌、规格、单位等)? - 如何存储订单信息(包括订单号、下单时间、收货地址、付款金额等)? - 如何存储库存信息(包括商品库存数量)? - 如何存储销售信息(包括销售数量、销售金额等)? - 如何存储采购信息(包括采购数量、采购金额等)? 一般来说,可以使用关系型数据库(如MySQL、Oracle、SQL Server等)来存储这些数据。以下是一个简单的数据库表结构: - 商品表(product):id, name, barcode, brand, spec, unit, stock - 订单表(order):id, orderno, ordertime, address, amount - 销售表(sale):id, productid, saletime, count, amount - 采购表(purchase):id, productid, purchasetime, count, amount 2. Java后端开发 在SpringBoot项目中,需要完成以下几个模块的开发: - 产品管理模块:实现商品的增删改查等功能。 - 订单管理模块:实现订单的查询、创建、修改、删除等功能。 - 库存管理模块:实现库存查询和修改等功能。 - 销售管理模块:实现销售查询和增加等功能。 - 采购管理模块:实现采购查询和新增等功能。 具体实现过程需要使用SpringBoot的核心功能(如控制器、服务、存储库等)进行开发。以产品管理模块为例,需要实现以下几个接口: - 查询商品接口:根据条件查询商品列表。 - 新增商品接口:添加新的商品信息。 - 修改商品接口:修改已有的商品信息。 - 删除商品接口:删除指定的商品信息。 3. 前端开发 前端开发部分主要负责页面设计和用户交互功能的实现。可以使用前端框架(如Vue.js、React等)来进行开发。 在前端开发中,需要按照实际需求设计实现以下页面: - 产品管理页面:展示、搜索和编辑商品信息。 - 订单管理页面:展示、搜索和编辑订单信息。 - 库存管理页面:展示当前商品库存情况和修改库存数量。 - 销售管理页面:展示销售记录和新增销售记录。 - 采购管理页面:展示采购记录和新增采购记录。 4. 部署与上线 进销存管理系统的部署与上线,需要考虑以下几个问题: - 选择合适的云服务器并进行购买。 - 配置环境(如Java、MySQL等)并安装部署项目。 - 设置监控和日志收集,确保系统的稳定性和安全性。 - 保证代码及部署过程的可追溯性(如使用版本控制工具)。 总之,这只是一个简要的SpringBoot进销存管理系统实现思路。具体实现过程及代码编写则需要更深入的技术知识和经验。希望我的回答能够帮助到您。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT教程资源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值