一、销售记录
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 {
@Autowired
private SaleinfoMapper saleinfoMapper;
/**
* 分页查询销售记录数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-销售记录名称
* @return
*/
@Override
public 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
*/
@Override
public int addSaleinfo(Saleinfo saleinfo) {
return saleinfoMapper.insert(saleinfo);
}
/**
* 修改一条销售记录信息
*
* @param saleinfo
*/
@Override
public int editSaleinfo(Saleinfo saleinfo) {
return saleinfoMapper.updateById(saleinfo);
}
/**
* 根据主键id查询一个销售记录对象
*
* @param id
* @return
*/
@Override
public Saleinfo querySaleinfoById(Integer id) {
return saleinfoMapper.selectById(id);
}
/**
* 根据主键id删除一个销售记录对象
*
* @param id
* @return
*/
@Override
public 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 {
@Autowired
private SaleinfoService saleinfoService;
/**
* 转向销售记录页面
*/
@RequestMapping
public String saleinfo(){
return "/saleinfo";
}
/**
* 分页查询销售记录列表
* @param param 查询参数
* @param pageNum 起始页数
* @param pageSize 每页多少条数据
* @return
*/
@RequestMapping(value = "/saleinfoQueryPage")
@ResponseBody
public 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")
@ResponseBody
public 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.html
return "/saleinfoPage";
}
/**
* 修改一个销售记录
*/
@RequestMapping(value = "/saleinfoEdit")
@ResponseBody
public 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")
@ResponseBody
public 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"></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"></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 {
@Autowired
private ReturngoodsMapper returngoodsMapper;
/**
* 分页查询收到退货数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-收到退货名称
* @return
*/
@Override
public 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
*/
@Override
public int addReturngoods(Returngoods returngoods) {
return returngoodsMapper.insert(returngoods);
}
/**
* 修改一条收到退货信息
*
* @param returngoods
*/
@Override
public int editReturngoods(Returngoods returngoods) {
return returngoodsMapper.updateById(returngoods);
}
/**
* 根据主键id查询一个收到退货对象
*
* @param id
* @return
*/
@Override
public Returngoods queryReturngoodsById(Integer id) {
return returngoodsMapper.selectById(id);
}
/**
* 根据主键id删除一个收到退货对象
*
* @param id
* @return
*/
@Override
public 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 {
@Autowired
private ReturngoodsService returngoodsService;
/**
* 转向收到退货页面
*/
@RequestMapping
public String returngoods(){
return "/returngoods";
}
/**
* 分页查询收到退货列表
*/
@RequestMapping(value = "/returngoodsQueryPage")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public Object returngoodsEdit(Returngoods returngoods){
try{
int i = returngoodsService.editReturngoods(returngoods);
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个收到退货
*/
@RequestMapping(value = "/returngoodsDelById")
@ResponseBody
public 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"></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"></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 {
@Autowired
private ReturnsupplierMapper returnsupplierMapper;
/**
* 分页查询退货给供应商数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-退货给供应商名称
* @return
*/
@Override
public 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
*/
@Override
public int addReturnsupplier(Returnsupplier returnsupplier) {
return returnsupplierMapper.insert(returnsupplier);
}
/**
* 修改一条退货给供应商信息
*
* @param returnsupplier
*/
@Override
public int editReturnsupplier(Returnsupplier returnsupplier) {
return returnsupplierMapper.updateById(returnsupplier);
}
/**
* 根据主键id查询一个退货给供应商对象
*
* @param id
* @return
*/
@Override
public Returnsupplier queryReturnsupplierById(Integer id) {
return returnsupplierMapper.selectById(id);
}
/**
* 根据主键id删除一个退货给供应商对象
*
* @param id
* @return
*/
@Override
public 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 {
@Autowired
private ReturnsupplierService returnsupplierService;
/**
* 转向退货给供应商页面
*/
@RequestMapping
public String returnsupplier(){
return "/returnsupplier";
}
/**
* 分页查询退货给供应商列表
*/
@RequestMapping(value = "/returnsupplierQueryPage")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public Object returnsupplierEdit(Returnsupplier returnsupplier){
try{
int i = returnsupplierService.editReturnsupplier(returnsupplier);
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个退货给供应商
*/
@RequestMapping(value = "/returnsupplierDelById")
@ResponseBody
public 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"></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"></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 {
@Autowired
private BillinfoMapper billinfoMapper;
/**
* 分页查询账单信息数据
*
* @param pageNum 第几页
* @param pageSize 每页多少条数据
* @param param 查询参数-账单信息名称
* @return
*/
@Override
public 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
*/
@Override
public int addBillinfo(Billinfo billinfo) {
return billinfoMapper.insert(billinfo);
}
/**
* 修改一条账单信息信息
*
* @param billinfo
*/
@Override
public int editBillinfo(Billinfo billinfo) {
return billinfoMapper.updateById(billinfo);
}
/**
* 根据主键id查询一个账单信息对象
*
* @param id
* @return
*/
@Override
public Billinfo queryBillinfoById(Integer id) {
return billinfoMapper.selectById(id);
}
/**
* 根据主键id删除一个账单信息对象
*
* @param id
* @return
*/
@Override
public 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 {
@Autowired
private BillinfoService billinfoService;
/**
* 转向账单信息页面
*/
@RequestMapping
public String billinfo(){
return "/billinfo";
}
/**
* 分页查询账单信息列表
*/
@RequestMapping(value = "/billinfoQueryPage")
@ResponseBody
public 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")
@ResponseBody
public 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")
@ResponseBody
public Object billinfoEdit(Billinfo billinfo){
try{
int i = billinfoService.editBillinfo(billinfo);
return ResultMapUtil.getHashMapSave(i);
} catch (Exception e){
return ResultMapUtil.getHashMapException(e);
}
}
/**
* 删除一个账单信息
*/
@RequestMapping(value = "/billinfoDelById")
@ResponseBody
public 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"></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"></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 运行测试
所有功能以完成,后续可以自行扩展修改!