首页 > Web开发 > 详细

文件上传+上级连动

时间:2020-05-12 09:51:36      阅读:52      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

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">男  
                    &nbsp;&nbsp;&nbsp;&nbsp;
                  <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} &nbsp;&nbsp;&nbsp;&nbsp; 
                </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">男  
                    &nbsp;&nbsp;&nbsp;&nbsp;
                  <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} &nbsp;&nbsp;&nbsp;&nbsp; 
                </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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!