!85 feat(excel): Excel导入校验和翻译支持逗号分隔多值

* feat(excel): Excel导入校验和翻译支持逗号分隔多值
* fix(xispeak): 移除完成状态Excel导入导出注解,避免导入时覆盖系统自动维护的状态
* fix(xispeak): 修复密级Excel列名typo 非秘→非密
* fix(xispeak,partymatter,dq): 移除实体类 bpmStatus 字段默认值,改为 service 层设置,避免 Q…
* fix(xispeak,partymatter,dq): 实体类 bpmStatus 默认值设为"未开始"
This commit is contained in:
wsm
2026-07-22 07:13:07 +00:00
parent 111c0e2c8d
commit 28d10391a7
5 changed files with 42 additions and 4 deletions
@@ -220,6 +220,24 @@ public final class ExcelAnnotationUtils {
return true;
}
}
// 逗号分隔多值:逐个验证每个部分是否在字典范围内
if (value.contains(",")) {
String[] parts = value.split(",");
for (String part : parts) {
String trimmed = part.trim();
if (trimmed.isEmpty()) continue;
boolean found = false;
for (String s : replace) {
String[] arr = s.split(",");
if (arr.length >= 2 && arr[0].equals(trimmed)) {
found = true;
break;
}
}
if (!found) return false;
}
return true;
}
return false;
}
@@ -231,6 +249,17 @@ public final class ExcelAnnotationUtils {
String resolved = displayToCode.getOrDefault(value, value);
if (type == String.class) {
// 逗号分隔多值:逐个翻译后再拼回(如 "部门A,部门B" → "id_a,id_b"
if (resolved.equals(value) && value.contains(",")) {
String[] parts = value.split(",");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
if (i > 0) sb.append(",");
String trimmed = parts[i].trim();
sb.append(displayToCode.getOrDefault(trimmed, trimmed));
}
resolved = sb.toString();
}
field.set(obj, resolved);
return;
}
@@ -89,8 +89,8 @@ public class BgXiSpeak implements Serializable {
@Schema(description = "学习传达研究部署情况")
private java.lang.String status;
/**密级*/
@Excel(name = "密级(请填入非/秘密/机密)-必填", width = 15, dicCode = "secret_level")
@ExcelColumn(name = "密级(请填入非/秘密/机密)-必填", width = 15, dicCode = "secret_level")
@Excel(name = "密级(请填入非/秘密/机密)-必填", width = 15, dicCode = "secret_level")
@ExcelColumn(name = "密级(请填入非/秘密/机密)-必填", width = 15, dicCode = "secret_level")
@Dict(dicCode = "secret_level")
@Schema(description = "密级")
@NotBlank(message = "不能为空")
@@ -154,8 +154,8 @@ public class BgXiSpeak implements Serializable {
@Schema(description = "拖期风险应对措施")
private java.lang.String delayRiskMitigation;
/**完成状态(0推进中,1已完成)*/
@Excel(name = "完成状态(请填入推进中/已完成)-必填", width = 15, dicCode = "db_status")
@ExcelColumn(name = "完成状态(请填入推进中/已完成)-必填", width = 15, dicCode = "db_status")
// @Excel(name = "完成状态(请填入推进中/已完成)-必填", width = 15, dicCode = "db_status")
// @ExcelColumn(name = "完成状态(请填入推进中/已完成)-必填", width = 15, dicCode = "db_status")
@Schema(description = "完成状态(0推进中,1已完成)")
@Dict( dicCode = "db_status")
private java.lang.Integer completionStatus;
@@ -52,6 +52,9 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
public void addBgXiSpeak(BgXiSpeak bgXiSpeak) {
//新增时设置hasChild为0
bgXiSpeak.setHasChild(IBgXiSpeakService.NOCHILD);
if (bgXiSpeak.getBpmStatus() == null) {
bgXiSpeak.setBpmStatus(1);
}
if(oConvertUtils.isEmpty(bgXiSpeak.getPid())){
bgXiSpeak.setPid(IBgXiSpeakService.ROOT_PID_VALUE);
}else{
@@ -150,6 +150,9 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
if (oConvertUtils.isEmpty(bgPartymatter.getDelFlag())) {
bgPartymatter.setDelFlag(BgPartymatterConstant.DelFlag.NORMAL);
}
if (bgPartymatter.getBpmStatus() == null) {
bgPartymatter.setBpmStatus("1");
}
fillDefaultMeetingTypeForCreate(bgPartymatter);
fillGeneratedNumber(bgPartymatter);
bgPartymatterService.save(bgPartymatter);
@@ -39,6 +39,9 @@ public class DqInspectTaskServiceImpl extends ServiceImpl<DqInspectTaskMapper, D
@Override
@Transactional(rollbackFor = Exception.class)
public void saveMain(DqInspectTask dqInspectTask, List<DqInspectProgress> dqInspectProgressList) {
if (dqInspectTask.getBpmStatus() == null) {
dqInspectTask.setBpmStatus("1");
}
validateProblemId(dqInspectTask);
dqInspectTaskMapper.insert(dqInspectTask);
if(dqInspectProgressList!=null && dqInspectProgressList.size()>0) {