|
|
|
@ -2586,48 +2586,134 @@ public class CoDelServiceImpl implements CoDelService { |
|
|
|
return coDelMapper.getCustomerTemplateList(params); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新或创建客户模板 |
|
|
|
* |
|
|
|
* <p><b>逻辑说明:</b></p> |
|
|
|
* <ul> |
|
|
|
* <li>originalTemplateName为空:表示新增模板或更新同名模板 |
|
|
|
* <ul> |
|
|
|
* <li>如果templateName已存在 → 更新该模板</li> |
|
|
|
* <li>如果templateName不存在 → 创建新模板</li> |
|
|
|
* </ul> |
|
|
|
* </li> |
|
|
|
* <li>originalTemplateName不为空:表示基于原模板修改 |
|
|
|
* <ul> |
|
|
|
* <li>如果originalTemplateName != templateName → 另存为新模板</li> |
|
|
|
* <li>如果originalTemplateName == templateName → 更新原模板</li> |
|
|
|
* </ul> |
|
|
|
* </li> |
|
|
|
* </ul> |
|
|
|
* |
|
|
|
* @param params 包含模板信息的Map |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void updateCustomerTemplate(Map<String, Object> 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<String, Object> targetTemplate = null; |
|
|
|
Map<String, Object> 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<String, Object> originalTemplate = coDelMapper.getCustomerTemplateByName(originalTemplateName); |
|
|
|
/** |
|
|
|
* 创建新模板 |
|
|
|
* |
|
|
|
* @param params 模板参数 |
|
|
|
* @param customerName 客户名称 |
|
|
|
*/ |
|
|
|
private void createNewTemplate(Map<String, Object> 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<String, Object> params, Map<String, Object> 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); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|