|
@@ -8,6 +8,7 @@ import com.fs.common.core.domain.R;
|
|
|
import com.fs.common.utils.DateUtils;
|
|
import com.fs.common.utils.DateUtils;
|
|
|
import com.fs.common.utils.spring.SpringUtils;
|
|
import com.fs.common.utils.spring.SpringUtils;
|
|
|
import com.fs.company.domain.CompanyWorkflowLobster;
|
|
import com.fs.company.domain.CompanyWorkflowLobster;
|
|
|
|
|
+import com.fs.company.domain.CompanyTagTemplateBinding;
|
|
|
import com.fs.company.domain.CompanyWorkflowLobsterEdge;
|
|
import com.fs.company.domain.CompanyWorkflowLobsterEdge;
|
|
|
import com.fs.company.domain.CompanyWorkflowLobsterNode;
|
|
import com.fs.company.domain.CompanyWorkflowLobsterNode;
|
|
|
import com.fs.company.domain.CompanyWorkflowLobsterRecord;
|
|
import com.fs.company.domain.CompanyWorkflowLobsterRecord;
|
|
@@ -17,6 +18,7 @@ import com.fs.company.mapper.CompanyWorkflowLobsterMapper;
|
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterNodeMapper;
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterNodeMapper;
|
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterRecordMapper;
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterRecordMapper;
|
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterVariableMapper;
|
|
import com.fs.company.mapper.CompanyWorkflowLobsterVariableMapper;
|
|
|
|
|
+import com.fs.company.mapper.CompanyTagTemplateBindingMapper;
|
|
|
import com.fs.company.param.CompanyWorkflowLobsterCanvasParam;
|
|
import com.fs.company.param.CompanyWorkflowLobsterCanvasParam;
|
|
|
import com.fs.company.param.CompanyWorkflowLobsterConfirmParam;
|
|
import com.fs.company.param.CompanyWorkflowLobsterConfirmParam;
|
|
|
import com.fs.company.param.CompanyWorkflowLobsterEdgeParam;
|
|
import com.fs.company.param.CompanyWorkflowLobsterEdgeParam;
|
|
@@ -26,18 +28,24 @@ import com.fs.company.param.CompanyWorkflowLobsterVariableParam;
|
|
|
import com.fs.company.service.ICompanyWorkflowLobsterService;
|
|
import com.fs.company.service.ICompanyWorkflowLobsterService;
|
|
|
import com.fs.fastgptApi.param.ChatParam;
|
|
import com.fs.fastgptApi.param.ChatParam;
|
|
|
import com.fs.fastgptApi.service.ChatService;
|
|
import com.fs.fastgptApi.service.ChatService;
|
|
|
|
|
+import com.fs.wxwork.dto.WxWorkSendTextMsgDTO;
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
|
|
|
|
|
+import java.sql.Time;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
+
|
|
|
@Service
|
|
@Service
|
|
|
public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobsterService {
|
|
public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobsterService {
|
|
|
|
|
|
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(CompanyWorkflowLobsterServiceImpl.class);
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private CompanyWorkflowLobsterMapper lobsterMapper;
|
|
private CompanyWorkflowLobsterMapper lobsterMapper;
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -48,6 +56,8 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
private CompanyWorkflowLobsterRecordMapper recordMapper;
|
|
private CompanyWorkflowLobsterRecordMapper recordMapper;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private CompanyWorkflowLobsterEdgeMapper edgeMapper;
|
|
private CompanyWorkflowLobsterEdgeMapper edgeMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CompanyTagTemplateBindingMapper tagBindingMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<CompanyWorkflowLobster> listTemplate(Long companyId, Integer page, Integer size) {
|
|
public List<CompanyWorkflowLobster> listTemplate(Long companyId, Integer page, Integer size) {
|
|
@@ -81,12 +91,13 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
record.setDelFlag(0);
|
|
record.setDelFlag(0);
|
|
|
String requestStr = "{ \"userContent\": \""+param.getRequirement()+"\", \"aiContent\": null }";
|
|
String requestStr = "{ \"userContent\": \""+param.getRequirement()+"\", \"aiContent\": null }";
|
|
|
R r = callAiService(requestStr, l, LOBSTER_KEY);
|
|
R r = callAiService(requestStr, l, LOBSTER_KEY);
|
|
|
|
|
+ log.info("流程图生成成功: {}", param.getRequirement());
|
|
|
// System.out.println(r);
|
|
// System.out.println(r);
|
|
|
record.setResultJson(buildResultJsonFromAi(r, param.getRequirement()));
|
|
record.setResultJson(buildResultJsonFromAi(r, param.getRequirement()));
|
|
|
recordMapper.insertRecord(record);
|
|
recordMapper.insertRecord(record);
|
|
|
return recordNo;
|
|
return recordNo;
|
|
|
}
|
|
}
|
|
|
- private static R callAiService(String requestParam, Long logId, String appKey) {
|
|
|
|
|
|
|
+ public static R callAiService(String requestParam, Long logId, String appKey) {
|
|
|
try {
|
|
try {
|
|
|
ChatParam param = new ChatParam();
|
|
ChatParam param = new ChatParam();
|
|
|
param.setChatId(logId.toString());
|
|
param.setChatId(logId.toString());
|
|
@@ -257,7 +268,7 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("status", 3);
|
|
|
|
|
|
|
+ map.put("status", template.getStatus());
|
|
|
map.put("errorMsg", null);
|
|
map.put("errorMsg", null);
|
|
|
map.put("templateId", template.getId());
|
|
map.put("templateId", template.getId());
|
|
|
map.put("templateCode", template.getTemplateCode());
|
|
map.put("templateCode", template.getTemplateCode());
|
|
@@ -281,9 +292,9 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
variableMap("follow_date", "跟进日期", "date", "manual", 0, "计划跟进时间")
|
|
variableMap("follow_date", "跟进日期", "date", "manual", 0, "计划跟进时间")
|
|
|
));
|
|
));
|
|
|
result.put("nodes", Arrays.asList(
|
|
result.put("nodes", Arrays.asList(
|
|
|
- nodeMap("START", "开始节点", 1, 1, "MSG_1", "", "", "{}"),
|
|
|
|
|
- nodeMap("MSG_1", "消息节点", 2, 2, "END", "生成失败,请重新编写提示词", "", "{}"),
|
|
|
|
|
- nodeMap("END", "结束节点", 5, 3, "", "", "", "{}")
|
|
|
|
|
|
|
+ nodeMap("START", "开始节点", 1, 1, "MSG_1", "", "", "{}", null),
|
|
|
|
|
+ nodeMap("MSG_1", "消息节点", 2, 2, "END", "生成失败,请重新编写提示词", "", "{}", null),
|
|
|
|
|
+ nodeMap("END", "结束节点", 5, 3, "", "", "", "{}", null)
|
|
|
));
|
|
));
|
|
|
// 默认连线:START -> MSG_1 -> END
|
|
// 默认连线:START -> MSG_1 -> END
|
|
|
result.put("edges", Arrays.asList(
|
|
result.put("edges", Arrays.asList(
|
|
@@ -325,7 +336,7 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
List<Map<String, Object>> nodes = new ArrayList<>();
|
|
List<Map<String, Object>> nodes = new ArrayList<>();
|
|
|
- nodes.add(nodeMap("START", "开始节点", 1, 1, "", "", "", "{}"));
|
|
|
|
|
|
|
+ nodes.add(nodeMap("START", "开始节点", 1, 1, "", "", "", "{}", null));
|
|
|
|
|
|
|
|
int sortNo = 2;
|
|
int sortNo = 2;
|
|
|
List<String> dayCodes = new ArrayList<>();
|
|
List<String> dayCodes = new ArrayList<>();
|
|
@@ -343,7 +354,8 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
String nodeCode = "DAY_" + day;
|
|
String nodeCode = "DAY_" + day;
|
|
|
dayCodes.add(nodeCode);
|
|
dayCodes.add(nodeCode);
|
|
|
String template = itemMap.get("content") == null ? "" : String.valueOf(itemMap.get("content"));
|
|
String template = itemMap.get("content") == null ? "" : String.valueOf(itemMap.get("content"));
|
|
|
- nodes.add(nodeMap(nodeCode, "第" + day + "天", 2, sortNo++, "", template, "", "{}"));
|
|
|
|
|
|
|
+ Object sendTime = itemMap.get("sendTime");
|
|
|
|
|
+ nodes.add(nodeMap(nodeCode, "第" + day + "天", 2, sortNo++, "", template, "", "{}", sendTime));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (dayCodes.isEmpty()) {
|
|
if (dayCodes.isEmpty()) {
|
|
@@ -371,7 +383,7 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
edges.add(edgeMap(edgeKey, currentCode, nextCode, "right", "left", "", "#999", ""));
|
|
edges.add(edgeMap(edgeKey, currentCode, nextCode, "right", "left", "", "#999", ""));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- nodes.add(nodeMap("END", "结束节点", 5, sortNo, "", "", "", "{}"));
|
|
|
|
|
|
|
+ nodes.add(nodeMap("END", "结束节点", 5, sortNo, "", "", "", "{}", null));
|
|
|
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("templateName", "AI生成工作流方案");
|
|
result.put("templateName", "AI生成工作流方案");
|
|
@@ -400,7 +412,7 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
return m;
|
|
return m;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private Map<String, Object> nodeMap(String nodeCode, String nodeName, Integer nodeType, Integer sortNo, String nextNodeCode, String messageTemplate, String conditionExpr, String nodeConfig) {
|
|
|
|
|
|
|
+ private Map<String, Object> nodeMap(String nodeCode, String nodeName, Integer nodeType, Integer sortNo, String nextNodeCode, String messageTemplate, String conditionExpr, String nodeConfig, Object sendTime) {
|
|
|
Map<String, Object> m = new HashMap<>();
|
|
Map<String, Object> m = new HashMap<>();
|
|
|
m.put("nodeCode", nodeCode);
|
|
m.put("nodeCode", nodeCode);
|
|
|
m.put("nodeName", nodeName);
|
|
m.put("nodeName", nodeName);
|
|
@@ -410,6 +422,7 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
m.put("messageTemplate", messageTemplate);
|
|
m.put("messageTemplate", messageTemplate);
|
|
|
m.put("conditionExpr", conditionExpr);
|
|
m.put("conditionExpr", conditionExpr);
|
|
|
m.put("nodeConfig", nodeConfig);
|
|
m.put("nodeConfig", nodeConfig);
|
|
|
|
|
+ m.put("sendTime", sendTime);
|
|
|
return m;
|
|
return m;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -527,6 +540,12 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
return AjaxResult.error("模板不存在");
|
|
return AjaxResult.error("模板不存在");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 检查是否存在绑定的标签,有则提示先删除绑定
|
|
|
|
|
+ List<CompanyTagTemplateBinding> bindings = tagBindingMapper.selectBindingList(companyId, null, templateId);
|
|
|
|
|
+ if (bindings != null && !bindings.isEmpty()) {
|
|
|
|
|
+ return AjaxResult.error("已存在绑定标签,请先删除绑定关系");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 更新模板基本信息和画布数据
|
|
// 更新模板基本信息和画布数据
|
|
|
template.setTemplateName(param.getTemplateName());
|
|
template.setTemplateName(param.getTemplateName());
|
|
|
template.setIndustryType(param.getIndustryType());
|
|
template.setIndustryType(param.getIndustryType());
|
|
@@ -537,29 +556,51 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
template.setUpdateTime(DateUtils.getNowDate());
|
|
template.setUpdateTime(DateUtils.getNowDate());
|
|
|
lobsterMapper.updateById(template);
|
|
lobsterMapper.updateById(template);
|
|
|
|
|
|
|
|
- // 先逻辑删除旧数据
|
|
|
|
|
- variableMapper.deleteByWorkflowId(templateId);
|
|
|
|
|
- nodeMapper.deleteByWorkflowId(templateId);
|
|
|
|
|
- edgeMapper.deleteByWorkflowId(templateId);
|
|
|
|
|
|
|
+ // 查询旧数据
|
|
|
|
|
+ List<CompanyWorkflowLobsterVariable> oldVariables = variableMapper.selectByWorkflowId(templateId);
|
|
|
|
|
+ List<CompanyWorkflowLobsterNode> oldNodes = nodeMapper.selectByWorkflowId(templateId);
|
|
|
|
|
+ List<CompanyWorkflowLobsterEdge> oldEdges = edgeMapper.selectByWorkflowId(templateId);
|
|
|
|
|
|
|
|
- // 保存变量
|
|
|
|
|
|
|
+ Date now = DateUtils.getNowDate();
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 变量:有id更新 / 无id新增 / 旧的且不在新参数中的逻辑删除 ====================
|
|
|
|
|
+ Set<Long> newVarIds = new HashSet<>();
|
|
|
if (param.getVariables() != null && !param.getVariables().isEmpty()) {
|
|
if (param.getVariables() != null && !param.getVariables().isEmpty()) {
|
|
|
- variableMapper.batchInsert(param.getVariables().stream().map(v -> {
|
|
|
|
|
|
|
+ List<CompanyWorkflowLobsterVariable> insertVars = new ArrayList<>();
|
|
|
|
|
+ for (CompanyWorkflowLobsterVariable v : param.getVariables()) {
|
|
|
CompanyWorkflowLobsterVariable entity = new CompanyWorkflowLobsterVariable();
|
|
CompanyWorkflowLobsterVariable entity = new CompanyWorkflowLobsterVariable();
|
|
|
BeanUtils.copyProperties(v, entity);
|
|
BeanUtils.copyProperties(v, entity);
|
|
|
entity.setWorkflowId(templateId);
|
|
entity.setWorkflowId(templateId);
|
|
|
entity.setDelFlag(0);
|
|
entity.setDelFlag(0);
|
|
|
- entity.setCreateBy(userName);
|
|
|
|
|
- entity.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
entity.setUpdateBy(userName);
|
|
entity.setUpdateBy(userName);
|
|
|
- entity.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
- return entity;
|
|
|
|
|
- }).collect(Collectors.toList()));
|
|
|
|
|
|
|
+ entity.setUpdateTime(now);
|
|
|
|
|
+ if (v.getId() != null) {
|
|
|
|
|
+ entity.setId(v.getId());
|
|
|
|
|
+ variableMapper.updateById(entity);
|
|
|
|
|
+ newVarIds.add(v.getId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ entity.setCreateBy(userName);
|
|
|
|
|
+ entity.setCreateTime(now);
|
|
|
|
|
+ insertVars.add(entity);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!insertVars.isEmpty()) {
|
|
|
|
|
+ variableMapper.batchInsert(insertVars);
|
|
|
|
|
+ insertVars.forEach(v -> newVarIds.add(v.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 旧的且不在新参数中的变量 → 逻辑删除
|
|
|
|
|
+ for (CompanyWorkflowLobsterVariable old : oldVariables) {
|
|
|
|
|
+ if (!newVarIds.contains(old.getId())) {
|
|
|
|
|
+ variableMapper.deleteById(old.getId());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 保存节点(包含位置信息)
|
|
|
|
|
|
|
+ // ==================== 节点:有id更新 / 无id新增 / 旧的且不在新参数中的逻辑删除 ====================
|
|
|
|
|
+ Set<Long> newNodeIds = new HashSet<>();
|
|
|
if (param.getNodes() != null && !param.getNodes().isEmpty()) {
|
|
if (param.getNodes() != null && !param.getNodes().isEmpty()) {
|
|
|
- nodeMapper.batchInsert(param.getNodes().stream().map(n -> {
|
|
|
|
|
|
|
+ List<CompanyWorkflowLobsterNode> insertNodes = new ArrayList<>();
|
|
|
|
|
+ for (CompanyWorkflowLobsterNode n : param.getNodes()) {
|
|
|
CompanyWorkflowLobsterNode entity = new CompanyWorkflowLobsterNode();
|
|
CompanyWorkflowLobsterNode entity = new CompanyWorkflowLobsterNode();
|
|
|
BeanUtils.copyProperties(n, entity);
|
|
BeanUtils.copyProperties(n, entity);
|
|
|
entity.setWorkflowId(templateId);
|
|
entity.setWorkflowId(templateId);
|
|
@@ -567,17 +608,35 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
entity.setSortNo(0);
|
|
entity.setSortNo(0);
|
|
|
}
|
|
}
|
|
|
entity.setDelFlag(0);
|
|
entity.setDelFlag(0);
|
|
|
- entity.setCreateBy(userName);
|
|
|
|
|
- entity.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
entity.setUpdateBy(userName);
|
|
entity.setUpdateBy(userName);
|
|
|
- entity.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
- return entity;
|
|
|
|
|
- }).collect(Collectors.toList()));
|
|
|
|
|
|
|
+ entity.setUpdateTime(now);
|
|
|
|
|
+ if (n.getId() != null) {
|
|
|
|
|
+ entity.setId(n.getId());
|
|
|
|
|
+ nodeMapper.updateById(entity);
|
|
|
|
|
+ newNodeIds.add(n.getId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ entity.setCreateBy(userName);
|
|
|
|
|
+ entity.setCreateTime(now);
|
|
|
|
|
+ insertNodes.add(entity);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!insertNodes.isEmpty()) {
|
|
|
|
|
+ nodeMapper.batchInsert(insertNodes);
|
|
|
|
|
+ insertNodes.forEach(n -> newNodeIds.add(n.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 旧的且不在新参数中的节点 → 逻辑删除
|
|
|
|
|
+ for (CompanyWorkflowLobsterNode old : oldNodes) {
|
|
|
|
|
+ if (!newNodeIds.contains(old.getId())) {
|
|
|
|
|
+ nodeMapper.deleteById(old.getId());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 保存连线
|
|
|
|
|
|
|
+ // ==================== 连线:有id更新 / 无id新增 / 旧的且不在新参数中的物理删除 ====================
|
|
|
|
|
+ Set<Long> newEdgeIds = new HashSet<>();
|
|
|
if (param.getEdges() != null && !param.getEdges().isEmpty()) {
|
|
if (param.getEdges() != null && !param.getEdges().isEmpty()) {
|
|
|
- edgeMapper.batchInsert(param.getEdges().stream().map(e -> {
|
|
|
|
|
|
|
+ List<CompanyWorkflowLobsterEdge> insertEdges = new ArrayList<>();
|
|
|
|
|
+ for (CompanyWorkflowLobsterEdge e : param.getEdges()) {
|
|
|
CompanyWorkflowLobsterEdge entity = new CompanyWorkflowLobsterEdge();
|
|
CompanyWorkflowLobsterEdge entity = new CompanyWorkflowLobsterEdge();
|
|
|
BeanUtils.copyProperties(e, entity);
|
|
BeanUtils.copyProperties(e, entity);
|
|
|
entity.setWorkflowId(templateId);
|
|
entity.setWorkflowId(templateId);
|
|
@@ -585,14 +644,57 @@ public class CompanyWorkflowLobsterServiceImpl implements ICompanyWorkflowLobste
|
|
|
entity.setSortNo(0);
|
|
entity.setSortNo(0);
|
|
|
}
|
|
}
|
|
|
entity.setDelFlag(0);
|
|
entity.setDelFlag(0);
|
|
|
- entity.setCreateBy(userName);
|
|
|
|
|
- entity.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
entity.setUpdateBy(userName);
|
|
entity.setUpdateBy(userName);
|
|
|
- entity.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
- return entity;
|
|
|
|
|
- }).collect(Collectors.toList()));
|
|
|
|
|
|
|
+ entity.setUpdateTime(now);
|
|
|
|
|
+ if (e.getId() != null) {
|
|
|
|
|
+ entity.setId(e.getId());
|
|
|
|
|
+ edgeMapper.updateById(entity);
|
|
|
|
|
+ newEdgeIds.add(e.getId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ entity.setCreateBy(userName);
|
|
|
|
|
+ entity.setCreateTime(now);
|
|
|
|
|
+ insertEdges.add(entity);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!insertEdges.isEmpty()) {
|
|
|
|
|
+ edgeMapper.batchInsert(insertEdges);
|
|
|
|
|
+ insertEdges.forEach(e -> newEdgeIds.add(e.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 旧的且不在新参数中的连线 → 物理删除(避免唯一键冲突)
|
|
|
|
|
+ for (CompanyWorkflowLobsterEdge old : oldEdges) {
|
|
|
|
|
+ if (!newEdgeIds.contains(old.getId())) {
|
|
|
|
|
+ edgeMapper.deleteById(old.getId());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return AjaxResult.success("画布保存成功");
|
|
return AjaxResult.success("画布保存成功");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public AjaxResult updateTemplateStatus(Long companyId, String username, Long templateId, Integer status) {
|
|
|
|
|
+ CompanyWorkflowLobster template = lobsterMapper.selectById(templateId);
|
|
|
|
|
+ if (template == null || !Objects.equals(template.getCompanyId(), companyId) || Objects.equals(template.getDelFlag(), 1)) {
|
|
|
|
|
+ return AjaxResult.error("模板不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检查是否存在绑定的标签,有则提示先删除绑定
|
|
|
|
|
+ List<CompanyTagTemplateBinding> bindings = tagBindingMapper.selectBindingList(companyId, null, templateId);
|
|
|
|
|
+ if (bindings != null && !bindings.isEmpty()) {
|
|
|
|
|
+ return AjaxResult.error("已存在绑定标签,请先删除绑定关系");
|
|
|
|
|
+ }
|
|
|
|
|
+ template.setVersion(template.getVersion() == null ? 1 : template.getVersion() + 1);
|
|
|
|
|
+ template.setStatus(status);
|
|
|
|
|
+ template.setUpdateBy(username);
|
|
|
|
|
+ template.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
+ lobsterMapper.updateById(template);
|
|
|
|
|
+
|
|
|
|
|
+ return AjaxResult.success("修改成功");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<CompanyWorkflowLobster> listTemplateByStatus(Long companyId, Integer status) {
|
|
|
|
|
+ List<CompanyWorkflowLobster> all = lobsterMapper.selectTemplateListByStatus(companyId, status);
|
|
|
|
|
+ return all;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|