mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
Closed #64 支持联系人标签管理接口
This commit is contained in:
parent
7fe51a54d1
commit
d9d8304d0e
@ -0,0 +1,226 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Chatopera Inc, <https://www.chatopera.com>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.chatopera.cc.webim.web.handler.api.rest;
|
||||
|
||||
import com.chatopera.cc.core.UKDataContext;
|
||||
import com.chatopera.cc.util.Menu;
|
||||
import com.chatopera.cc.util.UKTools;
|
||||
import com.chatopera.cc.util.exception.CSKefuRestException;
|
||||
import com.chatopera.cc.util.json.GsonTools;
|
||||
import com.chatopera.cc.webim.service.repository.TagRelationRepository;
|
||||
import com.chatopera.cc.webim.service.repository.TagRepository;
|
||||
import com.chatopera.cc.webim.service.repository.UserRepository;
|
||||
import com.chatopera.cc.webim.web.handler.Handler;
|
||||
import com.chatopera.cc.webim.web.handler.api.request.RestUtils;
|
||||
import com.chatopera.cc.webim.web.model.Tag;
|
||||
import com.chatopera.cc.webim.web.model.TagRelation;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/contacts/tags")
|
||||
@Api(value = "联系人标签", description = "管理联系人标签")
|
||||
public class ApiContactTagsController extends Handler {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ApiContactTagsController.class);
|
||||
|
||||
@Autowired
|
||||
private TagRepository tagRes;
|
||||
|
||||
@Autowired
|
||||
private TagRelationRepository tagRelationRes;
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRes;
|
||||
|
||||
|
||||
/**
|
||||
* 获取联系人标签
|
||||
*
|
||||
* @param j
|
||||
* @return
|
||||
*/
|
||||
private JsonObject fetch(JsonObject j) {
|
||||
JsonObject resp = new JsonObject();
|
||||
if (j.has("contactid") && StringUtils.isNotBlank(j.get("contactid").getAsString())) {
|
||||
String contactid = j.get("contactid").getAsString();
|
||||
// 获取联系人所有标签
|
||||
List<TagRelation> rels = tagRelationRes.findByUserid(contactid);
|
||||
HashMap<String, String> tagged = new HashMap<String, String>();
|
||||
|
||||
for (TagRelation t : rels) {
|
||||
tagged.put(t.getTagid(), t.getId());
|
||||
}
|
||||
|
||||
// 获取所有标签
|
||||
List<Tag> all = tagRes.findAll();
|
||||
JsonArray data = new JsonArray();
|
||||
|
||||
for (Tag t : all) {
|
||||
JsonObject x = new JsonObject();
|
||||
x.addProperty("id", t.getId());
|
||||
x.addProperty("name", t.getTag());
|
||||
x.addProperty("type", t.getTagtype());
|
||||
x.addProperty("color", t.getColor());
|
||||
if (tagged.containsKey(t.getId())) {
|
||||
x.addProperty("tagged", true);
|
||||
x.addProperty("xid", tagged.get(t.getId()));
|
||||
} else {
|
||||
x.addProperty("tagged", false);
|
||||
}
|
||||
data.add(x);
|
||||
}
|
||||
|
||||
resp.add("data", data);
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC);
|
||||
} else {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。");
|
||||
}
|
||||
return resp;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建联系人标签关系
|
||||
*
|
||||
* @param j
|
||||
* @return
|
||||
*/
|
||||
private JsonObject create(JsonObject j) {
|
||||
JsonObject resp = new JsonObject();
|
||||
// 验证数据
|
||||
if ((!j.has("contactid")) || StringUtils.isBlank(j.get("contactid").getAsString())) {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。");
|
||||
return resp;
|
||||
}
|
||||
|
||||
if ((!j.has("tagId")) || StringUtils.isBlank(j.get("tagId").getAsString())) {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。");
|
||||
return resp;
|
||||
}
|
||||
|
||||
final String tagId = j.get("tagId").getAsString();
|
||||
final String contactid = j.get("contactid").getAsString();
|
||||
Tag tag = tagRes.findOne(tagId);
|
||||
|
||||
if (tag == null) {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不存在该标签。");
|
||||
return resp;
|
||||
}
|
||||
|
||||
// 创建关系
|
||||
TagRelation rel = new TagRelation();
|
||||
rel.setId(UKTools.getUUID());
|
||||
rel.setDataid(contactid);
|
||||
rel.setUserid(contactid);
|
||||
rel.setTagid(tagId);
|
||||
tagRelationRes.save(rel);
|
||||
|
||||
JsonObject data = new JsonObject();
|
||||
data.addProperty("id", rel.getId());
|
||||
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC);
|
||||
resp.add(RestUtils.RESP_KEY_DATA, data);
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
/**
|
||||
* 去掉标签
|
||||
*
|
||||
* @param j
|
||||
* @return
|
||||
*/
|
||||
private JsonObject remove(JsonObject j) {
|
||||
JsonObject resp = new JsonObject();
|
||||
if ((!j.has("xid")) || StringUtils.isBlank(j.get("xid").getAsString())) {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。");
|
||||
return resp;
|
||||
}
|
||||
|
||||
TagRelation t = tagRelationRes.findOne(j.get("xid").getAsString());
|
||||
if (t == null) {
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_4);
|
||||
resp.addProperty(RestUtils.RESP_KEY_ERROR, "该联系人没有打这个标签。");
|
||||
return resp;
|
||||
}
|
||||
|
||||
tagRelationRes.delete(t);
|
||||
JsonObject data = new JsonObject();
|
||||
data.addProperty("msg", "删除成功。");
|
||||
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC);
|
||||
resp.add("data", data);
|
||||
return resp;
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(method = RequestMethod.POST)
|
||||
@Menu(type = "apps", subtype = "contacttags", access = true)
|
||||
@ApiOperation("联系人标签")
|
||||
public ResponseEntity<String> operations(HttpServletRequest request, @RequestBody final String body) throws CSKefuRestException, GsonTools.JsonObjectExtensionConflictException {
|
||||
final JsonObject j = (new JsonParser()).parse(body).getAsJsonObject();
|
||||
logger.info("[contact tags] operations payload {}", j.toString());
|
||||
JsonObject json = new JsonObject();
|
||||
HttpHeaders headers = RestUtils.header();
|
||||
j.addProperty("creater", super.getUser(request).getId());
|
||||
j.addProperty("orgi", UKDataContext.SYSTEM_ORGI);
|
||||
|
||||
if (!j.has("ops")) {
|
||||
json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_1);
|
||||
json.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。");
|
||||
} else {
|
||||
switch (StringUtils.lowerCase(j.get("ops").getAsString())) {
|
||||
case "fetch":
|
||||
json = fetch(j);
|
||||
break;
|
||||
case "create":
|
||||
json = create(j);
|
||||
break;
|
||||
case "remove":
|
||||
json = remove(j);
|
||||
break;
|
||||
default:
|
||||
json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_3);
|
||||
json.addProperty(RestUtils.RESP_KEY_ERROR, "不支持的操作。");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new ResponseEntity<String>(json.toString(), headers, HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
@ -35,7 +35,6 @@ public class Tag {
|
||||
private Date createtime = new Date() ;
|
||||
private int times;
|
||||
private String creater ;
|
||||
|
||||
private String tag ;
|
||||
private String icon ;
|
||||
private String color ;
|
||||
@ -117,5 +116,5 @@ public class Tag {
|
||||
public void setColor(String color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user