|
@@ -3,14 +3,19 @@ package com.rongwei.sfcommon.sys.service.impl;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.aspose.words.*;
|
|
|
+import com.aspose.words.Font;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.rongwe.scentity.domian.AspSafetyDrillProgrammeDo;
|
|
|
import com.rongwe.scentity.domian.AspSafetyDrillProgrammeMsgNotifyRecordDo;
|
|
|
+import com.rongwe.scentity.domian.AspSafetyEmergencyDrillPlan;
|
|
|
import com.rongwe.scentity.domian.AspSafetyEmergencyPlan;
|
|
|
+import com.rongwe.scentity.vo.AspSafetyEmergencyDrillPlanVo;
|
|
|
import com.rongwei.rwadmincommon.system.domain.SysDictDo;
|
|
|
import com.rongwei.rwadmincommon.system.service.SysDictService;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
|
import com.rongwei.safecommon.utils.CXCommonUtils;
|
|
@@ -18,11 +23,17 @@ import com.rongwei.sfcommon.sys.dao.AspSafetyDrillProgrammeDao;
|
|
|
import com.rongwei.sfcommon.sys.service.AspSafetyDrillProgrammeMsgNotifyRecordService;
|
|
|
import com.rongwei.sfcommon.sys.service.AspSafetyDrillProgrammeService;
|
|
|
import com.rongwei.sfcommon.sys.service.AspSafetyEmergencyPlanService;
|
|
|
+import com.rongwei.sfcommon.utils.AsposeWordsUtils;
|
|
|
+import com.rongwei.sfcommon.utils.CommonUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.awt.*;
|
|
|
+import java.net.URLEncoder;
|
|
|
import java.util.*;
|
|
|
+import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -65,8 +76,8 @@ public class AspSafetyDrillProgrammeServiceImpl extends ServiceImpl<AspSafetyDri
|
|
|
// queryWrapper.apply("DAY( DRILLTIME ) = DAY (NOW())");
|
|
|
List<AspSafetyDrillProgrammeDo> list = list(queryWrapper);
|
|
|
|
|
|
- if(ObjectUtil.isEmpty(list)) {
|
|
|
- return ;
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
List<AspSafetyDrillProgrammeDo> updateList = new ArrayList<>(list.size());
|
|
@@ -124,14 +135,161 @@ public class AspSafetyDrillProgrammeServiceImpl extends ServiceImpl<AspSafetyDri
|
|
|
notifyMsg(list);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void exportEmergencyDrillPlanWord(String startDate, String endDate, HttpServletResponse response) throws Exception {
|
|
|
+ boolean wordLicense = AsposeWordsUtils.getWordLicense();
|
|
|
+ //根据时间段查询数据
|
|
|
+ List<AspSafetyEmergencyDrillPlanVo> list = this.baseMapper.selectSafetyEmergencyDrillPlanByDate(startDate, endDate);
|
|
|
+
|
|
|
+ // 创建空白文档
|
|
|
+ Document doc = new Document();
|
|
|
+
|
|
|
+ DocumentBuilder builder = new DocumentBuilder(doc);
|
|
|
+
|
|
|
+ builder.getPageSetup().setPaperSize(PaperSize.A4);//A4纸
|
|
|
+ builder.getPageSetup().setOrientation(Orientation.PORTRAIT);//方向
|
|
|
+ builder.getPageSetup().setVerticalAlignment(PageVerticalAlignment.TOP); //垂直对准
|
|
|
+ builder.getPageSetup().setLeftMargin(42);//页面左边距
|
|
|
+ builder.getPageSetup().setRightMargin(42);//页面右边距
|
|
|
+
|
|
|
+ //获取ParagraphFormat对象,关于行的样式基本都在这里
|
|
|
+ ParagraphFormat ph = builder.getParagraphFormat();
|
|
|
+ //文字对齐方式
|
|
|
+ ph.setAlignment(ParagraphAlignment.CENTER);
|
|
|
+ // 单倍行距 = 12 , 1.5 倍 = 18
|
|
|
+ ph.setLineSpacing(12);
|
|
|
+ Font font = builder.getFont();
|
|
|
+ //大小22
|
|
|
+ font.setSize(22);
|
|
|
+ //粗体
|
|
|
+ font.setBold(true);
|
|
|
+ //颜色
|
|
|
+ font.setColor(Color.BLACK);
|
|
|
+ //字体
|
|
|
+ font.setNameFarEast("宋体");
|
|
|
+ //添加文字
|
|
|
+ String title = startDate.split("-")[0] + "年综合或专项应急演练计划";
|
|
|
+ builder.writeln(title);
|
|
|
+
|
|
|
+
|
|
|
+ font.setSize(10);
|
|
|
+ font.setBold(false);
|
|
|
+
|
|
|
+
|
|
|
+ //开始添加表格
|
|
|
+ Table table = builder.startTable();
|
|
|
+ //开始添加第一行,并设置表格行高
|
|
|
+ RowFormat rowf = builder.getRowFormat();
|
|
|
+ rowf.setHeight(40);
|
|
|
+ // ....这里rowf可以有很多的设置
|
|
|
+ //插入一个单元格
|
|
|
+ builder.insertCell();
|
|
|
+ //设置单元格是否水平合并
|
|
|
+ builder.getCellFormat().setHorizontalMerge(CellMerge.NONE);
|
|
|
+ //设置单元格是否垂直合并,None为不合并
|
|
|
+ builder.getCellFormat().setVerticalMerge(CellMerge.NONE);
|
|
|
+ //设置单元格宽
|
|
|
+ builder.getCellFormat().setWidth(40);
|
|
|
+ //单元格垂直对齐方向
|
|
|
+ builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);
|
|
|
+ //单元格水平对齐方向
|
|
|
+ builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
|
|
|
+// builder.getCellFormat().setFitText(true);//单元格内文字设为多行(默认为单行,会影响单元格宽)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //单元格内添加文字
|
|
|
+ builder.write("序号");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("演练单位");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("演练项目");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("演练时间");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("演练类别");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("演练地点");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("组织部门");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("负责人");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("主要参演单位");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write("备注");
|
|
|
+ //结束第一行
|
|
|
+ builder.endRow();
|
|
|
+ for (int i=1;i<=list.size();i++) {
|
|
|
+ AspSafetyEmergencyDrillPlanVo item = list.get(i-1);
|
|
|
+ //开始行
|
|
|
+// builder.getRowFormat();
|
|
|
+// builder.insertParagraph();
|
|
|
+ builder.insertCell();
|
|
|
+ builder.write(i+"");
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDrillunit());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDrillname());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(DateUtil.format(item.getDrilldate(), "yyyy-MM-dd HH:mm:ss"));
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDrillCategoryName());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDrilllocation());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDeptname());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getDirectornames());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getJoinunit());
|
|
|
+ builder.insertCell();
|
|
|
+ builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度
|
|
|
+ builder.write(item.getRemark());
|
|
|
+ //结束行
|
|
|
+ builder.endRow();
|
|
|
+ }
|
|
|
+ //结束表格
|
|
|
+ builder.endTable();
|
|
|
+// //设置这个表格的上下左右,内部水平,垂直的线为白色(当背景为白色的时候就相当于隐藏边框了)
|
|
|
+// table.setBorder(BorderType.LEFT, LineStyle.DOUBLE, 1, Color.WHITE, false);
|
|
|
+// table.setBorder(BorderType.TOP, LineStyle.DOUBLE, 1, Color.WHITE, false);
|
|
|
+// table.setBorder(BorderType.RIGHT, LineStyle.DOUBLE, 1, Color.WHITE, false);
|
|
|
+// table.setBorder(BorderType.BOTTOM, LineStyle.DOUBLE, 1, Color.WHITE, false);
|
|
|
+// table.setBorder(BorderType.VERTICAL, LineStyle.DOUBLE, 1, Color.WHITE, false);
|
|
|
+ response.setContentType("application/octet-stream;charset=UTF-8");
|
|
|
+// response.setCharacterEncoding("UTF-8");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(title+".docx", "UTF-8"));
|
|
|
+ doc.save(response.getOutputStream(), com.aspose.words.SaveFormat.DOCX);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 消息提醒
|
|
|
*
|
|
|
* @param list
|
|
|
*/
|
|
|
private void notifyMsg(List<AspSafetyDrillProgrammeDo> list) {
|
|
|
- if(ObjectUtil.isEmpty(list)) {
|
|
|
- return ;
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
log.info("notify size: {}", list.size());
|
|
@@ -164,12 +322,12 @@ public class AspSafetyDrillProgrammeServiceImpl extends ServiceImpl<AspSafetyDri
|
|
|
|
|
|
List<SysDictDo> planPlanType = dictService.getByRedis("emergency_plan_plan_type");
|
|
|
|
|
|
- if(ObjectUtil.isEmpty(plan.getPlantype())) {
|
|
|
+ if (ObjectUtil.isEmpty(plan.getPlantype())) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
List<String> planTypeList = new ArrayList<>();
|
|
|
- for(String planType : plan.getPlantype().split(",")) {
|
|
|
+ for (String planType : plan.getPlantype().split(",")) {
|
|
|
Optional<SysDictDo> sysDictDo = planPlanType.stream().filter(item -> item.getValue().equals(planType)).findFirst();
|
|
|
planTypeList.add(sysDictDo.get().getName());
|
|
|
}
|
|
@@ -186,11 +344,11 @@ public class AspSafetyDrillProgrammeServiceImpl extends ServiceImpl<AspSafetyDri
|
|
|
sb.append("】即将开始进行演练,请悉知;");
|
|
|
|
|
|
List<String> userIdList = new ArrayList<>();
|
|
|
- if(!ObjectUtil.isEmpty(programmeDo.getObserverids())) {
|
|
|
+ if (!ObjectUtil.isEmpty(programmeDo.getObserverids())) {
|
|
|
userIdList.addAll(Arrays.stream(programmeDo.getObserverids().split(",")).collect(Collectors.toList()));
|
|
|
}
|
|
|
|
|
|
- if(!ObjectUtil.isEmpty(programmeDo.getParticipantid())) {
|
|
|
+ if (!ObjectUtil.isEmpty(programmeDo.getParticipantid())) {
|
|
|
userIdList.addAll(Arrays.stream(programmeDo.getParticipantid().split(",")).collect(Collectors.toList()));
|
|
|
}
|
|
|
|