diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java
index 6ba7d4e8..ba8fac09 100644
--- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java
+++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java
@@ -2586,48 +2586,134 @@ public class CoDelServiceImpl implements CoDelService {
return coDelMapper.getCustomerTemplateList(params);
}
+ /**
+ * 更新或创建客户模板
+ *
+ *
逻辑说明:
+ *
+ * - originalTemplateName为空:表示新增模板或更新同名模板
+ *
+ * - 如果templateName已存在 → 更新该模板
+ * - 如果templateName不存在 → 创建新模板
+ *
+ *
+ * - originalTemplateName不为空:表示基于原模板修改
+ *
+ * - 如果originalTemplateName != templateName → 另存为新模板
+ * - 如果originalTemplateName == templateName → 更新原模板
+ *
+ *
+ *
+ *
+ * @param params 包含模板信息的Map
+ */
@Override
public void updateCustomerTemplate(Map params) {
String templateName = (String) params.get("templateName");
String originalTemplateName = (String) params.get("originalTemplateName");
String customerName = (String) params.get("ccusname");
- // 如果没有传入原始模板名称,则认为是更新当前模板
- if (originalTemplateName == null || originalTemplateName.trim().isEmpty()) {
- originalTemplateName = templateName;
+ // 判断是否传入了原始模板名称
+ boolean hasOriginalTemplate = originalTemplateName != null && !originalTemplateName.trim().isEmpty();
+
+ Map targetTemplate = null;
+ Map originalTemplate = null;
+
+ try {
+ if (hasOriginalTemplate) {
+ // 场景1:基于原模板修改(来自双击选择模板后的操作)
+ // 获取原始模板信息
+ originalTemplate = coDelMapper.getCustomerTemplateByName(originalTemplateName);
+
+ // 判断模板名称是否发生变化
+ boolean nameChanged = !templateName.equals(originalTemplateName);
+
+ if (nameChanged) {
+ // 模板名称变化,另存为新模板
+ // 检查新模板名是否已存在
+ targetTemplate = coDelMapper.getCustomerTemplateByName(templateName);
+ if (targetTemplate == null) {
+ // 新模板名不存在,创建新模板
+ createNewTemplate(params, customerName);
+ } else {
+ // 新模板名已存在,更新该模板
+ updateExistingTemplate(params, targetTemplate);
+ }
+ } else {
+ // 模板名称未变化,更新原模板
+ if (originalTemplate != null) {
+ updateExistingTemplate(params, originalTemplate);
+ } else {
+ // 原模板不存在(异常情况),创建新模板
+ log.warn("原模板[{}]不存在,将创建新模板", originalTemplateName);
+ createNewTemplate(params, customerName);
+ }
+ }
+ } else {
+ // 场景2:直接输入模板名(来自手动输入模板名的操作)
+ // 查询该模板名是否已存在
+ targetTemplate = coDelMapper.getCustomerTemplateByName(templateName);
+
+ if (targetTemplate == null) {
+ // 模板不存在,创建新模板
+ createNewTemplate(params, customerName);
+ } else {
+ // 模板已存在,更新该模板
+ updateExistingTemplate(params, targetTemplate);
+ }
+ }
+ } catch (Exception e) {
+ log.error("更新客户模板失败: templateName={}, originalTemplateName={}",
+ templateName, originalTemplateName, e);
+ throw new RuntimeException("更新客户模板失败: " + e.getMessage());
}
+ }
- // 获取原始模板信息
- Map originalTemplate = coDelMapper.getCustomerTemplateByName(originalTemplateName);
+ /**
+ * 创建新模板
+ *
+ * @param params 模板参数
+ * @param customerName 客户名称
+ */
+ private void createNewTemplate(Map params, String customerName) {
+ // 1. 根据客户名称获取客户编码
+ String customerCode = null;
+ if (customerName != null && !customerName.trim().isEmpty()) {
+ customerCode = coDelMapper.getCustomerCodeByName(customerName);
+ }
+ params.put("ccuscode", customerCode != null ? customerCode : "");
- // 判断是否为纯新增场景
- boolean isNewTemplate = originalTemplate == null;
+ // 2. 生成新的template_no
+ String maxTemplateNo = coDelMapper.getMaxTemplateNo();
+ String newTemplateNo = generateNextTemplateNo(maxTemplateNo);
+ params.put("template_no", newTemplateNo);
- // 判断模板名称是否发生变化
- boolean nameChanged = !templateName.equals(originalTemplateName);
+ // 3. 插入新模板
+ coDelMapper.insertCustomerTemplate(params);
- if (isNewTemplate || nameChanged) {
- // 纯新增或模板名称变化,创建新模板
- // 1. 根据客户名称获取客户编码
- String customerCode = null;
- if (customerName != null && !customerName.trim().isEmpty()) {
- customerCode = coDelMapper.getCustomerCodeByName(customerName);
- }
- params.put("ccuscode", customerCode != null ? customerCode : "");
+ log.info("创建新模板成功: templateName={}, template_no={}",
+ params.get("templateName"), newTemplateNo);
+ }
+
+ /**
+ * 更新已存在的模板
+ *
+ * @param params 模板参数
+ * @param existingTemplate 已存在的模板信息
+ */
+ private void updateExistingTemplate(Map params, Map existingTemplate) {
+ // 保留原有的template_no和ccuscode
+ String existingTemplateNo = (String) existingTemplate.get("template_no");
+ String existingCcuscode = (String) existingTemplate.get("ccuscode");
- // 2. 生成新的template_no
- String maxTemplateNo = coDelMapper.getMaxTemplateNo();
- String newTemplateNo = generateNextTemplateNo(maxTemplateNo);
+ params.put("template_no", existingTemplateNo);
+ params.put("ccuscode", existingCcuscode != null ? existingCcuscode : "");
- // 3. 设置新的template_no
- params.put("template_no", newTemplateNo);
+ // 更新模板
+ coDelMapper.updateCustomerTemplate(params);
- // 4. 插入新模板
- coDelMapper.insertCustomerTemplate(params);
- } else {
- // 模板名称未变化,直接更新
- coDelMapper.updateCustomerTemplate(params);
- }
+ log.info("更新模板成功: templateName={}, template_no={}",
+ params.get("templateName"), existingTemplateNo);
}
/**