jsp
<a class="btn btn-primary radius" href="worker/zipfileDownload_workerCard"><i class="Hui-iconfont"></i> 證件下載</a></span>
Controller.java
/**
*文件壓縮下載
*billname:文件名
*filename:文件存放路徑
*/
@RequestMapping("/zipfileDownload_workerCard")
public void zipfileDownload_workerCard(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException{
//響應頭的設置
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
//設置壓縮包的名字
//解決不同瀏覽器壓縮包名字含有中文時亂碼的問題
HttpSession session = request.getSession();
String billname ="workerCard-"+session.getAttribute("projectWorktypeId");
String downloadName = billname+".zip";
//返回客戶端瀏覽器的版本號、類型
String agent = request.getHeader("USER-AGENT");
try {
//針對IE或者以IE爲內核的瀏覽器:
if (agent.contains("MSIE")||agent.contains("Trident")) {
downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
} else {
//非IE瀏覽器的處理:
downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
}
} catch (Exception e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
//設置壓縮流:直接寫入response,實現邊壓縮邊下載
ZipOutputStream zipos = null;
try {
zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
zipos.setMethod(ZipOutputStream.DEFLATED); //設置壓縮方法
} catch (Exception e) {
e.printStackTrace();
}
//循環將文件寫入壓縮流
DataOutputStream os = null;
Worker worker = new Worker();
worker.setProjectWorktypeId((Integer)session.getAttribute("projectWorktypeId"));
//從數據庫中取出要下載的圖片路徑、並循環寫入壓縮
List<Worker> workerList = workerService.findAllWorkerByWhere(worker);
for (Worker worker2 : workerList) {
String filename =worker2.getWorkerScanFront();
String removeStr = "/upload/workerCard";
filename = filename.replace(removeStr, "");//去掉相對路徑中的兩個目錄路徑
String modipath = request.getSession().getServletContext().getRealPath("/upload/workerCard"+filename);
File file = new File(modipath);
if(file.exists()){
try {
//添加ZipEntry,並ZipEntry中寫入文件流
//這裏,加上i是防止要下載的文件有重名的導致下載失敗
zipos.putNextEntry(new ZipEntry(filename));
os = new DataOutputStream(zipos);
InputStream is = new FileInputStream(file);
byte[] b = new byte[100];
int length = 0;
while((length = is.read(b))!= -1){
os.write(b, 0, length);
}
is.close();
zipos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//關閉流
try {
os.flush();
os.close();
zipos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Worker.java
package com.huahang.model;
import java.util.Date;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
public class Worker {
private Integer id;
private Integer projectWorktypeId;
private String workerName;
private Integer workerAge;
private String workerPhone;
private String workerCard;
private String workerScanFront;
private String workerScanBack;
private String bankType;
private String bankNumber;
private Integer status;
private String createBy;
private Date createTime;
private String modifyBy;
private Date modifyTime;
private Integer leader;
private String corpCode;
private Integer deleted;
private Integer version;
private Integer count;
private String image;
private MultipartFile file;
private String templeteName;
private String contractContent;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getProjectWorktypeId() {
return projectWorktypeId;
}
public void setProjectWorktypeId(Integer projectWorktypeId) {
this.projectWorktypeId = projectWorktypeId;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workerName) {
this.workerName = workerName;
}
public Integer getWorkerAge() {
return workerAge;
}
public void setWorkerAge(Integer workerAge) {
this.workerAge = workerAge;
}
public String getWorkerPhone() {
return workerPhone;
}
public void setWorkerPhone(String workerPhone) {
this.workerPhone = workerPhone;
}
public String getWorkerCard() {
return workerCard;
}
public void setWorkerCard(String workerCard) {
this.workerCard = workerCard;
}
public String getWorkerScanFront() {
return workerScanFront;
}
public void setWorkerScanFront(String workerScanFront) {
this.workerScanFront = workerScanFront;
}
public String getWorkerScanBack() {
return workerScanBack;
}
public void setWorkerScanBack(String workerScanBack) {
this.workerScanBack = workerScanBack;
}
public String getBankType() {
return bankType;
}
public void setBankType(String bankType) {
this.bankType = bankType;
}
public String getBankNumber() {
return bankNumber;
}
public void setBankNumber(String bankNumber) {
this.bankNumber = bankNumber;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getModifyBy() {
return modifyBy;
}
public void setModifyBy(String modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public Integer getLeader() {
return leader;
}
public void setLeader(Integer leader) {
this.leader = leader;
}
public String getCorpCode() {
return corpCode;
}
public void setCorpCode(String corpCode) {
this.corpCode = corpCode;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
public String getTempleteName() {
return templeteName;
}
public void setTempleteName(String templeteName) {
this.templeteName = templeteName;
}
public String getContractContent() {
return contractContent;
}
public void setContractContent(String contractContent) {
this.contractContent = contractContent;
}
@Override
public String toString() {
return "Worker [id=" + id + ", projectWorktypeId=" + projectWorktypeId
+ ", workerName=" + workerName + ", workerAge=" + workerAge
+ ", workerPhone=" + workerPhone + ", workerCard=" + workerCard
+ ", workerScanFront=" + workerScanFront + ", workerScanBack="
+ workerScanBack + ", bankType=" + bankType + ", bankNumber="
+ bankNumber + ", status=" + status + ", createBy=" + createBy
+ ", createTime=" + createTime + ", modifyBy=" + modifyBy
+ ", modifyTime=" + modifyTime + ", leader=" + leader
+ ", corpCode=" + corpCode + ", deleted=" + deleted
+ ", version=" + version + ", count=" + count + ", image="
+ image + ", file=" + file + ", templeteName=" + templeteName
+ ", contractContent=" + contractContent + "]";
}
}
WorkerMapper.java
package com.huahang.dao;
import java.util.List;
import com.huahang.model.Worker;
public interface WorkerMapper {
public List<Worker> findAllWorkerByWhere(Worker worker);
public Worker findWorkerById(Integer id);
public List<Worker> findLabContractById(Integer id);
public List<Worker> findPageData(Worker worker);
public int addWorker(Worker worker);
public int updateWorkerById(Worker worker);
public int deleteWorkerById(Integer id);
public int deleteContractContentById(Integer id);
public int deleteMenuBatch(List<Integer> ids);
public int banWorker(Integer id);//
public int arouseWorker(Integer id);
public int updateSqlpath(Worker worker);
public int updateContractSqlpath(Worker worker);
public List<Worker> findAllBankType();
}
WorkerMapper.xml
<?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.huahang.dao.WorkerMapper">
<resultMap id="WorkerMap" type="com.huahang.model.Worker" >
<id column="id" property="id" />
<id column="project_worktype_id" property="projectWorktypeId" />
<id column="worker_name" property="workerName" />
<id column="worker_age" property="workerAge" />
<id column="worker_phone" property="workerPhone"/>
<id column="worker_card" property="workerCard" />
<id column="worker_scan_front" property="workerScanFront" />
<id column="worker_scan_back" property="workerScanBack" />
<id column="bank_type" property="bankType" />
<id column="bank_number" property="bankNumber" />
<id column="status" property="status" />
<id column="create_by" property="createBy" />
<id column="create_time" property="createTime" />
<id column="modify_by" property="modifyBy" />
<id column="modify_time" property="modifyTime" />
<id column="leader" property="leader" />
<id column="corp_code" property="corpCode" />
<id column="deleted" property="deleted" />
<id column="version" property="version" />
<id column="count" property="count"/>
<id column="templete_name" property="bankType" />
<id column="contract_content" property="contractContent" />
</resultMap>
<!-- select * ,(select count(*) from m_worker_project where project_worktype_id=80) as 'count' from m_worker_project order by create_time desc -->
<select id="findAllWorkerByWhere" resultMap="WorkerMap">
select * ,(select count(*) from m_worker_project where 1=1
<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId}
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="workerPhone!=null and workerPhone!=''">
and worker_phone=#{workerPhone}
</if>
<if test="workerCard!=null and workerCard!=''">
and worker_card=#{workerCard}
</if>
<if test="1==1">
and deleted=0
</if>
) as 'count'
from m_worker_project where 1=1
<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId}
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="workerPhone!=null and workerPhone!=''">
and worker_phone=#{workerPhone}
</if>
<if test="1==1">
and deleted=0
</if>
order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END
</select>
<select id="findWorkerById" resultMap="WorkerMap" >
select * from m_worker_project where id=#{id} and deleted=0
</select>
<select id="findAllBankType" resultMap="WorkerMap" >
select id,templete_name from m_templete where deleted=0
</select>
<select id="findPageData" resultMap="WorkerMap" >
select worker_scan_front,worker_scan_back from m_worker_project where delete=0
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId}
</if>
<if test="id>0">
and id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<update id="deleteMenuBatch" parameterType="java.util.List">
update m_worker_project set deleted=1 where id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
<update id="banWorker" parameterType="Worker">
update m_worker_project set status=1 where id =#{id}
</update>
<update id="arouseWorker" parameterType="Worker">
update m_worker_project set status=0 where id =#{id}
</update>
<insert id="addWorker" parameterType="Worker" >
insert into m_worker_project (project_worktype_id,
worker_name,worker_age,worker_phone,worker_card,
worker_scan_front,worker_scan_back,bank_type,
bank_number,status,create_by,create_time,modify_by,
modify_time,leader,corp_code,deleted,version)
values (#{projectWorktypeId},#{workerName},
#{workerAge},#{workerPhone},#{workerCard},
#{workerScanFront},#{workerScanBack},#{bankType},
#{bankNumber},#{status},#{createBy},#{createTime},
#{modifyBy},#{modifyTime},#{leader},#{corpCode},
#{deleted},#{version})
</insert>
<update id="updateWorkerById" parameterType="Worker" >
update m_worker_project set project_worktype_id=#{projectWorktypeId},
worker_name=#{workerName},worker_age=#{workerAge},
worker_phone=#{workerPhone},worker_card=#{workerCard},
bank_type=#{bankType},bank_number=#{bankNumber},status=#{status},
modify_by=#{modifyBy},modify_time=#{modifyTime},leader=#{leader},
corp_code=#{corpCode},deleted=#{deleted},version=#{version}
where id = #{id}
</update>
<update id="updateSqlpath" parameterType="Worker" >
update m_worker_project set worker_scan_front=#{workerScanFront},worker_scan_back=#{workerScanBack} where id=#{id}
</update>
<delete id="deleteWorkerById" parameterType="Worker" >
update m_worker_project set deleted =1 where id = #{id}
</delete>
<delete id="deleteContractContentById" parameterType="Worker" >
update m_labor_contract set deleted =1 where id = #{id}
</delete>
<insert id="updateContractSqlpath" parameterType="Worker" >
insert into m_labor_contract (contract_content,
worker_project_id,create_by,create_time,modify_by,
modify_time,corp_code,deleted,version)
values (#{contractContent},#{id},#{createBy},#{createTime},
#{modifyBy},#{modifyTime},#{corpCode},
#{deleted},#{version})
</insert>
<select id="findLabContractById" resultMap="WorkerMap" >
select * from m_labor_contract where worker_project_id=#{id} and deleted =0
</select>
</mapper>