diff --git a/pom.xml b/pom.xml index 9a6a57b..bbf2897 100644 --- a/pom.xml +++ b/pom.xml @@ -103,19 +103,24 @@ cn.hutool hutool-all - 4.1.21 + 5.8.0.M4 - - org.apache.poi - poi - 3.17 - + + + + + + + + + + org.apache.poi poi-ooxml - 3.17 + 4.1.2 diff --git a/src/main/java/com/ccsens/ptccsens/api/DailyAccountController.java b/src/main/java/com/ccsens/ptccsens/api/DailyAccountController.java index 7f19658..4224212 100644 --- a/src/main/java/com/ccsens/ptccsens/api/DailyAccountController.java +++ b/src/main/java/com/ccsens/ptccsens/api/DailyAccountController.java @@ -84,20 +84,20 @@ public class DailyAccountController { @RequestMapping(value = "/export", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse export(@ApiParam @Validated @RequestBody CommonQueryDto params) throws Exception{ log.info("提交任务--{}",params); -// //设定开始和结束时间默认值 -// if(params.getParam().getStartTime() == null){ -// //今天0点 -// Calendar cal = Calendar.getInstance(); -// cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DAY_OF_MONTH),0,0,0); -// params.getParam().setStartTime(cal.getTimeInMillis()/1000*1000); -// //明天0点 -// cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DAY_OF_MONTH) + 1,0,0,0); -// params.getParam().setEndTime(cal.getTimeInMillis()/1000*1000); -// } -// //查询任务 -// DailyAccountVo.QueryTasks tasks = dailyAccountService.queryTasks(params.getParam(),params.getPageInfo()); + //设定开始和结束时间默认值 + if(params.getParam().getStartTime() == null){ + //今天0点 + Calendar cal = Calendar.getInstance(); + cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DAY_OF_MONTH),0,0,0); + params.getParam().setStartTime(cal.getTimeInMillis()/1000*1000); + //明天0点 + cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DAY_OF_MONTH) + 1,0,0,0); + params.getParam().setEndTime(cal.getTimeInMillis()/1000*1000); + } + //查询任务并生成excel文件 + String excelPath = dailyAccountService.exportTasks(params.getParam()); log.info("提交任务返回--{}",""); - return JsonResponse.newInstance().ok("http://101.201.226.163/uploads/20220429-01.xlsx"); + return JsonResponse.newInstance().ok(excelPath); } // diff --git a/src/main/java/com/ccsens/ptccsens/api/OcrController.java b/src/main/java/com/ccsens/ptccsens/api/OcrController.java index 657d681..d5d0eab 100644 --- a/src/main/java/com/ccsens/ptccsens/api/OcrController.java +++ b/src/main/java/com/ccsens/ptccsens/api/OcrController.java @@ -1,9 +1,9 @@ package com.ccsens.ptccsens.api; import cn.hutool.core.codec.Base64; +import cn.hutool.core.img.ImgUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ImageUtil; import com.ccsens.ptccsens.bean.dto.ProjectFinanceDto; import com.ccsens.ptccsens.bean.vo.OcrVo; import com.ccsens.ptccsens.bean.vo.ProjectFinanceVo; @@ -50,7 +50,7 @@ public class OcrController { log.info("图像识别"); // 压缩图像 ByteArrayOutputStream out = new ByteArrayOutputStream(); - ImageUtil.scale(ImageIO.read(part.getInputStream()), out, 1f); + ImgUtil.scale(ImageIO.read(part.getInputStream()), out, 1f); String img = Base64.encode(out.toByteArray()); //保存文件 // String extName = FileUtil.extName(part.getSubmittedFileName()); diff --git a/src/main/java/com/ccsens/ptccsens/bean/dto/DailyAccountDto.java b/src/main/java/com/ccsens/ptccsens/bean/dto/DailyAccountDto.java index 6bed119..9d308d6 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/dto/DailyAccountDto.java +++ b/src/main/java/com/ccsens/ptccsens/bean/dto/DailyAccountDto.java @@ -52,12 +52,16 @@ public class DailyAccountDto { @ApiModelProperty("任务时长") @NotNull private Long duration; - @ApiModelProperty("交付物链接") + @ApiModelProperty("检查人") @NotNull + private String checker; + @ApiModelProperty("交付物链接") private String deliverLink; @ApiModelProperty("备注") - @NotNull private String remark; + @ApiModelProperty("序号") + @NotNull + private Integer sequence; } @Data diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmp.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmp.java index c7ae6c0..0bec761 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmp.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmp.java @@ -16,6 +16,8 @@ public class PluDailyAccountEmp implements Serializable { private Byte recStatus; + private Integer sequence; + private static final long serialVersionUID = 1L; public Long getId() { @@ -66,6 +68,14 @@ public class PluDailyAccountEmp implements Serializable { this.recStatus = recStatus; } + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -78,6 +88,7 @@ public class PluDailyAccountEmp implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", sequence=").append(sequence); sb.append("]"); return sb.toString(); } diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmpExample.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmpExample.java index 4b86d12..c514fca 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmpExample.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountEmpExample.java @@ -474,6 +474,66 @@ public class PluDailyAccountEmpExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andSequenceIsNull() { + addCriterion("sequence is null"); + return (Criteria) this; + } + + public Criteria andSequenceIsNotNull() { + addCriterion("sequence is not null"); + return (Criteria) this; + } + + public Criteria andSequenceEqualTo(Integer value) { + addCriterion("sequence =", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotEqualTo(Integer value) { + addCriterion("sequence <>", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThan(Integer value) { + addCriterion("sequence >", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThanOrEqualTo(Integer value) { + addCriterion("sequence >=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThan(Integer value) { + addCriterion("sequence <", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThanOrEqualTo(Integer value) { + addCriterion("sequence <=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceIn(List values) { + addCriterion("sequence in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotIn(List values) { + addCriterion("sequence not in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceBetween(Integer value1, Integer value2) { + addCriterion("sequence between", value1, value2, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotBetween(Integer value1, Integer value2) { + addCriterion("sequence not between", value1, value2, "sequence"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountPro.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountPro.java index f0346c5..5323bd8 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountPro.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountPro.java @@ -22,6 +22,8 @@ public class PluDailyAccountPro implements Serializable { private Byte recStatus; + private Integer sequence; + private static final long serialVersionUID = 1L; public Long getId() { @@ -96,6 +98,14 @@ public class PluDailyAccountPro implements Serializable { this.recStatus = recStatus; } + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -111,6 +121,7 @@ public class PluDailyAccountPro implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", sequence=").append(sequence); sb.append("]"); return sb.toString(); } diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountProExample.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountProExample.java index 9a96404..f407e4a 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountProExample.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountProExample.java @@ -684,6 +684,66 @@ public class PluDailyAccountProExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andSequenceIsNull() { + addCriterion("sequence is null"); + return (Criteria) this; + } + + public Criteria andSequenceIsNotNull() { + addCriterion("sequence is not null"); + return (Criteria) this; + } + + public Criteria andSequenceEqualTo(Integer value) { + addCriterion("sequence =", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotEqualTo(Integer value) { + addCriterion("sequence <>", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThan(Integer value) { + addCriterion("sequence >", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThanOrEqualTo(Integer value) { + addCriterion("sequence >=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThan(Integer value) { + addCriterion("sequence <", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThanOrEqualTo(Integer value) { + addCriterion("sequence <=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceIn(List values) { + addCriterion("sequence in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotIn(List values) { + addCriterion("sequence not in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceBetween(Integer value1, Integer value2) { + addCriterion("sequence between", value1, value2, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotBetween(Integer value1, Integer value2) { + addCriterion("sequence not between", value1, value2, "sequence"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTask.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTask.java index eff52e2..5091ba0 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTask.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTask.java @@ -28,6 +28,10 @@ public class PluDailyAccountTask implements Serializable { private Byte recStatus; + private Integer sequence; + + private String checker; + private static final long serialVersionUID = 1L; public Long getId() { @@ -126,6 +130,22 @@ public class PluDailyAccountTask implements Serializable { this.recStatus = recStatus; } + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + + public String getChecker() { + return checker; + } + + public void setChecker(String checker) { + this.checker = checker == null ? null : checker.trim(); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -144,6 +164,8 @@ public class PluDailyAccountTask implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", sequence=").append(sequence); + sb.append(", checker=").append(checker); sb.append("]"); return sb.toString(); } diff --git a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTaskExample.java b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTaskExample.java index fe37493..6f34190 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTaskExample.java +++ b/src/main/java/com/ccsens/ptccsens/bean/po/PluDailyAccountTaskExample.java @@ -864,6 +864,136 @@ public class PluDailyAccountTaskExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andSequenceIsNull() { + addCriterion("sequence is null"); + return (Criteria) this; + } + + public Criteria andSequenceIsNotNull() { + addCriterion("sequence is not null"); + return (Criteria) this; + } + + public Criteria andSequenceEqualTo(Integer value) { + addCriterion("sequence =", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotEqualTo(Integer value) { + addCriterion("sequence <>", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThan(Integer value) { + addCriterion("sequence >", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceGreaterThanOrEqualTo(Integer value) { + addCriterion("sequence >=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThan(Integer value) { + addCriterion("sequence <", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceLessThanOrEqualTo(Integer value) { + addCriterion("sequence <=", value, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceIn(List values) { + addCriterion("sequence in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotIn(List values) { + addCriterion("sequence not in", values, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceBetween(Integer value1, Integer value2) { + addCriterion("sequence between", value1, value2, "sequence"); + return (Criteria) this; + } + + public Criteria andSequenceNotBetween(Integer value1, Integer value2) { + addCriterion("sequence not between", value1, value2, "sequence"); + return (Criteria) this; + } + + public Criteria andCheckerIsNull() { + addCriterion("checker is null"); + return (Criteria) this; + } + + public Criteria andCheckerIsNotNull() { + addCriterion("checker is not null"); + return (Criteria) this; + } + + public Criteria andCheckerEqualTo(String value) { + addCriterion("checker =", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerNotEqualTo(String value) { + addCriterion("checker <>", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerGreaterThan(String value) { + addCriterion("checker >", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerGreaterThanOrEqualTo(String value) { + addCriterion("checker >=", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerLessThan(String value) { + addCriterion("checker <", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerLessThanOrEqualTo(String value) { + addCriterion("checker <=", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerLike(String value) { + addCriterion("checker like", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerNotLike(String value) { + addCriterion("checker not like", value, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerIn(List values) { + addCriterion("checker in", values, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerNotIn(List values) { + addCriterion("checker not in", values, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerBetween(String value1, String value2) { + addCriterion("checker between", value1, value2, "checker"); + return (Criteria) this; + } + + public Criteria andCheckerNotBetween(String value1, String value2) { + addCriterion("checker not between", value1, value2, "checker"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/ccsens/ptccsens/bean/vo/DailyAccountVo.java b/src/main/java/com/ccsens/ptccsens/bean/vo/DailyAccountVo.java index c68d899..ca63517 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/vo/DailyAccountVo.java +++ b/src/main/java/com/ccsens/ptccsens/bean/vo/DailyAccountVo.java @@ -52,22 +52,14 @@ public class DailyAccountVo { private Long deadline; @ApiModelProperty("任务时长") private Long duration; + @ApiModelProperty("检查人") + private String checker; @ApiModelProperty("交付物链接") private String deliverLink; @ApiModelProperty("备注") private String remark; } - @Data - @ApiModel("时间、员工、项目、任务关联信息") - public static class DailyAccountEmpProTasks{ - private Long id; - private Long time; - private Long empId; - private Long proId; - private DailyAccountTask task; - } - @Data @ApiModel("流水账基本信息") public static class DailyAccountInfo{ @@ -89,6 +81,7 @@ public class DailyAccountVo { public static class TableRow{ private Long time; private Long empId; + private String empName; private List pros; } @@ -98,6 +91,6 @@ public class DailyAccountVo { @ApiModelProperty("项目ID列表") private List pros; @ApiModelProperty("多行数据列表") - private PageInfo recs; + private List recs; } } diff --git a/src/main/java/com/ccsens/ptccsens/service/DailyAccountService.java b/src/main/java/com/ccsens/ptccsens/service/DailyAccountService.java index 4fe8c40..fd62635 100644 --- a/src/main/java/com/ccsens/ptccsens/service/DailyAccountService.java +++ b/src/main/java/com/ccsens/ptccsens/service/DailyAccountService.java @@ -1,28 +1,38 @@ package com.ccsens.ptccsens.service; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.text.StrFormatter; +import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; import com.ccsens.ptccsens.bean.dto.CommonQueryDto; import com.ccsens.ptccsens.bean.dto.DailyAccountDto; -import com.ccsens.ptccsens.bean.po.PluDailyAccountEmpProTask; -import com.ccsens.ptccsens.bean.po.PluDailyAccountEmpProTaskExample; -import com.ccsens.ptccsens.bean.po.PluDailyAccountTask; +import com.ccsens.ptccsens.bean.po.*; import com.ccsens.ptccsens.bean.vo.DailyAccountVo; import com.ccsens.ptccsens.persist.dao.PluDailyAccountDao; import com.ccsens.ptccsens.persist.dao.PluDailyAccountEmpDao; import com.ccsens.ptccsens.persist.dao.PluDailyAccountProDao; import com.ccsens.ptccsens.persist.mapper.PluDailyAccountEmpProTaskMapper; import com.ccsens.ptccsens.persist.mapper.PluDailyAccountTaskMapper; +import com.ccsens.util.PropUtil; +import com.ccsens.util.StringUtil; +import com.ccsens.util.WebConstant; import com.ccsens.util.exception.BaseException; import com.ccsensptos.tallsdk.bean.vo.TallTaskVo; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.io.*; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -34,6 +44,7 @@ import java.util.stream.Collectors; * @version: v1.0 */ @Service +@Slf4j @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class DailyAccountService implements IDailyAccountService{ @Resource @@ -59,34 +70,6 @@ public class DailyAccountService implements IDailyAccountService{ return info; } - @Override - public DailyAccountVo.QueryTasks queryTasks(DailyAccountDto.QueryTasksDto param, CommonQueryDto.PageInfo pageInfo) { - DailyAccountVo.QueryTasks tasks = new DailyAccountVo.QueryTasks(); - - //获取项目集合 - if(CollectionUtil.isNotEmpty(param.getPros())){ - tasks.setPros(param.getPros()); - }else{ - tasks.setPros(pluDailyAccountProDao.selectProjects().stream().map(DailyAccountVo.DailyAccountPro::getId).collect(Collectors.toList())); - } - - //查询总页数 - Long total = pluDailyAccountDao.selectEmpProTasksRecordNums(param.getStartTime(),param.getEndTime(),param.getEmps()); - - //获取任务 - List empProTasks = - pluDailyAccountDao.selectEmpProTasks(param.getStartTime(),param.getEndTime(),param.getEmps(),param.getPros(),pageInfo); - - //组装返回 - PageInfo pageResult = new PageInfo<>(empProTasks); - pageResult.setTotal(total); - pageResult.setPageNum(pageInfo.getPageNum().intValue()); - pageResult.setPageSize(pageInfo.getPageSize()); - pageResult.setPages((total.intValue()-1) / pageInfo.getPageSize() + 1); - tasks.setRecs(pageResult); - return tasks; - } - @Override public void saveTask(DailyAccountDto.SubmitTask param) { //处理时间信息,转换为0:0:0 @@ -127,4 +110,116 @@ public class DailyAccountService implements IDailyAccountService{ pluDailyAccountEmpProTaskMapper.insertSelective(empProTask); } } + + @Override + public DailyAccountVo.QueryTasks queryTasks(DailyAccountDto.QueryTasksDto param, CommonQueryDto.PageInfo pageInfo) { + DailyAccountVo.QueryTasks tasks = new DailyAccountVo.QueryTasks(); + + //获取项目集合 + PluDailyAccountProExample proExample = new PluDailyAccountProExample(); + PluDailyAccountProExample.Criteria criteria = proExample.createCriteria(); + if(CollectionUtil.isNotEmpty(param.getPros())) { + criteria.andIdIn(param.getPros()); + } + criteria.andRecStatusEqualTo(WebConstant.REC_STATUS.Normal.value); + proExample.setOrderByClause("sequence asc"); + List pros = pluDailyAccountProDao.selectByExample(proExample); + tasks.setPros(pros.stream().map(PluDailyAccountPro::getId).collect(Collectors.toList())); + + //获取每一行任务集合 + List empProTasks = + pluDailyAccountDao.selectEmpProTasks(param.getStartTime(),param.getEndTime(),param.getEmps(),param.getPros(),null); + + //组装返回 + tasks.setRecs(empProTasks); + return tasks; + } + + @Override + public String exportTasks(DailyAccountDto.QueryTasksDto param) throws IOException { + DailyAccountVo.QueryTasks tasks = new DailyAccountVo.QueryTasks(); + + //获取项目集合 + PluDailyAccountProExample proExample = new PluDailyAccountProExample(); + PluDailyAccountProExample.Criteria criteria = proExample.createCriteria(); + if(CollectionUtil.isNotEmpty(param.getPros())) { + criteria.andIdIn(param.getPros()); + } + criteria.andRecStatusEqualTo(WebConstant.REC_STATUS.Normal.value); + proExample.setOrderByClause("sequence asc"); + List pros = pluDailyAccountProDao.selectByExample(proExample); + + //获取任务 + List empProTasks = + pluDailyAccountDao.selectEmpProTasks(param.getStartTime(),param.getEndTime(),param.getEmps(),param.getPros(),null); + + //生成文件路径 + String fileName = "exportWbs/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx"; + String path = PropUtil.path + fileName; + File tmpFile = new File(path); + if (!tmpFile.getParentFile().exists()) { + tmpFile.getParentFile().mkdirs(); + } + + //创建ExcelWriter + ExcelWriter writer = ExcelUtil.getWriter(path); + + //生成wbs表的数据 + writeTasksToExcel(writer, pros, empProTasks); + + //关闭文件 + writer.close(); + + return PropUtil.imgDomain + "/" + fileName; + } + + private void writeTasksToExcel(ExcelWriter writer, List pros, List empProTasks) { + //写入标题 + int row = 0,col = 0; + writer.writeCellValue(col++,row,"时间"); + writer.writeCellValue(col++,row,"姓名"); + for (PluDailyAccountPro pro : pros) { + writer.writeCellValue(col++,row,pro.getProjectShortName()); + } + row++; + col = 0; + + //写入内容 + for (DailyAccountVo.TableRow empProTask : empProTasks) { + writer.writeCellValue(col++,row,DateUtil.format(new Date(empProTask.getTime()),"yyyy/MM/dd")); + writer.writeCellValue(col++,row,empProTask.getEmpName()); + //循环所有要导出的项目 + for (PluDailyAccountPro titlePro : pros) { + for (DailyAccountVo.ProjectTask pro : empProTask.getPros()) { + if (titlePro.getId().longValue() == pro.getProId().longValue()){ + //write tasks + writer.writeCellValue(col,row,formatTasksString(pro.getTasks())); + break; + } + } + col++; + } + row++; + col = 0; + } + } + + private Object formatTasksString(List tasks) { + String format = "【{}】计划结果{}【{}】,交付物【{}】,截至【{}】,时长【{}】,检查人【{}】,链接【{}】\r\n"; + StringBuilder stringBuilder = new StringBuilder(); + int index = 0; + for (DailyAccountVo.DailyAccountTask task : tasks) { + stringBuilder.append( + StrUtil.format(format,task.getCooperation().intValue() == 0 ? "自" : "协" , + ++index, + task.getTaskName(), + task.getDeliverName(), + DateUtil.format(new Date(task.getDeadline()),"yyyy/MM/dd"), + task.getDuration()/1000/3600, + task.getChecker(), + task.getDeliverLink()) + ); + } + return stringBuilder.toString(); + } } diff --git a/src/main/java/com/ccsens/ptccsens/service/IDailyAccountService.java b/src/main/java/com/ccsens/ptccsens/service/IDailyAccountService.java index 6edd35f..4ccfa50 100644 --- a/src/main/java/com/ccsens/ptccsens/service/IDailyAccountService.java +++ b/src/main/java/com/ccsens/ptccsens/service/IDailyAccountService.java @@ -4,6 +4,9 @@ import com.ccsens.ptccsens.bean.dto.CommonQueryDto; import com.ccsens.ptccsens.bean.dto.DailyAccountDto; import com.ccsens.ptccsens.bean.vo.DailyAccountVo; +import java.io.FileNotFoundException; +import java.io.IOException; + /** * @author :mr.zhangsan * @date :2022/4/28 14:49 @@ -16,6 +19,12 @@ public interface IDailyAccountService { */ DailyAccountVo.DailyAccountInfo queryDailyAccountInfo() ; + /** + * 提交任务 + * @param param + */ + void saveTask(DailyAccountDto.SubmitTask param); + /** * 查询任务列表 * @param param @@ -24,8 +33,9 @@ public interface IDailyAccountService { DailyAccountVo.QueryTasks queryTasks(DailyAccountDto.QueryTasksDto param, CommonQueryDto.PageInfo pageInfo); /** - * 提交任务 + * 根据条件查询任务并导出excel * @param param + * @return */ - void saveTask(DailyAccountDto.SubmitTask param); + String exportTasks(DailyAccountDto.QueryTasksDto param) throws IOException; } diff --git a/src/main/resources/mapper_dao/PluDailyAccountDao.xml b/src/main/resources/mapper_dao/PluDailyAccountDao.xml index 7d22e86..2b5689f 100644 --- a/src/main/resources/mapper_dao/PluDailyAccountDao.xml +++ b/src/main/resources/mapper_dao/PluDailyAccountDao.xml @@ -4,6 +4,7 @@ + @@ -13,6 +14,8 @@ + + @@ -36,10 +39,11 @@ select distinct o.time,o.emp_id,o.pro_id, - t.id as taskId, t.cooperation, t.task_name, t.deliver_name, t.deadline, t.duration, t.deliver_link + te.emp_name, + t.id as taskId, t.cooperation, t.task_name, t.deliver_name, t.deadline, t.duration, t.checker, t.deliver_link from ( - SELECT distinct o1.time, o1.emp_id, oe.sequence as empSequence + SELECT distinct o1.time, o1.emp_id, oe.emp_name, oe.sequence as empSequence from t_plu_daily_account_emp_pro_task o1 join t_plu_daily_account_emp oe on o1.emp_id = oe.id where o1.time >= #{startTime} AND o1.time < #{endTime} diff --git a/src/main/resources/mapper_raw/PluDailyAccountEmpMapper.xml b/src/main/resources/mapper_raw/PluDailyAccountEmpMapper.xml index 5fdabb9..f916326 100644 --- a/src/main/resources/mapper_raw/PluDailyAccountEmpMapper.xml +++ b/src/main/resources/mapper_raw/PluDailyAccountEmpMapper.xml @@ -8,6 +8,7 @@ + @@ -68,7 +69,7 @@ - id, emp_name, operator, created_at, updated_at, rec_status + id, emp_name, operator, created_at, updated_at, rec_status, sequence @@ -178,6 +185,9 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + sequence = #{record.sequence,jdbcType=INTEGER}, + @@ -190,7 +200,8 @@ operator = #{record.operator,jdbcType=BIGINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + sequence = #{record.sequence,jdbcType=INTEGER} @@ -213,6 +224,9 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + sequence = #{sequence,jdbcType=INTEGER}, + where id = #{id,jdbcType=BIGINT} @@ -222,7 +236,8 @@ operator = #{operator,jdbcType=BIGINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + sequence = #{sequence,jdbcType=INTEGER} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/src/main/resources/mapper_raw/PluDailyAccountProMapper.xml b/src/main/resources/mapper_raw/PluDailyAccountProMapper.xml index 7d81ab3..c5aafe5 100644 --- a/src/main/resources/mapper_raw/PluDailyAccountProMapper.xml +++ b/src/main/resources/mapper_raw/PluDailyAccountProMapper.xml @@ -11,6 +11,7 @@ + @@ -72,7 +73,7 @@ id, project_name, project_short_name, project_no, project_manager_name, operator, - created_at, updated_at, rec_status + created_at, updated_at, rec_status, sequence @@ -211,6 +218,9 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + sequence = #{record.sequence,jdbcType=INTEGER}, + @@ -226,7 +236,8 @@ operator = #{record.operator,jdbcType=BIGINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + sequence = #{record.sequence,jdbcType=INTEGER} @@ -258,6 +269,9 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + sequence = #{sequence,jdbcType=INTEGER}, + where id = #{id,jdbcType=BIGINT} @@ -270,7 +284,8 @@ operator = #{operator,jdbcType=BIGINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + sequence = #{sequence,jdbcType=INTEGER} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/src/main/resources/mapper_raw/PluDailyAccountTaskMapper.xml b/src/main/resources/mapper_raw/PluDailyAccountTaskMapper.xml index 6a2cde5..a50e2a3 100644 --- a/src/main/resources/mapper_raw/PluDailyAccountTaskMapper.xml +++ b/src/main/resources/mapper_raw/PluDailyAccountTaskMapper.xml @@ -14,6 +14,8 @@ + + @@ -75,7 +77,7 @@ id, cooperation, task_name, deliver_name, deadline, duration, deliver_link, remark, - operator, created_at, updated_at, rec_status + operator, created_at, updated_at, rec_status, sequence, checker @@ -243,6 +257,12 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + sequence = #{record.sequence,jdbcType=INTEGER}, + + + checker = #{record.checker,jdbcType=VARCHAR}, + @@ -261,7 +281,9 @@ operator = #{record.operator,jdbcType=BIGINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + sequence = #{record.sequence,jdbcType=INTEGER}, + checker = #{record.checker,jdbcType=VARCHAR} @@ -302,6 +324,12 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + sequence = #{sequence,jdbcType=INTEGER}, + + + checker = #{checker,jdbcType=VARCHAR}, + where id = #{id,jdbcType=BIGINT} @@ -317,7 +345,9 @@ operator = #{operator,jdbcType=BIGINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + sequence = #{sequence,jdbcType=INTEGER}, + checker = #{checker,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT} \ No newline at end of file