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

一、创建药品数据

大致上和之前供货商一样,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 {

    @Autowired
    private DruginfoMapper druginfoMapper;

    /**
     * 分页查询药品数据
     *
     * @param pageNum  第几页
     * @param pageSize 每页多少条数据
     * @param param    查询参数-药品名称
     * @return
     */
    @Override
    public 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
     */
    @Override
    public int addDruginfo(Druginfo druginfo) {
        return druginfoMapper.insert(druginfo);
    }

    /**
     * 修改一条药品信息
     *
     * @param druginfo
     */
    @Override
    public int editDruginfo(Druginfo druginfo) {
        return druginfoMapper.updateById(druginfo);
    }

    /**
     * 根据主键id查询一个药品对象
     *
     * @param id
     * @return
     */
    @Override
    public Druginfo queryDruginfoById(Integer id) {
        return druginfoMapper.selectById(id);
    }

    /**
     * 根据主键id删除一个药品对象
     *
     * @param id
     * @return
     */
    @Override
    public int delDruginfoById(Integer id) {
        return druginfoMapper.deleteById(id);
    }

    /**
     * 查询所有药品
     *
     * @return
     */
    @Override
    public 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 {

    @Autowired
    private DruginfoService druginfoService;

    /**
     * 转向药品页面
     */
    @RequestMapping
    public String druginfo(){
        return "/druginfo";
    }

    /**
     * 分页查询药品列表
     */
    @RequestMapping(value = "/druginfoQueryPage")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public Object druginfoEdit(Druginfo druginfo){
        try{
            int i = druginfoService.editDruginfo(druginfo);
            return ResultMapUtil.getHashMapSave(i);
        } catch (Exception e){
            return ResultMapUtil.getHashMapException(e);
        }
    }

    /**
     * 删除一个药品
     */
    @RequestMapping(value = "/druginfoDelById")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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 {

    @Autowired
    private OwinfoMapper owinfoMapper;

    /**
     * 分页查询药品出入库数据
     *
     * @param pageNum  第几页
     * @param pageSize 每页多少条数据
     * @param param    查询参数-药品出入库名称
     * @return
     */
    @Override
    public 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
     */
    @Override
    public int addOwinfo(Owinfo owinfo) {
        return owinfoMapper.insert(owinfo);
    }

    /**
     * 修改一条药品出入库信息
     *
     * @param owinfo
     */
    @Override
    public int updateOwinfo(Owinfo owinfo) {
        return owinfoMapper.updateById(owinfo);
    }

    /**
     * 根据主键id查询一个药品出入库对象
     *
     * @param id
     * @return
     */
    @Override
    public Owinfo queryOwinfoById(Integer id) {
        return owinfoMapper.selectById(id);
    }

    /**
     * 根据主键id删除一个药品出入库对象
     *
     * @param id
     * @return
     */
    @Override
    public 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 {

    @Autowired
    private OwinfoService owinfoService;

    /**
     * 转向药品出入库页面
     */
    @RequestMapping
    public String owinfo(){
        return "/owinfo";
    }


    /**
     * 分页查询药品出入库列表
     * value可以指定请求的参数
     * value = "/xxx",method = RequestMethod.POST
     * @param param 数据
     * @param pageNum 起始页数
     * @param pageSize 每页10行记录
     * @return
     */
    @RequestMapping(value = "/owinfoQueryPage")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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.html
        return "/owinfoPage";
    }

    /**
     * 修改一个药品出入库
     * @param owinfo 实体类
     * @return 返回修改的数据
     */
    @RequestMapping(value = "/owinfoEdit")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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 {

    @Autowired
    private ProblemMapper problemMapper;

    /**
     * 分页查询问题药品数据
     *
     * @param pageNum  第几页
     * @param pageSize 每页多少条数据
     * @param param    查询参数-问题药品名称
     * @return
     */
    @Override
    public 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
     */
    @Override
    public int addProblem(Problem problem) {
        return problemMapper.insert(problem);
    }

    /**
     * 修改一条问题药品信息
     *
     * @param problem
     */
    @Override
    public int editProblem(Problem problem) {
        return problemMapper.updateById(problem);
    }

    /**
     * 根据主键id查询一个问题药品对象
     *
     * @param id
     * @return
     */
    @Override
    public Problem queryProblemById(Integer id) {
        return problemMapper.selectById(id);
    }

    /**
     * 根据主键id删除一个问题药品对象
     *
     * @param id
     * @return
     */
    @Override
    public 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 {

    @Autowired
    private ProblemService problemService;

    /**
     * 转向问题药品页面
     */
    @RequestMapping
    public String problem(){
        return "/problem";
    }

    /**
     * 分页查询问题药品列表
     * value可以指定请求的参数
     * value = "/xxx",method = RequestMethod.POST
     * @param param 查询参数
     * @param pageNum 起始页数
     * @param pageSize 每页多少条数据
     * @return
     */
    @RequestMapping(value = "/problemQueryPage")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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.html
        return "/problemPage";
    }

    /**
     * 修改一个问题药品
     * @param problem 实体类
     * @return 返回修改的数据
     */
    @RequestMapping(value = "/problemEdit")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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) {
                //生产日期
                debugger
                var 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运行测试

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值