Commit e59d7e99 by 陶光胜

Merge branch 'developer' into 'master'

Developer

See merge request !1
parents 3f4fb2b2 0ba0024d
package com.gic.udesk.constant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* udesk自定义字段 客服权限
* @ClassName: CalculateResultTypeEnum

* @Description: 

* @author guojuxing

* @date 2019/12/25 2:36 PM

*/
public enum AgentPermissionEnum {
READONLY("readonly", "客服可见,但不可编辑"),
READWRITE("readwrite", "客服可编辑"),
MUST("must", "客服必填");
private String code;
private String message;
private AgentPermissionEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static List<Map<String, Object>> list() {
List<Map<String, Object>> result = new ArrayList<>();
for (AgentPermissionEnum permissionEnum : values()) {
Map<String, Object> temp = new HashMap<>(4);
temp.put("key", permissionEnum.getCode());
temp.put("value", permissionEnum.getMessage());
result.add(temp);
}
return result;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.gic.udesk.constant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* udesk自定义字段 计算字段的计算结果类型
* @ClassName: CalculateResultTypeEnum

* @Description: 

* @author guojuxing

* @date 2019/12/25 2:36 PM

*/
public enum CalculateResultTypeEnum {
NUMERIC("numeric", "数字"),
DURATION("duration", "时长"),
PERCENTAGE("percentage", "百分比");
private String code;
private String message;
private CalculateResultTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static List<Map<String, Object>> list() {
List<Map<String, Object>> result = new ArrayList<>();
for (CalculateResultTypeEnum permissionEnum : values()) {
Map<String, Object> temp = new HashMap<>(4);
temp.put("key", permissionEnum.getCode());
temp.put("value", permissionEnum.getMessage());
result.add(temp);
}
return result;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.gic.udesk.constant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* udesk自定义字段 字段类型
* @ClassName: CustomFieldContentTypeEnum

* @Description: 

* @author guojuxing

* @date 2019/12/25 2:34 PM

*/
public enum CustomFieldContentTypeEnum {
TEXT("text", "单行文本"),
AREA_TEXT("area_text", "多行文本"),
DATE("date", "日期"),
TIME("time", "时间"),
DATE_TIME("datetime", "日期时间"),
LINK("link", "超链接"),
LOCATION("location", "地理位置"),
NUMBER("number", "正整数"),
NUMERIC("numeric", "数值"),
DROPLIST("droplist", "下拉列表"),
RADIO("radio", "单选"),
CHECKBOX("checkbox", "多选"),
CHAINED_DROPLIST("chained_droplist", "级联"),
CALCULATE("calculate", "计算字段");
private String code;
private String message;
private CustomFieldContentTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static List<Map<String, Object>> list() {
List<Map<String, Object>> result = new ArrayList<>();
for (CustomFieldContentTypeEnum permissionEnum : values()) {
Map<String, Object> temp = new HashMap<>(4);
temp.put("key", permissionEnum.getCode());
temp.put("value", permissionEnum.getMessage());
result.add(temp);
}
return result;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.gic.udesk.constant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* udesk自定义字段 客户权限
* @ClassName: CalculateResultTypeEnum

* @Description: 

* @author guojuxing

* @date 2019/12/25 2:36 PM

*/
public enum CustomerPermissionEnum {
NONE("none", "客户不可见"),
READONLY("readonly", "客户可见,但不可编辑"),
READWRITE("readwrite", "客户可编辑"),
MUST("must", "客户必填");
private String code;
private String message;
private CustomerPermissionEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static List<Map<String, Object>> list() {
List<Map<String, Object>> result = new ArrayList<>();
for (CustomerPermissionEnum permissionEnum : values()) {
Map<String, Object> temp = new HashMap<>(4);
temp.put("key", permissionEnum.getCode());
temp.put("value", permissionEnum.getMessage());
result.add(temp);
}
return result;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.gic.udesk.constant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public enum UdeskStatusEnum {
OPEN("open", "开启", 1),
SOLVING("solving", "解决中", 4),
RESOLVED("resolved", "已解决", 2),
CLOSED("closed", "已关闭", 3);
private String code;
private String message;
private int value;
private UdeskStatusEnum(String code, String message, int value) {
this.code = code;
this.message = message;
this.value = value;
}
public static List<Map<String, Object>> list() {
List<Map<String, Object>> result = new ArrayList<>();
for (UdeskStatusEnum permissionEnum : values()) {
Map<String, Object> temp = new HashMap<>(4);
temp.put("key", permissionEnum.getCode());
temp.put("value", permissionEnum.getMessage());
result.add(temp);
}
return result;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
package com.gic.udesk.dto.customfield;
import java.io.Serializable;
import java.util.List;
/**
* 自定义字段,级联选项值
* @ClassName: UdeskCustomFieldOptionDTO

* @Description: 

* @author guojuxing

* @date 2019/12/25 10:14 AM

*/
public class UdeskCustomFieldOptionDTO implements Serializable{
private static final long serialVersionUID = -5864719910960739518L;
/**
* 选项文字描述
*/
private String title;
private String value;
private List<UdeskCustomFieldOptionDTO> subs;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public List<UdeskCustomFieldOptionDTO> getSubs() {
return subs;
}
public void setSubs(List<UdeskCustomFieldOptionDTO> subs) {
this.subs = subs;
}
}
package com.gic.udesk.dto.customfield;
import java.io.Serializable;
import java.util.List;
/**
* 自定义字段
* @ClassName: UdeskResCustomFieldDTO

* @Description: 

* @author guojuxing

* @date 2019/12/25 10:10 AM

*/
public class UdeskResCustomFieldDTO implements Serializable{
private static final long serialVersionUID = 91651103459824362L;
/**
* 执行结果码,1000代表成功
*/
private Integer code;
private List<UdeskResCustomFieldDataDTO> fields;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public List<UdeskResCustomFieldDataDTO> getFields() {
return fields;
}
public void setFields(List<UdeskResCustomFieldDataDTO> fields) {
this.fields = fields;
}
}
package com.gic.udesk.dto.customfield;
import java.io.Serializable;
import java.util.List;
/**
* 自定义字段返回 数据
* @ClassName: UdeskResCustomFieldDataDTO

* @Description: 

* @author guojuxing

* @date 2019/12/25 10:11 AM

*/
public class UdeskResCustomFieldDataDTO implements Serializable{
private static final long serialVersionUID = -831985526535468454L;
private Integer id;
/**
* 字段标识
*/
private String field_name;
/**
* 字段显示名称
*/
private String field_label;
/**
* 字段类型
*/
private String content_type;
/**
* 字段备注
*/
private String comment;
/**
* 字段选项,仅选择类型字段返回
*/
private List<UdeskCustomFieldOptionDTO> options;
/**
* 客户权限
*/
private String customer_permission;
/**
* 客服权限
*/
private String agent_permission;
/**
* 计算字段的计算结果类型
*/
private String calculate_result_type;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getField_name() {
return field_name;
}
public void setField_name(String field_name) {
this.field_name = field_name;
}
public String getField_label() {
return field_label;
}
public void setField_label(String field_label) {
this.field_label = field_label;
}
public String getContent_type() {
return content_type;
}
public void setContent_type(String content_type) {
this.content_type = content_type;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public List<UdeskCustomFieldOptionDTO> getOptions() {
return options;
}
public void setOptions(List<UdeskCustomFieldOptionDTO> options) {
this.options = options;
}
public String getCustomer_permission() {
return customer_permission;
}
public void setCustomer_permission(String customer_permission) {
this.customer_permission = customer_permission;
}
public String getAgent_permission() {
return agent_permission;
}
public void setAgent_permission(String agent_permission) {
this.agent_permission = agent_permission;
}
public String getCalculate_result_type() {
return calculate_result_type;
}
public void setCalculate_result_type(String calculate_result_type) {
this.calculate_result_type = calculate_result_type;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
import java.util.Map;
/**
* gic提交工单所提交的对象
* @ClassName: GicTicketDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 4:11 PM

*/
public class GicTicketDTO implements Serializable{
private static final long serialVersionUID = -478265380664580136L;
/**
* 1:gic基础服务 2:应用服务
*/
private Integer businessModuleType;
/**
* 查找客户时使用的类型
*/
private String type;
/**
* 与类型type对应的值
*/
private String type_content;
/**
* 标题 必填
*/
private String subject;
/**
* 内容 必填
*/
private String content;
/**
* 状态中文
*/
private String status;
/**
* 工单模板id
*/
private Integer template_id;
/**
* 自定义字段的json字符串接收
*/
private String ticketFieldJsonStr;
/**
* 自定义字段
*/
private Map<String, String> ticket_field;
private Integer gicEnterpriseId;
private Integer gicUserId;
private String gicUserName;
private String gicEnterpriseName;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Map<String, String> getTicket_field() {
return ticket_field;
}
public void setTicket_field(Map<String, String> ticket_field) {
this.ticket_field = ticket_field;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getBusinessModuleType() {
return businessModuleType;
}
public void setBusinessModuleType(Integer businessModuleType) {
this.businessModuleType = businessModuleType;
}
public Integer getTemplate_id() {
return template_id;
}
public void setTemplate_id(Integer template_id) {
this.template_id = template_id;
}
public String getTicketFieldJsonStr() {
return ticketFieldJsonStr;
}
public void setTicketFieldJsonStr(String ticketFieldJsonStr) {
this.ticketFieldJsonStr = ticketFieldJsonStr;
}
public Integer getGicEnterpriseId() {
return gicEnterpriseId;
}
public void setGicEnterpriseId(Integer gicEnterpriseId) {
this.gicEnterpriseId = gicEnterpriseId;
}
public Integer getGicUserId() {
return gicUserId;
}
public void setGicUserId(Integer gicUserId) {
this.gicUserId = gicUserId;
}
public String getGicUserName() {
return gicUserName;
}
public void setGicUserName(String gicUserName) {
this.gicUserName = gicUserName;
}
public String getGicEnterpriseName() {
return gicEnterpriseName;
}
public void setGicEnterpriseName(String gicEnterpriseName) {
this.gicEnterpriseName = gicEnterpriseName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getType_content() {
return type_content;
}
public void setType_content(String type_content) {
this.type_content = type_content;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
/**
* 工单创建返回信息
* @ClassName: TicketCreateResDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 4:48 PM

*/
public class TicketCreateResDTO implements Serializable{
private static final long serialVersionUID = 5033595896326990325L;
/**
* 执行结果码,1000代表成功
*/
private Integer code;
/**
* 执行结果说明
*/
private String message;
/**
* 新建工单的id
*/
private Integer ticket_id;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getTicket_id() {
return ticket_id;
}
public void setTicket_id(Integer ticket_id) {
this.ticket_id = ticket_id;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
/**
* 附件相关内容
* @ClassName: TicketRepliesAttachmentsDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 5:55 PM

*/
public class TicketRepliesAttachmentsDTO implements Serializable{
private static final long serialVersionUID = 3349387219138928011L;
/**
* 附件链接
*/
private String url;
private String file_name;
/**
* 附件大小
*/
private Integer file_size;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getFile_name() {
return file_name;
}
public void setFile_name(String file_name) {
this.file_name = file_name;
}
public Integer getFile_size() {
return file_size;
}
public void setFile_size(Integer file_size) {
this.file_size = file_size;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
/**
* 回复者信息
* @ClassName: TicketRepliesAuthorDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 5:57 PM

*/
public class TicketRepliesAuthorDTO implements Serializable{
private static final long serialVersionUID = 6306676280816731296L;
private Integer id;
/**
* 回复人员类型
*/
private String user_type;
/**
* 回复人员邮箱
*/
private String email;
/**
* 回复人员头像url
*/
private String avatar;
/**
* 回复人员昵称
*/
private String nick_name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getNick_name() {
return nick_name;
}
public void setNick_name(String nick_name) {
this.nick_name = nick_name;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 获取工单回复
* @ClassName: TicketRepliesDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 5:50 PM

*/
public class TicketRepliesDTO implements Serializable{
private static final long serialVersionUID = -243231508063277717L;
/**
* 执行结果码,1000代表成功
*/
private Integer code;
/**
* 分页相关
*/
private Map<String, Object> meta;
private List<TicketRepliesDataDTO> replies;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Map<String, Object> getMeta() {
return meta;
}
public void setMeta(Map<String, Object> meta) {
this.meta = meta;
}
public List<TicketRepliesDataDTO> getReplies() {
return replies;
}
public void setReplies(List<TicketRepliesDataDTO> replies) {
this.replies = replies;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 回复列表
* @ClassName: TicketRepliesDataDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 5:52 PM

*/
public class TicketRepliesDataDTO implements Serializable{
private static final long serialVersionUID = -4610262435451102033L;
private Integer id;
/**
* 回复内容
*/
private String content;
/**
* 内容的类型,"text"/"html"
*/
private String content_format;
private Date created_at;
/**
* 回复类型,"internat"内部备注/"external"外部评论
*/
private String function_type;
/**
* 抄送对象邮箱
*/
private String cc;
/**
* 附件相关内容
*/
private List<TicketRepliesAttachmentsDTO> attachments;
/**
* 回复者信息
*/
private TicketRepliesAuthorDTO author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getContent_format() {
return content_format;
}
public void setContent_format(String content_format) {
this.content_format = content_format;
}
public Date getCreated_at() {
return created_at;
}
public void setCreated_at(Date created_at) {
this.created_at = created_at;
}
public String getFunction_type() {
return function_type;
}
public void setFunction_type(String function_type) {
this.function_type = function_type;
}
public String getCc() {
return cc;
}
public void setCc(String cc) {
this.cc = cc;
}
public List<TicketRepliesAttachmentsDTO> getAttachments() {
return attachments;
}
public void setAttachments(List<TicketRepliesAttachmentsDTO> attachments) {
this.attachments = attachments;
}
public TicketRepliesAuthorDTO getAuthor() {
return author;
}
public void setAuthor(TicketRepliesAuthorDTO author) {
this.author = author;
}
}
package com.gic.udesk.dto.gic;
import java.io.Serializable;
import java.util.Date;
public class UdeskEnterpriseDTO implements Serializable{
private static final long serialVersionUID = -727703112120773752L;
/**
* id
*/
private Integer id;
/**
* 业务模块ID
*/
private String businessModule;
/**
* 业务模块名称
*/
private String businessModuleName;
/**
* 业务模块类型 1:基础模块 2:应用模块
*/
private Integer businessType;
/**
* 工单ID
*/
private Integer ticketId;
/**
* 工单编号
*/
private String ticketNum;
/**
* 工单标题
*/
private String ticketTitle;
/**
* 工单状态
*/
private String ticketStatus;
/**
*
*/
private Date createTime;
/**
*
*/
private Date updateTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBusinessModule() {
return businessModule;
}
public void setBusinessModule(String businessModule) {
this.businessModule = businessModule;
}
public String getBusinessModuleName() {
return businessModuleName;
}
public void setBusinessModuleName(String businessModuleName) {
this.businessModuleName = businessModuleName;
}
public Integer getBusinessType() {
return businessType;
}
public void setBusinessType(Integer businessType) {
this.businessType = businessType;
}
public Integer getTicketId() {
return ticketId;
}
public void setTicketId(Integer ticketId) {
this.ticketId = ticketId;
}
public String getTicketNum() {
return ticketNum;
}
public void setTicketNum(String ticketNum) {
this.ticketNum = ticketNum;
}
public String getTicketTitle() {
return ticketTitle;
}
public void setTicketTitle(String ticketTitle) {
this.ticketTitle = ticketTitle;
}
public String getTicketStatus() {
return ticketStatus;
}
public void setTicketStatus(String ticketStatus) {
this.ticketStatus = ticketStatus;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
package com.gic.udesk.dto.templates;
import java.io.Serializable;
import java.util.List;
/**
* 所有工单模板列表信息
* @ClassName: UdeskResTemplatesDTO

* @Description: 

* @author guojuxing

* @date 2019/12/24 5:54 PM

*/
public class UdeskResTemplatesDTO implements Serializable{
private static final long serialVersionUID = -4541627488626734665L;
/**
* 执行结果码,1000代表成功
*/
private Integer code;
/**
* 执行结果说明
*/
private String message;
/**
* 数据数量
*/
private Integer count;
/**
* 工单模板列表详情
*/
private List<UdeskResTemplatesDataDTO> templates;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public List<UdeskResTemplatesDataDTO> getTemplates() {
return templates;
}
public void setTemplates(List<UdeskResTemplatesDataDTO> templates) {
this.templates = templates;
}
}
package com.gic.udesk.dto.templates;
import java.io.Serializable;
import java.util.List;
/**
* 所有工单模板列表数据信息
* @ClassName: UdeskResTemplatesDataDTO

* @Description: 

* @author guojuxing

* @date 2019/12/24 5:56 PM

*/
public class UdeskResTemplatesDataDTO implements Serializable{
private static final long serialVersionUID = 9123464445959278485L;
/**
* 模板id
*/
private Integer id;
/**
* 模板名称
*/
private String name;
/**
* 模板描述
*/
private String description;
/**
* 模板下的自定义字段
*/
private List<UdeskTemplatesCustomFieldDTO> custom_fields;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<UdeskTemplatesCustomFieldDTO> getCustom_fields() {
return custom_fields;
}
public void setCustom_fields(List<UdeskTemplatesCustomFieldDTO> custom_fields) {
this.custom_fields = custom_fields;
}
}
package com.gic.udesk.dto.templates;
import java.io.Serializable;
/**
* 工单模板中的自定义字段
* @ClassName: UdeskTemplatesCustomFieldDTO

* @Description: 

* @author guojuxing

* @date 2019/12/24 5:58 PM

*/
public class UdeskTemplatesCustomFieldDTO implements Serializable{
private static final long serialVersionUID = -7814797970459011762L;
/**
* 模板下某一字段的id
*/
private String field_id;
/**
* 模板下某一字段的名称
*/
private String field_name;
/**
* 模板下某一字段的标题
*/
private String field_title;
/**
* 模板下某一字段的类型
*/
private String field_type;
/**
* 模板下某一字段的描述
*/
private String field_comment;
public String getField_id() {
return field_id;
}
public void setField_id(String field_id) {
this.field_id = field_id;
}
public String getField_name() {
return field_name;
}
public void setField_name(String field_name) {
this.field_name = field_name;
}
public String getField_title() {
return field_title;
}
public void setField_title(String field_title) {
this.field_title = field_title;
}
public String getField_type() {
return field_type;
}
public void setField_type(String field_type) {
this.field_type = field_type;
}
public String getField_comment() {
return field_comment;
}
public void setField_comment(String field_comment) {
this.field_comment = field_comment;
}
}
package com.gic.udesk.dto.uploadfile;
import java.io.Serializable;
/**
* udesk工单上传附件
* @ClassName: UploadFileDTO

* @Description: 

* @author guojuxing

* @date 2019/12/26 9:52 AM

*/
public class UploadFileDTO implements Serializable{
private static final long serialVersionUID = -1110187452080769886L;
/**
* 执行结果码,1000表示成功
*/
private Integer code;
/**
* 结果说明
*/
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package com.gic.udesk.qo;
import com.gic.enterprise.qo.PageQO;
import java.io.Serializable;
/**
* 工单列表查询参数
* @ClassName: TicketListQO

* @Description: 

* @author guojuxing

* @date 2019/12/26 5:23 PM

*/
public class TicketListQO extends PageQO implements Serializable{
private static final long serialVersionUID = -404555085326787735L;
/**
* 支持搜索应用名称/工单编号/问题标题
*/
private String search;
/**
* UdeskStatusEnum枚举
*/
private String ticketStatus;
/**
* 业务模块ID, 英文逗号隔开
*/
private String businessModule;
private String startTime;
/**
* yyyy-MM-dd格式
*/
private String endTime;
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public String getTicketStatus() {
return ticketStatus;
}
public void setTicketStatus(String ticketStatus) {
this.ticketStatus = ticketStatus;
}
public String getBusinessModule() {
return businessModule;
}
public void setBusinessModule(String businessModule) {
this.businessModule = businessModule;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}
package com.gic.udesk.service;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.udesk.dto.UdeskTicketDetailDTO;
import com.gic.udesk.dto.gic.GicTicketDTO;
import com.gic.udesk.dto.gic.TicketRepliesDTO;
import com.gic.udesk.dto.gic.UdeskEnterpriseDTO;
import com.gic.udesk.qo.TicketListQO;
/**
* gic商户udesk工单接口
* @ClassName: GicTicketApiService

* @Description: 

* @author guojuxing

* @date 2019/12/26 4:27 PM

*/
public interface GicTicketApiService {
/**
* gic商户新建工单
* @Title: saveTicket

* @Description:

 * @author guojuxing
* @param gicTicketDTO

* @return com.gic.api.base.commons.ServiceResponse<java.lang.Integer>


 */
ServiceResponse<Integer> saveTicket(GicTicketDTO gicTicketDTO);
/**
* 分页查询
* @Title: page

* @Description:

 * @author guojuxing
* @param params

* @return com.gic.api.base.commons.ServiceResponse<com.gic.api.base.commons.Page<com.gic.udesk.dto.gic.UdeskEnterpriseDTO>>


 */
ServiceResponse<Page<UdeskEnterpriseDTO>> page(TicketListQO params);
/**
* 查询工单回复信息
* @Title: getTicketReplies

* @Description:

 * @author guojuxing
* @param ticketId 工单ID
* @param currentPage 第几页
* @param pageSize
 每页多少条
* @return com.gic.api.base.commons.ServiceResponse<com.gic.udesk.dto.gic.TicketRepliesDTO>


 */
ServiceResponse<TicketRepliesDTO> getTicketReplies(Integer ticketId, Integer currentPage, Integer pageSize);
/**
* 关闭工单
* @Title: closeTicket

* @Description:

 * @author guojuxing
* @param ticketId

* @return com.gic.api.base.commons.ServiceResponse<java.lang.String>


 */
ServiceResponse<String> closeTicket(Integer ticketId);
/**
* 工单详情
* @Title: getTicketDetailById

* @Description:

 * @author guojuxing
* @param ticketId

* @return com.gic.api.base.commons.ServiceResponse<com.gic.udesk.dto.UdeskTicketDetailDTO>


 */
ServiceResponse<UdeskTicketDetailDTO> getTicketDetailById(Integer ticketId);
}
package com.gic.udesk.service;
import java.io.File;
import java.util.List;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.udesk.dto.customfield.UdeskCustomFieldOptionDTO;
import com.gic.udesk.dto.customfield.UdeskResCustomFieldDataDTO;
import com.gic.udesk.dto.templates.UdeskResTemplatesDTO;
import org.springframework.web.multipart.MultipartFile;
public interface UdeskBaseApiService {
......@@ -22,4 +29,34 @@ public interface UdeskBaseApiService {
* @return com.gic.api.base.commons.ServiceResponse<java.lang.Void>


 */
ServiceResponse<Void> saveTapdException(String exceptionRecord);
/**
* 获取工单模板的自定义字段
* @Title: getCustomFieldFromUdeskTemplates

* @Description:

 * @author guojuxing
* @param type
 1:gic基础业务 2:应用
* @return com.gic.api.base.commons.ServiceResponse<com.gic.udesk.dto.templates.UdeskResTemplatesDTO>


 */
ServiceResponse<List<UdeskResCustomFieldDataDTO>> getCustomFieldFromUdeskTemplates(Integer type);
/**
* gic基础服务字段的级联数据
* @Title: getGicServiceSelect

* @Description:

 * @author guojuxing 

* @return com.gic.api.base.commons.ServiceResponse<java.util.List<com.gic.udesk.dto.customfield.UdeskCustomFieldOptionDTO>>


 */
ServiceResponse<List<UdeskCustomFieldOptionDTO>> getGicServiceSelect();
/**
* 上传附件
* @Title: ticketUploadFile

* @Description:

 * @author guojuxing
* @param bytes
* @param fileName
* @param ticketId
 工单ID
* @return com.gic.api.base.commons.ServiceResponse<java.lang.String>


 */
ServiceResponse<String> ticketUploadFile(byte[] bytes, String fileName, Integer ticketId);
}
......@@ -14,4 +14,6 @@ public interface UdeskMessageApiService {
* @return com.gic.api.base.commons.ServiceResponse<java.lang.String>


 */
ServiceResponse<String> saveUdeskMessage(UdeskMessageDTO messageDTO);
ServiceResponse<String> saveUdeskMessageNoTapd(UdeskMessageDTO messageDTO);
}
......@@ -56,7 +56,7 @@
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-platform-udesk-api</artifactId>
<version>${gic-platform-enterprise-api}</version>
<version>${gic-platform-udesk-api}</version>
</dependency>
<dependency>
......
package com.gic.udesk.dao.mapper;
import com.gic.udesk.entity.TabUdeskCustomers;
import org.apache.ibatis.annotations.Param;
public interface TabUdeskCustomersMapper {
/**
* 根据主键删除
*
* @param id 主键
* @return 更新条目数
*/
int deleteByPrimaryKey(Integer id);
/**
* 插入一条记录
*
* @param record 实体对象
* @return 更新条目数
*/
int insert(TabUdeskCustomers record);
/**
* 动态插入一条记录
*
* @param record 实体对象
* @return 更新条目数
*/
int insertSelective(TabUdeskCustomers record);
/**
* 根据主键查询
*
* @param id 主键
* @return 实体对象
*/
TabUdeskCustomers selectByPrimaryKey(Integer id);
/**
* 根据主键动态更新记录
*
* @param record 实体对象
* @return 更新条目数
*/
int updateByPrimaryKeySelective(TabUdeskCustomers record);
/**
* 根据主键更新记录
*
* @param record 实体对象
* @return 更新条目数
*/
int updateByPrimaryKey(TabUdeskCustomers record);
TabUdeskCustomers countCustomerId(@Param("enterpriseId") Integer enterpriseId, @Param("userId") Integer userId);
}
\ No newline at end of file
package com.gic.udesk.dao.mapper;
import com.gic.udesk.entity.TabUdeskEnterprise;
import com.gic.udesk.qo.TicketListQO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TabUdeskEnterpriseMapper {
/**
......@@ -27,6 +31,8 @@ public interface TabUdeskEnterpriseMapper {
*/
int insertSelective(TabUdeskEnterprise record);
int updateStatus(@Param("ticketId") Integer ticketId, @Param("status") String status);
/**
* 根据主键查询
*
......@@ -50,4 +56,13 @@ public interface TabUdeskEnterpriseMapper {
* @return 更新条目数
*/
int updateByPrimaryKey(TabUdeskEnterprise record);
/**
* 分页查询
* @Title: page

* @Description:

 * @author guojuxing
* @param params

* @return java.util.List<com.gic.udesk.entity.TabUdeskEnterprise>


 */
List<TabUdeskEnterprise> page(TicketListQO params);
}
\ No newline at end of file
package com.gic.udesk.entity;
import java.util.Date;
/**
* tab_udesk_customers
*/
public class TabUdeskCustomers {
/**
* 主键id
*/
private Integer id;
/**
* 商户ID
*/
private Integer enterpriseId;
/**
* gic用户id
*/
private Integer userId;
/**
* udesk客户ID
*/
private Integer customerId;
/**
*
*/
private Date createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(Integer enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getCustomerId() {
return customerId;
}
public void setCustomerId(Integer customerId) {
this.customerId = customerId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
\ No newline at end of file
package com.gic.udesk.service;
import com.gic.udesk.entity.TabUdeskCustomers;
public interface UdeskCustomersService {
int save(Integer enterpriseId, Integer customerId, Integer userId);
TabUdeskCustomers hasCustomerId(Integer enterpriseId, Integer userId);
}
package com.gic.udesk.service;
import com.gic.udesk.entity.TabUdeskEnterprise;
import com.gic.udesk.qo.TicketListQO;
import com.github.pagehelper.Page;
public interface UdeskEnterpriseService {
/**
* 新增gic工单数据
* @Title: save

* @Description:

 * @author guojuxing
* @param record

* @return int


 */
int save(TabUdeskEnterprise record);
/**
* 关闭工单
* @Title: close

* @Description:

* @author guojuxing
* @param ticketId

* @return int


*/
int close(Integer ticketId);
int updateStatus(Integer ticketId, String status);
/**
* 分页查询
* @param params
* @return
*/
Page<TabUdeskEnterprise> page(TicketListQO params);
}
package com.gic.udesk.service.impl;
import com.gic.udesk.dao.mapper.TabUdeskCustomersMapper;
import com.gic.udesk.entity.TabUdeskCustomers;
import com.gic.udesk.service.UdeskCustomersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service("udeskCustomersService")
public class UdeskCustomersServiceImpl implements UdeskCustomersService{
@Autowired
private TabUdeskCustomersMapper tabUdeskCustomersMapper;
@Override
public int save(Integer enterpriseId, Integer customerId, Integer userId) {
TabUdeskCustomers record = new TabUdeskCustomers();
record.setCreateTime(new Date());
record.setCustomerId(customerId);
record.setUserId(userId);
record.setEnterpriseId(enterpriseId);
return tabUdeskCustomersMapper.insert(record);
}
@Override
public TabUdeskCustomers hasCustomerId(Integer enterpriseId, Integer userId) {
TabUdeskCustomers obj = tabUdeskCustomersMapper.countCustomerId(enterpriseId, userId);
return obj;
}
}
package com.gic.udesk.service.impl;
import com.gic.udesk.constant.UdeskStatusEnum;
import com.gic.udesk.dao.mapper.TabUdeskEnterpriseMapper;
import com.gic.udesk.entity.TabUdeskEnterprise;
import com.gic.udesk.qo.TicketListQO;
import com.gic.udesk.service.UdeskEnterpriseService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service("udeskEnterpriseService")
public class UdeskEnterpriseServiceImpl implements UdeskEnterpriseService{
@Autowired
private TabUdeskEnterpriseMapper tabUdeskEnterpriseMapper;
@Override
public int save(TabUdeskEnterprise record) {
record.setCreateTime(new Date());
record.setUpdateTime(new Date());
record.setTicketStatus(UdeskStatusEnum.OPEN.getCode());
return tabUdeskEnterpriseMapper.insertSelective(record);
}
@Override
public int close(Integer ticketId) {
return tabUdeskEnterpriseMapper.updateStatus(ticketId, UdeskStatusEnum.CLOSED.getCode());
}
@Override
public int updateStatus(Integer ticketId, String status) {
return tabUdeskEnterpriseMapper.updateStatus(ticketId, status);
}
@Override
public Page<TabUdeskEnterprise> page(TicketListQO params) {
PageHelper.startPage(params.getCurrentPage(), params.getPageSize());
List<TabUdeskEnterprise> list = tabUdeskEnterpriseMapper.page(params);
return (Page<TabUdeskEnterprise>) list;
}
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.udesk.constant.UdeskSharedConstant;
import com.gic.udesk.constant.UdeskStatusEnum;
import com.gic.udesk.dto.*;
import com.gic.udesk.entity.TabUdeskMessage;
import com.gic.udesk.entity.TabUdeskTapdRel;
......@@ -37,6 +38,8 @@ public class TapdMessageApiServiceImpl implements TapdMessageApiService {
private UdeskBaseApiService udeskBaseApiService;
@Autowired
private UdeskTapdRelService udeskTapdRelService;
@Autowired
private UdeskEnterpriseService udeskEnterpriseService;
/**
* tapd缺陷接口
......@@ -137,6 +140,11 @@ public class TapdMessageApiServiceImpl implements TapdMessageApiService {
if (!updateUdeskTicketSuccess) {
return msgId.toString();
}
//同步到gic工单状态
String statusEn = udeskTapdRelMap.get(latestBugFromTAPD.getStatus() + UdeskConstant.MAP_UDESK_NAME_SUFFIX);
if (!UdeskStatusEnum.CLOSED.getCode().equals(statusEn)) {
udeskEnterpriseService.updateStatus(dataBaseTicket.getId(), statusEn);
}
// 更新数据库中的数据 注: 放在udesk操作完成之后
dataBaseTicket
.setStatusEn(udeskTapdRelMap.get(latestBugFromTAPD.getStatus() + UdeskConstant.MAP_UDESK_NAME_SUFFIX));
......
package com.gic.udesk.service.outer.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.enterprise.error.ErrorCode;
import com.gic.udesk.dto.customfield.UdeskCustomFieldOptionDTO;
import com.gic.udesk.dto.customfield.UdeskResCustomFieldDTO;
import com.gic.udesk.dto.customfield.UdeskResCustomFieldDataDTO;
import com.gic.udesk.dto.templates.UdeskResTemplatesDTO;
import com.gic.udesk.dto.templates.UdeskResTemplatesDataDTO;
import com.gic.udesk.dto.templates.UdeskTemplatesCustomFieldDTO;
import com.gic.udesk.dto.uploadfile.UploadFileDTO;
import com.gic.udesk.entity.TabUdeskException;
import com.gic.udesk.entity.TabUdeskTapdRel;
import com.gic.udesk.service.UdeskBaseApiService;
import com.gic.udesk.service.UdeskExceptionService;
import com.gic.udesk.service.UdeskTapdRelService;
import com.gic.udesk.utils.UdeskConstant;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import com.gic.udesk.utils.UdeskHttpClientUtil;
@Service("udeskBaseApiService")
public class UdeskBaseApiServiceImpl implements UdeskBaseApiService {
......@@ -30,6 +43,14 @@ public class UdeskBaseApiServiceImpl implements UdeskBaseApiService {
@Resource(name = "udeskTapdRelMap")
private Map<String, String> udeskTapdRelMap;
/**
* 取工单模板列表
*/
private final static String UDESK_TEMPLATE = "/tickets/ticket_templates";
private final static String CUSTOM_FIELD_URL = "/custom_fields";
private final static String UPLOAD_FILE = "/tickets/upload_file";
@PostConstruct
public void init() {
......@@ -90,4 +111,109 @@ public class UdeskBaseApiServiceImpl implements UdeskBaseApiService {
udeskExceptionService.save(exception);
return ServiceResponse.success();
}
@Override
public ServiceResponse<List<UdeskResCustomFieldDataDTO>> getCustomFieldFromUdeskTemplates(Integer type) {
boolean isNotRightType = type == null || (type.intValue() != 1 && type.intValue() != 2);
if (isNotRightType) {
return ServiceResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "参数错误,数值非法");
}
logger.info("udesk工单模板链接");
String replyRespStr = UdeskHttpClientUtil.getUdeskJsonFromParam(UDESK_TEMPLATE, null);
logger.info("desk工单模板链接返回为{}", replyRespStr);
UdeskResTemplatesDTO result = JSON.parseObject(replyRespStr, UdeskResTemplatesDTO.class);
if (result.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
List<UdeskTemplatesCustomFieldDTO> customFieldList = null;
for (UdeskResTemplatesDataDTO templatesDataDTO : result.getTemplates()) {
if (type == 1) {
//gic基础业务模板
if (templatesDataDTO.getId().intValue() == 97811) {
customFieldList = templatesDataDTO.getCustom_fields();
break;
}
} else {
//应用模板
if (templatesDataDTO.getId().intValue() == 99311) {
customFieldList = templatesDataDTO.getCustom_fields();
break;
}
}
}
if (CollectionUtils.isNotEmpty(customFieldList)) {
List<String> fieldNameList = new ArrayList<>(customFieldList.size());
for (UdeskTemplatesCustomFieldDTO customFieldDTO : customFieldList) {
fieldNameList.add(customFieldDTO.getField_name());
}
return ServiceResponse.success(queryUdeskCustomField(fieldNameList));
}
} else {
String exceptionRecord = "udesk工单模板查询异常,返回为" + replyRespStr;
logger.info(exceptionRecord);
this.saveUdeskException(exceptionRecord);
}
return ServiceResponse.success();
}
@Override
public ServiceResponse<List<UdeskCustomFieldOptionDTO>> getGicServiceSelect() {
Map<String, Object> params = new HashMap<>(4);
//枚举,取值范围:["ticket", "customer", "organization"]
params.put("category", "ticket");
logger.info("udesk工单gic基础服务级联链接");
String replyRespStr = UdeskHttpClientUtil.getUdeskJsonFromParam(CUSTOM_FIELD_URL, params);
logger.info("desk工工单gic基础服务级联返回为{}", replyRespStr);
UdeskResCustomFieldDTO result = JSON.parseObject(replyRespStr, UdeskResCustomFieldDTO.class);
if (result.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
//成功
for (UdeskResCustomFieldDataDTO dataDTO : result.getFields()) {
if ("SelectField_56661".equals(dataDTO.getField_name())) {
//gic基础服务级联数据
return ServiceResponse.success(dataDTO.getOptions());
}
}
} else {
String exceptionRecord = "udesk工单gic基础服务级联查询异常,返回为" + replyRespStr;
logger.info(exceptionRecord);
this.saveUdeskException(exceptionRecord);
}
return ServiceResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), "无数据");
}
@Override
public ServiceResponse<String> ticketUploadFile(byte[] bytes, String fileName, Integer ticketId) {
logger.info("udesk工单上传附件");
String replyRespStr = UdeskHttpClientUtil.postUdeskJsonFromJsonForFile(UPLOAD_FILE, ticketId, bytes, fileName);
logger.info("desk工单上传附件返回为{}", replyRespStr);
UploadFileDTO result = JSON.parseObject(replyRespStr, UploadFileDTO.class);
if (result.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
return ServiceResponse.success();
}
return ServiceResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), result.getMessage());
}
private List<UdeskResCustomFieldDataDTO> queryUdeskCustomField(List<String> fieldNameList) {
Map<String, Object> params = new HashMap<>(4);
//枚举,取值范围:["ticket", "customer", "organization"]
params.put("category", "ticket");
logger.info("udesk工单自定义字段链接");
String replyRespStr = UdeskHttpClientUtil.getUdeskJsonFromParam(CUSTOM_FIELD_URL, params);
logger.info("desk工单自定义字段返回为{}", replyRespStr);
UdeskResCustomFieldDTO result = JSON.parseObject(replyRespStr, UdeskResCustomFieldDTO.class);
if (result.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
//成功
List<UdeskResCustomFieldDataDTO> resultList = new ArrayList<>();
for (UdeskResCustomFieldDataDTO dataDTO : result.getFields()) {
if (fieldNameList.contains(dataDTO.getField_name())) {
resultList.add(dataDTO);
}
}
return resultList;
} else {
String exceptionRecord = "udesk工单gic基础服务级联查询异常,返回为" + replyRespStr;
logger.info(exceptionRecord);
this.saveUdeskException(exceptionRecord);
}
return null;
}
}
......@@ -8,6 +8,7 @@ import java.util.Map;
import javax.annotation.Resource;
import javax.validation.ConstraintViolationException;
import com.gic.udesk.constant.UdeskStatusEnum;
import com.gic.udesk.entity.TabUdeskTapdRel;
import com.gic.udesk.service.*;
import org.apache.commons.lang3.StringUtils;
......@@ -37,6 +38,8 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
private UdeskTicketService udeskTicketService;
@Autowired
private UdeskTapdRelService udeskTapdRelService;
@Autowired
private UdeskEnterpriseService udeskEnterpriseService;
@Resource(name = "udeskTapdRelMap")
private Map<String, String> udeskTapdRelMap;
......@@ -70,7 +73,9 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
tabUdeskMessage.setSource(messageDTO.getSource());
tabUdeskMessage.setStatus(UdeskConstant.UNDELETED);
tabUdeskMessage.setTopic(messageDTO.getTopic());
udeskMessageService.save(tabUdeskMessage);
int messageId = udeskMessageService.save(tabUdeskMessage);
//设置主键,用于update
tabUdeskMessage.setId(messageId);
logger.info("消息为{}已经保存成功", messageDTO);
//创建工单消息
if (UdeskConstant.TICKET_CREATE.equals(messageDTO.getEvent())) {
......@@ -140,6 +145,8 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
tabUdeskTicket.setUserName(ticket.getUser_name());
try {
udeskTicketService.save(tabUdeskTicket);
updateGicTicketStatus(Integer.parseInt(id), ticket.getStatus_en());
logger.info("工单id为{}已经保存成功", ticket.getId());
} catch (DataIntegrityViolationException | ConstraintViolationException e) {
logger.info("工单id为{}已经保存失败,重复插入", ticket.getId(), e);
......@@ -210,6 +217,7 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
String id = messageDTO.getMsgBody();
String detailStr = this.getUdeskTicketDetail(id);
UdeskTicketDetailDTO detail = JSON.parseObject(detailStr, UdeskTicketDetailDTO.class);
logger.info("工单详情{}", detail != null ? JSON.toJSONString(detail) : null);
if (detail.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
//udesk接口查询的工单信息
TicketDTO ticket = detail.getTicket();
......@@ -248,6 +256,10 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
tapdBug.setReporter(UdeskConstant.TPAD_REPORTER);
//工单状态英文名称
String statusEn = ticket.getStatus_en();
//同步到gic工单状态
logger.info("同步gic工单状态,ID:{}, 状态:{}", Integer.parseInt(id), statusEn);
updateGicTicketStatus(Integer.parseInt(id), statusEn);
//如果udesk工单状态不等于本地数据库对应的工单状态
if (StringUtils.isNotBlank(statusEn) && !statusEn.equals(tabUdeskTicket.getStatusEn())) {
if (UdeskConstant.CLOSED.equals(tabUdeskTicket.getStatusEn())) {
......@@ -299,6 +311,49 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
return null;
}
@Override
public ServiceResponse<String> saveUdeskMessageNoTapd(UdeskMessageDTO messageDTO) {
//创建工单消息
if (UdeskConstant.TICKET_CREATE.equals(messageDTO.getEvent())) {
//udesk工单ID
String id = messageDTO.getMsgBody();
//udesk工单详情接口
String detailStr = this.getUdeskTicketDetail(id);
UdeskTicketDetailDTO detail = JSON.parseObject(detailStr, UdeskTicketDetailDTO.class);
if (detail.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
//usesk工单信息
TicketDTO ticket = detail.getTicket();
//只修改gic状态,不生成本地工单数据,因为和同步到tapd触发器会冲突
updateGicTicketStatus(Integer.parseInt(id), ticket.getStatus_en());
} else {
String exceptionRecord = "工单id为" + id + "请求udesk工单详情异常,返回为" + detailStr;
logger.info(exceptionRecord);
udeskBaseApiService.saveUdeskException(exceptionRecord);
}
} else if (UdeskConstant.TICKET_UPDATE.equals(messageDTO.getEvent())) {
//更新消息
String id = messageDTO.getMsgBody();
String detailStr = this.getUdeskTicketDetail(id);
UdeskTicketDetailDTO detail = JSON.parseObject(detailStr, UdeskTicketDetailDTO.class);
logger.info("工单详情{}", detail != null ? JSON.toJSONString(detail) : null);
if (detail.getCode() == UdeskConstant.UDESK_SUCCESS_CODE) {
//udesk接口查询的工单信息
TicketDTO ticket = detail.getTicket();
//工单状态英文名称
String statusEn = ticket.getStatus_en();
//同步到gic工单状态
logger.info("同步gic工单状态,ID:{}, 状态:{}", Integer.parseInt(id), statusEn);
updateGicTicketStatus(Integer.parseInt(id), statusEn);
} else {
String exceptionRecord = "工单id为" + id + "更新工单请求udesk工单详情异常,返回为" + detailStr;
logger.info(exceptionRecord);
udeskBaseApiService.saveUdeskException(exceptionRecord);
}
}
return ServiceResponse.success();
}
/**
* udesk工单详情接口
* @param id
......@@ -393,7 +448,7 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
List<TabUdeskTapdRel> udeskTapdRelList = udeskTapdRelService.list(params);
for (TabUdeskTapdRel tabUdeskTapdRel : udeskTapdRelList) {
try {
Method udeskMethod = TabUdeskTapdRel.class.getMethod(tabUdeskTapdRel.getUdeskIdKey());
Method udeskMethod = TabUdeskTicket.class.getMethod(tabUdeskTapdRel.getUdeskIdKey());
String value = (String) udeskMethod.invoke(tabUdeskTicket);
Method tapdMethod = TapdBugDTO.class.getMethod(tabUdeskTapdRel.getTapdId(), String.class);
tapdMethod.invoke(tapdBug, value);
......@@ -495,4 +550,13 @@ public class UdeskMessageApiServiceImpl implements UdeskMessageApiService {
udeskBaseApiService.saveTapdException(exceptionRecord);
}
}
private void updateGicTicketStatus(Integer ticketId, String status) {
//同步到gic工单状态
logger.info("同步gic工单状态,ID:{}, 状态:{}", ticketId, status);
//添加逻辑:如果是关闭状态,则不同步到gic侧
if (!UdeskStatusEnum.CLOSED.getCode().equals(status)) {
udeskEnterpriseService.updateStatus(ticketId, status);
}
}
}
......@@ -131,6 +131,25 @@ public class UdeskConstant {
public static final String UDESK_FIELD_TRANSACTOR = "SelectField_23591";
/**
* GIC后台对应的基础模块 级联字段
*/
public static final String GIC_BASE_MODULE_SELECT = "SelectField_56661";
/**
* GIC后台对应的基础模块 模板ID
*/
public static final Integer GIC_BASE_MODULE_TEMPLATE_ID = 97811;
/**
* GIC应用模块工单 应用模块名称
*/
public static final String APP_MODULE_NAME = "TextField_101931";
/**
* GIC应用模块工单 模板ID
*/
public static Integer APP_MODULE_TEMPLATE_ID = 99311;
/**
* udesk来源的类型异常
*/
public static final String UDESK_EXP_TYPE = "udesk";
......
package com.gic.udesk.utils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URIBuilder;
......@@ -12,6 +23,8 @@ import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
......@@ -19,14 +32,6 @@ import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class UdeskHttpClientUtil {
private static final Logger logger = LogManager.getLogger(UdeskHttpClientUtil.class);
......@@ -97,6 +102,27 @@ public class UdeskHttpClientUtil {
}
/**
* udesk的post请求,Request Body 上传文件参数天聪
*/
public static String postUdeskJsonFromJsonForFile(String url, Integer ticketId, byte[] bytes, String fileName) {
long timeStamp = System.currentTimeMillis() / 1000;
url = UdeskConstant.UDESK_URI + url + "?email=" + UdeskConstant.EMAIL + "&timestamp=" + timeStamp + "&sign=" + UdeskUtils.getSign(timeStamp);
logger.info(url);
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
response = getResponseForFile(bytes, fileName, ticketId, httpPost);
return EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
logger.info("POST请求{}失败,参数ticketId:{}", url, ticketId, e);
} finally {
closeResponse(response);
}
return null;
}
/**
* udesk的put请求,Request Body
*/
public static String putUdeskJsonFromJson(String url, String json) {
......@@ -255,4 +281,29 @@ public class UdeskHttpClientUtil {
response = httpClient.execute(httpPost);
return response;
}
/**
* 上传文件填充
* @param bytes
* @param fileName
* @param ticketId
* @param httpPost
* @return
* @throws IOException
* @throws ClientProtocolException
*/
private static CloseableHttpResponse getResponseForFile(byte[] bytes, String fileName, Integer ticketId, HttpPost httpPost)
throws IOException, ClientProtocolException {
CloseableHttpResponse response;
//解决乱码,设置mode
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
multipartEntityBuilder.addBinaryBody("file", new ByteArrayInputStream(bytes), ContentType.DEFAULT_BINARY, fileName);
multipartEntityBuilder.addTextBody("ticket_id", ticketId.toString());
multipartEntityBuilder.addTextBody("file_name", fileName);
HttpEntity httpEntity = multipartEntityBuilder.build();
httpPost.setEntity(httpEntity);
// httpPost.setHeader("Content-Type", "application/octet-stream");
response = httpClient.execute(httpPost);
return response;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<import resource="classpath:applicationContext-init.xml"/>
<import resource="classpath:dubbo-gic-platform-udesk-service.xml"/>
......@@ -11,4 +17,6 @@
<import resource="classpath*:redis-init.xml" />
<util:map id="udeskTapdRelMap" map-class="java.util.HashMap"></util:map>
<context:component-scan base-package="com.gic.udesk.*"/>
</beans>
\ No newline at end of file
......@@ -3,20 +3,21 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.gic.udesk.*"/>
<!-- 应用名称 -->
<dubbo:application name="gic-platform-udesk-service"/>
<dubbo:protocol name="dubbo" port="20320"/>
<dubbo:protocol name="dubbo" port="20340"/>
<dubbo:service interface="com.gic.udesk.service.UdeskMessageApiService" ref="udeskMessageApiService" retries="0"/>
<dubbo:service interface="com.gic.udesk.service.TapdConfigApiService" ref="tapdConfigApiService" retries="0"/>
<dubbo:service interface="com.gic.udesk.service.TapdMessageApiService" ref="tapdMessageApiService" retries="0"/>
<dubbo:service interface="com.gic.udesk.service.UdeskBaseApiService" ref="udeskBaseApiService" retries="0"/>
<dubbo:service interface="com.gic.udesk.service.GicTicketApiService" ref="gicTicketApiService" retries="0"/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gic.udesk.dao.mapper.TabUdeskCustomersMapper">
<resultMap id="BaseResultMap" type="com.gic.udesk.entity.TabUdeskCustomers">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="enterprise_id" jdbcType="INTEGER" property="enterpriseId" />
<result column="user_id" jdbcType="INTEGER" property="userId" />
<result column="customer_id" jdbcType="INTEGER" property="customerId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap>
<sql id="Base_Column_List">
id, enterprise_id, user_id, customer_id, create_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from tab_udesk_customers
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from tab_udesk_customers
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.gic.udesk.entity.TabUdeskCustomers">
insert into tab_udesk_customers (id, enterprise_id, user_id,
customer_id, create_time)
values (#{id,jdbcType=INTEGER}, #{enterpriseId,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER},
#{customerId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})
</insert>
<insert id="insertSelective" parameterType="com.gic.udesk.entity.TabUdeskCustomers">
insert into tab_udesk_customers
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="enterpriseId != null">
enterprise_id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="customerId != null">
customer_id,
</if>
<if test="createTime != null">
create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="enterpriseId != null">
#{enterpriseId,jdbcType=INTEGER},
</if>
<if test="userId != null">
#{userId,jdbcType=INTEGER},
</if>
<if test="customerId != null">
#{customerId,jdbcType=INTEGER},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.gic.udesk.entity.TabUdeskCustomers">
update tab_udesk_customers
<set>
<if test="enterpriseId != null">
enterprise_id = #{enterpriseId,jdbcType=INTEGER},
</if>
<if test="userId != null">
user_id = #{userId,jdbcType=INTEGER},
</if>
<if test="customerId != null">
customer_id = #{customerId,jdbcType=INTEGER},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.gic.udesk.entity.TabUdeskCustomers">
update tab_udesk_customers
set enterprise_id = #{enterpriseId,jdbcType=INTEGER},
user_id = #{userId,jdbcType=INTEGER},
customer_id = #{customerId,jdbcType=INTEGER},
create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="countCustomerId" resultMap="BaseResultMap">
select <include refid="Base_Column_List"></include>
from tab_udesk_customers
where enterprise_id = #{enterpriseId}
and user_id = #{userId}
</select>
</mapper>
\ No newline at end of file
......@@ -18,7 +18,7 @@
ticket_title, ticket_status, create_time, update_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
select
<include refid="Base_Column_List" />
from tab_udesk_enterprise
where id = #{id,jdbcType=INTEGER}
......@@ -150,4 +150,35 @@
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="page" parameterType="com.gic.udesk.qo.TicketListQO" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"></include>
from tab_udesk_enterprise
where 1=1
<if test="search != null and search != '' ">
and (business_module_name like concat('%', #{search}, '%')
or ticket_num like concat('%', #{search}, '%')
or ticket_title like concat('%', #{search}, '%')
)
</if>
<if test="ticketStatus != null and ticketStatus != '' ">
and ticket_status = #{ticketStatus}
</if>
<if test="businessModule != null and businessModule != '' ">
and business_module = #{businessModule}
</if>
<if test="startTime != null and startTime != '' ">
and create_time >= #{startTime}
</if>
<if test="endTime != null and endTime != '' ">
and create_time &lt;= #{endTime}
</if>
order by create_time desc
</select>
<update id="updateStatus">
update tab_udesk_enterprise set ticket_status = #{status}
where ticket_id = #{ticketId}
</update>
</mapper>
\ No newline at end of file
......@@ -167,16 +167,16 @@
from tab_udesk_tapd_rel
where status = 1
<if test="relType != null">
and rel_type = #{relType,jdbcType=INTEGER},
and rel_type = #{relType,jdbcType=INTEGER}
</if>
<if test="workspaceId != null">
and workspace_id = #{workspaceId,jdbcType=CHAR},
and workspace_id = #{workspaceId,jdbcType=CHAR}
</if>
<if test="tapdName != null">
and tapd_name = #{tapdName,jdbcType=CHAR},
and tapd_name = #{tapdName,jdbcType=CHAR}
</if>
<if test="udeskName != null">
and udesk_name = #{udeskName,jdbcType=CHAR},
and udesk_name = #{udeskName,jdbcType=CHAR}
</if>
</select>
......
......@@ -333,10 +333,10 @@
from tab_udesk_ticket
where status = 1
<if test="bugId != null">
and bug_id = #{bugId,jdbcType=VARCHAR},
and bug_id = #{bugId,jdbcType=VARCHAR}
</if>
<if test="workspaceId != null">
and workspace_id = #{workspaceId,jdbcType=VARCHAR},
and workspace_id = #{workspaceId,jdbcType=VARCHAR}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -69,7 +69,7 @@
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-platform-udesk-api</artifactId>
<version>${gic-platform-enterprise-api}</version>
<version>${gic-platform-udesk-api}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
......@@ -129,11 +129,6 @@
<artifactId>gic-platform-enterprise-api</artifactId>
<version>${gic-platform-enterprise-api}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-enterprise-download</artifactId>
<version>${gic-enterprise-download}</version>
</dependency>
</dependencies>
<build>
......@@ -154,7 +149,7 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.5.RELEASE</version>
<configuration>
<mainClass>com.gic.auth.web.Main</mainClass>
<mainClass>com.gic.udesk.web.Main</mainClass>
<excludeGroupIds>ch.qos.logback</excludeGroupIds>
</configuration>
<executions>
......
package com.gic.udesk.web.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.gic.enterprise.utils.UserDetailUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.alibaba.fastjson.JSON;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.ano.IgnoreLogin;
import com.gic.enterprise.error.ErrorCode;
import com.gic.enterprise.utils.ResultControllerUtils;
import com.gic.udesk.constant.*;
import com.gic.udesk.dto.gic.GicTicketDTO;
import com.gic.udesk.dto.uploadfile.UploadFileDTO;
import com.gic.udesk.qo.TicketListQO;
import com.gic.udesk.service.GicTicketApiService;
import com.gic.udesk.service.UdeskBaseApiService;
import com.gic.udesk.web.utils.UdeskHttpClientUtil;
@RestController
public class GicTicketController {
private static final Logger LOGGER = LogManager.getLogger(GicTicketController.class);
@Autowired
private UdeskBaseApiService udeskBaseApiService;
@Autowired
private GicTicketApiService gicTicketApiService;
@RequestMapping("/get-gic-service-select")
@IgnoreLogin
public RestResponse getGicServiceSelect() {
return ResultControllerUtils.commonResult(udeskBaseApiService.getGicServiceSelect());
}
/**
* 获取工单模板的自定义字段
* @param type 1:gic基础业务 2:应用
* @return
*/
@RequestMapping("/get-custom-field-by-type")
@IgnoreLogin
public RestResponse getCustomFieldFromUdeskTemplates(Integer type) {
return ResultControllerUtils.commonResult(udeskBaseApiService.getCustomFieldFromUdeskTemplates(type));
}
/**
* 工单回复信息
* @param ticketId
* @param currentPage
* @param pageSize
* @return
*/
@RequestMapping("/get-ticket-replies")
@IgnoreLogin
public RestResponse getTicketReplies(Integer ticketId, Integer currentPage, Integer pageSize) {
return ResultControllerUtils.commonResult(gicTicketApiService.getTicketReplies(ticketId, currentPage, pageSize));
}
@RequestMapping("/get-ticket-detail")
@IgnoreLogin
public RestResponse getTicketDetail(Integer ticketId) {
return ResultControllerUtils.commonResult(gicTicketApiService.getTicketDetailById(ticketId));
}
@RequestMapping("/add-ticket")
@IgnoreLogin
public RestResponse addTicket(GicTicketDTO dto) {
dto.setTicket_field(JSON.parseObject(dto.getTicketFieldJsonStr(), Map.class));
dto.setGicEnterpriseId(UserDetailUtils.getUserDetail().getEnterpriseId());
dto.setGicUserId(UserDetailUtils.getUserDetail().getUserId());
dto.setGicUserName(UserDetailUtils.getUserDetail().getUserInfo().getUserName());
dto.setGicEnterpriseName(UserDetailUtils.getUserDetail().getEnterpriseInfo().getEnterpriseName());
return ResultControllerUtils.commonResult(gicTicketApiService.saveTicket(dto));
}
@RequestMapping("/list-ticket")
@IgnoreLogin
public RestResponse page(TicketListQO params) {
return ResultControllerUtils.commonResult(gicTicketApiService.page(params));
}
@RequestMapping("/close-ticket")
@IgnoreLogin
public RestResponse closeTicket(Integer ticketId) {
return ResultControllerUtils.commonResult(gicTicketApiService.closeTicket(ticketId));
}
@RequestMapping("/ticket-upload-file")
@IgnoreLogin
public RestResponse getCustomFieldFromUdeskTemplates(HttpServletRequest request) throws Exception {
String ticketId = request.getParameter("ticketId");
if (!StringUtils.isNumeric(ticketId)) {
return RestResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "工单ID错误,数值非法");
}
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//上传一个文件处理方式,如果是多个,用getFiles
MultipartFile file = multipartRequest.getFile("file");
if (file.isEmpty()) {
return RestResponse.failure(ErrorCode.PARAMETER_ERROR.getCode(), "文件为空");
}
LOGGER.info("udesk工单上传附件");
String replyRespStr = UdeskHttpClientUtil.postUdeskJsonFromJsonForFile("/tickets/upload_file", Integer.parseInt(ticketId), file);
LOGGER.info("desk工单上传附件返回为{}", replyRespStr);
UploadFileDTO result = JSON.parseObject(replyRespStr, UploadFileDTO.class);
if (result.getCode() == 1000) {
return RestResponse.success();
}
return RestResponse.failure(ErrorCode.SYSTEM_ERROR.getCode(), result.getMessage());
}
/**
* udesk自定义字段 客服权限
* @return
*/
@RequestMapping("/agent-permission-enum")
@IgnoreLogin
public RestResponse agentPermissionEnum() {
return RestResponse.success(AgentPermissionEnum.list());
}
/**
* udesk自定义字段 计算字段的计算结果类型
* @return
*/
@RequestMapping("/calculate-result-type-enum")
@IgnoreLogin
public RestResponse calculateResultTypeEnum() {
return RestResponse.success(CalculateResultTypeEnum.list());
}
@RequestMapping("/ticket-status-enum")
@IgnoreLogin
public RestResponse ticketStatusEnum() {
return RestResponse.success(UdeskStatusEnum.list());
}
/**
* udesk自定义字段 客户权限
* @return
*/
@RequestMapping("/custom-permission-enum")
@IgnoreLogin
public RestResponse customPermissionEnum() {
return RestResponse.success(CustomerPermissionEnum.list());
}
/**
* udesk自定义字段 字段类型
* @return
*/
@RequestMapping("/custom-field-content-type-enum")
@IgnoreLogin
public RestResponse customFieldContentTypeEnum() {
return RestResponse.success(CustomFieldContentTypeEnum.list());
}
}
......@@ -33,6 +33,19 @@ public class MessageController {
return ResultControllerUtils.commonResult(udeskMessageApiService.saveUdeskMessage(udeskMessage));
}
/**
* 不需要同步到tapd的触发器
* @param udeskMessage
* @return
*/
@IgnoreLogin
@RequestMapping("udesk-message-no-tapd")
public RestResponse udeskMessageNoTapd(@RequestBody UdeskMessageDTO udeskMessage) {
logger.info("接收UDESK不需要同步tapd的消息是:{}", udeskMessage);
udeskMessage.setSource(UdeskSharedConstant.UDESK_SOURCE);
return ResultControllerUtils.commonResult(udeskMessageApiService.saveUdeskMessageNoTapd(udeskMessage));
}
@RequestMapping(value = "tapd-message", method = RequestMethod.POST)
@IgnoreLogin
public RestResponse tapdMessage(@RequestBody String tapdMessageStr) {
......
package com.gic.udesk.web.controller;
import com.gic.udesk.service.UdeskBaseApiService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.gic.udesk.web.utils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;
public class UdeskHttpClientUtil {
private static final Logger logger = LogManager.getLogger(UdeskHttpClientUtil.class);
private static PoolingHttpClientConnectionManager connectionManager = null;
private static CloseableHttpClient httpClient = null;
static {
LayeredConnectionSocketFactory sslsf = null;
try {
sslsf = new SSLConnectionSocketFactory(SSLContext.getDefault());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("https", sslsf).register("http", new PlainConnectionSocketFactory()).build();
connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
connectionManager.setMaxTotal(500);
connectionManager.setDefaultMaxPerRoute(100);
httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
} catch (NoSuchAlgorithmException e) {
logger.info("加载UdeskHttpClientUtil失败", e);
}
}
/**
* udesk的post请求,Request Body 上传文件参数天聪
*/
public static String postUdeskJsonFromJsonForFile(String url, Integer ticketId, MultipartFile file) {
long timeStamp = System.currentTimeMillis() / 1000;
url = "http://demogic.udesk.cn/open_api_v1" + url + "?email=jingjiawei@demogic.com" + "&timestamp=" + timeStamp + "&sign=" + UdeskUtils.getSign(timeStamp);
logger.info(url);
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
response = getResponseForFile(file, ticketId, httpPost);
return EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
logger.info("POST请求{}失败,参数ticketId:{}", url, ticketId, e);
} finally {
closeResponse(response);
}
return null;
}
/**
* 铁臂-使用httpclient自带的URIBuilder建立URI
* @param uri
* @param requestParams
* @return String
* @throws URISyntaxException
*/
private static String getURIBuilder(String uri, Map<String, Object> requestParams) throws URISyntaxException {
URIBuilder uriBuilder = new URIBuilder( uri);
if (requestParams != null && requestParams.size() > 0) {
for (Map.Entry<String, Object> entry : requestParams.entrySet()) {
String key = entry.getKey();
if (StringUtils.isNotBlank(key)) {
uriBuilder.setParameter(key, String.valueOf(entry.getValue()));
}
}
}
return uriBuilder.build().toString();
}
/**
* 拼接URL
*/
private static String getURL(String url, Map<String, Object> param) {
if (param != null && param.size() > 0) {
StringBuilder urlSB = new StringBuilder(url);
Set<Map.Entry<String, Object>> paramSet = param.entrySet();
boolean isFirst = true;
for (Map.Entry<String, Object> entry : paramSet) {
if (isFirst) {
urlSB.append("?");
isFirst = false;
} else {
urlSB.append("&");
}
urlSB.append(entry.getKey()).append("=").append(entry.getValue());
}
return urlSB.toString();
}
return url;
}
/**
* 关闭Response
*/
private static void closeResponse(CloseableHttpResponse response) {
if (response != null) {
try {
response.close();
} catch (Exception e) {
logger.info("关闭response失败", e);
}
}
}
/**
* 获取Response
*/
private static CloseableHttpResponse getResponse(String json, HttpPost httpPost)
throws IOException, ClientProtocolException {
CloseableHttpResponse response;
if (json != null && (!"".equals(json.trim()))) {
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
}
response = httpClient.execute(httpPost);
return response;
}
/**
* 上传文件填充
* @param file
* @param ticketId
* @param httpPost
* @return
* @throws IOException
* @throws ClientProtocolException
*/
private static CloseableHttpResponse getResponseForFile(MultipartFile file, Integer ticketId, HttpPost httpPost)
throws IOException, ClientProtocolException {
CloseableHttpResponse response;
//解决乱码,设置mode
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
multipartEntityBuilder.addBinaryBody("file", file.getInputStream(), ContentType.APPLICATION_OCTET_STREAM, file.getOriginalFilename());
multipartEntityBuilder.addTextBody("ticket_id", ticketId.toString());
multipartEntityBuilder.addTextBody("file_name", file.getOriginalFilename());
HttpEntity httpEntity = multipartEntityBuilder.build();
httpPost.setEntity(httpEntity);
response = httpClient.execute(httpPost);
return response;
}
}
package com.gic.udesk.web.utils;
import org.apache.commons.codec.digest.DigestUtils;
public class UdeskUtils {
public static String getSign(long timeStamp){
return DigestUtils.sha1Hex("jingjiawei@demogic.com&2a83c020-2309-4064-b4eb-af1367425c99&" +timeStamp);
}
}
......@@ -17,5 +17,7 @@
<dubbo:reference interface="com.gic.udesk.service.UdeskMessageApiService" id="udeskMessageApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.udesk.service.TapdMessageApiService" id="tapdMessageApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.udesk.service.TapdConfigApiService" id="tapdConfigApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.udesk.service.UdeskBaseApiService" id="udeskBaseApiService" timeout="6000"/>
<dubbo:reference interface="com.gic.udesk.service.GicTicketApiService" id="gicTicketApiService" timeout="6000"/>
</beans>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment