Jelajahi Sumber

导出综合或专项应急演练计划WORD

sucheng 1 tahun lalu
induk
melakukan
453553a9a1

+ 7 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspSafetyDrillProgrammeDao.java

@@ -2,6 +2,11 @@ package com.rongwei.sfcommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwe.scentity.domian.AspSafetyDrillProgrammeDo;
+import com.rongwe.scentity.domian.AspSafetyEmergencyDrillPlan;
+import com.rongwe.scentity.vo.AspSafetyEmergencyDrillPlanVo;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,6 @@ import com.rongwe.scentity.domian.AspSafetyDrillProgrammeDo;
  */
 public interface AspSafetyDrillProgrammeDao extends BaseMapper<AspSafetyDrillProgrammeDo> {
 
+    @Select("select a.*,b.`NAME` AS 'drillCategoryName' from asp_safety_emergency_drill_plan a LEFT JOIN (select * from sys_dict where DELETED = 0 AND DICTTYPE='satefy_drill_type') b ON a.DRILLCATEGORY = b.`VALUE` where a.DELETED = 0 AND DRILLDATE >= #{startDate} AND DRILLDATE <= #{endDate}")
+    List<AspSafetyEmergencyDrillPlanVo> selectSafetyEmergencyDrillPlanByDate(String startDate, String endDate);
 }

+ 4 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/AspSafetyDrillProgrammeService.java

@@ -2,6 +2,9 @@ package com.rongwei.sfcommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwe.scentity.domian.AspSafetyDrillProgrammeDo;
+import com.rongwei.rwcommon.base.R;
+
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * <p>
@@ -36,4 +39,5 @@ public interface AspSafetyDrillProgrammeService extends IService<AspSafetyDrillP
      */
     void notifyCurrentDay();
 
+    void exportEmergencyDrillPlanWord(String startDate, String endDate, HttpServletResponse response) throws Exception;
 }

+ 166 - 8
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSafetyDrillProgrammeServiceImpl.java

@@ -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()));
         }
 

+ 41 - 0
cx-safe-check/cx-save-check-common/src/main/java/com/rongwei/sfcommon/utils/AsposeWordsUtils.java

@@ -0,0 +1,41 @@
+package com.rongwei.sfcommon.utils;
+
+import com.aspose.cells.License;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+
+/**
+ * AsposeWordsUtils class
+ *
+ * @author XH
+ * @date 2022/08/01
+ */
+@Component
+public class AsposeWordsUtils {
+    public static boolean getExcelLicense() {
+        boolean result = false;
+        try {
+            InputStream is = AsposeWordsUtils.class.getClassLoader().getResourceAsStream("license.xml");
+            License aposeLic = new License();
+            aposeLic.setLicense(is);
+            result = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+    public static boolean getWordLicense() {
+        boolean result = false;
+        try {
+            InputStream is = AsposeWordsUtils.class.getClassLoader().getResourceAsStream("license.xml");
+            com.aspose.words.License aposeLic = new com.aspose.words.License();
+            aposeLic.setLicense(is);
+            result = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+}

+ 136 - 0
cx-safe-check/cx-save-check-entity/src/main/java/com/rongwe/scentity/domian/AspSafetyEmergencyDrillPlan.java

@@ -0,0 +1,136 @@
+package com.rongwe.scentity.domian;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * asp_safety_emergency_drill_plan
+ * @author 
+ */
+@Data
+public class AspSafetyEmergencyDrillPlan implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    private String tenantid;
+
+    /**
+     * 扩展预留
+     */
+    private String roption;
+
+    /**
+     * 删除标记
+     */
+    private String deleted;
+
+    /**
+     * 备注
+     */
+    private String remark = "";
+
+    /**
+     * 创建人ID
+     */
+    private String createuserid;
+
+    /**
+     * 创建人姓名
+     */
+    private String createusername;
+
+    /**
+     * 创建日期
+     */
+    private Date createdate;
+
+    /**
+     * 修改人ID
+     */
+    private String modifyuserid;
+
+    /**
+     * 修改人姓名
+     */
+    private String modifyusername;
+
+    /**
+     * 修改日期
+     */
+    private Date modifydate;
+
+    /**
+     * 组织ID
+     */
+    private String orgid;
+
+    /**
+     * 预案ID
+     */
+    private String planid;
+
+    /**
+     * 演练项目
+     */
+    private String drillname = "";
+
+    /**
+     * 演练单位ID
+     */
+    private String drillunitid;
+
+    /**
+     * 演练单位
+     */
+    private String drillunit = "";
+
+    /**
+     * 演练类别
+     */
+    private String drillcategory = "";
+
+    /**
+     * 演练时间
+     */
+    private Date drilldate;
+
+    /**
+     * 组织部门ID
+     */
+    private String deptid;
+
+    /**
+     * 组织部门名称
+     */
+    private String deptname = "";
+
+    /**
+     * 负责人ids
+     */
+    private String directorids;
+
+    /**
+     * 负责人names
+     */
+    private String directornames = "";
+
+    /**
+     * 主要参演单位ID
+     */
+    private String joinunitid;
+
+    /**
+     * 主要参演单位
+     */
+    private String joinunit = "";
+
+    /**
+     * 演练地点
+     */
+    private String drilllocation = "";
+
+    private static final long serialVersionUID = 1L;
+}

+ 17 - 0
cx-safe-check/cx-save-check-entity/src/main/java/com/rongwe/scentity/vo/AspSafetyEmergencyDrillPlanVo.java

@@ -0,0 +1,17 @@
+package com.rongwe.scentity.vo;
+
+import com.rongwe.scentity.domian.AspSafetyEmergencyDrillPlan;
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/1/14
+ */
+@Data
+public class AspSafetyEmergencyDrillPlanVo extends AspSafetyEmergencyDrillPlan {
+
+    /**
+     * 演练类别名称
+     */
+    private String drillCategoryName = "";
+}

+ 12 - 4
cx-safe-check/cx-save-check-server/src/main/java/com/rongwei/savecheck/controller/AspSafetyDrillProgrammeController.java

@@ -3,11 +3,9 @@ package com.rongwei.savecheck.controller;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.sfcommon.sys.service.AspSafetyDrillProgrammeService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 /**
@@ -69,5 +67,15 @@ public class AspSafetyDrillProgrammeController {
         return R.ok();
     }
 
+    /**
+     * 导出综合或专项应急演练计划WORD
+     */
+    @GetMapping("/exportEmergencyDrillPlanWord")
+    public void exportEmergencyDrillPlanWord(@RequestParam String startDate,
+                                          @RequestParam String endDate,
+                                          HttpServletResponse response) throws Exception {
+        aspSafetyDrillProgrammeService.exportEmergencyDrillPlanWord(startDate, endDate, response);
+    }
+
 }
 

+ 13 - 0
cx-safe-check/cx-save-check-server/src/main/resources/license.xml

@@ -0,0 +1,13 @@
+<License>
+    <Data>
+        <Products>
+            <Product>Aspose.Total for Java</Product>
+            <Product>Aspose.Words for Java</Product>
+        </Products>
+        <EditionType>Enterprise</EditionType>
+        <SubscriptionExpiry>20991231</SubscriptionExpiry>
+        <LicenseExpiry>20991231</LicenseExpiry>
+        <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
+    </Data>
+    <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
+</License>