书籍管理

main
tamguo 7 years ago
parent 4b96e82736
commit 41877291e0

@ -1,8 +1,13 @@
package com.tamguo.modules.tiku.dao; package com.tamguo.modules.tiku.dao;
import java.util.List;
import com.baomidou.mybatisplus.mapper.BaseMapper; import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.tamguo.modules.tiku.model.BookEntity; import com.tamguo.modules.tiku.model.BookEntity;
import com.tamguo.modules.tiku.model.condition.BookCondition;
public interface BookMapper extends BaseMapper<BookEntity>{ public interface BookMapper extends BaseMapper<BookEntity>{
List<BookEntity> listData(Pagination page , BookCondition condition);
} }

@ -1,5 +1,161 @@
package com.tamguo.modules.tiku.model; package com.tamguo.modules.tiku.model;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.tamguo.modules.tiku.model.enums.CourseStatusEnum;
@TableName(value="tiku_book")
public class BookEntity { public class BookEntity {
private String uid;
private String subjectId;
private String courseId;
private String name;
private String publishingHouse;
private Integer questionNum;
private Integer pointNum;
private Integer sort;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String createBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date createDate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
@JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
private CourseStatusEnum status;
@TableField(exist=false)
private String subjectName;
@TableField(exist=false)
private String courseName;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
public String getCourseId() {
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPublishingHouse() {
return publishingHouse;
}
public void setPublishingHouse(String publishingHouse) {
this.publishingHouse = publishingHouse;
}
public Integer getQuestionNum() {
return questionNum;
}
public void setQuestionNum(Integer questionNum) {
this.questionNum = questionNum;
}
public Integer getPointNum() {
return pointNum;
}
public void setPointNum(Integer pointNum) {
this.pointNum = pointNum;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public CourseStatusEnum getStatus() {
return status;
}
public void setStatus(CourseStatusEnum status) {
this.status = status;
}
public String getSubjectName() {
return subjectName;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
} }

@ -0,0 +1,50 @@
package com.tamguo.modules.tiku.model.condition;
public class BookCondition {
private Integer pageNo;
private Integer pageSize;
private String publishingHouse;
private String name;
private String subjectId;
private String courseId;
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
public String getCourseId() {
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public String getPublishingHouse() {
return publishingHouse;
}
public void setPublishingHouse(String publishingHouse) {
this.publishingHouse = publishingHouse;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -1,8 +1,12 @@
package com.tamguo.modules.tiku.service; package com.tamguo.modules.tiku.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService; import com.baomidou.mybatisplus.service.IService;
import com.tamguo.modules.tiku.model.BookEntity; import com.tamguo.modules.tiku.model.BookEntity;
import com.tamguo.modules.tiku.model.condition.BookCondition;
public interface IBookService extends IService<BookEntity>{ public interface IBookService extends IService<BookEntity>{
Page<BookEntity> listData(BookCondition condition);
} }

@ -1,13 +1,27 @@
package com.tamguo.modules.tiku.service.impl; package com.tamguo.modules.tiku.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.tamguo.modules.tiku.dao.BookMapper; import com.tamguo.modules.tiku.dao.BookMapper;
import com.tamguo.modules.tiku.model.BookEntity; import com.tamguo.modules.tiku.model.BookEntity;
import com.tamguo.modules.tiku.model.condition.BookCondition;
import com.tamguo.modules.tiku.service.IBookService; import com.tamguo.modules.tiku.service.IBookService;
@Service @Service
public class BookServiceImpl extends ServiceImpl<BookMapper, BookEntity> implements IBookService{ public class BookServiceImpl extends ServiceImpl<BookMapper, BookEntity> implements IBookService{
@Autowired
BookMapper bookMapper;
@Transactional(readOnly=false)
@Override
public Page<BookEntity> listData(BookCondition condition) {
Page<BookEntity> page = new Page<>(condition.getPageNo() , condition.getPageSize());
return page.setRecords(bookMapper.listData(page, condition));
}
} }

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tamguo.modules.tiku.dao.BookMapper">
<select id="listData" resultType="BookEntity">
SELECT
b.uid,
b.subject_id,
b.course_id,
b.name,
b.publishing_house,
b.question_num,
b.point_num,
b.sort,
b.create_by,
b.update_by,
b.update_by,
b.update_date,
b.`status`,
s.name AS subject_name,
c.name AS course_name
FROM
tiku_book b
LEFT JOIN tiku_subject s ON s.uid = b.subject_id
LEFT JOIN tiku_course c ON c.uid = b.course_id
WHERE
1 = 1
<if test="name != null and name != ''">
and b.name = #{name}
</if>
<if test="publishingHouse != null and publishingHouse != ''">
and b.publishing_house = #{publishingHouse}
</if>
<if test="subjectId != null and subjectId != ''">
and b.subject_id = #{subjectId}
</if>
<if test="courseId != null and courseId != ''">
and b.course_id = #{courseId}
</if>
</select>
</mapper>

@ -1,9 +1,23 @@
package com.tamguo.modules.tiku.web; package com.tamguo.modules.tiku.web;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.plugins.Page;
import com.tamguo.common.utils.Result;
import com.tamguo.modules.tiku.model.BookEntity;
import com.tamguo.modules.tiku.model.condition.BookCondition;
import com.tamguo.modules.tiku.model.enums.SubjectStatusEnum;
import com.tamguo.modules.tiku.service.IBookService;
import com.tamguo.modules.tiku.service.ISubjectService;
@Controller @Controller
@RequestMapping(path="tiku/book") @RequestMapping(path="tiku/book")
public class BookController { public class BookController {
@ -11,11 +25,25 @@ public class BookController {
/** 书籍*/ /** 书籍*/
private final String BOOK_LIST_PAGE = "modules/tiku/book/list"; private final String BOOK_LIST_PAGE = "modules/tiku/book/list";
@Autowired
private IBookService iBookService;
@Autowired
private ISubjectService iSubjectService;
@SuppressWarnings("unchecked")
@RequestMapping(path="list") @RequestMapping(path="list")
public ModelAndView index(ModelAndView model) { public ModelAndView index(ModelAndView model) {
model.setViewName(BOOK_LIST_PAGE); model.setViewName(BOOK_LIST_PAGE);
model.addObject("subjectList", iSubjectService.selectList(Condition.create().eq("status", SubjectStatusEnum.NORMAL.getValue())));
return model; return model;
} }
@RequestMapping(path="listData",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> listData(BookCondition condition) {
Page<BookEntity> page = iBookService.listData(condition);
return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages());
}
} }

@ -24,7 +24,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<div class="box box-main"> <div class="box box-main">
<div class="box-header"> <div class="box-header">
<div class="box-title"> <div class="box-title">
<i class="fa icon-grid"></i> 书籍管理 <i class="fa icon-grid"></i> 科目列表
</div> </div>
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool addTabPage" data-href="sys/course/list" title="科目管理"><i class="fa fa-edit"></i></button> <button type="button" class="btn btn-box-tool addTabPage" data-href="sys/course/list" title="科目管理"><i class="fa fa-edit"></i></button>
@ -41,7 +41,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
</div> </div>
<div class="ui-layout-center"> <div class="ui-layout-center">
<iframe id="mainFrame" name="mainFrame" class="ui-layout-content p0" <iframe id="mainFrame" name="mainFrame" class="ui-layout-content p0"
th:src="${setting.domain + 'sys/user/list'}"></iframe> th:src="${setting.domain + 'tiku/book/list'}"></iframe>
</div> </div>
<a id="scroll-up" href="#" class="btn btn-sm"><i class="fa fa-angle-double-up"></i></a> <a id="scroll-up" href="#" class="btn btn-sm"><i class="fa fa-angle-double-up"></i></a>

@ -0,0 +1,200 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta content="webkit" name="renderer"/><meta http-equiv="X-UA-Compatible"
content="IE=edge"><meta name="keywords" content="PoweredByJeeSiteV4.0"/><meta http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate"/><meta name="description" content="PoweredByJeeSiteV4.0"/><meta
content="no-cache" http-equiv="Pragma"/><meta http-equiv="Expires" content="0"/><meta
content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<title>书籍管理 - JeeSite Demo</title>
<script th:src="${setting.domain + 'global.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-1.12.4.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-migrate-1.4.1.min.js'}"></script>
<!--[if lt IE 9]><script src="/js/static/common/h5fix.min.js"></script><![endif]-->
<link rel="stylesheet" th:href="${setting.domain + 'fonts/font-icons.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'bootstrap/css/bootstrap.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'select2/4.0/select2.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'icheck/1.0/minimal/grey.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'jqGrid/4.7/css/ui.jqgrid.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'adminlte/css/AdminLTE.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/jeesite.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/common.css'}">
</head><body class="hold-transition ">
<div class="wrapper"><div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-user"></i> 书籍管理
</div>
<div class="box-tools pull-right">
<a href="#" class="btn btn-default" id="btnSearch" title="查询"><i class="fa fa-filter"></i> 查询</a>
<a href="sys/user/add" class="btn btn-default btnTool" title="新增用户"><i class="fa fa-plus"></i> 新增</a>
<div class="btn-group">
<a href="javascript:" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-navicon"></i> <span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="javascript:" id="btnExport"><i class="glyphicon glyphicon-export"></i> 导出</a></li>
<li><a href="javascript:" id="btnImport"><i class="glyphicon glyphicon-import"></i> 导入</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body">
<form id="searchForm" th:action="${setting.domain + 'tiku/book/listData'}" method="post" class="form-inline " data-page-no="1" data-page-size="10" data-order-by="">
<div class="form-group">
<label class="control-label">书籍名称:</label>
<div class="control-inline">
<input type="text" id="name" name="name" value="" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">出版社:</label>
<div class="control-inline">
<input type="text" id="publishingHouse" name="publishingHouse" value="" maxlength="100" class="form-control width-90"/>
</div>
</div>
<div class="form-group">
<label class="control-label">题库分类:</label>
<div class="control-inline width-120">
<select id="subjectId" name="subjectId" class="form-control">
<option value="">&nbsp;</option>
<option th:value="${subject.uid}" th:each="subject,subjectStat:${subjectList}" th:text="${subject.name}">财务经理</option>
</select>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-sm">查询</button>
<button type="reset" class="btn btn-default btn-sm">重置</button>
</div>
</form>
<table id="dataGrid"></table>
<div id="dataGridPage"></div>
</div>
</div>
</div>
</div>
<a id="scroll-up" href="#" class="btn btn-sm"><i class="fa fa-angle-double-up"></i></a>
<script th:src="${setting.domain + 'bootstrap/js/bootstrap.min.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/select2.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/i18n/zh_CN.js'}"></script>
<script th:src="${setting.domain + 'layer/3.1/layer.js'}"></script>
<script th:src="${setting.domain + 'my97/WdatePicker.js'}"></script>
<script th:src="${setting.domain + 'jqGrid/4.7/js/jquery.jqGrid.js'}"></script>
<script th:src="${setting.domain + 'jqGrid/4.7/js/jquery.jqGrid.extend.js'}"></script>
<script th:src="${setting.domain + 'jqGrid/4.7/js/i18n/zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/jeesite.js'}"></script>
<script th:src="${setting.domain + 'common/i18n/jeesite_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/common.js'}"></script>
<script>
// 初始化DataGrid对象
$('#dataGrid').dataGrid({
searchForm: $("#searchForm"),
columnModel: [
{header:'书籍编号', name:'uid', index:'u.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
return '<a href="sys/user/update?userCode='+row.userCode+'&op=edit" class="btnList" data-title="编辑用户">'+(val||row.id)+'</a>';
}},
{header:'分类', name:'subjectName', index:'u.courseName', width:200, align:"center"},
{header:'科目', name:'courseName', index:'u.courseName', width:200, align:"center"},
{header:'书籍名称', name:'name', index:'u.user_name', width:200, align:"center"},
{header:'出版社', name:'publishingHouse', index:'u.ref_name', width:200, align:"center"},
{header:'归属机构', name:'officeName', index:'u.office_name', width:200, align:"center"},
{header:'更新时间', name:'updateDate', index:'u.update_date', width:200, align:"center"},
{header:'状态', name:'status', index:'u.status', width:140, align:"center", formatter: function(val, obj, row, act){
if(val == "normal"){
return "<span>正常</span>";
}else if(val == "delete"){
return "<span style='color:red;'>删除</span>";
}else if(val == "disabled"){
return "<span style='color:red;'>禁用</span>";
}else if(val == "locked"){
return "<span style='color:red;'>锁定</span>";
}else{
return "<span style='color:red;'>未知</span>";
}
}},
{header:'操作', name:'actions', width:260, sortable:false, title:false, formatter: function(val, obj, row, act){
var actions = [];
actions.push('<a href="sys/user/update?userCode='+row.userCode+'&op=edit" class="btnList" title="编辑用户"><i class="fa fa-pencil"></i></a>&nbsp;');
if (row.status == Global.STATUS_NORMAL){
actions.push('<a href="'+ctx+'sys/user/disable?userCode='+row.userCode+'" class="btnList" title="停用用户" data-confirm="确认要停用该用户吗?"><i class="glyphicon glyphicon-ban-circle"></i></a>&nbsp;');
}
if (row.status == Global.STATUS_DISABLE){
actions.push('<a href="'+ctx+'sys/user/enable?userCode='+row.userCode+'" class="btnList" title="启用用户" data-confirm="确认要启用该用户吗?"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
}
actions.push('<a href="'+ctx+'sys/user/delete?userCode='+row.userCode+'" class="btnList" title="删除用户" data-confirm="确认要删除该用户吗?"><i class="fa fa-trash-o"></i></a>&nbsp;');
actions.push('<a href="javascript:" class="btnMore" title="更多操作"><i class="fa fa-chevron-circle-right"></i></a>&nbsp;');
actions.push('<div class="moreItems">');
actions.push('<a href="sys/user/role?userCode='+row.userCode+'&op=auth" class="btn btn-default btn-xs btnList" title="用户分配角色"><i class="fa fa-check-square-o"></i> 分配角色</a>&nbsp;');
actions.push('<a href="/sys/user/dataScope?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="用户分配数据权限"><i class="fa fa-check-circle-o"></i> 数据权限</a>&nbsp;');
actions.push('<a href="/js/a/sys/empUser/resetpwd?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="用户密码重置" data-confirm="确认要将该用户密码重置到初始状态吗?"><i class="fa fa-reply-all"></i> 重置密码</a>&nbsp;');
actions.push('</div>');
return actions.join('');
}}
],
// 加载成功后执行事件
ajaxSuccess: function(data){
}
});
$('#btnExport').click(function(){
js.ajaxSubmitForm($('#searchForm'), {
url:'/js/a/sys/empUser/exportData',
downloadFile:true
});
});
$('#btnImport').click(function(){
js.layer.open({
type: 1,
area: ['400px'],
title: '导入用户数据',
resize: false,
scrollbar: true,
content: js.template('importTpl'),
success: function(layero, index){
layero.find('input[type="checkbox"]').iCheck();
},
btn: ['<i class="fa fa-check"></i> 导入',
'<i class="fa fa-remove"></i> 取消'],
btn1: function(index, layero){
var form = {
inputForm: layero.find('#inputForm'),
file: layero.find('#file').val()
};
if (form.file == '' || (!js.endWith(form.file, '.xls') && !js.endWith(form.file, '.xlsx'))){
js.showMessage("文件不正确,请选择后缀为 “xls”或“xlsx”的文件。", null, 'warning');
return false;
}
js.ajaxSubmitForm(form.inputForm, function(data){
js.showMessage(data.message);
if(data.result == Global.TRUE){
js.layer.closeAll();
}
page();
}, "json");
return true;
}
});
});
</script>
<script id="importTpl" type="text/template">
//<!--
<form id="inputForm" action="/js/a/sys/empUser/importData" method="post" enctype="multipart/form-data"
class="form-horizontal mt20 mb10" style="overflow:auto;max-height:200px;">
<div class="row">
<div class="col-xs-12 col-xs-offset-1">
<input type="file" id="file" name="file" class="form-file"/>
<div class="mt10 pt5">
<span id="updateSupport" class="icheck" class="form-control" title="如果用户编码已经存在,更新这条数据。">
<label><input type="checkbox" id="updateSupport1" name="updateSupport"
value="1" class="form-control" title="如果用户编码已经存在,更新这条数据。"> 否更新已经存在的用户数据</label><input type="hidden" name="!updateSupport" value="0"/></span>
&nbsp; <a href="/js/a/sys/empUser/importTemplate" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> 下载模板</a>
</div>
<font color="red" class="pull-left mt10">
提示仅允许导入“xls”或“xlsx”格式文件
</font>
</div>
</div>
</form>
//-->
</script>
Loading…
Cancel
Save