医院药品管理系统开源项目-04 【药品管理】

article/2025/8/21 11:52:08

一、创建药品数据

大致上和之前供货商一样,Ctrl+C复制粘贴修改

1.1 创建pojo实体类

package com.dh.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;/*** 药品管理*/
@Data
@TableName(value = "druginfo")
public class Druginfo implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id", type = IdType.AUTO)private Integer id;/*药品名称*/private String name;/*供应商名称*/private String supplier;/*生产时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date producttime;/*保质期(月)*/private String warrenty;/*药品编码*/private String number;/*价格*/private Float price;/*库存*/private Integer stock;}

1.2 创建mapper接口

DruginfoMapper

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Druginfo;
import org.apache.ibatis.annotations.Mapper;/*** 药品的增删改查mapper*/
@Mapper
public interface DruginfoMapper extends BaseMapper<Druginfo> {
}

1.3 创建Service业务层

DruginfoService

package com.dh.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Druginfo;import java.util.List;/*** 药品的service接口*/
public interface DruginfoService extends IService<Druginfo> {/*** 分页查询药品数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-药品名称* @return*/public IPage<Druginfo> selectDruginfoPage(int pageNum, int pageSize, String param);/*** 新增一条药品信息* @param druginfo*/public int addDruginfo(Druginfo druginfo);/*** 修改一条药品信息* @param druginfo*/public int editDruginfo(Druginfo druginfo);/*** 根据主键id查询一个药品对象* @param id* @return*/public Druginfo queryDruginfoById(Integer id);/*** 根据主键id删除一个药品对象* @param id* @return*/public int delDruginfoById(Integer id);/*** 查询所有药品* @return*/public List<Druginfo> queryDruginfoList();
}

实现类:

package com.dh.service.Impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.DruginfoMapper;
import com.dh.pojo.Druginfo;
import com.dh.service.DruginfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 药品service实现类*/
@Service
public class DruginfoServiceImpl extends ServiceImpl<DruginfoMapper, Druginfo> implements DruginfoService {@Autowiredprivate DruginfoMapper druginfoMapper;/*** 分页查询药品数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-药品名称* @return*/@Overridepublic IPage<Druginfo> selectDruginfoPage(int pageNum, int pageSize, String param) {QueryWrapper<Druginfo> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("name",param);}Page<Druginfo> page = new Page<>(pageNum,pageSize);return druginfoMapper.selectPage(page,queryWrapper);}/*** 新增一条药品信息** @param druginfo*/@Overridepublic int addDruginfo(Druginfo druginfo) {return druginfoMapper.insert(druginfo);}/*** 修改一条药品信息** @param druginfo*/@Overridepublic int editDruginfo(Druginfo druginfo) {return druginfoMapper.updateById(druginfo);}/*** 根据主键id查询一个药品对象** @param id* @return*/@Overridepublic Druginfo queryDruginfoById(Integer id) {return druginfoMapper.selectById(id);}/*** 根据主键id删除一个药品对象** @param id* @return*/@Overridepublic int delDruginfoById(Integer id) {return druginfoMapper.deleteById(id);}/*** 查询所有药品** @return*/@Overridepublic List<Druginfo> queryDruginfoList() {return druginfoMapper.selectList(null);}
}

1.4 创建controller控制层

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Druginfo;
import com.dh.service.DruginfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;/*** 药品相关的controller*/
@Controller
@RequestMapping(value = "/druginfo")
public class DruginfoController {@Autowiredprivate DruginfoService druginfoService;/*** 转向药品页面*/@RequestMappingpublic String druginfo(){return "/druginfo";}/*** 分页查询药品列表*/@RequestMapping(value = "/druginfoQueryPage")@ResponseBodypublic Object druginfoQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{IPage<Druginfo> iPage = druginfoService.selectDruginfoPage(pageNum,pageSize,param);return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向药品新增页面*/@RequestMapping(value = "/druginfoPage")public String druginfoPage(){return "/druginfoPage";}/*** 添加一个药品*/@RequestMapping(value = "/druginfoAdd")@ResponseBodypublic Object druginfoAdd(Druginfo druginfo){try{int i = druginfoService.addDruginfo(druginfo);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向药品编辑页面*/@RequestMapping(value = "/druginfoQueryById")public String druginfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){Druginfo druginfo = druginfoService.queryDruginfoById(id);model.addAttribute("obj",druginfo);return "/druginfoPage";}/*** 修改一个药品*/@RequestMapping(value = "/druginfoEdit")@ResponseBodypublic Object druginfoEdit(Druginfo druginfo){try{int i = druginfoService.editDruginfo(druginfo);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 删除一个药品*/@RequestMapping(value = "/druginfoDelById")@ResponseBodypublic Object druginfoDelById(Integer id){try{int i = druginfoService.delDruginfoById(id);return ResultMapUtil.getHashMapDel(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}
}

1.5 创建日期处理类

DateUtil
处理日期相关的操作

package com.dh.common;import java.text.SimpleDateFormat;
import java.util.Date;/*** 日期处理类* 处理日期相关的操作*/
public class DateUtil {/*** 把日期格式转换成年月日(yyyy-MM-dd)的字符串*/public static String dateConvert(Date date){//用java提供的SimpleDateFormat进行转换,传入转换的格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//返回转换的格式return sdf.format(date);}public static void main(String[] args) {//测试转换的结果System.out.println(DateUtil.dateConvert(new Date()));}
}

1.6 在Druginfo中添加时间转换

    /*生产时间转换成年月日*/public String getProducttimeStr(){return DateUtil.dateConvert(producttime);}

二、药品后台页面

2.1 编写药品管理页面

druginfo.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>药品信息管理</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all"><script type="text/html" id="indexTpl">{{d.LAY_TABLE_INDEX+1}}</script>
</head>
<body class="layui-layout-body"><div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">药品信息列表</div><div class="layui-card-body"><table class="layui-hide" id="main-table" lay-filter="main-table"></table><script type="text/html" id="toolbarDemo"><span class="layui-inline" lay-event="add"><i class="layui-icon">&#xe654;</i> </span><span class="layui-inline" style="width: 240px;"><input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off"></span><span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch"><i class="layui-icon">&#xe615;</i>查询</span></script><script type="text/html" id="barDemo"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></script></div></div></div></div></div><script th:src="@{/static/layui/layui.js}"></script><script>layui.use(['table','form'],function () {var $ = layui.$;var table = layui.table;table.render({elem: '#main-table',height: 650,url: '/druginfo/druginfoQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'name',title:'药品名称',algin:'center'},{field:'supplier',title:'供应商',algin:'center'},{field:'warrenty',title:'保质期(月)',algin:'center'},{field:'number',title:'药品编码',algin:'center'},{field:'price',title:'药品价格',algin:'center'},{field:'stock',title:'库存',algin:'center'},{field:'producttime',title:'生产时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.producttime,'yyyy-MM-dd')}}</div>"},{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}]]});//监听头工具栏事件table.on('toolbar(main-table)',function (obj) {switch (obj.event) {case 'add':layer.open({type: 2,title: '新增药品信息',content: '/druginfo/druginfoPage',shade:[0.8,'#393d49'],area:['600px','530px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/druginfo/druginfoAdd',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'querySearch':var param = $('#param').val();table.reload('table-load',{where: {param: param}});$('#param').val(param);break;}});//监听编辑、删除table.on('tool(main-table)',function (obj) {var data = obj.data;switch (obj.event) {case 'edit':layer.open({type: 2,title: '编辑药品信息',content: '/druginfo/druginfoQueryById?id=' +data.id,shade:[0.8,'#393d49'],area:['600px','500px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/druginfo/druginfoEdit',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'del':layer.confirm('确认要删除吗?',function (index) {$.ajax({url: '/druginfo/druginfoDelById?id=' +data.id,data: null,async: false,cache: false,success: function (str) {table.reload('table-load');layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});})break;}});});</script>
</body>
</html>

2.2 编写药品编辑页面

druginfoPage.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>药品信息</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body><div class="layui-fluid"><div class="layui-card"><div class="layui-card-body" style="padding: 15px;"><form class="layui-form layui-form-pane" action=""><input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/><div class="layui-form-item"><label class="layui-form-label">药品名称</label><div class="layui-input-block"><input type="text" name="name" th:value="${obj?.name}" lay-verify="required" placeholder="请输入药品名称" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">药品编码</label><div class="layui-input-block"><input type="text" name="number" th:value="${obj?.number}" lay-verify="required" placeholder="请输入药品编码" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">供应商</label><div class="layui-input-block"><select name="supplier" id="supplier"></select></div></div><div class="layui-form-item"><label class="layui-form-label">生产时间</label><div class="layui-input-block"><input type="text" readonly name="producttime" id="producttime" th:value="${obj?.producttimeStr}" lay-verify="required" placeholder="请输入生产时间" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">保质期(月)</label><div class="layui-input-block"><input type="text" name="warrenty" th:value="${obj?.warrenty}" lay-verify="required" placeholder="请输入保质期(月)" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">价格</label><div class="layui-input-block"><input type="text" name="price" th:value="${obj?.price}" lay-verify="required" placeholder="请输入价格" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">库存</label><div class="layui-input-block"><input type="text" name="stock" th:value="${obj?.stock}" lay-verify="required" placeholder="请输入库存" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item layui-hide"><input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认"></div></form></div></div></div><script th:src="@{/static/layui/layui.js}"></script><script>layui.use(['form','laydate'],function () {var $ = layui.$;var laydate = layui.laydate;var form = layui.form;//支持日期控件laydate.render({elem: '#producttime',trigger: 'click'});//当前供应商的值var currentSupplier = '[[${obj?.supplier}]]';//获取供应商列表$.ajax({url: '/supplier/supplieList',dataType:'json',type:'post',cache:false,success:function (data) {$('#supplier').prepend("<option value=''>请选择</option>");for(var i=0;i<data.data.length;i++){if(data.data[i].name==currentSupplier){$('#supplier').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}else{$('#supplier').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}}form.render();          //下拉列表渲染,把内容加载进去}});});</script>
</body>
</html>

2.3 修改index跳转页面

二级药品菜单的页面跳转

 <!--二级菜单-->
<dl class="layui-nav-child"><dd><a href="#" class="site-demo-active" lay-href="/druginfo" data-id="1" data-title="药品信息">药品信息</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/supplier" data-id="2" data-title="供应商信息">供应商信息</a> </dd>
</dl>

2.4 测试

在这里插入图片描述
发现无法显示供应商

2.5 List返回格式

编写ResultMapUtil

 /*** List返回格式*/public static HashMap<String,Object> getHashMapList(List<?> list){HashMap<String,Object> resultMap = new HashMap<>();resultMap.put("code",0);if(list!=null&&list.size()>0){resultMap.put("msg","");}else {resultMap.put("msg","没有查询到数据!");}resultMap.put("data",list);return resultMap;}

2.6 获取所有供应商

编写SupplierController

    /*** 获取所有供应商*/@RequestMapping(value = "/supplierList")@ResponseBodypublic Object supplierList(){List<Supplier> supplierList = supplierService.querySupplierList();return ResultMapUtil.getHashMapList(supplierList);}

2.7 测试:

在这里插入图片描述
在这里插入图片描述

三、药品出入库管理

3.1 创建pojo实体类

Owinfo

package com.dh.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;
import java.util.Date;/*** 药品出入库管理*/
@Data
@TableName(value = "owinfo")
public class Owinfo implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*药品名称*/private String dname;/*出库/入库*/private String type;/*数量*/private Integer count;/*操作人*/private String operator;/*操作时间*/private Date createtime;
}

3.2 创建mapper接口

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Owinfo;
import org.apache.ibatis.annotations.Mapper;/*** 药品出入库的增删改查Mapper*/
@Mapper
public interface OwinfoMapper extends BaseMapper<Owinfo> {
}

3.3 创建Service业务层

package com.dh.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Owinfo;/*** 药品出入库的service接口*/
public interface OwinfoService extends IService<Owinfo> {/*** 分页查询药品出入库数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-药品出入库名称* @return*/public IPage<Owinfo> selectOwinfoPage(int pageNum, int pageSize, String param);/*** 新增一条药品出入库信息* @param owinfo*/public int addOwinfo(Owinfo owinfo);/*** 修改一条药品出入库信息* @param owinfo*/public int updateOwinfo(Owinfo owinfo);/*** 根据主键id查询一个药品出入库对象* @param id* @return*/public Owinfo queryOwinfoById(Integer id);/*** 根据主键id删除一个药品出入库对象* @param id* @return*/public int delOwinfoById(Integer id);}

实现类

package com.dh.service.Impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.OwinfoMapper;
import com.dh.pojo.Owinfo;
import com.dh.service.OwinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 药品出入库service实现类*/
@Service
public class OwinfoServiceImpl extends ServiceImpl<OwinfoMapper, Owinfo> implements OwinfoService {@Autowiredprivate OwinfoMapper owinfoMapper;/*** 分页查询药品出入库数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-药品出入库名称* @return*/@Overridepublic IPage<Owinfo> selectOwinfoPage(int pageNum, int pageSize, String param) {QueryWrapper<Owinfo> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("dname",param);}Page<Owinfo> page = new Page<>(pageNum,pageSize);return owinfoMapper.selectPage(page,queryWrapper);}/*** 新增一条药品出入库信息** @param owinfo*/@Overridepublic int addOwinfo(Owinfo owinfo) {return owinfoMapper.insert(owinfo);}/*** 修改一条药品出入库信息** @param owinfo*/@Overridepublic int updateOwinfo(Owinfo owinfo) {return owinfoMapper.updateById(owinfo);}/*** 根据主键id查询一个药品出入库对象** @param id* @return*/@Overridepublic Owinfo queryOwinfoById(Integer id) {return owinfoMapper.selectById(id);}/*** 根据主键id删除一个药品出入库对象** @param id* @return*/@Overridepublic int delOwinfoById(Integer id) {return owinfoMapper.deleteById(id);}}

3.4 创建controller控制层

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Owinfo;
import com.dh.service.OwinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.Date;/*** 药品出入库相关的controller*/
@Controller
@RequestMapping(value = "/owinfo")
public class OwinfoController {@Autowiredprivate OwinfoService owinfoService;/*** 转向药品出入库页面*/@RequestMappingpublic String owinfo(){return "/owinfo";}/*** 分页查询药品出入库列表* value可以指定请求的参数* value = "/xxx",method = RequestMethod.POST* @param param 数据* @param pageNum 起始页数* @param pageSize 每页10行记录* @return*/@RequestMapping(value = "/owinfoQueryPage")@ResponseBodypublic Object owinfoQueryPage(String param, @RequestParam(defaultValue = "1")Integer pageNum,@RequestParam(defaultValue = "10")Integer pageSize){try {//查询对应的数据IPage<Owinfo> iPage = owinfoService.selectOwinfoPage(pageNum, pageSize, param);//获取mysql的分页查询结果return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e) {//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 转向药品出入库新增页面* @return 跳转owinfoPage.html*/@RequestMapping(value = "/owinfoPage")public String owinfoPage(){return "/owinfoPage";}/*** 添加一个药品出入库* @param owinfo* @return*/@RequestMapping(value = "/owinfoAdd")@ResponseBodypublic Object owinfoAdd(Owinfo owinfo){try {//获取创建时间owinfo.setCreatetime(new Date());//新增一条出入库信息int i = owinfoService.addOwinfo(owinfo);//保存,并统一格式返回return ResultMapUtil.getHashMapSave(i);} catch (Exception e) {//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 根据查询的id,转向药品出入库编辑页面* @param id 查询的id* @param model* @return*/@RequestMapping(value = "/owinfoQueryById")public String owinfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){//根据id查询药品Owinfo owinfo = owinfoService.queryOwinfoById(id);//model调用逻辑处理model.addAttribute("obj", owinfo);//跳转页owinfoPage.htmlreturn "/owinfoPage";}/*** 修改一个药品出入库* @param owinfo 实体类* @return 返回修改的数据*/@RequestMapping(value = "/owinfoEdit")@ResponseBodypublic Object owinfoupdate(Owinfo owinfo){try {//修改一条药品出入库信息int i = owinfoService.updateOwinfo(owinfo);//保存,并统一格式返回return ResultMapUtil.getHashMapSave(i);} catch (Exception e) {//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 删除一个药品出入库* @param id 根据id删除* @return 返回删除的数据*/@RequestMapping(value = "/owinfoDelById")@ResponseBodypublic Object owinfoDelById(Integer id){try {//根据id删除数据int i = owinfoService.delOwinfoById(id);//保存,并统一格式返回return ResultMapUtil.getHashMapDel(i);} catch (Exception e) {//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}
}

3.5 获取所有的药品

DruginfoController

    /*** 获取所有药品*/@RequestMapping(value = "/druginfoList")@ResponseBodypublic Object druginfoList(){List<Druginfo> druginfoList = druginfoService.queryDruginfoList();return ResultMapUtil.getHashMapList(druginfoList);}

四、出入库后台页面

4.1 药品管理页面

owinfo.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>药品出入库信息管理</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all"><script type="text/html" id="indexTpl">{{d.LAY_TABLE_INDEX+1}}</script>
</head>
<body class="layui-layout-body"><div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">药品出入库信息列表</div><div class="layui-card-body"><table class="layui-hide" id="main-table" lay-filter="main-table"></table><script type="text/html" id="toolbarDemo"><span class="layui-inline" lay-event="add"><i class="layui-icon">&#xe654;</i> </span><span class="layui-inline" style="width: 240px;"><input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off"></span><span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch"><i class="layui-icon">&#xe615;</i>查询</span></script><script type="text/html" id="barDemo"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></script></div></div></div></div></div><script th:src="@{/static/layui/layui.js}"></script><script>layui.use(['table','form'],function () {var $ = layui.$;var table = layui.table;table.render({elem: '#main-table',height: 650,url: '/owinfo/owinfoQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'dname',title:'药品名称',algin:'center'},{field:'type',title:'出库/入库',algin:'center'},{field:'count',title:'数量',algin:'center'},{field:'operator',title:'操作人',algin:'center'},{field:'createtime',title:'操作时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd HH:mm:ss')}}</div>"},{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}]]});//监听头工具栏事件table.on('toolbar(main-table)',function (obj) {switch (obj.event) {case 'add':layer.open({type: 2,title: '新增药品出入库信息',content: '/owinfo/owinfoPage',shade:[0.8,'#393d49'],area:['600px','530px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/owinfo/owinfoAdd',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'querySearch':var param = $('#param').val();table.reload('table-load',{where: {param: param}});$('#param').val(param);break;}});//监听编辑、删除table.on('tool(main-table)',function (obj) {var data = obj.data;switch (obj.event) {case 'edit':layer.open({type: 2,title: '编辑药品出入库信息',content: '/owinfo/owinfoQueryById?id=' +data.id,shade:[0.8,'#393d49'],area:['600px','500px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/owinfo/owinfoEdit',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'del':layer.confirm('确认要删除吗?',function (index) {$.ajax({url: '/owinfo/owinfoDelById?id=' +data.id,data: null,async: false,cache: false,success: function (str) {table.reload('table-load');layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});})break;}});});</script>
</body>
</html>

4.2 药品编辑页面

owinfoPage.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>药品出入库信息</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body><div class="layui-fluid"><div class="layui-card"><div class="layui-card-body" style="padding: 15px;"><form class="layui-form layui-form-pane" action=""><input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/><div class="layui-form-item"><label class="layui-form-label">药品名称</label><div class="layui-input-block"><select name="dname" id="dname"></select></div></div><div class="layui-form-item"><label class="layui-form-label">出入库类型</label><div class="layui-input-block" th:style="'display:' + @{(${obj?.type != null} ? 'none' : '')} + ''"><input type="radio" name="type" value="出库" title="出库"><input type="radio" name="type" value="入库" title="入库"></div><div class="layui-input-block" th:style="'display:' + @{(${obj?.type == null} ? 'none' : '')} + ''"><input type="text" th:value="${obj?.type}" class="layui-input" disabled></div></div><div class="layui-form-item"><label class="layui-form-label">数量</label><div class="layui-input-block"><input type="text" name="count" th:value="${obj?.count}" lay-verify="required" placeholder="请输入数量" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">操作人</label><div class="layui-input-block"><input type="text" name="operator" th:value="${obj?.operator}" lay-verify="required" placeholder="请输入操作人" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item layui-hide"><input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认"></div></form></div></div></div><script th:src="@{/static/layui/layui.js}"></script><script>layui.use(['form'],function () {var $ = layui.$;var form = layui.form;//当前药品的值var currentDname = '[[${obj?.dname}]]';//获取供应商列表$.ajax({url: '/druginfo/druginfoList',dataType:'json',type:'post',cache:false,success:function (data) {$('#dname').prepend("<option value=''>请选择</option>");for(var i=0;i<data.data.length;i++){if(data.data[i].name==currentDname){$('#dname').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}else{$('#dname').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}}form.render();          //下拉列表渲染,把内容加载进去}});});</script>
</body>
</html>

4.3 完善index左侧菜单

完善左侧页面代码,为后面提供便利

    <!--左侧菜单--><div class="layui-side layui-bg-black"><!--可以滚动--><div class="layui-side-scroll"><!--lay-accordion="true" 菜单可以折叠--><ul class="layui-nav layui-nav-tree" lay-accordion="true"><li class="layui-nav-item"><a href="javascript:;" class="layui-icon layui-icon-set-fill layui-nav-item"> 药品库存管理</a><dl class="layui-nav-child"><dd><a href="#" class="site-demo-active" lay-href="/owinfo" data-id="11" data-title="登记出入库信息">登记出入库信息</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/problem" data-id="12" data-title="问题药品记录">问题药品记录</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/druginfo/warranty" data-id="13" data-title="药品保质期检查">药品保质期检查</a> </dd></dl></li><li class="layui-nav-item"><a href="javascript:;" class="layui-icon layui-icon-chart-screen layui-nav-item"> 药品销售管理</a><dl class="layui-nav-child"><dd><a href="#" class="site-demo-active" lay-href="/saleinfo" data-id="21" data-title="销售记录">销售记录</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/returngoods" data-id="22" data-title="收到退货">收到退货</a> </dd></dl></li><li class="layui-nav-item"><a href="javascript:;" class="layui-icon layui-icon-date layui-nav-item"> 药品明细查询</a><!--二级菜单--><dl class="layui-nav-child"><dd><a href="#" class="site-demo-active" lay-href="/druginfo" data-id="1" data-title="药品信息">药品信息</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/supplier" data-id="2" data-title="供应商信息">供应商信息</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/returnsupplier" data-id="33" data-title="退货给供应商">退货给供应商</a> </dd><dd><a href="#" class="site-demo-active" lay-href="/billinfo" data-id="33" data-title="账单信息">账单信息</a> </dd></dl></li></ul></div></div>

4.4 运行测试

在这里插入图片描述

编辑药品出入库
在这里插入图片描述

在这里插入图片描述

五、药品记录管理

参考入库管理,进行修改

5.1 创建pojo实体类

Problem

package com.dh.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.io.Serializable;
import java.util.Date;/*** 药品记录管理* 问题药品*/
@Data
@TableName(value = "problem")
public class Problem implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*药品名称*/private String dname;/*问题药品数量*/private Integer dcount;/*药品单价*/private Float dprice;/*问题原因*/private String reason;/*操作时间*/private Date createtime;
}

5.2 创建mapper接口

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Problem;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface ProblemMapper extends BaseMapper<Problem> {
}

5.3 创建Service业务层

package com.dh.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Problem;/*** 问题药品的service接口*/
public interface ProblemService extends IService<Problem> {/*** 分页查询问题药品数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-问题药品名称* @return*/public IPage<Problem> selectProblemPage(int pageNum, int pageSize, String param);/*** 新增一条问题药品信息* @param problem*/public int addProblem(Problem problem);/*** 修改一条问题药品信息* @param problem*/public int editProblem(Problem problem);/*** 根据主键id查询一个问题药品对象* @param id* @return*/public Problem queryProblemById(Integer id);/*** 根据主键id删除一个问题药品对象* @param id* @return*/public int delProblemById(Integer id);
}

实现类

package com.dh.service.Impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dh.mapper.ProblemMapper;
import com.dh.pojo.Problem;
import com.dh.service.ProblemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 问题药品service实现类*/
@Service
public class ProblemServiceImpl extends ServiceImpl<ProblemMapper, Problem> implements ProblemService {@Autowiredprivate ProblemMapper problemMapper;/*** 分页查询问题药品数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-问题药品名称* @return*/@Overridepublic IPage<Problem> selectProblemPage(int pageNum, int pageSize, String param) {QueryWrapper<Problem> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("dname",param);}Page<Problem> page = new Page<>(pageNum,pageSize);return problemMapper.selectPage(page,queryWrapper);}/*** 新增一条问题药品信息** @param problem*/@Overridepublic int addProblem(Problem problem) {return problemMapper.insert(problem);}/*** 修改一条问题药品信息** @param problem*/@Overridepublic int editProblem(Problem problem) {return problemMapper.updateById(problem);}/*** 根据主键id查询一个问题药品对象** @param id* @return*/@Overridepublic Problem queryProblemById(Integer id) {return problemMapper.selectById(id);}/*** 根据主键id删除一个问题药品对象** @param id* @return*/@Overridepublic int delProblemById(Integer id) {return problemMapper.deleteById(id);}
}

5.4 创建controller控制层

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Problem;
import com.dh.service.ProblemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.Date;/*** 问题药品相关的controller*/
@Controller
@RequestMapping(value = "/problem")
public class ProblemController {@Autowiredprivate ProblemService problemService;/*** 转向问题药品页面*/@RequestMappingpublic String problem(){return "/problem";}/*** 分页查询问题药品列表* value可以指定请求的参数* value = "/xxx",method = RequestMethod.POST* @param param 查询参数* @param pageNum 起始页数* @param pageSize 每页多少条数据* @return*/@RequestMapping(value = "/problemQueryPage")@ResponseBodypublic Object problemQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{//查询对应的数据IPage<Problem> iPage = problemService.selectProblemPage(pageNum,pageSize,param);//获取mysql的分页查询结果return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 转向问题药品新增页面*  @return 跳转problemPage.html*/@RequestMapping(value = "/problemPage")public String problemPage(){return "/problemPage";}/*** 添加一个问题药品*/@RequestMapping(value = "/problemAdd")@ResponseBodypublic Object problemAdd(Problem problem){try{//获取当前时间problem.setCreatetime(new Date());//新增一条出入库信息int i = problemService.addProblem(problem);//保存,并统一格式返回return ResultMapUtil.getHashMapSave(i);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 转向问题药品编辑页面* @param id 查询的id* @param model* @return*/@RequestMapping(value = "/problemQueryById")public String problemQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){//根据id查询药品Problem problem = problemService.queryProblemById(id);//model调用逻辑处理model.addAttribute("obj",problem);//跳转页problemPage.htmlreturn "/problemPage";}/*** 修改一个问题药品* @param problem 实体类* @return 返回修改的数据*/@RequestMapping(value = "/problemEdit")@ResponseBodypublic Object problemEdit(Problem problem){try{//修改一条药品出入库信息int i = problemService.editProblem(problem);//保存,并统一格式返回return ResultMapUtil.getHashMapSave(i);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 删除一个问题药品* @param id 根据id删除* @return 返回删除的数据*/@RequestMapping(value = "/problemDelById")@ResponseBodypublic Object problemDelById(Integer id){try{//根据id删除数据int i = problemService.delProblemById(id);//保存,并统一格式返回return ResultMapUtil.getHashMapDel(i);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}
}

六、问题管理后台页面

6.1 编写问题页面

problem.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>问题药品信息管理</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all"><script type="text/html" id="indexTpl">{{d.LAY_TABLE_INDEX+1}}</script>
</head>
<body class="layui-layout-body">
<div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">问题药品信息列表</div><div class="layui-card-body"><table class="layui-hide" id="main-table" lay-filter="main-table"></table><script type="text/html" id="toolbarDemo"><span class="layui-inline" lay-event="add"><i class="layui-icon">&#xe654;</i> </span><span class="layui-inline" style="width: 240px;"><input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off"></span><span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch"><i class="layui-icon">&#xe615;</i>查询</span></script><script type="text/html" id="barDemo"><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a></script></div></div></div></div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>layui.use(['table','form'],function () {var $ = layui.$;var table = layui.table;table.render({elem: '#main-table',height: 650,url: '/problem/problemQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'dname',title:'药品名称',algin:'center'},{field:'dcount',title:'问题药品数量',algin:'center'},{field:'dprice',title:'药品单价',algin:'center'},{field:'createtime',title:'操作时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd HH:mm:ss')}}</div>"},{title:'操作',align:'center',toolbar:'#barDemo',fixed:'right'}]]});//监听头工具栏事件table.on('toolbar(main-table)',function (obj) {switch (obj.event) {case 'add':layer.open({type: 2,title: '新增问题药品信息',content: '/problem/problemPage',shade:[0.8,'#393d49'],area:['600px','530px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/problem/problemAdd',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'querySearch':var param = $('#param').val();table.reload('table-load',{where: {param: param}});$('#param').val(param);break;}});//监听编辑、删除table.on('tool(main-table)',function (obj) {var data = obj.data;switch (obj.event) {case 'edit':layer.open({type: 2,title: '编辑问题药品信息',content: '/problem/problemQueryById?id=' +data.id,shade:[0.8,'#393d49'],area:['600px','500px'],btn:['确定','取消'],yes:function (index,layero) {var iframeWindow = window['layui-layer-iframe'+index];var submit = layero.find('iframe').contents().find("#LAY-front-submit");//监听提交iframeWindow.layui.form.on('submit(LAY-front-submit)',function (data) {var field = data.field;$.ajax({url: '/problem/problemEdit',data: field,async: false,cache: false,success: function (str) {if(str.code === 0){table.reload('table-load');}layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});layer.close(index);     //关闭弹层});submit.trigger('click');},success:function (layero,index) {}});break;case 'del':layer.confirm('确认要删除吗?',function (index) {$.ajax({url: '/problem/problemDelById?id=' +data.id,data: null,async: false,cache: false,success: function (str) {table.reload('table-load');layer.msg(str.msg,{icon:str.icon,anim:str.anim});}});})break;}});});
</script>
</body>
</html>

6.2 编写问题编辑页面

problemPage.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>问题药品信息</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all">
</head>
<body>
<div class="layui-fluid"><div class="layui-card"><div class="layui-card-body" style="padding: 15px;"><form class="layui-form layui-form-pane" action=""><input name="id" th:value="${obj?.id}" class="layui-input layui-hide"/><div class="layui-form-item"><label class="layui-form-label">药品名称</label><div class="layui-input-block"><select name="dname" id="dname"></select></div></div><div class="layui-form-item"><label class="layui-form-label">药品数量</label><div class="layui-input-block"><input type="text" name="dcount" th:value="${obj?.dcount}" lay-verify="required" placeholder="请输入数量" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">药品单价</label><div class="layui-input-block"><input type="text" name="dprice" th:value="${obj?.dprice}" lay-verify="required" placeholder="请输入药品单价" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">问题原因</label><div class="layui-input-block"><textarea name="reason" th:text="${obj?.reason}" lay-verify="required" placeholder="请输入问题原因" autocomplete="off" class="layui-textarea"></textarea></div></div><div class="layui-form-item layui-hide"><input type="button" lay-submit lay-filter="LAY-front-submit" id="LAY-front-submit" value="确认"></div></form></div></div>
</div>
<script th:src="@{/static/layui/layui.js}"></script>
<script>layui.use(['form'],function () {var $ = layui.$;var form = layui.form;//当前药品的值var currentDname = '[[${obj?.dname}]]';//获取供应商列表$.ajax({url: '/druginfo/druginfoList',dataType:'json',type:'post',cache:false,success:function (data) {$('#dname').prepend("<option value=''>请选择</option>");for(var i=0;i<data.data.length;i++){if(data.data[i].name==currentDname){$('#dname').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}else{$('#dname').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}}form.render();          //下拉列表渲染,把内容加载进去}});});
</script>
</body>
</html>

6.3 运行测试

在这里插入图片描述

在这里插入图片描述

七、药品保质期检查

7.1 跳转药品保质期页面

DruginfoController

   /*** 转向药品保质期检查页面*/@RequestMapping(value = "/warranty")public String warranty(){return "/warranty";}

7.2 编写药品保质期页面

warranty.html

<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>药品保质期检查</title><link rel="stylesheet" th:href="@{/static/layui/css/layui.css}" media="all"><link rel="stylesheet" th:href="@{/static/admin/style.css}" media="all"><script type="text/html" id="indexTpl">{{d.LAY_TABLE_INDEX+1}}</script>
</head>
<body class="layui-layout-body"><div class="layui-fluid"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">药品保质期检查</div><div class="layui-card-body"><table class="layui-hide" id="main-table" lay-filter="main-table"></table><script type="text/html" id="toolbarDemo"><span class="layui-inline" lay-event="add"><i class="layui-icon">&#xe654;</i> </span><span class="layui-inline" style="width: 240px;"><input class="layui-input" name="param" id="param" placeholder="根据药品名称查询" autocomplete="off"></span><span class="layui-btn layui-btn-sm layui-bg-red" lay-event="querySearch"><i class="layui-icon">&#xe615;</i>查询</span></script></div></div></div></div></div><script th:src="@{/static/layui/layui.js}"></script><script>layui.use(['table','form'],function () {var $ = layui.$;var table = layui.table;table.render({elem: '#main-table',height: 650,url: '/druginfo/druginfoQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'name',title:'药品名称',algin:'center'},{field:'warrenty',title:'保质期(月)',algin:'center'},{field:'producttime',title:'生产时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.producttime,'yyyy-MM-dd')}}</div>"},{field:'createtime',title:'当前时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.createtime,'yyyy-MM-dd')}}</div>"},{title:'是否过期',align:'center',templet: isWarranty}]]});//监听头工具栏事件table.on('toolbar(main-table)',function (obj) {switch (obj.event) {case 'querySearch':var param = $('#param').val();table.reload('table-load',{where: {param: param}});$('#param').val(param);break;}});//计算药品是否过期function isWarranty(d) {//生产日期debuggervar p_time = d.producttime;p_time = p_time.split('-');p_time = parseInt(p_time[0])*12 + parseInt(p_time[1]);//获取当前时间var date = new Date();var year = date.getFullYear();var month = date.getMonth() + 1;var now_year_month = year*12 + month;var m = now_year_month - (p_time + parseInt(d.warrenty));if(m>=1){return "<span style='color:red'>已过期" + m +"个月</span>";}else if(m==0){return "<span style='color:#ffab00'>保质期不满一个月</span>";}else{return "<span style='color:green;'>未过期,剩余" + Math.abs(m) +"个月</span>";}}});</script>
</body>
</html>

7.3运行测试

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Gw4P4ilp.shtml

相关文章

数据库设计——医药销售管理系统

开发环境和开发工具 操作系统&#xff1a;win8.1 开发环境&#xff1a;Mysql、Web 开发工具&#xff1a;Workbench、Eclipse、JDBC 功能需求分析 员工有权查看、添加会员&#xff0c;查看、添加供应商&#xff0c;查询药品&#xff08;输入药品编号或名称、类别等查询该药…

医院管理系统/医院药品管理系统

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

基于SSM实现的医院医药药品管理系统-JAVA【毕业设计定制、快速开发、源码、开题报告】

功能介绍 登录系统&#xff1a;管理员需要输入正确的用户名和密码来登录系统&#xff0c;从而完成各类信息的管理工作&#xff1b; 信息查询&#xff1a;查询客户信息、查询经办人信息、查询药品信息&#xff1b; 信息录入&#xff1a;录入顾客信息、录入经办人信息、录入药…

ec java sm2证书_国密算法SM2证书制作

前段时间将系统的RSA算法全部升级为SM2国密算法&#xff0c;密码机和UKey硬件设备大都同时支持RSA和SM2算法&#xff0c;只是应用系统的加解密签名验证需要修改&#xff0c;这个更改底层调用的加密动态库来&#xff0c;原来RSA用的对称加密算法DES(AES)和摘要MD5(SHA1)也相应改…

SM2椭圆曲线

文章目录 题目环境方案设计背景原理算法步骤 方案实现流程图加密解密 主要函数C代码测试数据结果 注意问题 说明 题目 实现SM2椭圆曲线公钥密码算法&#xff0c;对给出的英文消息进行加密得到密文&#xff0c;并能通过密文解密出明文。 环境 Windows10&#xff0c;MinGW-W64…

JAVA集成国密SM2

JAVA集成国密SM2加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、相关链接 国密算法概述&#xff1a;https://blog.csdn.net/qq_38254635/article/details/131801527 SM2椭圆曲线公钥密码算法 为非对称加密&#xff0c;基于ECC。该算法已公开。由于该算法…

Java SM2

pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

ECCSM2

ECC&SM2 ECC 基本内容 概念 ECC 全称为椭圆曲线加密&#xff0c;EllipseCurve Cryptography&#xff0c;是一种基于椭圆曲线数学的公钥密码。与传统的基于大质数因子分解困难性的加密方法(RSA)不同&#xff0c;ECC 依赖于解决椭圆曲线离散对数问题的困难性。它的优势主要…

C# SM2

Cipher using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Digests; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math; using Org.BouncyCastle.Math.EC;namespace SM2Test {/// <summary>/// 密码计算/// </summary>public…

Springboot整合SM2加密的笔记

首先要明白公钥是加密&#xff0c;私钥用来解密。 国密公钥格式&#xff1a;公钥为64位&#xff0c;前后各32位&#xff0c;对应椭圆算法中BigInteger X 和 BigInteger X &#xff0c;私钥为32位&#xff0c;对应算法中的BigInteger d。 工具类&#xff1a; 可以参考https:/…

SM2加解密、签名验签

导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法&#xff0c;在我们国家商用密码体系中被用来替换RSA算法。 国产SM2算法&#xff0c;是基于ECC的&#xff0c;但二者在签名验签、加密解密过程中或许有些许区别&#xff0c;目前鄙人还不太清楚&#xff0c…

sm2和sm4加密算法浅析

sm2和sm4加密算法浅析 一: SM2 简介&#xff1a;SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 &#xff0c;SM2为非对称加密&#xff0c;基于ECC。该算法已公开。由于该算法基于ECC&#xff0c;故其签名速度与秘钥生成速度都快于RSA。ECC 256位&#xff0…

国密算法(SM2)简介及SM2生成秘钥

国密算法&#xff08;SM2&#xff09;生成秘钥 一、国密算法介绍二、SM2算法和RSA算法比较三、生成SM2秘钥1、openssl生成SM2秘钥1.1、安装openssl1.2、生成SM2私钥1.3、生成SM2公钥 2、nodejs:使用sm-crypto包生成SM2秘钥3、c生成秘钥 参考 一、国密算法介绍 国密即国家密码局…

向量积(叉积)

a和b叉积可表示为ab&#xff0c;结果是一个和这两个向量都垂直的伪向量 ab absinθ*n &#xff0c;ab为两向量的模长&#xff0c;θ是两向量的夹角&#xff0c;n是垂直二者的单位向量。 叉积的长度可以理解为以ab为邻边的平行四边形面积 叉积的运算 反交换律 ab-ba 分配律…

向量的点乘(内积)和叉乘(外积)

向量点乘&#xff1a;a * b&#xff08;常被写为a b&#xff09; 点乘,也叫向量的内积、数量积.顾名思义,求下来的结果是一个数. 向量a向量b|a||b|cos 在物理学中,已知力与位移求功,实际上就是求向量F与向量s的内积,即要用点乘. 向量叉乘&#xff1a;a ∧ b&#xff08;常被…

向量的内积(点乘)与外积(叉乘)

向量的内积&#xff08;点乘&#xff09;与外积&#xff08;叉乘&#xff09; 向量的内积点乘 向量的外积叉乘 向量的内积&#xff08;点乘&#xff09; 内积的几何意义&#xff1a; 用来表征或计算两个向量之间的夹角在b向量在a向量方向上的投影。 向量的外积&#xff08;叉…

两向量的向量积

两向量的向量积 两向量 a 与 b 的向量积&#xff08;外积&#xff09;是一个向量&#xff0c;记做 a b \mathbf{a}\times \mathbf{b} ab 或 [ a b ] [\mathbf{a}\mathbf{b}] [ab]&#xff0c;它的模是 ∣ a b ∣ ∣ a ∣ ∣ b ∣ sin ⁡ ∠ ( a , b ) |\mathbf{a}\times…

8.2 向量数量积与向量积(点乘与叉乘)

本篇内容依然是向量的运算&#xff0c;只不过不属于线性运算&#xff0c;内容包括向量的数量积与向量积。 一、向量的数量积&#xff08;内积、点乘&#xff0c;参与运算的是向量&#xff0c;结果是数&#xff09; &#xff08;一&#xff09;问题产生的背景与表达 &#x…

【口诀】巧记泰勒公式

函数 多项式函数 可以计算出精确值 非多项式函数 无法计算出精确值 泰勒公式的本质 多项式函数逼近非多项式函数 随着项数累加&#xff0c;逼近的误差就会越小 规律&#xff1a; 只需要确定x的指数符号只有两种情况 要么符号相同(全为) 要么符号交替( -)开头要么1&am…

matlab泰勒公式含义,泰勒公式的哲学意义与敏捷研发

学过微积分的人都知道泰勒展开公式,它是将一个在x=x0处具有n阶导数的函数f(x)利用关于(x-x0)的n次多项式来逼近函数的方法,用标准的数学术语来描述是这样的:若函数f(x)在包含x0的某个闭区间[a,b]上具有n阶导数,且在开区间(a,b)上具有(n 1)阶导数,则对闭区间[a,b]上任意一点…