package com.zhuzg.doc.service;
import java.util.List;
import com.github.pagehelper.PageInfo;
import com.zhuzg.doc.pojo.Area;
import com.zhuzg.doc.pojo.Depart;
import com.zhuzg.doc.pojo.Doc;
import com.zhuzg.doc.pojo.DocVo;
import com.zhuzg.doc.pojo.Skill;
public interface DocService {
// 关于医生的增删改查
PageInfo<Doc> list(DocVo docVo);
int add(Doc doc);
int update(Doc doc);
int del(int[] ids);
Doc getById(int id);
// 根据父id 查询直接子节点
List<Area> listArea(int pid);
// 列出擅长
List<Skill> listSkills();
//列出科室
List<Depart> listDepart();
}
package com.zhuzg.doc.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.zhuzg.doc.pojo.Area;
import com.zhuzg.doc.pojo.Depart;
import com.zhuzg.doc.pojo.Doc;
import com.zhuzg.doc.pojo.DocVo;
import com.zhuzg.doc.pojo.Skill;
public interface DocDao {
List<Doc> list(DocVo docVo);
int add(Doc doc);
int addDocSkill(@Param("docId") int docId, @Param("skillId") int skillId);
List<Depart> listDepart();
Doc getById(int id);
List<Skill> listSkills();
int delDoc(int[] ids);
List<Area> listAea(int pid);
int delDocSkillByDoc(int ...ids);
int udate(Doc doc);
}
package com.zhuzg.doc.service.impl;
import java.util.Iterator;
import java.util.List;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhuzg.doc.dao.DocDao;
import com.zhuzg.doc.pojo.Area;
import com.zhuzg.doc.pojo.Depart;
import com.zhuzg.doc.pojo.Doc;
import com.zhuzg.doc.pojo.DocVo;
import com.zhuzg.doc.pojo.Skill;
import com.zhuzg.doc.service.DocService;
@Service(interfaceClass = DocService.class)
public class DocServiceImpl implements DocService {
@Autowired
DocDao docDao;
@Override
public PageInfo<Doc> list(DocVo docVo) {
// TODO Auto-generated method stub
PageHelper.startPage(docVo.getPage(),docVo.getPageSize());
return new PageInfo<Doc>(docDao.list(docVo));
}
@Override
public int add(Doc doc) {
// TODO Auto-generated method stub
//添加主表
int result = docDao.add(doc);
//添加子表
List<Skill> skills = doc.getSkills();
for (int i = 0; i < skills.size(); i++) {
//插入中间表
result+=docDao.addDocSkill(doc.getId(),skills.get(i).getId());
}
return result;
}
@Override
public int update(Doc doc) {
// TODO Auto-generated method stub
//添加主表
int result = docDao.udate(doc);
//删除中间表 delDocSkillByDoc
result += docDao.delDocSkillByDoc(doc.getId());
//添加子表
List<Skill> skills = doc.getSkills();
for (int i = 0; i < skills.size(); i++) {
//插入中间表
result+=docDao.addDocSkill(doc.getId(),skills.get(i).getId());
}
return result;
}
@Override
public int del(int[] ids) {
// TODO Auto-generated method stub
//删除子表
int result = docDao.delDocSkillByDoc(ids);
//删除主表
result += docDao.delDoc(ids);
return result;
}
@Override
public List<Area> listArea(int pid) {
// TODO Auto-generated method stub
return docDao.listAea(pid);
}
@Override
public List<Skill> listSkills() {
// TODO Auto-generated method stub
return docDao.listSkills();
}
@Override
public List<Depart> listDepart() {
// TODO Auto-generated method stub
return docDao.listDepart();
}
@Override
public Doc getById(int id) {
// TODO Auto-generated method stub
return docDao.getById(id);
}
}
<?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.zhuzg.doc.dao.DocDao">
<!-- List<Doc> list(DocVo docVo); -->
<resultMap type="doc" id="docMapper">
<id column="id" property="id"></id>
<association property="province" column="provinceId" select="findAreaByid"></association>
<association property="city" column="cityId" select="findAreaByid"></association>
<association property="county" column="countyId" select="findAreaByid"></association>
<association property="depart" column="departId" select="findDepartByid"></association>
<collection property="skills" column="id" select="findSkillsByDocId" ></collection>
</resultMap>
<select id="list" resultMap="docMapper">
select * from tb_doc
</select>
<select id="findAreaByid" resultType="area">
select * from tb_area where id=#{value}
</select>
<select id="findDepartByid" resultType="depart">
select * from tb_depart where id=#{value}
</select>
<select id="findSkillsByDocId" resultType="skill">
SELECT s.* from tb_doc_skill ds LEFT JOIN tb_skill s ON s.id=ds.skillId
WHERE ds.docId=#{value}
</select>
<!-- int add(Doc doc); -->
<insert id="add" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into tb_doc(name,cardno,birthday,provinceId,cityId,countyId,mobile,enterDate,img)
values (#{name},#{cardno},#{birthday},#{provinceId},#{cityId},#{countyId},#{mobile},#{enterDate},#{img})
</insert>
<!-- int addDocSkill(Integer id, Integer id2); -->
<insert id="addDocSkill">
insert into tb_doc_skill(docId,skillId) values(#{docId},#{skillId})
</insert>
<!-- List<Depart> listDepart(); -->
<select id="listDepart" resultType="depart">
select * from tb_depart
</select>
<!-- Doc getById(); -->
<select id="getById" resultMap="docMapper">
select * from tb_doc where id=#{value}
</select>
<!-- List<Skill> listSkills(); -->
<select id="listSkills" resultType="skill">
select * from tb_skill
</select>
<!-- int delDoc(int[] ids); -->
<delete id="delDoc">
delete from tb_doc where id in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<!-- List<Area> listAea(int pid); -->
<select id="listAea" resultType="area">
select * from tb_area where pid=#{value}
</select>
<!-- int delDocSkillByDoc(int ...ids); -->
<delete id="delDocSkillByDoc">
delete from tb_doc_skill where docId in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<!-- int udate(Doc doc); -->
<update id="udate">
update tb_doc
set name=#{name},
cardno=#{cardno},
birthday=#{birthday},
provinceId=#{provinceId},
cityId=#{cityId},
countyId=#{countyId},
mobile=#{mobile},
enterDate=#{enterDate},
img=#{img}
where id=#{id}
</update>
</mapper>
package com.zhuzg.doc.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.zhuzg.doc.common.FileUtils;
import com.zhuzg.doc.pojo.Area;
import com.zhuzg.doc.pojo.Depart;
import com.zhuzg.doc.pojo.Doc;
import com.zhuzg.doc.pojo.Skill;
import com.zhuzg.doc.service.DocService;
@Controller
public class DocController {
@Reference
DocService docService;
/**
*
* @return
*/
@RequestMapping("toadd")
public String toAdd(HttpServletRequest request) {
// 获取所有的省份
List<Area> listProince = docService.listArea(0);
request.setAttribute("proinces", listProince);
//
List<Skill> listSkills = docService.listSkills();
request.setAttribute("skills", listSkills);
List<Depart> listDepart = docService.listDepart();
request.setAttribute("departs", listDepart);
return "add";
}
/**
*
* @return
*/
@RequestMapping("toupdate")
public String toUpdate(HttpServletRequest request,int id) {
Doc doc = docService.getById(id);
request.setAttribute("doc", doc);
System.out.println("doc is " + doc);
// 获取所有的省份
List<Area> listProince = docService.listArea(0);
request.setAttribute("proinces", listProince);
//
List<Skill> listSkills = docService.listSkills();
request.setAttribute("skills", listSkills);
List<Depart> listDepart = docService.listDepart();
request.setAttribute("departs", listDepart);
//获取医生的所在省的id 根据这个获取市的列表
if(doc.getProvince()!=null) {
List<Area> listcities = docService.listArea(doc.getProvince().getId());
request.setAttribute("cities", listcities);
}
//获取医生的所在市的id 根据这个获取县的列表
if(doc.getCity()!=null) {
List<Area> listcounties = docService.listArea(doc.getCity().getId());
request.setAttribute("counties", listcounties);
}
return "update";
}
@RequestMapping("listChild")
@ResponseBody
public List<Area> listChild(HttpServletRequest request,int pid) {
List<Area> listArea = docService.listArea(pid);
return listArea ;
}
/**
*
* @return
*/
@RequestMapping("add")
public String add(HttpServletRequest request,Doc doc,int[] selSkillId,MultipartFile file) {
try {
String path = FileUtils.processFile(file);
doc.setImg(path);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<Skill> skills= new ArrayList<Skill>();
for (int i = 0; i < selSkillId.length; i++) {
Skill skill = new Skill();
skill.setId(selSkillId[i]);
skills.add(skill);
}
doc.setSkills(skills);
docService.add(doc);
return "rediect:list";
}
/**
*
* @return
*/
@RequestMapping("update")
public String update(HttpServletRequest request,Doc doc,int[] selSkillId,MultipartFile file) {
try {
String path = FileUtils.processFile(file);
doc.setImg(path);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<Skill> skills= new ArrayList<Skill>();
for (int i = 0; i < selSkillId.length; i++) {
Skill skill = new Skill();
skill.setId(selSkillId[i]);
skills.add(skill);
}
doc.setSkills(skills);
docService.update(doc);
return "rediect:list";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="./resource/jquery/jquery-3.4.1.js"></script>
<title>添加</title>
</head>
<body>
<form action="./add" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>姓名</td>
<td><input name="name"></td>
</tr>
<tr>
<td>身份证</td>
<td><input name="cardno"></td>
</tr>
<tr>
<td>电话</td>
<td><input name="mobile"></td>
</tr>
<tr>
<td>性别</td>
<td> <input type="radio" name="gender" value="1">男
<input type="radio" name="gender" value="2">女
</td>
</tr>
<tr>
<td>生日</td>
<td><input type="date" name="birthday"></td>
</tr>
<tr>
<td>省</td>
<td>
<select name="provinceId" id="provinceId" onchange="changeSub(‘provinceId‘,‘cityId‘)">
<option value="-1">---请选择---</option>
<c:forEach items="${proinces}" var="p">
<option value="${p.id}">${p.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>市</td>
<td>
<select name="cityId" id="cityId" onchange="changeSub(‘cityId‘,‘countyId‘)">
<option value="-1">---请选择---</option>
</select> </td>
</tr>
<tr>
<td>县</td>
<td>
<select name="countyId" id="countyId">
<option value="-1">---请选择---</option>
</select> </td>
</tr>
<tr>
<td>科室</td>
<td>
<select name="departId" id="departId">
<option value="-1">---请选择---</option>
<c:forEach items="${departs}" var="d">
<option value="${d.id}">${d.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>擅长</td>
<td>
<c:forEach items="${skills}" var="s">
<input type="checkbox" name="selSkillId" value="${s.id}">${s.name}
</c:forEach>
</td>
</tr>
<tr>
<td>头像</td>
<td>
<input type="file" name="file">
</td>
</tr>
<tr>
<td>入职日期</td>
<td><input type="date" name="enterDate"></td>
</tr>
<tr>
<td></td>
<td><button type="submit" >提交</button></td>
</tr>
</table>
</form>
<script type="text/javascript">
function changeSub(parId,childId){
var pid=$("#"+parId).val();
//获取到被影响的下拉框的对象
var childObj = $("#"+childId)
$.post("./listChild",{pid,pid},function(data){
//遍历data
//清空下一个级别
childObj.empty();
//
childObj.append(‘<option value="-1">---请选择---</option> ‘)
for ( var i in data) {
childObj.append(‘<option value="‘+data[i].id+‘">‘+data[i].name+‘</option> ‘)
}
})
}
</script>
</body>
</html>
package com.zhuzg.doc.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.multipart.MultipartFile;
public class FileUtils {
//存放图片的路径
static String rootPath;
//windows存放图片的路径
static String winRootPath;
//linux存放图片的路径
static String linuxRootPath;
//当前的操作系统
static String currentOs="";
static {
String os = System.getProperty("os.name").toLowerCase();
//linux
if(os.indexOf("linux")>=0 ) {
currentOs="linux";
}
//windows
if(os.indexOf("windows")>=0 ) {
currentOs="windows";
}
}
public static String getRootPath() {
return rootPath;
}
/**
* 保存文件的具体位置
* @param rootPath
*/
@Value("${win.pic.savepath}")
public void setWinRootPath(String rootPath) {
if(currentOs.equals("windows")) {
winRootPath=rootPath;
FileUtils.rootPath=rootPath;
createPath();
}
}
@Value("${linux.pic.savepath}")
public void setLinuxRootPath(String rootPath) {
if(currentOs.equals("linux")) {
linuxRootPath=rootPath;
FileUtils.rootPath=rootPath;
createPath();
}
}
/**
* 创建目录
*/
static private void createPath() {
//不存在则创建该目录
File file = new File(FileUtils.rootPath);
if(!file.exists()) {
file.mkdirs();
}
}
/**
*
* @param response
* @param file
* @throws FileNotFoundException
*/
public static void downLoad(HttpServletResponse response, String filename) throws FileNotFoundException {
/* // 下载本地文件
String fileName = "Operator.doc".toString(); // 文件的默认保存名
*/ // 读到流中
InputStream inStream = new FileInputStream(rootPath+ "/"+ filename);// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
// 循环取出流中的数据
byte[] b = new byte[1024];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 上传文件
* @param file
* @return
* @throws IllegalStateException
* @throws IOException
*/
public static String processFile(MultipartFile file) throws IllegalStateException, IOException {
// 原来的文件名称
System.out.println("file.isEmpty() :" + file.isEmpty() );
System.out.println("file.name :" + file.getOriginalFilename());
if(file.isEmpty()||"".equals(file.getOriginalFilename()) || file.getOriginalFilename().lastIndexOf(‘.‘)<0 ) {
return "";
}
String originName = file.getOriginalFilename();
String suffixName = originName.substring(originName.lastIndexOf(‘.‘));
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");
String path = rootPath + "/" + sdf.format(new Date());
File pathFile = new File(path);
if(!pathFile.exists()) {
pathFile.mkdir();
}
String destFileName = path + "/" + UUID.randomUUID().toString() + suffixName;
File distFile = new File( destFileName);
file.transferTo(distFile);//文件另存到这个目录下边
return destFileName.substring(rootPath.length()+1);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="./resource/jquery/jquery-3.4.1.js"></script>
<title>修改</title>
</head>
<body>
<form action="./update" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>姓名</td>
<td>
<input type="hidden" name="id" value="${doc.id}">
<input name="name" value="${doc.name}"></td>
</tr>
<tr>
<td>身份证</td>
<td><input name="cardno" value="${doc.cardno}"></td>
</tr>
<tr>
<td>电话</td>
<td><input name="mobile" value="${doc.mobile}"></td>
</tr>
<tr>
<td>性别</td>
<td> <input type="radio" name="gender" value="1">男
<input type="radio" name="gender" value="2">女
</td>
</tr>
<tr>
<td>生日</td>
<td><input type="date" name="birthday" value=‘<fmt:formatDate value="${doc.birthday}" pattern="yyyy-MM-dd"/>‘></td>
</tr>
<tr>
<td>省</td>
<td>
<select name="provinceId" id="provinceId" onchange="changeSub(‘provinceId‘,‘cityId‘)">
<option value="-1">---请选择---</option>
<c:forEach items="${proinces}" var="p">
<option value="${p.id}" ${doc.province.id==p.id?‘selected‘:‘‘}>${p.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>市</td>
<td>
<select name="cityId" id="cityId" onchange="changeSub(‘cityId‘,‘countyId‘)">
<option value="-1">---请选择---</option>
<c:forEach items="${cities}" var="c">
<option value="${c.id}" ${doc.city.id==c.id?‘selected‘:‘‘}>${c.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>县</td>
<td>
<select name="countyId" id="countyId">
<option value="-1">---请选择---</option>
<c:forEach items="${counties}" var="c">
<option value="${c.id}" ${doc.county.id==c.id?‘selected‘:‘‘}>${c.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>科室</td>
<td>
<select name="departId" id="departId">
<option value="-1">---请选择---</option>
<c:forEach items="${departs}" var="d">
<option value="${d.id}">${d.name}</option>
</c:forEach>
</select> </td>
</tr>
<tr>
<td>擅长</td>
<td>
<c:forEach items="${skills}" var="s">
<input type="checkbox" name="selSkillId"
<c:forEach items="${doc.skills}" var="selSkill">
<c:if test="${selSkill.id==s.id}">checked</c:if>
</c:forEach>
value="${s.id}">${s.name}
</c:forEach>
</td>
</tr>
<tr>
<td>头像</td>
<td>
<input type="file" name="file">
<img src="/pic/${doc.img}" width="150" height="150">
</td>
</tr>
<tr>
<td>入职日期</td>
<td><input type="date" name="enterDate" value=‘<fmt:formatDate value="${doc.enterDate}" pattern="yyyy-MM-dd"/>‘></td>
</tr>
<tr>
<td></td>
<td><button type="submit" >提交</button></td>
</tr>
</table>
</form>
<script type="text/javascript">
function changeSub(parId,childId){
var pid=$("#"+parId).val();
//获取到被影响的下拉框的对象
var childObj = $("#"+childId)
$.post("./listChild",{pid,pid},function(data){
//遍历data
//清空下一个级别
childObj.empty();
//
childObj.append(‘<option value="-1">---请选择---</option> ‘)
for ( var i in data) {
childObj.append(‘<option value="‘+data[i].id+‘">‘+data[i].name+‘</option> ‘)
}
})
}
</script>
</body>
</html>
原文:https://www.cnblogs.com/shanzhongqi/p/12874210.html