一、销售记录

1.1 创建pojo实体类

Saleinfo

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 = "saleinfo")
public class Saleinfo implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*药品名称*/private String dname;/*药品编号*/private String dnumber;/*数量*/private Integer count;/*金额*/private Float total;/*操作人*/private String operator;/*操作时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date operatetime;
}

1.2 创建mapper持久层

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Saleinfo;/*** 药品销售记录的增删改查Mapper*/
public interface SaleinfoMapper extends BaseMapper<Saleinfo> {
}

1.3 创建Service业务层

package com.dh.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Saleinfo;/*** 销售记录的service接口*/
public interface SaleinfoService extends IService<Saleinfo> {/*** 分页查询销售记录数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-销售记录名称* @return*/public IPage<Saleinfo> selectSaleinfoPage(int pageNum, int pageSize, String param);/*** 新增一条销售记录信息* @param saleinfo*/public int addSaleinfo(Saleinfo saleinfo);/*** 修改一条销售记录信息* @param saleinfo*/public int editSaleinfo(Saleinfo saleinfo);/*** 根据主键id查询一个销售记录对象* @param id* @return*/public Saleinfo querySaleinfoById(Integer id);/*** 根据主键id删除一个销售记录对象* @param id* @return*/public int delSaleinfoById(Integer id);}

Impl实现类

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.SaleinfoMapper;
import com.dh.pojo.Saleinfo;
import com.dh.service.SaleinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 销售记录service实现类*/
@Service
public class SaleinfoServiceImpl extends ServiceImpl<SaleinfoMapper, Saleinfo> implements SaleinfoService {@Autowiredprivate SaleinfoMapper saleinfoMapper;/*** 分页查询销售记录数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-销售记录名称* @return*/@Overridepublic IPage<Saleinfo> selectSaleinfoPage(int pageNum, int pageSize, String param) {QueryWrapper<Saleinfo> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("dname",param);}Page<Saleinfo> page = new Page<>(pageNum,pageSize);return saleinfoMapper.selectPage(page,queryWrapper);}/*** 新增一条销售记录信息** @param saleinfo*/@Overridepublic int addSaleinfo(Saleinfo saleinfo) {return saleinfoMapper.insert(saleinfo);}/*** 修改一条销售记录信息** @param saleinfo*/@Overridepublic int editSaleinfo(Saleinfo saleinfo) {return saleinfoMapper.updateById(saleinfo);}/*** 根据主键id查询一个销售记录对象** @param id* @return*/@Overridepublic Saleinfo querySaleinfoById(Integer id) {return saleinfoMapper.selectById(id);}/*** 根据主键id删除一个销售记录对象** @param id* @return*/@Overridepublic int delSaleinfoById(Integer id) {return saleinfoMapper.deleteById(id);}
}

1.4 创建controller控制层

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Saleinfo;
import com.dh.service.SaleinfoService;
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 = "/saleinfo")
public class SaleinfoController {@Autowiredprivate SaleinfoService saleinfoService;/*** 转向销售记录页面*/@RequestMappingpublic String saleinfo(){return "/saleinfo";}/*** 分页查询销售记录列表* @param param 查询参数* @param pageNum 起始页数* @param pageSize 每页多少条数据* @return*/@RequestMapping(value = "/saleinfoQueryPage")@ResponseBodypublic Object saleinfoQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{//查询对应的数据IPage<Saleinfo> iPage = saleinfoService.selectSaleinfoPage(pageNum,pageSize,param);//获取mysql的分页查询结果return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 转向销售记录新增页面*/@RequestMapping(value = "/saleinfoPage")public String saleinfoPage(){return "/saleinfoPage";}/*** 添加一个销售记录*/@RequestMapping(value = "/saleinfoAdd")@ResponseBodypublic Object saleinfoAdd(Saleinfo saleinfo){try{//获取创建时间int i = saleinfoService.addSaleinfo(saleinfo);//新增一条出入库信息return ResultMapUtil.getHashMapSave(i);//保存,并统一格式返回} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 转向销售记录编辑页面*/@RequestMapping(value = "/saleinfoQueryById")public String saleinfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){//根据id查询药品Saleinfo saleinfo = saleinfoService.querySaleinfoById(id);//model调用逻辑处理model.addAttribute("obj",saleinfo);//跳转页saleinfoPage.htmlreturn "/saleinfoPage";}/*** 修改一个销售记录*/@RequestMapping(value = "/saleinfoEdit")@ResponseBodypublic Object saleinfoEdit(Saleinfo saleinfo){try{//修改一条药品出入库信息int i = saleinfoService.editSaleinfo(saleinfo);//保存,并统一格式返回return ResultMapUtil.getHashMapSave(i);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}/*** 删除一个销售记录* @param id 根据id删除* @return 返回删除的数据*/@RequestMapping(value = "/saleinfoDelById")@ResponseBodypublic Object saleinfoDelById(Integer id){try{//根据id删除数据int i = saleinfoService.delSaleinfoById(id);//保存,并统一格式返回return ResultMapUtil.getHashMapDel(i);} catch (Exception e){//如果出错,把异常信息返回给前端return ResultMapUtil.getHashMapException(e);}}
}

1.5 修改日期格式

Saleinfo

    /*操作时间转换成年月日*/public String getOperatetimeStr(){return DateUtil.dateConvert(operatetime);}

二、销售记录管理页面

2.1 编写销售记录页面

<!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: '/saleinfo/saleinfoQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'dname',title:'药品名称',algin:'center'},{field:'dnumber',title:'药品编号',algin:'center'},{field:'count',title:'数量',algin:'center'},{field:'total',title:'金额',algin:'center'},{field:'operator',title:'操作人',algin:'center'},{field:'operatetime',title:'操作时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.operatetime,'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: '/saleinfo/saleinfoPage',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: '/saleinfo/saleinfoAdd',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: '/saleinfo/saleinfoQueryById?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: '/saleinfo/saleinfoEdit',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: '/saleinfo/saleinfoDelById?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 编写销售记录编辑页面

<!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="dnumber" th:value="${obj?.dnumber}" 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="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="total" th:value="${obj?.total}" 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"><label class="layui-form-label">操作时间</label><div class="layui-input-block"><input type="text" readonly name="operatetime" id="operatetime" th:value="${obj?.operatetimeStr}" 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: '#operatetime',trigger: 'click'});//当前药品的值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>

2.2 运行测试

三、商品退货

数据库添加一个字段 operatetime

3.1 创建pojo实体类

Returngoods

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 com.dh.common.DateUtil;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;/*** 收到退货*/
@Data
@TableName(value = "returngoods")
public class Returngoods implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*药品名称*/private String dname;/*数量*/private Integer count;/*退货原因*/private String reason;/*总金额*/private Float total;/*操作时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date operatetime;
}

3.2 创建mapper持久层

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Returngoods;/*** 收到退货的增删改查Mapper*/
public interface ReturngoodsMapper extends BaseMapper<Returngoods> {
}

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.Returngoods;/*** 收到退货的service接口*/
public interface ReturngoodsService extends IService<Returngoods> {/*** 分页查询收到退货数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-收到退货名称* @return*/public IPage<Returngoods> selectReturngoodsPage(int pageNum, int pageSize, String param);/*** 新增一条收到退货信息* @param returngoods*/public int addReturngoods(Returngoods returngoods);/*** 修改一条收到退货信息* @param returngoods*/public int editReturngoods(Returngoods returngoods);/*** 根据主键id查询一个收到退货对象* @param id* @return*/public Returngoods queryReturngoodsById(Integer id);/*** 根据主键id删除一个收到退货对象* @param id* @return*/public int delReturngoodsById(Integer id);}

Impl实现类

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.ReturngoodsMapper;
import com.dh.pojo.Returngoods;
import com.dh.service.ReturngoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 收到退货service实现类*/
@Service
public class ReturngoodsServiceImpl extends ServiceImpl<ReturngoodsMapper, Returngoods> implements ReturngoodsService {@Autowiredprivate ReturngoodsMapper returngoodsMapper;/*** 分页查询收到退货数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-收到退货名称* @return*/@Overridepublic IPage<Returngoods> selectReturngoodsPage(int pageNum, int pageSize, String param) {QueryWrapper<Returngoods> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("dname",param);}Page<Returngoods> page = new Page<>(pageNum,pageSize);return returngoodsMapper.selectPage(page,queryWrapper);}/*** 新增一条收到退货信息** @param returngoods*/@Overridepublic int addReturngoods(Returngoods returngoods) {return returngoodsMapper.insert(returngoods);}/*** 修改一条收到退货信息** @param returngoods*/@Overridepublic int editReturngoods(Returngoods returngoods) {return returngoodsMapper.updateById(returngoods);}/*** 根据主键id查询一个收到退货对象** @param id* @return*/@Overridepublic Returngoods queryReturngoodsById(Integer id) {return returngoodsMapper.selectById(id);}/*** 根据主键id删除一个收到退货对象** @param id* @return*/@Overridepublic int delReturngoodsById(Integer id) {return returngoodsMapper.deleteById(id);}
}

3.4 创建controller控制层

ReturngoodsController

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Returngoods;
import com.dh.service.ReturngoodsService;
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 = "/returngoods")
public class ReturngoodsController {@Autowiredprivate ReturngoodsService returngoodsService;/*** 转向收到退货页面*/@RequestMappingpublic String returngoods(){return "/returngoods";}/*** 分页查询收到退货列表*/@RequestMapping(value = "/returngoodsQueryPage")@ResponseBodypublic Object returngoodsQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{IPage<Returngoods> iPage = returngoodsService.selectReturngoodsPage(pageNum,pageSize,param);return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向收到退货新增页面*/@RequestMapping(value = "/returngoodsPage")public String returngoodsPage(){return "/returngoodsPage";}/*** 添加一个收到退货*/@RequestMapping(value = "/returngoodsAdd")@ResponseBodypublic Object returngoodsAdd(Returngoods returngoods){try{int i = returngoodsService.addReturngoods(returngoods);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向收到退货编辑页面*/@RequestMapping(value = "/returngoodsQueryById")public String returngoodsQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){Returngoods returngoods = returngoodsService.queryReturngoodsById(id);model.addAttribute("obj",returngoods);return "/returngoodsPage";}/*** 修改一个收到退货*/@RequestMapping(value = "/returngoodsEdit")@ResponseBodypublic Object returngoodsEdit(Returngoods returngoods){try{int i = returngoodsService.editReturngoods(returngoods);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 删除一个收到退货*/@RequestMapping(value = "/returngoodsDelById")@ResponseBodypublic Object returngoodsDelById(Integer id){try{int i = returngoodsService.delReturngoodsById(id);return ResultMapUtil.getHashMapDel(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}
}

3.5 修改日期格式

在pojo包Returngoods中添加

    /*操作时间转换成年月日*/public String getOperatetimeStr(){return DateUtil.dateConvert(operatetime);}

四、商品退货页面

4.1 商品退货页面

returngoods.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: '/returngoods/returngoodsQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'dname',title:'药品名称',algin:'center'},{field:'count',title:'数量',algin:'center'},{field:'total',title:'金额',algin:'center'},{field:'reason',title:'退货原因',algin:'center'},{field:'operatetime',title:'操作时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.operatetime,'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: '/returngoods/returngoodsPage',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: '/returngoods/returngoodsAdd',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: '/returngoods/returngoodsQueryById?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: '/returngoods/returngoodsEdit',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: '/returngoods/returngoodsDelById?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 商品退货编辑页面

returngoodsPage.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="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="total" th:value="${obj?.total}" 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"><label class="layui-form-label">操作时间</label><div class="layui-input-block"><input type="text" readonly name="operatetime" id="operatetime" th:value="${obj?.operatetimeStr}" 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: '#operatetime',trigger: 'click'});//当前药品的值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 运行测试


五、退货给供应商

修改表字段buytime

5.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 com.dh.common.DateUtil;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;/*** 退货给供应商*/
@Data
@TableName(value = "returnsupplier")
public class Returnsupplier implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*药品名称*/private String dname;/*数量*/private Integer dcount;/*供应商名称*/private String sname;/*进货时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date buytime;/*退货原因*/private String reason;/*退货时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date createtime;/*进货时间转换成年月日*/public String getBuytimeStr(){return DateUtil.dateConvert(buytime);}/*退货时间转换成年月日*/public String getCreatetimeStr(){return DateUtil.dateConvert(createtime);}
}

5.2 创建mapper持久层

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Returnsupplier;
import org.apache.ibatis.annotations.Mapper;/*** 退货给供应商的增删改查Mapper*/
@Mapper
public interface ReturnsupplierMapper extends BaseMapper<Returnsupplier> {
}

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.Returnsupplier;/*** 退货给供应商的service接口*/
public interface ReturnsupplierService extends IService<Returnsupplier> {/*** 分页查询退货给供应商数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-退货给供应商名称* @return*/public IPage<Returnsupplier> selectReturnsupplierPage(int pageNum, int pageSize, String param);/*** 新增一条退货给供应商信息* @param returnsupplier*/public int addReturnsupplier(Returnsupplier returnsupplier);/*** 修改一条退货给供应商信息* @param returnsupplier*/public int editReturnsupplier(Returnsupplier returnsupplier);/*** 根据主键id查询一个退货给供应商对象* @param id* @return*/public Returnsupplier queryReturnsupplierById(Integer id);/*** 根据主键id删除一个退货给供应商对象* @param id* @return*/public int delReturnsupplierById(Integer id);}

Impl实现类

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.ReturnsupplierMapper;
import com.dh.pojo.Returnsupplier;
import com.dh.service.ReturnsupplierService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 退货给供应商service实现类*/
@Service
public class ReturnsupplierServiceImpl extends ServiceImpl<ReturnsupplierMapper, Returnsupplier> implements ReturnsupplierService {@Autowiredprivate ReturnsupplierMapper returnsupplierMapper;/*** 分页查询退货给供应商数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-退货给供应商名称* @return*/@Overridepublic IPage<Returnsupplier> selectReturnsupplierPage(int pageNum, int pageSize, String param) {QueryWrapper<Returnsupplier> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){queryWrapper.like("dname",param);}Page<Returnsupplier> page = new Page<>(pageNum,pageSize);return returnsupplierMapper.selectPage(page,queryWrapper);}/*** 新增一条退货给供应商信息** @param returnsupplier*/@Overridepublic int addReturnsupplier(Returnsupplier returnsupplier) {return returnsupplierMapper.insert(returnsupplier);}/*** 修改一条退货给供应商信息** @param returnsupplier*/@Overridepublic int editReturnsupplier(Returnsupplier returnsupplier) {return returnsupplierMapper.updateById(returnsupplier);}/*** 根据主键id查询一个退货给供应商对象** @param id* @return*/@Overridepublic Returnsupplier queryReturnsupplierById(Integer id) {return returnsupplierMapper.selectById(id);}/*** 根据主键id删除一个退货给供应商对象** @param id* @return*/@Overridepublic int delReturnsupplierById(Integer id) {return returnsupplierMapper.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.Returnsupplier;
import com.dh.service.ReturnsupplierService;
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 = "/returnsupplier")
public class ReturnsupplierController {@Autowiredprivate ReturnsupplierService returnsupplierService;/*** 转向退货给供应商页面*/@RequestMappingpublic String returnsupplier(){return "/returnsupplier";}/*** 分页查询退货给供应商列表*/@RequestMapping(value = "/returnsupplierQueryPage")@ResponseBodypublic Object returnsupplierQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{IPage<Returnsupplier> iPage = returnsupplierService.selectReturnsupplierPage(pageNum,pageSize,param);return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向退货给供应商新增页面*/@RequestMapping(value = "/returnsupplierPage")public String returnsupplierPage(){return "/returnsupplierPage";}/*** 添加一个退货给供应商*/@RequestMapping(value = "/returnsupplierAdd")@ResponseBodypublic Object returnsupplierAdd(Returnsupplier returnsupplier){try{int i = returnsupplierService.addReturnsupplier(returnsupplier);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向退货给供应商编辑页面*/@RequestMapping(value = "/returnsupplierQueryById")public String returnsupplierQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){Returnsupplier returnsupplier = returnsupplierService.queryReturnsupplierById(id);model.addAttribute("obj",returnsupplier);return "/returnsupplierPage";}/*** 修改一个退货给供应商*/@RequestMapping(value = "/returnsupplierEdit")@ResponseBodypublic Object returnsupplierEdit(Returnsupplier returnsupplier){try{int i = returnsupplierService.editReturnsupplier(returnsupplier);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 删除一个退货给供应商*/@RequestMapping(value = "/returnsupplierDelById")@ResponseBodypublic Object returnsupplierDelById(Integer id){try{int i = returnsupplierService.delReturnsupplierById(id);return ResultMapUtil.getHashMapDel(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}
}

六、编写供应商退货页面

6.1 供应商退货页面

<!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: '/returnsupplier/returnsupplierQueryPage',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:'sname',title:'供应商',algin:'center'},{field:'buytime',title:'进货时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.buytime,'yyyy-MM-dd')}}</div>"},{field:'reason',title:'退货原因',algin:'center'},{field:'createtime',title:'操作时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.createtime,'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: '/returnsupplier/returnsupplierPage',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: '/returnsupplier/returnsupplierAdd',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: '/returnsupplier/returnsupplierQueryById?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: '/returnsupplier/returnsupplierEdit',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: '/returnsupplier/returnsupplierDelById?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 供应商退货编辑页面

<!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="sname" th:value="${obj?.sname}" 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" readonly name="buytime" id="buytime" th:value="${obj?.buytimeStr}" 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"><label class="layui-form-label">退货时间</label><div class="layui-input-block"><input type="text" readonly name="createtime" id="createtime" th:value="${obj?.createtimeStr}" 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: '#buytime',trigger: 'click'});laydate.render({elem: '#createtime',trigger: 'click'});//当前药品的值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 运行测试

七、供应商账单信息

修改表字段buytime

7.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 com.dh.common.DateUtil;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;/*** 账单信息*/
@Data
@TableName(value = "billinfo")
public class Billinfo implements Serializable {/*主键*/@TableField(value = "id")@TableId(value = "id",type = IdType.AUTO)private Integer id;/*供应商名称*/private String sname;/*药品名称*/private String dname;/*数量*/private Integer count;/*总金额*/private Float total;/*进货时间*/@DateTimeFormat(pattern = "yyyy-MM-dd")private Date buytime;/*操作时间转换成年月日*/public String getBuytimeStr(){return DateUtil.dateConvert(buytime);}
}

7.2 创建mapper持久层

package com.dh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dh.pojo.Billinfo;
import org.apache.ibatis.annotations.Mapper;/*** 账单信息的增删改查Mapper*/
@Mapper
public interface BillinfoMapper extends BaseMapper<Billinfo> {
}

7.3 创建Service业务层

package com.dh.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dh.pojo.Billinfo;/*** 账单信息的service接口*/
public interface BillinfoService extends IService<Billinfo> {/*** 分页查询账单信息数据* @param pageNum 第几页* @param pageSize 每页多少条数据* @param param 查询参数-账单信息名称* @return*/public IPage<Billinfo> selectBillinfoPage(int pageNum, int pageSize, String param);/*** 新增一条账单信息信息* @param billinfo*/public int addBillinfo(Billinfo billinfo);/*** 修改一条账单信息信息* @param billinfo*/public int editBillinfo(Billinfo billinfo);/*** 根据主键id查询一个账单信息对象* @param id* @return*/public Billinfo queryBillinfoById(Integer id);/*** 根据主键id删除一个账单信息对象* @param id* @return*/public int delBillinfoById(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.BillinfoMapper;
import com.dh.pojo.Billinfo;
import com.dh.service.BillinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 账单信息service实现类*/
@Service
public class BillinfoServiceImpl extends ServiceImpl<BillinfoMapper, Billinfo> implements BillinfoService {@Autowiredprivate BillinfoMapper billinfoMapper;/*** 分页查询账单信息数据** @param pageNum  第几页* @param pageSize 每页多少条数据* @param param    查询参数-账单信息名称* @return*/@Overridepublic IPage<Billinfo> selectBillinfoPage(int pageNum, int pageSize, String param) {QueryWrapper<Billinfo> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(param)){//根据供应商名称精确查询queryWrapper.eq("sname",param);}Page<Billinfo> page = new Page<>(pageNum,pageSize);return billinfoMapper.selectPage(page,queryWrapper);}/*** 新增一条账单信息信息** @param billinfo*/@Overridepublic int addBillinfo(Billinfo billinfo) {return billinfoMapper.insert(billinfo);}/*** 修改一条账单信息信息** @param billinfo*/@Overridepublic int editBillinfo(Billinfo billinfo) {return billinfoMapper.updateById(billinfo);}/*** 根据主键id查询一个账单信息对象** @param id* @return*/@Overridepublic Billinfo queryBillinfoById(Integer id) {return billinfoMapper.selectById(id);}/*** 根据主键id删除一个账单信息对象** @param id* @return*/@Overridepublic int delBillinfoById(Integer id) {return billinfoMapper.deleteById(id);}}

7.4 创建controller控制层

package com.dh.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dh.common.ResultMapUtil;
import com.dh.pojo.Billinfo;
import com.dh.service.BillinfoService;
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 = "/billinfo")
public class BillinfoController {@Autowiredprivate BillinfoService billinfoService;/*** 转向账单信息页面*/@RequestMappingpublic String billinfo(){return "/billinfo";}/*** 分页查询账单信息列表*/@RequestMapping(value = "/billinfoQueryPage")@ResponseBodypublic Object billinfoQueryPage(String param, @RequestParam(defaultValue = "1")int pageNum,@RequestParam(defaultValue = "10")int pageSize){try{IPage<Billinfo> iPage = billinfoService.selectBillinfoPage(pageNum,pageSize,param);return ResultMapUtil.getHashMapMysqlPage(iPage);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向账单信息新增页面*/@RequestMapping(value = "/billinfoPage")public String billinfoPage(){return "/billinfoPage";}/*** 添加一个账单信息*/@RequestMapping(value = "/billinfoAdd")@ResponseBodypublic Object billinfoAdd(Billinfo billinfo){try{int i = billinfoService.addBillinfo(billinfo);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 转向账单信息编辑页面*/@RequestMapping(value = "/billinfoQueryById")public String billinfoQueryById(@RequestParam(name = "id",required = true)Integer id, Model model){Billinfo billinfo = billinfoService.queryBillinfoById(id);model.addAttribute("obj",billinfo);return "/billinfoPage";}/*** 修改一个账单信息*/@RequestMapping(value = "/billinfoEdit")@ResponseBodypublic Object billinfoEdit(Billinfo billinfo){try{int i = billinfoService.editBillinfo(billinfo);return ResultMapUtil.getHashMapSave(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}/*** 删除一个账单信息*/@RequestMapping(value = "/billinfoDelById")@ResponseBodypublic Object billinfoDelById(Integer id){try{int i = billinfoService.delBillinfoById(id);return ResultMapUtil.getHashMapDel(i);} catch (Exception e){return ResultMapUtil.getHashMapException(e);}}
}

八、供应商账单页面

8.1 编写供应商账单信息页面

<!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: '/billinfo/billinfoQueryPage',method: 'POST',page: true,id: 'table-load',toolbar: '#toolbarDemo',cols: [[{title: '序号',templet: '#indexTpl',width: 60,align:'center'},{field:'sname',title:'供应商',algin:'center'},{field:'dname',title:'药品名称',algin:'center'},{field:'count',title:'数量',algin:'center'},{field:'total',title:'金额',algin:'center'},{field:'buytime',title:'进货时间',algin:'center',templet:"<div>{{layui.util.toDateString(d.buytime,'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: '/billinfo/billinfoPage',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: '/billinfo/billinfoAdd',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: '/billinfo/billinfoQueryById?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: '/billinfo/billinfoEdit',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: '/billinfo/billinfoDelById?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>

8.2 编写账单的编辑页面

<!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="sname" id="sname"></select></div></div><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="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="total" th:value="${obj?.total}" 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" readonly name="buytime" id="buytime" th:value="${obj?.buytimeStr}" 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: '#buytime',trigger: 'click'});//当前供应商的值var currentSname = '[[${obj?.sname}]]';//获取供应商列表$.ajax({url: '/supplier/supplierList',dataType:'json',type:'post',cache:false,success:function (data) {$('#sname').prepend("<option value=''>请选择</option>");for(var i=0;i<data.data.length;i++){if(data.data[i].name==currentSname){$('#sname').append("<option selected value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}else{$('#sname').append("<option value='"+data.data[i].name+"'>"+data.data[i].name+"</option>");}}form.render();          //下拉列表渲染,把内容加载进去}});//当前药品的值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>

8.3 运行测试


所有功能以完成,后续可以自行扩展修改!

医院药品管理系统开源项目-04 【药品销售管理】相关推荐

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

    一.创建药品数据 大致上和之前供货商一样,Ctrl+C复制粘贴修改 1.1 创建pojo实体类 package com.dh.pojo;import com.baomidou.mybatisplus. ...

  2. 医院药品管理系统开源项目-03 【后台主体 供应商管理】

    一.创建后台主体 1.1 编写后台页面 <!DOCTYPE html> <html lang="zh_CN" xmlns:th="http://www. ...

  3. 医院药品管理系统开源项目-01 【环境配置】

    一.系统环境配置 系统开发平台:JDK1.8+Maven3.6.1 框架:Springboot+Layui 数据库和工具:MySql8.SQLyog.Navicat 开发工具: Intellij ID ...

  4. 前后端具备的管理系统开源项目免费模板

    当你写项目的时候,如何快速的完成一个项目的搭建,这个时候就需要借助到一些模板了,前端开发的一个好处就是,各类UI模板都是相当的齐全的,直接拿来用就可以了,脱离了一行又一行垒代码的繁琐的工作.,以下是收 ...

  5. 推荐一个基于SpringBoot的在线课程管理系统开源项目,超级棒!

    前言 一点知识学院 是一个在线课程资料的管理系统(是对app手机端的支撑),项目框架采用SpringBoot + JPA + mysql + easyui开发. 邀请函 该项目还有一些功能需要完善,新 ...

  6. powerbuilder 实验室信息协同管理系统开源项目

    实验室信息协同管理系统 锋星实验室信息协同管理系统是按照检验检测机构无纸化办公要求而开发的一套数字化实验室各岗位协同管理的lims软件,适用于疾控系统卫生监测.环境监测.食品.水质和产品质量检测等实验 ...

  7. 基于SpringBoot的医院门诊管理系统,高质量毕业论文范例-可直接参考使用,附源码和数据库脚本,项目导入运行视频教程,论文撰写教程

    1.项目技术栈 前端必学三个基础HTML.CSS.JS,基本每个B/S架构项目都要用到,基础中的基础.此外项目页面使用thymeleaf等前端框架技术. 后端使用Java主流的框架SpringBoot ...

  8. 《医院信息管理系统——“手术安排”模块》项目研发阶段

    <医院信息管理系统--"手术安排"模块>项目研发阶段 ························································· ...

  9. 开源项目推荐:推荐5款前端的开源项目,vue、uniapp、react学无止境用无止境_

    vue开源项目 1. vue-element-admin git地址:https://gitee.com/panjiachen/vue-element-admin.git 这是一款基于vue2.x+e ...

最新文章

  1. wordpress android,WordPress for Android 2.0 试用记
  2. Beyond Compare4长期使用方法
  3. win10安装jboss7_win7系统上jboss6 设置https访问
  4. WinAPI: Pie - 绘制饼图
  5. 不可忽视的MySQL字符集
  6. C++之set()函数和get()函数探究
  7. VS2013开发Windows服务项目
  8. 20191118每日一句
  9. bigsur正式版clover引导_迟来的OC引导版本升级教程,让大家在更新mac OS Big Sur的时候变得更轻松...
  10. Python源码剖析 - Python的总体架构
  11. eCos configtool 在ubuntu 10.10以后菜单消失的解决
  12. office2016 excel表格如何插入复选框
  13. flink 部署模式和运行时架构(会话模式、单作业模式、应用模式,JobManager、TaskManager,YARN 模式部署以及运行时架构)
  14. 500. 键盘行【我亦无他唯手熟尔】
  15. PMCAFF转载——网易云课堂产品研习
  16. C# DevExpress控件Gridview和GridControl学习总结
  17. 区分H5调用手机相机与相册
  18. 科普读书会丨《被讨厌的勇气》:愤怒不是目的,是一种工具
  19. Byte和Integer互转
  20. 退而求其次(4)——椭圆中的最大矩形

热门文章

  1. Linux中安装FastDFS轻量级分布式文件系统
  2. 微信小游戏一笔画通关代码---------深度优先图搜问题
  3. 初识Flink 原理介绍、发展由来。
  4. Android Framework入门介绍
  5. 物流可视化平台/大屏看板/图表统计/运单跟踪/物流数据统计/物流看板/运单量统计/axure原型/大屏数据可视化/动效可视化数据大屏看板
  6. 七夕H5小游戏:Face++人脸融合搭载颜值评分,看你和TA颜值配不配
  7. 关于jQuery方法间调用的返回值问题
  8. C++中数组初始化方法
  9. CTF资源网站大集合
  10. 【2018.07.29】(深度优先搜索/回溯)学习DFS算法小记