提交 4c556ef6 authored 作者: kxjia's avatar kxjia

非现场报送优化

上级 44f84d08
package org.jeecg.modules.stm.baosong.controller; package org.jeecg.modules.stm.baosong.controller;
import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.stm.baosong.entity.BaosongDataValid; import org.jeecg.modules.stm.baosong.entity.BaosongDataValid;
import org.jeecg.modules.stm.baosong.entity.BaosongTaskAlloc;
import org.jeecg.modules.stm.baosong.entity.BaosongTaskRecord; import org.jeecg.modules.stm.baosong.entity.BaosongTaskRecord;
import org.jeecg.modules.stm.baosong.entity.BaosongTplItem; import org.jeecg.modules.stm.baosong.entity.BaosongTplItem;
import org.jeecg.modules.stm.baosong.service.IBaosongDataValidService; import org.jeecg.modules.stm.baosong.service.IBaosongDataValidService;
import org.jeecg.modules.stm.baosong.service.IBaosongTaskRecordService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.jeecg.modules.stm.baosong.service.IBaosongTplItemService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import java.util.*;
import org.jeecg.common.aspect.annotation.AutoLog; import java.util.stream.Collectors;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.modules.stm.baosong.service.IBaosongTaskRecordService;
import org.jeecg.modules.stm.baosong.service.IBaosongTplItemService;
/** /**
* @Description: 报送数据校验 * @Description: 报送数据校验
......
...@@ -192,7 +192,7 @@ public class BaosongTaskAllocController extends JeecgController<BaosongTaskAlloc ...@@ -192,7 +192,7 @@ public class BaosongTaskAllocController extends JeecgController<BaosongTaskAlloc
allocList.add(alloc); allocList.add(alloc);
} }
baosongTaskAllocService.saveOrUpdateBatch(allocList); baosongTaskAllocService.saveOrUpdateBatch(allocList);
baosongTaskService.updateTaskSta(2,taskId); baosongTaskService.updateTaskSta(1,taskId);
return Result.OK("保存成功!"); return Result.OK("保存成功!");
} }
...@@ -204,6 +204,7 @@ public class BaosongTaskAllocController extends JeecgController<BaosongTaskAlloc ...@@ -204,6 +204,7 @@ public class BaosongTaskAllocController extends JeecgController<BaosongTaskAlloc
queryWrapper.eq("taskid",taskAlloc.getTaskid()) queryWrapper.eq("taskid",taskAlloc.getTaskid())
.eq("fill_user",UserUtil.getUserId()); .eq("fill_user",UserUtil.getUserId());
taskAlloc.setFillSta(true); taskAlloc.setFillSta(true);
baosongTaskService.updateTaskSta(2,taskAlloc.getTaskid());
baosongTaskAllocService.update(taskAlloc,queryWrapper); baosongTaskAllocService.update(taskAlloc,queryWrapper);
return Result.OK("保存成功!"); return Result.OK("保存成功!");
} }
......
package org.jeecg.modules.stm.baosong.controller; package org.jeecg.modules.stm.baosong.controller;
import java.io.File; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.Arrays; import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.Date; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
import java.util.Map;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder; import lombok.extern.slf4j.Slf4j;
import javax.xml.parsers.DocumentBuilderFactory; import org.apache.shiro.authz.annotation.RequiresPermissions;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.stm.baosong.entity.BaosongTask;
import org.jeecg.modules.stm.baosong.entity.BaosongTaskReview;
import org.jeecg.modules.stm.baosong.entity.BaosongTpl;
import org.jeecg.modules.stm.baosong.entity.TaskRecordVo; import org.jeecg.modules.stm.baosong.entity.TaskRecordVo;
import org.jeecg.modules.stm.baosong.service.IBaosongTaskAllocService; import org.jeecg.modules.stm.baosong.service.IBaosongTaskAllocService;
import org.jeecg.modules.stm.baosong.service.IBaosongTaskReviewService; import org.jeecg.modules.stm.baosong.service.IBaosongTaskReviewService;
import org.jeecg.modules.stm.baosong.service.IBaosongTaskService; import org.jeecg.modules.stm.baosong.service.IBaosongTaskService;
import org.jeecg.modules.stm.baosong.service.IBaosongTplService; import org.jeecg.modules.stm.baosong.service.IBaosongTplService;
import org.springframework.beans.factory.annotation.Value;
import org.jeecg.modules.stm.baosong.entity.BaosongTask;
import org.jeecg.modules.stm.baosong.entity.BaosongTaskReview;
import org.jeecg.modules.stm.baosong.entity.BaosongTpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/** /**
* @Description: 内容检查 * @Description: 内容检查
* @Author: jeecg-boot * @Author: jeecg-boot
......
...@@ -27,9 +27,7 @@ public class CreateXmlFile { ...@@ -27,9 +27,7 @@ public class CreateXmlFile {
// 常量定义 // 常量定义
private static final String DEFAULT_ENCODING = "UTF-8"; private static final String DEFAULT_ENCODING = "UTF-8";
private static final String DATE_FORMAT_PATTERN = "yyyy-MM-dd";
private static final String INDENT_AMOUNT_KEY = "{http://xml.apache.org/xslt}indent-amount"; private static final String INDENT_AMOUNT_KEY = "{http://xml.apache.org/xslt}indent-amount";
private static final int DEFAULT_RIND_VALUE = 1;
private final BaosongTpl baosongTpl; private final BaosongTpl baosongTpl;
private final BaosongTask baosongTask; private final BaosongTask baosongTask;
...@@ -45,7 +43,6 @@ public class CreateXmlFile { ...@@ -45,7 +43,6 @@ public class CreateXmlFile {
* 创建XML文件 * 创建XML文件
*/ */
public boolean createXml(List<TaskRecordVo> dataList, String filePath) { public boolean createXml(List<TaskRecordVo> dataList, String filePath) {
if (dataList == null || dataList.isEmpty()) { if (dataList == null || dataList.isEmpty()) {
logger.warn("数据列表为空,无法生成XML文件"); logger.warn("数据列表为空,无法生成XML文件");
return false; return false;
...@@ -64,47 +61,41 @@ public class CreateXmlFile { ...@@ -64,47 +61,41 @@ public class CreateXmlFile {
Document doc = docBuilder.newDocument(); Document doc = docBuilder.newDocument();
// 创建根元素 // 创建根元素
Comment rootComment = doc.createComment(baosongTpl.getNm()); String rootElementName = this.baosongTpl.getCode();
doc.appendChild(rootComment); rootElementName =rootElementName.replaceAll("-","_");
String rootElementName = normalizeElementName(this.baosongTpl.getCode());
Element rootElement = doc.createElement(rootElementName); Element rootElement = doc.createElement(rootElementName);
doc.appendChild(rootElement); doc.appendChild(rootElement);
// 添加固定信息节点 // 添加固定信息节点
createFixedInfoNodes(doc, rootElement); createFixedInfoNodes(doc, rootElement);
// 重新组织数据结构 - 按层级关系构建树形结构 // 构建完整的数据映射
Map<String, TaskRecordVo> codeToItemMap = new HashMap<>(); Map<String, TaskRecordVo> allItems = new HashMap<>();
Map<String, List<TaskRecordVo>> pcodeToChildrenMap = new HashMap<>(); Map<String, List<TaskRecordVo>> childrenByParent = new HashMap<>();
Set<String> allCodes = new HashSet<>();
// 第一步:构建映射关系
for (TaskRecordVo item : dataList) { for (TaskRecordVo item : dataList) {
String code = item.getCode(); String code = item.getCode();
String pcode = item.getPcode(); String pcode = item.getPcode();
if (code != null) { if (code != null) {
codeToItemMap.put(code, item); allItems.put(code, item);
allCodes.add(code);
} }
if (pcode != null && !pcode.trim().isEmpty()) { if (pcode != null && !pcode.trim().isEmpty()) {
pcodeToChildrenMap.computeIfAbsent(pcode, k -> new ArrayList<>()).add(item); childrenByParent.computeIfAbsent(pcode, k -> new ArrayList<>()).add(item);
} }
} }
// 第二步:找出顶级节点(根节点的直接子节点) // 找出根节点的直接子节点
// 从目标XML可以看到,顶级节点是像TB1001、TB1012等 List<TaskRecordVo> rootChildren = childrenByParent.getOrDefault("T_B_1", new ArrayList<>());
// 我们需要根据数据推断哪些是顶级节点
List<String> topLevelNodes = findTopLevelNodes(dataList, allCodes, codeToItemMap);
logger.debug("找到的顶级节点: {}", topLevelNodes); // 按itemid排序
rootChildren.sort(Comparator.comparingInt(TaskRecordVo::getItemid));
// 第三步:为每个顶级节点创建XML结构 // 处理根节点的每个子节点
for (String topNodeCode : topLevelNodes) { for (TaskRecordVo child : rootChildren) {
createNodeStructure(doc, rootElement, topNodeCode, processItem(doc, rootElement, child, childrenByParent, allItems, "");
codeToItemMap, pcodeToChildrenMap, new HashSet<>());
} }
// 保存XML // 保存XML
...@@ -117,164 +108,234 @@ public class CreateXmlFile { ...@@ -117,164 +108,234 @@ public class CreateXmlFile {
} }
/** /**
* 找出顶级节点 * 处理数据项
*/ */
private List<String> findTopLevelNodes(List<TaskRecordVo> dataList, Set<String> allCodes, private void processItem(Document doc, Element parentElement, TaskRecordVo item,
Map<String, TaskRecordVo> codeToItemMap) { Map<String, List<TaskRecordVo>> childrenByParent,
List<String> topNodes = new ArrayList<>(); Map<String, TaskRecordVo> allItems, String parentPath) {
// 收集所有可能的节点代码 String code = item.getCode();
Set<String> allPcodes = new HashSet<>(); String title = item.getTitle();
for (TaskRecordVo item : dataList) { String currentPath = buildPath(parentPath, title);
String pcode = item.getPcode();
if (pcode != null && !pcode.trim().isEmpty()) { // 检查是否是表格节点(有多个相同code但不同rind的子项)
allPcodes.add(pcode); if (isTableNode(code, childrenByParent)) {
} createTableNode(doc, parentElement, item, childrenByParent, currentPath);
} else if (code.startsWith("TB")) {
// 普通TB节点
createNormalNode(doc, parentElement, item, childrenByParent, allItems, currentPath);
} else {
// 普通数据字段
addDataField(doc, parentElement, item, currentPath);
}
}
/**
* 判断是否是表格节点
*/
private boolean isTableNode(String nodeCode, Map<String, List<TaskRecordVo>> childrenByParent) {
List<TaskRecordVo> children = childrenByParent.get(nodeCode);
if (children == null || children.isEmpty()) {
return false;
} }
// 顶级节点特征: // 检查是否有多个不同的rind值
// 1. 是一个pcode(有数据以此pcode为父节点) Set<Integer> rindValues = new HashSet<>();
// 2. 但不是其他节点的子节点(即这个pcode不作为code出现在数据中) for (TaskRecordVo child : children) {
// 3. 或者这个pcode虽然有对应的item,但它的pcode是T_B_1或空 if (nodeCode.equals(child.getPcode())) {
for (String pcode : allPcodes) { Integer rind = getRindValue(child);
if (!allCodes.contains(pcode)) { rindValues.add(rind);
// 这个pcode没有对应的item,说明它是顶级节点 if (rindValues.size() > 1) {
topNodes.add(pcode); return true;
} else {
// 这个pcode有对应的item,检查它的父节点
TaskRecordVo item = codeToItemMap.get(pcode);
if (item != null) {
String parentPcode = item.getPcode();
if (parentPcode == null || parentPcode.trim().isEmpty() ||
"T_B_1".equals(parentPcode)) {
topNodes.add(pcode);
}
} }
} }
} }
return false;
return topNodes;
} }
/** /**
* 创建节点结构 * 创建表格节点
*/
/**
* 创建节点结构
*/ */
private void createNodeStructure(Document doc, Element parentElement, String nodeCode, private void createTableNode(Document doc, Element parentElement, TaskRecordVo tableNode,
Map<String, TaskRecordVo> codeToItemMap, Map<String, List<TaskRecordVo>> childrenByParent, String parentPath) {
Map<String, List<TaskRecordVo>> pcodeToChildrenMap,
Set<String> processedNodes) { String code = tableNode.getCode();
String title = tableNode.getTitle();
String currentPath = buildPath(parentPath, title);
if (processedNodes.contains(nodeCode)) { logger.debug("创建表格节点: {} - {}", code, title);
return; // 防止循环
// 添加表格节点的注释
if (title != null && !title.trim().isEmpty()) {
String commentText = convertTitleToComment(title);
Comment comment = doc.createComment(commentText);
parentElement.appendChild(comment);
} }
processedNodes.add(nodeCode);
// 获取表格的所有子项
// 检查是否有子节点 List<TaskRecordVo> tableChildren = childrenByParent.getOrDefault(code, new ArrayList<>());
boolean hasChildren = pcodeToChildrenMap.containsKey(nodeCode);
// 按rind分组
if (hasChildren) { Map<Integer, List<TaskRecordVo>> rowsByRind = new TreeMap<>();
// 创建外层节点
Element outerElement = doc.createElement(nodeCode); for (TaskRecordVo child : tableChildren) {
parentElement.appendChild(outerElement); if (code.equals(child.getPcode())) {
Integer rind = getRindValue(child);
// 获取子节点并按rind分组 rowsByRind.computeIfAbsent(rind, k -> new ArrayList<>()).add(child);
List<TaskRecordVo> children = pcodeToChildrenMap.get(nodeCode);
Map<Integer, List<TaskRecordVo>> childrenByRind = groupByRind(children, nodeCode);
// 检查分组数量
if (childrenByRind.size() == 1) {
// 只有一个分组,直接将节点添加到outerElement
for (Map.Entry<Integer, List<TaskRecordVo>> rindEntry : childrenByRind.entrySet()) {
List<TaskRecordVo> rindGroup = rindEntry.getValue();
// 处理这个分组中的每个子项
for (TaskRecordVo child : rindGroup) {
// 检查这个子项是否本身还有子项
String childCode = child.getCode();
if (pcodeToChildrenMap.containsKey(childCode)) {
// 这个子项还有子项,递归处理
createNodeStructure(doc, outerElement, childCode,
codeToItemMap, pcodeToChildrenMap, processedNodes);
} else {
// 这个子项是叶子节点,直接添加到outerElement
addDataItem(doc, outerElement, child);
}
}
}
} else {
// 多个分组,创建内层节点
for (Map.Entry<Integer, List<TaskRecordVo>> rindEntry : childrenByRind.entrySet()) {
List<TaskRecordVo> rindGroup = rindEntry.getValue();
// 创建内层节点
Element innerElement = doc.createElement(nodeCode);
outerElement.appendChild(innerElement);
// 处理这个分组中的每个子项
for (TaskRecordVo child : rindGroup) {
// 检查这个子项是否本身还有子项
String childCode = child.getCode();
if (pcodeToChildrenMap.containsKey(childCode)) {
// 这个子项还有子项,递归处理
createNodeStructure(doc, innerElement, childCode,
codeToItemMap, pcodeToChildrenMap, processedNodes);
} else {
// 这个子项是叶子节点,直接添加
addDataItem(doc, innerElement, child);
}
}
}
} }
} else { }
// 没有子节点,可能是数据项或空节点
TaskRecordVo item = codeToItemMap.get(nodeCode); logger.debug("表格节点{}有{}行数据", code, rowsByRind.size());
if (item != null) {
addDataItem(doc, parentElement, item); // 为每一行创建独立的元素
for (Map.Entry<Integer, List<TaskRecordVo>> rowEntry : rowsByRind.entrySet()) {
List<TaskRecordVo> rowData = rowEntry.getValue();
// 创建行元素(使用相同的code)
Element rowElement = doc.createElement(code);
parentElement.appendChild(rowElement);
// 按itemid排序
rowData.sort(Comparator.comparingInt(TaskRecordVo::getItemid));
// 添加这一行的所有字段
for (TaskRecordVo field : rowData) {
addDataField(doc, rowElement, field, currentPath);
} }
} }
} }
/** /**
* 按rind分组 * 创建普通节点
*/ */
private Map<Integer, List<TaskRecordVo>> groupByRind(List<TaskRecordVo> items, String pcode) { private void createNormalNode(Document doc, Element parentElement, TaskRecordVo node,
Map<Integer, List<TaskRecordVo>> groups = new HashMap<>(); Map<String, List<TaskRecordVo>> childrenByParent,
Map<String, TaskRecordVo> allItems, String currentPath) {
for (TaskRecordVo item : items) { String code = node.getCode();
if (pcode.equals(item.getPcode())) { String title = node.getTitle();
int rind = getIntValue(item, DEFAULT_RIND_VALUE);
groups.computeIfAbsent(rind, k -> new ArrayList<>()).add(item); // 添加节点注释
} if (title != null && !title.trim().isEmpty()) {
String commentText = convertTitleToComment(title);
Comment comment = doc.createComment(commentText);
parentElement.appendChild(comment);
} }
return groups; // 创建节点元素
Element element = doc.createElement(code);
parentElement.appendChild(element);
// 获取子项
List<TaskRecordVo> children = childrenByParent.getOrDefault(code, new ArrayList<>());
// 按itemid排序
children.sort(Comparator.comparingInt(TaskRecordVo::getItemid));
// 处理每个子项
for (TaskRecordVo child : children) {
if (code.equals(child.getPcode())) {
processItem(doc, element, child, childrenByParent, allItems, currentPath);
}
}
} }
/** /**
* 添加数据项(带注释) * 添加数据字段
*/ */
private void addDataItem(Document doc, Element parentElement, TaskRecordVo item) { private void addDataField(Document doc, Element parentElement, TaskRecordVo field, String parentPath) {
String title = item.getTitle(); String code = field.getCode();
String code = item.getCode(); String title = field.getTitle();
String content = item.getContent(); String content = field.getContent();
// 添加注释 // 创建注释
if (title != null && !title.trim().isEmpty()) { if (title != null && !title.trim().isEmpty() && !isSystemField(code)) {
Comment comment = doc.createComment(title); String fullComment = buildFullComment(title, parentPath);
Comment comment = doc.createComment(fullComment);
parentElement.appendChild(comment); parentElement.appendChild(comment);
} }
// 创建元素 // 创建元素
Element element = doc.createElement(code); Element element = doc.createElement(code);
element.setTextContent(content != null ? content : ""); if (content != null && !content.trim().isEmpty()) {
element.setTextContent(content);
}
parentElement.appendChild(element); parentElement.appendChild(element);
} }
/**
* 构建路径
*/
private String buildPath(String parentPath, String currentTitle) {
if (currentTitle == null || currentTitle.trim().isEmpty()) {
return parentPath;
}
String converted = convertTitleToComment(currentTitle);
if (parentPath == null || parentPath.isEmpty()) {
return converted;
} else {
return parentPath + "-" + converted;
}
}
/**
* 构建完整注释
*/
private String buildFullComment(String fieldTitle, String parentPath) {
if (fieldTitle == null || fieldTitle.trim().isEmpty()) {
return parentPath;
}
if (parentPath == null || parentPath.isEmpty()) {
return fieldTitle;
}
return parentPath + "-" + fieldTitle;
}
/**
* 转换title为注释格式
*/
private String convertTitleToComment(String title) {
if (title == null) {
return "";
}
return title.replace("/", "-");
}
/**
* 获取rind值
*/
private Integer getRindValue(TaskRecordVo item) {
try {
if (item.getRind() == null) {
return 1;
}
if (item.getRind() instanceof Integer) {
return (Integer) item.getRind();
}
return Integer.parseInt(item.getRind().toString());
} catch (Exception e) {
return 1;
}
}
/**
* 判断是否为系统字段
*/
private boolean isSystemField(String code) {
return code.startsWith("FILLIN_") ||
code.equals("TELEPHONE") ||
code.equals("FILLE_USER") ||
code.equals("RES_PERSON") ||
code.equals("jiaoyanwei") ||
code.equals("isempty") ||
code.equals("itTitle") ||
code.equals("itVersion");
}
/** /**
* 创建固定信息节点 * 创建固定信息节点
*/ */
...@@ -282,25 +343,32 @@ public class CreateXmlFile { ...@@ -282,25 +343,32 @@ public class CreateXmlFile {
try { try {
String respDepart = this.baosongTask.getRespDepart() != null ? String respDepart = this.baosongTask.getRespDepart() != null ?
this.baosongTask.getRespDepart() : ""; this.baosongTask.getRespDepart() : "";
String enterDate = this.baosongTask.getEnterDate();//formatDate(this.baosongTask.getEnterDate(), DATE_FORMAT_PATTERN);
Date filleDate = this.baosongTask.getEndDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String fillDate = DateUtils.date2Str(filleDate,sdf);
String enterTel = this.baosongTask.getEnterTel() != null ? String enterTel = this.baosongTask.getEnterTel() != null ?
this.baosongTask.getEnterTel() : ""; this.baosongTask.getEnterTel() : "";
String respUser = this.baosongTask.getRespUser() != null ? String respUser = this.baosongTask.getRespUser() != null ?
this.baosongTask.getRespUser() : ""; this.baosongTask.getRespUser() : "";
String version = this.baosongTpl.getVersion() != null ? String version = this.baosongTpl.getVersion() != null ?
this.baosongTpl.getVersion() : ""; this.baosongTpl.getVersion() : "";
String fillUser = this.baosongTask.getFillUser();
addFixedNode(doc, parentElement, "FILLIN_DEPT", respDepart, "填报部门"); // 添加固定节点(不带注释)
addFixedNode(doc, parentElement, "FILLIN_DATE", enterDate, "填报日期"); addFixedNodeNoComment(doc, parentElement, "FILLIN_DEPT", respDepart);
addFixedNode(doc, parentElement, "FILLIN_PERSON", this.fillUserNames, "填报人"); addFixedNodeNoComment(doc, parentElement, "FILLIN_DATE", fillDate);
addFixedNode(doc, parentElement, "TELEPHONE", enterTel, "联系电话"); addFixedNodeNoComment(doc, parentElement, "FILLIN_PERSON", fillUser);
addFixedNode(doc, parentElement, "RES_PERSON", respUser, "负责人"); addFixedNodeNoComment(doc, parentElement, "TELEPHONE", enterTel);
addFixedNode(doc, parentElement, "jiaoyanwei", "0", "校验位"); addFixedNodeNoComment(doc, parentElement, "RES_PERSON", respUser);
addFixedNode(doc, parentElement, "isempty", "yes", "是否为空"); addFixedNodeNoComment(doc, parentElement, "jiaoyanwei", "1");
addFixedNodeNoComment(doc, parentElement, "isempty", "0");
String title = this.baosongTpl.getCode() + " " + this.baosongTpl.getNm(); String title = "T-B-1 信息科技治理情况表";
addFixedNode(doc, parentElement, "itTitle", title, "模板标题"); addFixedNodeNoComment(doc, parentElement, "itTitle", title);
addFixedNode(doc, parentElement, "itVersion", version, "模板版本"); addFixedNodeNoComment(doc, parentElement, "itVersion", version);
} catch (Exception e) { } catch (Exception e) {
logger.error("创建固定信息节点时发生错误", e); logger.error("创建固定信息节点时发生错误", e);
...@@ -308,15 +376,10 @@ public class CreateXmlFile { ...@@ -308,15 +376,10 @@ public class CreateXmlFile {
} }
/** /**
* 添加固定节点 * 添加固定节点(不带注释)
*/ */
private void addFixedNode(Document doc, Element parentElement, private void addFixedNodeNoComment(Document doc, Element parentElement,
String tagName, String textContent, String comment) { String tagName, String textContent) {
if (comment != null && !comment.trim().isEmpty()) {
Comment commentNode = doc.createComment(comment);
parentElement.appendChild(commentNode);
}
Element element = doc.createElement(tagName); Element element = doc.createElement(tagName);
element.setTextContent(textContent != null ? textContent : ""); element.setTextContent(textContent != null ? textContent : "");
parentElement.appendChild(element); parentElement.appendChild(element);
...@@ -339,8 +402,8 @@ public class CreateXmlFile { ...@@ -339,8 +402,8 @@ public class CreateXmlFile {
Transformer transformer = transformerFactory.newTransformer(); Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, DEFAULT_ENCODING); transformer.setOutputProperty(OutputKeys.ENCODING, DEFAULT_ENCODING);
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
transformer.setOutputProperty(INDENT_AMOUNT_KEY, "4"); transformer.setOutputProperty(INDENT_AMOUNT_KEY, "2");
DOMSource source = new DOMSource(doc); DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(file); StreamResult result = new StreamResult(file);
...@@ -354,46 +417,4 @@ public class CreateXmlFile { ...@@ -354,46 +417,4 @@ public class CreateXmlFile {
return false; return false;
} }
} }
/**
* 规范化元素名称
*/
private String normalizeElementName(String name) {
return name != null ? name.replace("-", "_") : "";
}
/**
* 格式化日期
*/
private String formatDate(Date date, String pattern) {
if (date == null) {
return "";
}
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return DateUtils.date2Str(date, sdf);
} catch (Exception e) {
logger.warn("日期格式化失败", e);
return "";
}
}
/**
* 获取整数值
*/
private int getIntValue(TaskRecordVo taskRecordVo, int defaultValue) {
try {
Object value = taskRecordVo.getRind();
if (value == null) {
return defaultValue;
}
if (value instanceof Number) {
return ((Number) value).intValue();
}
return Integer.parseInt(value.toString());
} catch (NumberFormatException e) {
logger.warn("解析rind值失败,使用默认值: {}", defaultValue);
return defaultValue;
}
}
} }
\ No newline at end of file
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/** /**
* @Description: 报送数据校验 * @Description: 报送数据校验
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import java.io.Serializable;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/** /**
* @Description: 任务表 * @Description: 任务表
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;
import java.io.UnsupportedEncodingException; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/** /**
* @Description: 任务表 * @Description: 任务表
...@@ -48,12 +45,11 @@ public class BaosongTask implements Serializable { ...@@ -48,12 +45,11 @@ public class BaosongTask implements Serializable {
private java.lang.Integer sta; private java.lang.Integer sta;
/**报表类型*/ /**报表类型*/
@Excel(name = "报表类型", width = 15) @Excel(name = "报表类型", width = 15)
private java.lang.Integer tp; private java.lang.Integer tp;
/**填报角色*/
@Excel(name = "填报角色", width = 15)
private java.lang.String enterRole; /**填报人*/
@Excel(name = "填报人", width = 15)
private java.lang.String fillUser;
/**联系电话*/ /**联系电话*/
@Excel(name = "联系电话", width = 15) @Excel(name = "联系电话", width = 15)
private java.lang.String enterTel; private java.lang.String enterTel;
...@@ -64,7 +60,7 @@ public class BaosongTask implements Serializable { ...@@ -64,7 +60,7 @@ public class BaosongTask implements Serializable {
/**责任人*/ /**责任人*/
@Excel(name = "责任人", width = 15) @Excel(name = "责任人", width = 15)
@Dict(dictTable ="sys_user",dicText = "realname",dicCode = "id") //@Dict(dictTable ="sys_user",dicText = "realname",dicCode = "id")
private java.lang.String respUser; private java.lang.String respUser;
/**责任部门*/ /**责任部门*/
...@@ -81,13 +77,13 @@ public class BaosongTask implements Serializable { ...@@ -81,13 +77,13 @@ public class BaosongTask implements Serializable {
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date endDate; private java.util.Date endDate;
/**创建时间*/
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date createTime; private java.util.Date createTime;
/**创建人*/ /**创建人*/
private java.lang.String createBy; private java.lang.String createBy;
@TableField(exist = false) @TableField(exist = false)
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;
import java.io.UnsupportedEncodingException; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.List;
/** /**
* @Description: 任务分配 * @Description: 任务分配
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;
import java.io.UnsupportedEncodingException; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Map;
/** /**
* @Description: 填报记录 * @Description: 填报记录
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/** /**
* @Description: 内容检查 * @Description: 内容检查
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/** /**
* @Description: 报送模板 * @Description: 报送模板
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType;
import java.io.UnsupportedEncodingException; import com.baomidou.mybatisplus.annotation.TableField;
import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
import java.util.List;
/** /**
* @Description: 报送模板项 * @Description: 报送模板项
......
package org.jeecg.modules.stm.baosong.entity; package org.jeecg.modules.stm.baosong.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/** /**
* @Description: 模板项目设置 * @Description: 模板项目设置
......
...@@ -17,18 +17,16 @@ ...@@ -17,18 +17,16 @@
</select> </select>
<select id="queryTaskRecordForXml" resultType="org.jeecg.modules.stm.baosong.entity.TaskRecordVo"> <select id="queryTaskRecordForXml" resultType="org.jeecg.modules.stm.baosong.entity.TaskRecordVo">
SELECT A.content,A.taskid,A.itemid,A.rind, B.tplid,B.code,B.pcode,B.title SELECT B.content,B.taskid,A.id as itemid,B.rind, A.tplid,A.code,A.pcode,A.title
FROM baosong_task_record A FROM baosong_tpl_item A
RIGHT JOIN baosong_tpl_item B ON A.itemid = B.id LEFT JOIN baosong_task_record B ON A.id=B.itemid AND B.taskid=#{query.taskid}
<where> <where>
<if test="query.taskid != null">
AND A.taskid = #{query.taskid}
</if>
<if test="query.tplid != null"> <if test="query.tplid != null">
AND B.tplid = #{query.tplid} AND A.tplid = #{query.tplid}
</if> </if>
</where> </where>
ORDER BY B.id,B.pcode,B.code ORDER BY A.id,A.pcode,A.code
</select> </select>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论