Browse Source

事件报告生成功能开发

Lifan 1 year ago
parent
commit
0f807f8234

+ 257 - 4
application/src/main/java/org/thingsboard/server/controller/nanxi/BridgeController.java

@@ -17,6 +17,8 @@ import org.springframework.web.multipart.MultipartFile;
 import org.thingsboard.server.common.data.yunteng.dto.FileUploadResponse;
 import org.thingsboard.server.domain.*;
 import org.thingsboard.server.domain.vo.NxEventManagementVO;
+import org.thingsboard.server.domain.vo.NxReservePlanVO;
+import org.thingsboard.server.domain.vo.NxWarningContactVO;
 import org.thingsboard.server.glossary.enums.YuntiTypeEnums;
 import org.thingsboard.server.service.nanxi.*;
 import org.thingsboard.server.utils.ImageUtil;
@@ -31,6 +33,8 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
+import static org.thingsboard.server.glossary.constants.ThreadLocalConstant.BASIC_PAGE_DATA_CACHE;
+
 @Slf4j
 @RestController
 @RequestMapping("/api/yt/bridge")
@@ -185,6 +189,254 @@ public class BridgeController {
         WordUtils.generateWord(data, templateName, "/demo1.docx");
     }
 
+    @RequestMapping("/eventReport2/{id}")
+    public void eventReport2(@PathVariable("id") Long id) throws Exception {
+        if (null == BASIC_PAGE_DATA_CACHE.get()) {
+            synchronized (BASIC_PAGE_DATA_CACHE) {
+                if (null == BASIC_PAGE_DATA_CACHE.get()) {
+                    BASIC_PAGE_DATA_CACHE.set(new HashMap<>());
+                }
+            }
+        }
+        NxEventManagementVO byId = eventManagementService.getNxEventManagementById(id, null);
+        basicDataConvertService.pageDataConvert(byId);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Map<String, Object> data = new HashMap<>();
+        data.put("pushTime", byId.getPushTime() == null ? "--" : simpleDateFormat.format(byId.getPushTime()));
+
+        data.put("areaName", byId.getAreaName());
+        data.put("eventTypeName", byId.getEventTypeName());
+        data.put("eventLevelName", byId.getEventLevelName());
+        data.put("domainName", byId.getDomainName());
+        data.put("industryName", byId.getIndustryName());
+        data.put("eventName", byId.getEventName());
+        data.put("eventAddress", byId.getEventAddress());
+        data.put("longitude", byId.getLongitude());
+        data.put("latitude", byId.getLatitude());
+        data.put("remark", byId.getRemark());
+        data.put("fileCompanyName", byId.getFileCompanyName());
+        data.put("filePersonName", byId.getFilePersonName());
+        data.put("filePersonPhone", byId.getFilePersonPhone());
+        data.put("fileTime", byId.getFileTime() == null ? "--" : simpleDateFormat.format(byId.getFileTime()));
+        data.put("summary", byId.getSummary());
+        data.put("disposalRequirements", byId.getDisposalRequirements());
+
+        List<Map<String, Object>> attentionTargets = new ArrayList<>();
+        List<NxWarningContactVO> warningContacts = byId.getWarningContacts();
+        for (int i = 0; i < warningContacts.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", warningContacts.get(i).getName());
+            map.put("type", warningContacts.get(i).getType());
+            map.put("areaName", warningContacts.get(i).getAreaName());
+            map.put("contactName", warningContacts.get(i).getContactName());
+            map.put("contactPhone", warningContacts.get(i).getContactPhone());
+            map.put("contactPosition", warningContacts.get(i).getContactPosition());
+            map.put("distance", warningContacts.get(i).getDistance());
+            attentionTargets.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("attentionTargets", attentionTargets);
+
+        List<Map<String, Object>> reservePlans = new ArrayList<>();
+        List<NxReservePlanVO> rps = byId.getReservePlans();
+        for (int i = 0; i < rps.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", rps.get(i).getName());
+            map.put("responseLevelName", rps.get(i).getResponses().get(0).getResponseLevelName());
+            map.put("dataSource", rps.get(i).getDataSource());
+            reservePlans.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("reservePlans", reservePlans);
+
+        List<Map<String, Object>> knowledges = new ArrayList<>();
+        List<NxKnowledgeDatabase> kds = byId.getKnowledges();
+        for (int i = 0; i < kds.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("knowledgeBaseName", kds.get(i).getKnowledgeBaseName());
+            map.put("disposalMeasures", kds.get(i).getDisposalMeasures());
+            map.put("disposalPoints", kds.get(i).getDisposalPoints());
+            map.put("dataSource", "--");
+            knowledges.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("knowledges", knowledges);
+
+        List<Map<String, Object>> experts = new ArrayList<>();
+        List<NxExpertDatabase> eps = byId.getExperts();
+        for (int i = 0; i < eps.size(); i++) {
+            NxExpertDatabase ep = eps.get(i);
+            Map<String, Object> map = new HashMap<>();
+            map.put("expertName", ep.getExpertName());
+            map.put("expertGenderText", ep.getExpertGenderText());
+            map.put("expertAge", ep.getExpertAge());
+            map.put("expertDuties", ep.getExpertDuties());
+            map.put("expertTitleText", ep.getExpertTitleText());
+            map.put("contactPhone", ep.getContactPhone());
+            map.put("highestEducationText", ep.getHighestEducationText());
+            map.put("academicDegreeText", ep.getAcademicDegreeText());
+            map.put("companyName", ep.getCompanyName());
+            map.put("workState", ep.getWorkStateText());
+            map.put("email", ep.getEmail());
+            map.put("remark", ep.getRemark());
+            map.put("dataSource", "--");
+            experts.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("experts", experts);
+
+        List<Map<String, Object>> leaders = new ArrayList<>();
+        List<NxEventPush> lds = byId.getLeaders();
+        for (int i = 0; i < lds.size(); i++) {
+            NxEventPush ld = lds.get(i);
+            Map<String, Object> map = new HashMap<>();
+            map.put("companyName", ld.getCompanyName());
+            map.put("personName", ld.getPersonName());
+            map.put("expertDuties", ld.getExpertDuties());
+            map.put("contactPhone", ld.getContactPhone());
+            map.put("dataSource", ld.getDataSource());
+            map.put("remark", ld.getRemark());
+            leaders.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("leaders", leaders);
+
+        List<Map<String, Object>> cooperates = new ArrayList<>();
+        List<NxEventPush> cps = byId.getCooperates();
+        for (int i = 0; i < cps.size(); i++) {
+            NxEventPush cp = cps.get(i);
+            Map<String, Object> map = new HashMap<>();
+            map.put("companyName", cp.getCompanyName());
+            map.put("personName", cp.getPersonName());
+            map.put("expertDuties", cp.getExpertDuties());
+            map.put("contactPhone", cp.getContactPhone());
+            map.put("dataSource", cp.getDataSource());
+            map.put("remark", cp.getRemark());
+            cooperates.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("cooperates", cooperates);
+
+        List<NxDisposeFeedback> disposeFeedbacks = new ArrayList<>();
+        List<NxDisposeFeedback> ids = new ArrayList<>();
+        byId.getLeaders().stream().forEach(item -> {
+            List<NxDisposeFeedback> nxDisposeFeedback = item.getNxDisposeFeedback();
+            if(!CollectionUtils.isEmpty(nxDisposeFeedback)){
+                for (NxDisposeFeedback disposeFeedback : nxDisposeFeedback) {
+                    if(disposeFeedback.getReportTime() != null){
+                        ids.add(disposeFeedback);
+                        break;
+                    }
+                }
+                disposeFeedbacks.addAll(nxDisposeFeedback);
+            }
+        });
+        byId.getCooperates().stream().forEach(item -> {
+            List<NxDisposeFeedback> nxDisposeFeedback = item.getNxDisposeFeedback();
+            if(!CollectionUtils.isEmpty(nxDisposeFeedback)){
+                for (NxDisposeFeedback disposeFeedback : nxDisposeFeedback) {
+                    if(disposeFeedback.getReportTime() != null){
+                        ids.add(disposeFeedback);
+                        break;
+                    }
+                }
+                disposeFeedbacks.addAll(nxDisposeFeedback);
+            }
+        });
+
+        List<Map<String, Object>> isDisasters = new ArrayList<>();
+        for (int i = 0; i < ids.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            NxDisposeFeedback df = ids.get(i);
+            map.put("reportTime", df.getReportTime());
+            map.put("reportCompanyName", df.getReportCompanyName());
+            map.put("reportPersonName", df.getReportPersonName());
+            map.put("reportPhone", df.getReportPhone());
+            map.put("injuredPeople", df.getInjuredPeople());
+            map.put("badInjuredPeople", df.getBadInjuredPeople());
+            map.put("deadPeople", df.getDeadPeople());
+            map.put("missingPeople", df.getMissingPeople());
+            map.put("economicLoss", df.getEconomicLoss());
+            isDisasters.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("isDisasters", isDisasters);
+
+        List<Map<String, Object>> nxDisposeFeedback = new ArrayList<>();
+        List<String> pics = null;
+        for (int i = 0; i < disposeFeedbacks.size(); i++) {
+            NxDisposeFeedback df = disposeFeedbacks.get(i);
+            Map<String, Object> map = new HashMap<>();
+            map.put("disposeTime", df.getDisposeTime() == null ? "--" : simpleDateFormat.format(df.getDisposeTime()));
+            map.put("companyName", df.getCompanyName());
+            map.put("disposeName", df.getDisposeName());
+            map.put("disposePhone", df.getDisposePhone());
+            map.put("result", df.getResult());
+            List<NxAnnex> annex = df.getAnnex();
+            pics = new ArrayList<>();
+            /*for (int j = 0; j < 5; j++) {
+                pics.add(ImageUtil.getImageBase64String("D:\\222.png"));
+            }
+            map.put("pics", pics);*/
+            nxDisposeFeedback.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("nxDisposeFeedback", nxDisposeFeedback);
+
+        List<Map<String, Object>> materials = new ArrayList<>();
+        List<NxEventMaterials> mts = byId.getMaterials();
+        for (int i = 0; i < mts.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            NxEventMaterials mt = mts.get(i);
+            map.put("number", mt.getMaterialsManagement().getNumber());
+            map.put("materialsName", mt.getMaterialsManagement().getName());
+            map.put("useAmount", mt.getUseAmount());
+            map.put("name", mt.getMaterialsManagement().getNxStorehouseManagement().getName());
+            map.put("companyName", mt.getCompanyName());
+            map.put("expirationDate", mt.getMaterialsManagement().getExpirationDate());
+            materials.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("materials", materials);
+
+        List<Map<String, Object>> rescues = new ArrayList<>();
+        List<NxEventRescue> rss = byId.getRescues();
+        for (int i = 0; i < rss.size(); i++) {
+            Map<String, Object> map = new HashMap<>();
+            NxEventRescue er = rss.get(i);
+            map.put("companyName", er.getCompanyName());
+            map.put("rescueTeamName", er.getRescueTeamName());
+            map.put("rescuePersonAmount", er.getRescuePersonAmount());
+            map.put("contactName", er.getRescueTeam().getContactName());
+            map.put("contactPhone", er.getRescueTeam().getContactPhone());
+            rescues.add(map);
+            mapValueNullToFormat(map, "--");
+        }
+        data.put("rescues", rescues);
+
+
+        data.put("amount1", 111);
+        data.put("amount2", 222);
+        data.put("amount3", 333);
+        data.put("pic", ImageUtil.getImageBase64String("D:\\222.png"));
+        mapValueNullToFormat(data, "--");
+
+
+        String templateName = "EventReport.ftl";
+        WordUtils.generateWord(data, templateName, "/demo1.docx");
+    }
+
+    private void mapValueNullToFormat(Map<String, Object> data, String format){
+        if(data == null){
+            return;
+        }
+        for (Map.Entry<String, Object> d : data.entrySet()) {
+            if (!(d instanceof List) && d.getValue() == null) {
+                d.setValue(format);
+            }
+        }
+    }
+
     @RequestMapping("/eventReport1")
     public void eventReport1() throws Exception {
         Map<String, Object> data = new HashMap<>();
@@ -315,10 +567,10 @@ public class BridgeController {
             map.put("disposePhone", "mmmmmmmmmm" + i);
             map.put("result", "mmmmmmmmmm" + i);
             pics = new ArrayList<>();
-            for (int j = 0; j < 5; j++) {
+            /*for (int j = 0; j < 5; j++) {
                 pics.add(ImageUtil.getImageBase64String("D:\\222.png"));
             }
-            map.put("pics", pics);
+            map.put("pics", pics);*/
             nxDisposeFeedback.add(map);
         }
         data.put("nxDisposeFeedback", nxDisposeFeedback);
@@ -352,10 +604,11 @@ public class BridgeController {
         data.put("amount1", 111);
         data.put("amount2", 222);
         data.put("amount3", 333);
+        data.put("pic", ImageUtil.getImageBase64String("D:\\222.png"));
 
 
-        String templateName = "EventReport.ftl";
-        WordUtils.generateWord(data, templateName, "/demo1.docx");
+        String templateName = "事件处置报告_bak.ftl";
+        WordUtils.generateWord(data, templateName, "/demo1.doc");
     }
 
 }

+ 1 - 0
application/src/main/java/org/thingsboard/server/controller/nanxi/NxDisposeFeedbackController.java

@@ -52,6 +52,7 @@ public class NxDisposeFeedbackController {
     @SortOrder
     public TkPageData<NxEventManagement>  getNxDisposeFeedbackPage(@RequestBody NxEventManagementQuery nxEventManagementQuery) {
         nxEventManagementQuery.setUserId(UserTicketUtil.getCurrentUser().getCurrentUserId());
+        nxEventManagementQuery.setUserId("8dfac6dd-2ae7-4aa7-b2c5-355d3ba1ec24");
         return nxDisposeFeedbackService.page(nxEventManagementQuery);
     }
 

+ 5 - 0
application/src/main/java/org/thingsboard/server/domain/NxWarningManagement.java

@@ -241,4 +241,9 @@ public class NxWarningManagement extends BaseEntity{
     @TableField(exist = false)
     private int timeType;
 
+    @DisplayText(converter = UserConverter.class)
+    private String creator;
+    @DisplayText(converter = UserConverter.class)
+    private String updater;
+
 }

+ 1 - 1
application/src/main/java/org/thingsboard/server/glossary/constants/DataConvertMap.java

@@ -47,7 +47,7 @@ public class DataConvertMap {
         pageConvertMap.put("leaderId", new String[]{"setLeaderName", "setLeaderPhone"});
         pageConvertMap.put("creator", "setCreator");
         pageConvertMap.put("updater", "setUpdater");
-        pageConvertMap.put("personId", new String[]{"setPersonName", "setContactPhone"});
+        pageConvertMap.put("personId", new String[]{"setPersonName", "setContactPhone", "setExpertDuties"});
         pageConvertMap.put("fileCompanyId", "setFileCompanyName");
         pageConvertMap.put("reportCompany", "setReportCompanyName");
         pageConvertMap.put("fileDepartmentId", "setFileDepartmentName");

+ 1 - 0
application/src/main/java/org/thingsboard/server/service/nanxi/impl/BasicDataConvertServiceImpl.java

@@ -159,6 +159,7 @@ public class BasicDataConvertServiceImpl implements IBasicDataConvertService {
             UserInfo users = commonService.getUserAreaCode(keyVal);
             if(field.contains("Phone")) return Objects.isNull(users) ? null : users.getPhoneNumber();
             if(field.contains("Position")) return Objects.isNull(users) ? null : users.getExpertTitleId();
+            if(field.contains("ExpertDuties")) return Objects.isNull(users) ? null : users.getExpertTitleId();
             return Objects.isNull(users) ? null : users.getRealName();
         } else if (basicConvertMap[9].contains(keyword)) {
             NxMaterialsManagement materials = materialsManagementService.getById(Long.parseLong(keyVal));

+ 1 - 0
application/src/main/java/org/thingsboard/server/service/nanxi/impl/NxWarningManagementServiceImpl.java

@@ -80,6 +80,7 @@ public class NxWarningManagementServiceImpl extends ServiceImpl<NxWarningManagem
                 .eq(!Objects.isNull(nxWarningManagement.getWarningTypeId()), NxWarningManagement::getWarningTypeId, nxWarningManagement.getWarningTypeId())
                 .eq(StringUtils.isNotEmpty(nxWarningManagement.getWarningLevelCode()), NxWarningManagement::getWarningLevelCode, nxWarningManagement.getWarningLevelCode())
                 .eq(!Objects.isNull(nxWarningManagement.getStatus()), NxWarningManagement::getStatus, nxWarningManagement.getStatus())
+                .eq(!Objects.isNull(nxWarningManagement.getIndustryId()), NxWarningManagement::getIndustryId, nxWarningManagement.getIndustryId())
                 .eq(!Objects.isNull(nxWarningManagement.getWarningTime()), NxWarningManagement::getWarningTime, nxWarningManagement.getWarningTime())
                 .gt(!Objects.isNull(nxWarningManagement.getWarningStartTime()), NxWarningManagement::getWarningTime, nxWarningManagement.getWarningStartTime())
                 .lt(!Objects.isNull(nxWarningManagement.getWarningEndTime()), NxWarningManagement::getWarningTime, nxWarningManagement.getWarningEndTime())

+ 1 - 0
application/src/main/resources/mapper/NxDisposeFeedbackMapper.xml

@@ -118,6 +118,7 @@
         <result column="em_updater" property="updater"/>
         <result column="em_update_time" property="updateTime"/>
         <result column="em_status" property="status"/>
+        <result column="em_data_source" property="dataSource"/>
     </resultMap>
 
     <sql id="Base_Column_List">

+ 1 - 1
application/src/main/resources/mapper/UserInfoMapper.xml

@@ -84,7 +84,7 @@
         left join sys_user u on uom.user_id = u.id
         <where>
             <if test="userId != null and userId != ''">
-                AND u.id = #{userId}
+                AND u.id = #{userId} or u.real_name like '%' || #{userId} '%'
             </if>
         </where>
         union all

+ 0 - 7
application/src/main/resources/templates/EventReport.ftl

@@ -4212,9 +4212,7 @@
                                 <w:color w:val="auto"/>
                                 <w:lang w:val="en-US" w:eastAsia="zh-CN"/>
                             </w:rPr>
-                            <#list dispose.pics as pic>
                             <w:pict>
-                                <w:binData w:name="wordml://1.png">${pic}</w:binData>
                                 <v:shape id="_x0000_i1025" o:spt="75" alt="67f1d0c77b6faf5e49465de702588de3"
                                          type="#_x0000_t75" style="height:77.25pt;width:136.75pt;" filled="f"
                                          o:preferrelative="t" stroked="f" coordsize="21600,21600">
@@ -4227,7 +4225,6 @@
                                     <w10:anchorlock/>
                                 </v:shape>
                             </w:pict>
-                            </#list>
                         </w:r>
                     </w:p>
                     </#list>
@@ -5736,10 +5733,6 @@
             </w:fonts>
         </pkg:xmlData>
     </pkg:part>
-    <pkg:part pkg:name="/word/media/image1.png" pkg:contentType="image/png">
-        <pkg:binaryData>
-        </pkg:binaryData>
-    </pkg:part>
     <pkg:part pkg:name="/word/settings.xml"
               pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml">
         <pkg:xmlData>

File diff suppressed because it is too large
+ 2216 - 0
application/src/main/resources/templates/事件处置报告.xml


File diff suppressed because it is too large
+ 2218 - 0
application/src/main/resources/templates/事件处置报告_bak.ftl


File diff suppressed because it is too large
+ 503 - 0
application/src/main/resources/templates/事件报告.ftl


+ 1 - 1
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/utils/tree/TreeUtils.java

@@ -9,7 +9,7 @@ public class TreeUtils {
   public static <T extends TreeDTO<T>> List<T> buildTree(List<T> treeList) {
     Map<String, T> dtoMap = new LinkedHashMap<>(treeList.size());
     HashSet<T> dtoSet = Sets.newHashSet(treeList);
-    dtoSet.forEach(dto -> dtoMap.put(dto.getId(), dto));
+    treeList.forEach(dto -> dtoMap.put(dto.getId(), dto));
     List<T> result = Lists.newArrayList();
     for (T node : dtoMap.values()) {
       T parent = dtoMap.get(node.getParentId());

+ 5 - 1
dao/src/main/java/org/thingsboard/server/dao/yunteng/impl/TkOrganizationServiceImpl.java

@@ -222,7 +222,11 @@ public class TkOrganizationServiceImpl extends AbstractBaseService<OrganizationM
                 new QueryWrapper<TkOrganizationEntity>()
                     .lambda()
                     .eq(TkOrganizationEntity::getTenantId, tenantId)
-                    .in(organizationIds.size() > 0, TkOrganizationEntity::getId, organizationIds)
+                    .and(organizationIds.size() > 0, i -> i
+                        .in(TkOrganizationEntity::getId, organizationIds)
+                            .or(j -> j
+                        .in(TkOrganizationEntity::getParentId, organizationIds)))
+                    .orderBy(true, true, TkOrganizationEntity::getParentId)
                     .orderBy(true, true, TkOrganizationEntity::getSort));
       } else {
         return null;