implements ProjectTraceS
 				msg.setMessageContent(projectStaffMessage);
 				msg.setReadFlag(ReadFlagConstant.UN_READ);
 				msg.setUserId(staff.getStaffId());
+
+				//21.09.10:记录消息类型和对应的业务id
+				msg.setTargetId(projectId);
+				msg.setMessageType(UserMessageTypeConstant.PROJECT_FROM_RESI_EVENT);
+
 				msgList.add(msg);
 				map.put(staff.getStaffId(),staff.getStaffId());
 			}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/AttachmentDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/AttachmentDTO.java
new file mode 100644
index 0000000000..08fc2f7cc5
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/AttachmentDTO.java
@@ -0,0 +1,22 @@
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 16:21
+ */
+@Data
+public class AttachmentDTO implements Serializable {
+    private static final long serialVersionUID = 6505979559566901869L;
+    private String name;
+    private String format;
+    private String type;
+    private String url;
+    private Integer size;
+    private Integer duration;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ExternalLinkDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ExternalLinkDTO.java
new file mode 100644
index 0000000000..e298d31648
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ExternalLinkDTO.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 指南外链表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class ExternalLinkDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 链接说明
+     */
+	private String description;
+
+    /**
+     * 外部链接
+     */
+	private String externalLink;
+
+    /**
+     * 外部链接
+     */
+    private Integer sort;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideAttachmentDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideAttachmentDTO.java
new file mode 100644
index 0000000000..212e9bc369
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideAttachmentDTO.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 办事指南附件
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideAttachmentDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一标识
+     */
+	private String id;
+
+    /**
+     * 客户ID
+     */
+	private String customerId;
+
+    /**
+     * 办事指南ID
+     */
+	private String guideId;
+
+    /**
+     * 附件名
+     */
+	private String attachmentName;
+
+    /**
+     * 文件大小 单位byte
+     */
+	private Integer attachmentSize;
+
+    /**
+     * 文件格式 word、excel、pdf
+     */
+	private String attachmentFormat;
+
+    /**
+     * 类型 
+     */
+	private String attachmentType;
+
+    /**
+     * 附件地址
+     */
+	private String attachmentUrl;
+
+    /**
+     * 语音或视频时长,秒
+     */
+	private Integer duration;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+    /**
+     * 删除标识 0.未删除 1.已删除
+     */
+	private Integer delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCategoryDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCategoryDTO.java
new file mode 100644
index 0000000000..7d0ed1eef4
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCategoryDTO.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-08
+ */
+@Data
+public class GuideCategoryDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 客户id,产品默认配置此列存储default
+     */
+    private String customerId;
+
+    /**
+     * 分类名,客户内唯一
+     */
+    private String categoryName;
+
+    /**
+     * 分类编码:分类名的全拼; eg:gongjijin
+     */
+    private String categoryCode;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+    private String status;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+    @JsonIgnore
+    private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+    @JsonIgnore
+    private Integer revision;
+
+    /**
+     * 创建人
+     */
+    @JsonIgnore
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonIgnore
+    private Date createdTime;
+
+    /**
+     * 更新人
+     */
+    @JsonIgnore
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonIgnore
+    private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCollectionDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCollectionDTO.java
new file mode 100644
index 0000000000..6b9dbfaeee
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideCollectionDTO.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 指南收藏表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideCollectionDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 用户ID
+     */
+	private String userId;
+
+    /**
+     * 用户所属客户端 居民端resi 工作端gov
+     */
+	private String app;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+	private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideDTO.java
new file mode 100644
index 0000000000..f5fe57d143
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideDTO.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 办事指南表 
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID 唯一标识
+     */
+	private String id;
+
+    /**
+     * 客户ID
+     */
+	private String customerId;
+
+    /**
+     * 发布单位类型 机关agency 网格grid 部门dept
+     */
+    private String orgType;
+
+    /**
+     * 发布单位ID
+     */
+	private String orgId;
+
+    /**
+     * 发布单位名称
+     */
+    private String orgName;
+
+    /**
+     * 所属组织机构ID(customer_agency.id)
+     */
+	private String pid;
+
+    /**
+     * 所有上级组织ID,英文:隔开
+     */
+	private String pids;
+
+    /**
+     * 标题
+     */
+	private String title;
+
+    /**
+     * 分类ID
+     */
+	private String categoryCode;
+
+    /**
+     * 删除标识:0.未删除 1.已删除
+     */
+	private Integer delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideExternalLinkDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideExternalLinkDTO.java
new file mode 100644
index 0000000000..39612bb4ff
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideExternalLinkDTO.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 指南外链表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideExternalLinkDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 链接说明
+     */
+	private String description;
+
+    /**
+     * 外部链接
+     */
+	private String externalLink;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+	private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDTO.java
new file mode 100644
index 0000000000..40e4fed74e
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDTO.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 指南模块关联表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideModuleDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 模块ID
+     */
+	private String moduleId;
+
+    /**
+     * 
+     */
+	private String moduleContent;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+	private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDTO.java
new file mode 100644
index 0000000000..938e7b211a
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDTO.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideModuleDictDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 模块key
+     */
+	private String moduleValue;
+
+    /**
+     * 模块名
+     */
+	private String moduleName;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+	private String status;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+	private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDefaultDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDefaultDTO.java
new file mode 100644
index 0000000000..6c59d906f9
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/GuideModuleDictDefaultDTO.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 指南模块默认字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class GuideModuleDictDefaultDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+	private String id;
+
+    /**
+     * 模块key
+     */
+	private String moduleValue;
+
+    /**
+     * 模块名
+     */
+	private String moduleName;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+	private String status;
+
+    /**
+     * 删除标识 0未删除、1已删除
+     */
+	private String delFlag;
+
+    /**
+     * 乐观锁
+     */
+	private Integer revision;
+
+    /**
+     * 创建人
+     */
+	private String createdBy;
+
+    /**
+     * 创建时间
+     */
+	private Date createdTime;
+
+    /**
+     * 更新人
+     */
+	private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+	private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ModuleDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ModuleDTO.java
new file mode 100644
index 0000000000..548395fd96
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/ModuleDTO.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+public class ModuleDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键
+     */
+    private String guideModuleId;
+    /**
+     * 主键
+     */
+	private String moduleId;
+
+    /**
+     * 模块key
+     */
+	private String moduleValue;
+
+    /**
+     * 模块名
+     */
+	private String moduleName;
+
+    /**
+     * 模块内容
+     */
+    private String moduleContent;
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/EditGuideCategoryFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/EditGuideCategoryFormDTO.java
new file mode 100644
index 0000000000..79286ba45f
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/EditGuideCategoryFormDTO.java
@@ -0,0 +1,49 @@
+package com.epmet.dto.form;
+
+import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description 编辑、禁用、删除统一入参
+ * @Author yinzuomei
+ * @Date 2021/9/8 4:15 下午
+ */
+@Data
+public class EditGuideCategoryFormDTO implements Serializable {
+    private static final long serialVersionUID = -6853534660181580456L;
+
+    public interface AddUserInternalGroup {
+    }
+
+    public interface StatusGroup {
+    }
+
+    public interface UpdateInfoGroup extends CustomerClientShowGroup {
+    }
+    public interface SaveInfoGroup extends CustomerClientShowGroup {
+    }
+
+    public interface DelGroup {
+    }
+    @NotBlank(message = "当前操作人id不能为空", groups = AddUserInternalGroup.class)
+    private String staffId;
+
+    @NotBlank(message = "客户id不能为空",groups = {DelGroup.class,UpdateInfoGroup.class,SaveInfoGroup.class})
+    private String customerId;
+
+    @NotBlank(message = "id不能为空", groups = {StatusGroup.class,DelGroup.class,UpdateInfoGroup.class})
+    private String id;
+
+    @NotBlank(message = "status不能为空", groups = StatusGroup.class)
+    private String status;
+
+    @NotBlank(message = "分类名称不能为空不能为空", groups = {UpdateInfoGroup.class,SaveInfoGroup.class})
+    @Length(max = 10, message = "分类名称最多填入10个字", groups = {UpdateInfoGroup.class,SaveInfoGroup.class})
+    private String categoryName;
+
+}
+
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideAddFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideAddFormDTO.java
new file mode 100644
index 0000000000..dd74b3fac6
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideAddFormDTO.java
@@ -0,0 +1,61 @@
+package com.epmet.dto.form;
+
+import com.epmet.dto.AttachmentDTO;
+import com.epmet.dto.ExternalLinkDTO;
+import com.epmet.dto.ModuleDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 10:24
+ */
+@NoArgsConstructor
+@Data
+public class GuideAddFormDTO implements Serializable {
+
+    private static final long serialVersionUID = -7750999102010191460L;
+    /**
+     * 标题
+     */
+    @NotBlank(message = "标题不能为空")
+    private String title;
+    /**
+     * 标题
+     */
+    @NotBlank(message = "分类不能为空")
+    private String categoryCode;
+    /**
+     * 机关类型 机关agency 网格grid 部门dept
+     */
+    @NotBlank(message = "所属机关类型不能为空")
+    private String orgType;
+    /**
+     * 所属机关
+     */
+    @NotBlank(message = "所属机关ID不能为空")
+    private String orgId;
+    /**
+     * 所属机关
+     */
+    @NotBlank(message = "所属机关名不能为空")
+    private String orgName;
+    /**
+     * 外部链接
+     */
+    private List externalLinks;
+    /**
+     * 内容模块
+     */
+    private List moduleList;
+    /**
+     * 附件
+     */
+    private List attachmentList;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCateOrderFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCateOrderFormDTO.java
new file mode 100644
index 0000000000..6b66e9f7c5
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCateOrderFormDTO.java
@@ -0,0 +1,56 @@
+package com.epmet.dto.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description 分类排序入参DTO
+ * @Author yinzuomei
+ * @Date 2021/9/8 4:03 下午
+ */
+@Data
+public class GuideCateOrderFormDTO implements Serializable {
+    private static final long serialVersionUID = 8671295475212569124L;
+
+    public interface AddUserInternalGroup {
+    }
+
+    @NotBlank(message = "当前操作人id不能为空", groups = AddUserInternalGroup.class)
+    private String staffId;
+
+
+    @NotEmpty(message = "顺序不能为空", groups = {AddUserInternalGroup.class})
+    private List orderList;
+
+    /**
+     * 排序索引号dto
+     */
+    public static class OrderIndexDTO {
+        private String id;
+        private Integer orderIndex;
+
+        public OrderIndexDTO() {
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public Integer getOrderIndex() {
+            return orderIndex;
+        }
+
+        public void setOrderIndex(Integer orderIndex) {
+            this.orderIndex = orderIndex;
+        }
+    }
+}
+
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryDropDownFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryDropDownFormDTO.java
new file mode 100644
index 0000000000..a92e1c2e09
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryDropDownFormDTO.java
@@ -0,0 +1,28 @@
+package com.epmet.dto.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description 发布指南、编辑指南、查询指南列表  分类下拉框
+ * @Author yinzuomei
+ * @Date 2021/9/8 2:57 下午
+ */
+@Data
+public class GuideCategoryDropDownFormDTO implements Serializable {
+    private static final long serialVersionUID = 9122708701080412461L;
+    public interface AddUserInternalGroup {
+    }
+    /**
+     * 新增指南:saveorupdate;查询指南列表:query
+     */
+    @NotBlank(message = "新增指南:saveorupdate;查询指南列表:query",groups = AddUserInternalGroup.class)
+    private String queryOrigin;
+
+    @NotBlank(message = "当前工作人员所属客户id不能为空",groups = AddUserInternalGroup.class)
+    private String customerId;
+
+}
+
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryPageFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryPageFormDTO.java
new file mode 100644
index 0000000000..b67686e451
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideCategoryPageFormDTO.java
@@ -0,0 +1,21 @@
+package com.epmet.dto.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description 工作端PC或者运营端分页
+ * @Author yinzuomei
+ * @Date 2021/9/8 1:35 下午
+ */
+@Data
+public class GuideCategoryPageFormDTO  implements Serializable {
+    private static final long serialVersionUID = -7551388716349439643L;
+    public interface AddUserInternalGroup {
+    }
+    @NotBlank(message = "客户id不能为空,运营端传default", groups = AddUserInternalGroup.class)
+    private String customerId;
+}
+
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideEditFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideEditFormDTO.java
new file mode 100644
index 0000000000..a589c4c1ec
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideEditFormDTO.java
@@ -0,0 +1,70 @@
+package com.epmet.dto.form;
+
+import com.epmet.dto.AttachmentDTO;
+import com.epmet.dto.ExternalLinkDTO;
+import com.epmet.dto.ModuleDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 10:24
+ */
+@NoArgsConstructor
+@Data
+public class GuideEditFormDTO implements Serializable {
+
+    private static final long serialVersionUID = -7750999102010191460L;
+    /**
+     * 工作人员ID
+     */
+    private String staffId;
+    /**
+     * 指南ID
+     */
+    @NotBlank(message = "指南id不能为空")
+    private String guideId;
+    /**
+     * 标题
+     */
+    @NotBlank(message = "标题不能为空")
+    private String title;
+    /**
+     * 标题
+     */
+    @NotBlank(message = "分类不能为空")
+    private String categoryCode;
+    /**
+     * 机关类型 机关agency 网格grid 部门dept
+     */
+    @NotBlank(message = "所属机关类型不能为空")
+    private String orgType;
+    /**
+     * 所属机关
+     */
+    @NotBlank(message = "所属机关ID不能为空")
+    private String orgId;
+    /**
+     * 所属机关
+     */
+    @NotBlank(message = "所属机关名不能为空")
+    private String orgName;
+    /**
+     * 外部链接
+     */
+    private List externalLinks;
+    /**
+     * 内容模块
+     */
+    private List moduleList;
+    /**
+     * 附件
+     */
+    private List attachmentList;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideFormDTO.java
new file mode 100644
index 0000000000..48bfde8f04
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideFormDTO.java
@@ -0,0 +1,39 @@
+package com.epmet.dto.form;
+
+import com.epmet.dto.ExternalLinkDTO;
+import com.epmet.dto.GuideAttachmentDTO;
+import com.epmet.dto.ModuleDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 10:24
+ */
+@NoArgsConstructor
+@Data
+public class GuideFormDTO implements Serializable {
+
+    private static final long serialVersionUID = -7750999102010191460L;
+    /**
+     * 标题
+     */
+    @NotBlank(message = "指南id不能为空")
+    private String guideId;
+
+    /**
+     * 工作人员
+     */
+    private String staffId;
+
+    /**
+     * 客户ID
+     */
+    private String customerId;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideListFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideListFormDTO.java
new file mode 100644
index 0000000000..d8edcf1308
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/GuideListFormDTO.java
@@ -0,0 +1,32 @@
+package com.epmet.dto.form;
+
+import com.epmet.commons.tools.dto.form.PageFormDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 9:38
+ */
+@NoArgsConstructor
+@Data
+public class GuideListFormDTO extends PageFormDTO implements Serializable {
+
+    private static final long serialVersionUID = -4471422632936288213L;
+    private String customerId;
+    /**
+     * 组织ID
+     */
+    private String agencyId;
+    /**
+     * 分类
+     */
+    private String categoryCode;
+    /**
+     * 标题
+     */
+    private String guideTitle;
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GetCategoryResultDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GetCategoryResultDTO.java
new file mode 100644
index 0000000000..6bf568d65d
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GetCategoryResultDTO.java
@@ -0,0 +1,17 @@
+package com.epmet.dto.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 10:52
+ */
+@Data
+public class GetCategoryResultDTO implements Serializable {
+    private static final long serialVersionUID = 3527239091132653541L;
+    private String categoryId;
+    private String categoryName;
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDetailResultDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDetailResultDTO.java
new file mode 100644
index 0000000000..88844f301c
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDetailResultDTO.java
@@ -0,0 +1,67 @@
+package com.epmet.dto.result;
+
+import com.epmet.dto.AttachmentDTO;
+import com.epmet.dto.ExternalLinkDTO;
+import com.epmet.dto.ModuleDTO;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author zhaoqifeng
+ * @Date 2021/9/7 10:24
+ */
+@NoArgsConstructor
+@Data
+public class GuideDetailResultDTO implements Serializable {
+
+    private static final long serialVersionUID = -7750999102010191460L;
+    /**
+     * 标题
+     */
+    private String guideId;
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 分类ID
+     */
+    private String categoryCode;
+    /**
+     * 分类名
+     */
+    private String categoryName;
+    /**
+     * 机关类型 机关agency 网格grid 部门dept
+     */
+    private String orgType;
+    /**
+     * 所属机关
+     */
+    private String orgId;
+    /**
+     * 所属机关名
+     */
+    private String orgName;
+    /**
+     * 是否收藏 1是, 0否
+     */
+    private String collectionFlag;
+    /**
+     * 外部链接
+     */
+    private List externalLinks;
+    /**
+     * 内容模块
+     */
+    private List moduleList;
+    /**
+     * 附件
+     */
+    private List attachmentList;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDictResDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDictResDTO.java
new file mode 100644
index 0000000000..00f56ad3f9
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideDictResDTO.java
@@ -0,0 +1,39 @@
+package com.epmet.dto.result;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Description 办事指南】可用分类列表 新增、编辑指南时的下拉框:展示未禁用的分类; 查询指南列表:如果禁用的分类下存在指南列表,则展示,不存在直接不展示
+ * @Author yinzuomei
+ * @Date 2021/9/8 2:44 下午
+ */
+@Data
+public class GuideDictResDTO implements Serializable {
+
+    /**
+     * 分类名,客户内唯一
+     */
+    private String categoryName;
+
+    /**
+     * 分类编码:分类名的全拼; eg:gongjijin
+     */
+    private String categoryCode;
+
+    /**
+     * 排序
+     */
+    @JsonIgnore
+    private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+    @JsonIgnore
+    private String status;
+}
+
+
diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideListResultDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideListResultDTO.java
new file mode 100644
index 0000000000..7cd2400afa
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/result/GuideListResultDTO.java
@@ -0,0 +1,35 @@
+package com.epmet.dto.result;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class GuideListResultDTO implements Serializable {
+	private static final long serialVersionUID = -1360741408368601140L;
+	private String guideId;
+	/**
+	 * 标题
+	 */
+	private String title;
+	/**
+	 * 分类
+	 */
+	private String categoryName;
+	/**
+	 * 创建人ID
+	 */
+	private String createdId;
+	/**
+	 * 创建人姓名
+	 */
+	private String createdName;
+	/**
+	 * 更新时间
+	 */
+	private Date updatedTime;
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCategoryController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCategoryController.java
new file mode 100644
index 0000000000..b1e8824223
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCategoryController.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.dto.GuideCategoryDTO;
+import com.epmet.dto.form.EditGuideCategoryFormDTO;
+import com.epmet.dto.form.GuideCateOrderFormDTO;
+import com.epmet.dto.form.GuideCategoryDropDownFormDTO;
+import com.epmet.dto.form.GuideCategoryPageFormDTO;
+import com.epmet.dto.result.GuideDictResDTO;
+import com.epmet.service.GuideCategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@RestController
+@RequestMapping("guidecategory")
+public class GuideCategoryController {
+    
+    @Autowired
+    private GuideCategoryService guideCategoryService;
+
+    /**
+     * 【办事指南】分类列表-工作端PC和运营端用不分页
+     *
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result>
+     * @author yinzuomei
+     * @date 2021/9/8 1:33 下午
+     */
+    @PostMapping("page")
+    public Result> page(@RequestBody GuideCategoryPageFormDTO formDTO){
+        ValidatorUtils.validateEntity(formDTO, GuideCategoryPageFormDTO.AddUserInternalGroup.class);
+        PageData page = guideCategoryService.page(formDTO);
+        return new Result>().ok(page);
+    }
+
+    /**
+     * 办事指南】可用分类列表 新增、编辑指南时的下拉框:展示未禁用的分类; 查询指南列表:如果禁用的分类下存在指南列表,则展示,不存在直接不展示
+     * 
+     * @param tokenDto 
+     * @return  com.epmet.commons.tools.utils.Result> 
+     * @author yinzuomei 
+     * @date 2021/9/8 2:47 下午
+     */
+    @PostMapping("getcategory")
+    public Result> getCategory(@LoginUser TokenDto tokenDto,@RequestBody GuideCategoryDropDownFormDTO formDTO){
+        formDTO.setCustomerId(tokenDto.getCustomerId());
+        ValidatorUtils.validateEntity(formDTO,GuideCategoryDropDownFormDTO.AddUserInternalGroup.class);
+        return new Result>().ok(guideCategoryService.getCategory(formDTO));
+    }
+
+
+    /**
+     * 保存排序
+     *
+     * @param tokenDto
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result
+     * @author yinzuomei
+     * @date 2021/9/8 4:09 下午
+     */
+    @PostMapping("saveorder")
+    public Result saveOrder(@LoginUser TokenDto tokenDto,@RequestBody GuideCateOrderFormDTO formDTO){
+        formDTO.setStaffId(tokenDto.getUserId());
+        ValidatorUtils.validateEntity(formDTO,GuideCateOrderFormDTO.AddUserInternalGroup.class);
+        guideCategoryService.saveOrder(formDTO);
+        return new Result();
+    }
+
+    /**
+     * 禁用或者启用分类
+     *
+     * @param tokenDto
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result
+     * @author yinzuomei
+     * @date 2021/9/8 4:19 下午
+     */
+    @PostMapping("disable")
+    public Result disable(@LoginUser TokenDto tokenDto,@RequestBody EditGuideCategoryFormDTO formDTO){
+        formDTO.setStaffId(tokenDto.getUserId());
+        ValidatorUtils.validateEntity(formDTO,EditGuideCategoryFormDTO.StatusGroup.class,EditGuideCategoryFormDTO.AddUserInternalGroup.class);
+        guideCategoryService.disableGuideCategory(formDTO);
+        return new Result();
+    }
+
+    /**
+     * 删除分类,已经存在指南的不允许删除,给予提示
+     *
+     * @param tokenDto
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result
+     * @author yinzuomei
+     * @date 2021/9/8 4:45 下午
+     */
+    @PostMapping("delete")
+    public Result delete(@LoginUser TokenDto tokenDto,@RequestBody EditGuideCategoryFormDTO formDTO){
+        formDTO.setStaffId(tokenDto.getUserId());
+        ValidatorUtils.validateEntity(formDTO,EditGuideCategoryFormDTO.AddUserInternalGroup.class,EditGuideCategoryFormDTO.DelGroup.class);
+        guideCategoryService.delete(formDTO);
+        return new Result();
+    }
+
+
+    /**
+     * 新增分类,名称和编码客户内唯一
+     *
+     * @param tokenDto
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result
+     * @author yinzuomei
+     * @date 2021/9/8 5:11 下午
+     */
+    @PostMapping("save")
+    public Result save(@LoginUser TokenDto tokenDto,@RequestBody EditGuideCategoryFormDTO formDTO){
+        formDTO.setStaffId(tokenDto.getUserId());
+        ValidatorUtils.validateEntity(formDTO,EditGuideCategoryFormDTO.AddUserInternalGroup.class,EditGuideCategoryFormDTO.SaveInfoGroup.class);
+        return new Result().ok(guideCategoryService.save(formDTO));
+    }
+
+
+    /**
+     * 编辑名称
+     *
+     * @param tokenDto
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result
+     * @author yinzuomei
+     * @date 2021/9/8 5:37 下午
+     */
+    @PostMapping("update")
+    public Result update(@LoginUser TokenDto tokenDto,@RequestBody EditGuideCategoryFormDTO formDTO){
+        formDTO.setStaffId(tokenDto.getUserId());
+        ValidatorUtils.validateEntity(formDTO,EditGuideCategoryFormDTO.AddUserInternalGroup.class,EditGuideCategoryFormDTO.UpdateInfoGroup.class);
+        return new Result().ok(guideCategoryService.update(formDTO));
+    }
+
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCollectionController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCollectionController.java
new file mode 100644
index 0000000000..5c6ffe5019
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideCollectionController.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.AssertUtils;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.commons.tools.validator.group.AddGroup;
+import com.epmet.commons.tools.validator.group.DefaultGroup;
+import com.epmet.commons.tools.validator.group.UpdateGroup;
+import com.epmet.dto.GuideCollectionDTO;
+import com.epmet.dto.form.GuideFormDTO;
+import com.epmet.service.GuideCollectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+
+/**
+ * 指南收藏表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@RestController
+@RequestMapping("guidecollection")
+public class GuideCollectionController {
+    
+    @Autowired
+    private GuideCollectionService guideCollectionService;
+
+    @GetMapping("page")
+    public Result> page(@RequestParam Map params){
+        PageData page = guideCollectionService.page(params);
+        return new Result>().ok(page);
+    }
+
+    @GetMapping("{id}")
+    public Result get(@PathVariable("id") String id){
+        GuideCollectionDTO data = guideCollectionService.get(id);
+        return new Result().ok(data);
+    }
+
+    @PostMapping
+    public Result save(@RequestBody GuideCollectionDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
+        guideCollectionService.save(dto);
+        return new Result();
+    }
+
+    @PutMapping
+    public Result update(@RequestBody GuideCollectionDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+        guideCollectionService.update(dto);
+        return new Result();
+    }
+
+    @DeleteMapping
+    public Result delete(@RequestBody String[] ids){
+        //效验数据
+        AssertUtils.isArrayEmpty(ids, "id");
+        guideCollectionService.delete(ids);
+        return new Result();
+    }
+
+    /**
+     * @Description 收藏指南
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link Result}
+     * @Author zhaoqifeng
+     * @Date 2021/9/9 9:46
+     */
+    @PostMapping("collection")
+    public Result collection(@LoginUser TokenDto tokenDto, @RequestBody GuideFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO);
+        guideCollectionService.collection(tokenDto, formDTO);
+        return new Result();
+    }
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideController.java
new file mode 100644
index 0000000000..88d8115216
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideController.java
@@ -0,0 +1,180 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.dto.form.PageFormDTO;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.AssertUtils;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.commons.tools.validator.group.AddGroup;
+import com.epmet.commons.tools.validator.group.DefaultGroup;
+import com.epmet.commons.tools.validator.group.UpdateGroup;
+import com.epmet.dto.GuideDTO;
+import com.epmet.dto.form.GuideAddFormDTO;
+import com.epmet.dto.form.GuideEditFormDTO;
+import com.epmet.dto.form.GuideFormDTO;
+import com.epmet.dto.form.GuideListFormDTO;
+import com.epmet.dto.result.GuideDetailResultDTO;
+import com.epmet.dto.result.GuideListResultDTO;
+import com.epmet.service.GuideService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+
+/**
+ * 办事指南表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@RestController
+@RequestMapping("guide")
+public class GuideController {
+
+    @Autowired
+    private GuideService guideService;
+
+    @GetMapping("page")
+    public Result> page(@RequestParam Map params) {
+        PageData page = guideService.page(params);
+        return new Result>().ok(page);
+    }
+
+    @GetMapping("{id}")
+    public Result get(@PathVariable("id") String id) {
+        GuideDTO data = guideService.get(id);
+        return new Result().ok(data);
+    }
+
+    @PostMapping
+    public Result save(@RequestBody GuideDTO dto) {
+        //效验数据
+        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
+        guideService.save(dto);
+        return new Result();
+    }
+
+    @PutMapping
+    public Result update(@RequestBody GuideDTO dto) {
+        //效验数据
+        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+        guideService.update(dto);
+        return new Result();
+    }
+
+    @DeleteMapping
+    public Result delete(@RequestBody String[] ids) {
+        //效验数据
+        AssertUtils.isArrayEmpty(ids, "id");
+        guideService.delete(ids);
+        return new Result();
+    }
+
+    /**
+     * @Description 办事指南列表
+     * @Param formDTO
+     * @Return {@link Result< PageData< GuideListResultDTO>>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 13:59
+     */
+    @PostMapping("list")
+    public Result> guideList(@LoginUser TokenDto tokenDto, @RequestBody GuideListFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO, PageFormDTO.AddUserInternalGroup.class);
+        PageData page = guideService.guideList(tokenDto, formDTO);
+        return new Result>().ok(page);
+    }
+
+
+    /**
+     * @Description 添加指南
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link Result}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:13
+     */
+    @PostMapping("add")
+    public Result guideAdd(@LoginUser TokenDto tokenDto, @RequestBody GuideAddFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO);
+        guideService.guideAdd(tokenDto, formDTO);
+        return new Result();
+    }
+
+    /**
+     * @Description 修改指南
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link Result}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:13
+     */
+    @PostMapping("edit")
+    public Result guideEdit(@LoginUser TokenDto tokenDto, @RequestBody GuideEditFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO);
+        formDTO.setStaffId(tokenDto.getUserId());
+        guideService.guideEdit(formDTO);
+        return new Result();
+    }
+
+    /**
+     * @Description 删除指南
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link Result}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:13
+     */
+    @PostMapping("del")
+    public Result guideDel(@LoginUser TokenDto tokenDto, @RequestBody GuideFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO);
+        formDTO.setStaffId(tokenDto.getUserId());
+        guideService.guideDel(formDTO);
+        return new Result();
+    }
+
+    /**
+     * @Description 指南详情
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link Result< GuideDetailResultDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:13
+     */
+    @PostMapping("detail")
+    public Result guideDetail(@LoginUser TokenDto tokenDto, @RequestBody GuideFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO);
+        formDTO.setCustomerId(tokenDto.getCustomerId());
+        GuideDetailResultDTO result = guideService.guideDetail(tokenDto, formDTO);
+        return new Result().ok(result);
+    }
+
+
+    @PostMapping("collectionlist")
+    public Result> collectionList(@LoginUser TokenDto tokenDto, @RequestBody PageFormDTO formDTO) {
+        ValidatorUtils.validateEntity(formDTO, PageFormDTO.AddUserInternalGroup.class);
+        PageData page = guideService.collectionList(tokenDto, formDTO);
+        return new Result>().ok(page);
+    }
+
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleController.java
new file mode 100644
index 0000000000..dcaad21808
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleController.java
@@ -0,0 +1,93 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.AssertUtils;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.commons.tools.validator.group.AddGroup;
+import com.epmet.commons.tools.validator.group.DefaultGroup;
+import com.epmet.commons.tools.validator.group.UpdateGroup;
+import com.epmet.dto.GuideModuleDTO;
+import com.epmet.dto.ModuleDTO;
+import com.epmet.service.GuideModuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 指南模块关联表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@RestController
+@RequestMapping("guidemodule")
+public class GuideModuleController {
+    
+    @Autowired
+    private GuideModuleService guideModuleService;
+
+    @GetMapping("page")
+    public Result> page(@RequestParam Map params){
+        PageData page = guideModuleService.page(params);
+        return new Result>().ok(page);
+    }
+
+    @GetMapping("{id}")
+    public Result get(@PathVariable("id") String id){
+        GuideModuleDTO data = guideModuleService.get(id);
+        return new Result().ok(data);
+    }
+
+    @PostMapping
+    public Result save(@RequestBody GuideModuleDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
+        guideModuleService.save(dto);
+        return new Result();
+    }
+
+    @PutMapping
+    public Result update(@RequestBody GuideModuleDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+        guideModuleService.update(dto);
+        return new Result();
+    }
+
+    @DeleteMapping
+    public Result delete(@RequestBody String[] ids){
+        //效验数据
+        AssertUtils.isArrayEmpty(ids, "id");
+        guideModuleService.delete(ids);
+        return new Result();
+    }
+
+    @PostMapping("list")
+    public Result> getModuleList(@LoginUser TokenDto tokenDto) {
+        return new Result>().ok(guideModuleService.getModuleList(tokenDto.getCustomerId()));
+    }
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleDictController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleDictController.java
new file mode 100644
index 0000000000..a8a59b6b8b
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/GuideModuleDictController.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.controller;
+
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.AssertUtils;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.commons.tools.validator.group.AddGroup;
+import com.epmet.commons.tools.validator.group.DefaultGroup;
+import com.epmet.commons.tools.validator.group.UpdateGroup;
+import com.epmet.dto.GuideModuleDictDTO;
+import com.epmet.service.GuideModuleDictService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@RestController
+@RequestMapping("guidemoduledict")
+public class GuideModuleDictController {
+    
+    @Autowired
+    private GuideModuleDictService guideModuleDictService;
+
+    @GetMapping("page")
+    public Result> page(@RequestParam Map params){
+        PageData page = guideModuleDictService.page(params);
+        return new Result>().ok(page);
+    }
+
+    @GetMapping("{id}")
+    public Result get(@PathVariable("id") String id){
+        GuideModuleDictDTO data = guideModuleDictService.get(id);
+        return new Result().ok(data);
+    }
+
+    @PostMapping
+    public Result save(@RequestBody GuideModuleDictDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
+        guideModuleDictService.save(dto);
+        return new Result();
+    }
+
+    @PutMapping
+    public Result update(@RequestBody GuideModuleDictDTO dto){
+        //效验数据
+        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+        guideModuleDictService.update(dto);
+        return new Result();
+    }
+
+    @DeleteMapping
+    public Result delete(@RequestBody String[] ids){
+        //效验数据
+        AssertUtils.isArrayEmpty(ids, "id");
+        guideModuleDictService.delete(ids);
+        return new Result();
+    }
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideAttachmentDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideAttachmentDao.java
new file mode 100644
index 0000000000..01e5baddd7
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideAttachmentDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.entity.GuideAttachmentEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 办事指南附件
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideAttachmentDao extends BaseDao {
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCategoryDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCategoryDao.java
new file mode 100644
index 0000000000..71f757fd23
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCategoryDao.java
@@ -0,0 +1,98 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.dto.GuideCategoryDTO;
+import com.epmet.dto.result.GuideDictResDTO;
+import com.epmet.entity.GuideCategoryEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideCategoryDao extends BaseDao {
+
+    /**
+     * 工作端PC或者运营端分类列表查询,不分页
+     *
+     * @param customerId
+     * @return  java.util.List
+     * @author yinzuomei
+     * @date 2021/9/8 1:57 下午
+     */
+    List selectPageByCid(String customerId);
+
+    /**
+     * 办事指南】可用分类列表 新增、编辑指南时的下拉框:展示未禁用的分类; 查询指南列表:如果禁用的分类下存在指南列表,则展示,不存在直接不展示
+     *
+     * @param customerId
+     * @param queryOrigin
+     * @return  java.util.List
+     * @author yinzuomei
+     * @date 2021/9/8 3:15 下午
+     */
+    List selectCategoryDict(@Param("customerId") String customerId, @Param("queryOrigin") String queryOrigin);
+
+    /**
+     * 保存排序
+     *
+     * @param id
+     * @param orderIndex
+     * @param staffId
+     * @return  int
+     * @author yinzuomei
+     * @date 2021/9/8 4:11 下午
+     */
+    int updateOrder(@Param("id") String id, @Param("orderIndex") Integer orderIndex, @Param("staffId") String staffId);
+
+    /**
+     * 启用或者禁用
+     *
+     * @param id
+     * @param status
+     * @param staffId
+     * @return  int
+     * @author yinzuomei
+     * @date 2021/9/8 4:22 下午
+     */
+    int updateStatus(@Param("id") String id, @Param("status")String status, @Param("staffId")String staffId);
+
+    /**
+     * 查询这个分类下的项目数
+     *
+     * @param id
+     * @return  int
+     * @author yinzuomei
+     * @date 2021/9/8 4:36 下午
+     */
+    int selectGuideTotal(@Param("id") String id,@Param("customerId") String customerId);
+
+    int selectCategoryName(@Param("categoryName") String categoryName, @Param("customerId")String customerId, @Param("excludeId") String excludeId);
+
+    int selectCurrentOrder(String customerId);
+
+    int selectCategoryCode(@Param("categoryCode") String categoryCode, @Param("customerId")String customerId, @Param("excludeId") String excludeId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCollectionDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCollectionDao.java
new file mode 100644
index 0000000000..905dfb9f3e
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideCollectionDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.entity.GuideCollectionEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 指南收藏表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideCollectionDao extends BaseDao {
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideDao.java
new file mode 100644
index 0000000000..18644f0249
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideDao.java
@@ -0,0 +1,71 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.dto.form.GuideListFormDTO;
+import com.epmet.dto.result.GuideDetailResultDTO;
+import com.epmet.dto.result.GuideListResultDTO;
+import com.epmet.entity.GuideEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 办事指南表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideDao extends BaseDao {
+
+    /**
+     * 指南列表
+     *
+     * @Param formDTO
+     * @Return {@link List}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:21
+     */
+    List getGuideList(GuideListFormDTO formDTO);
+
+    /**
+     * 指南详情
+     *
+     * @Param customerId
+     * @Param guideId
+     * @Return {@link GuideDetailResultDTO}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 9:59
+     */
+    GuideDetailResultDTO getGuideDetail(@Param("customerId") String customerId, @Param("guideId") String guideId);
+
+    /**
+     * 收藏列表
+     *
+     * @Param tokenDto
+     * @Return {@link List< GuideListResultDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/9 10:09
+     */
+    List getCollectionList(TokenDto tokenDto);
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideExternalLinkDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideExternalLinkDao.java
new file mode 100644
index 0000000000..f766b71680
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideExternalLinkDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.entity.GuideExternalLinkEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 指南外链表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideExternalLinkDao extends BaseDao {
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDao.java
new file mode 100644
index 0000000000..07518e24eb
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDao.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.dto.ModuleDTO;
+import com.epmet.entity.GuideModuleEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 指南模块关联表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideModuleDao extends BaseDao {
+    /**
+     * @Description 获取指南的内容模块
+     * @Param guideId
+     * @Return {@link List< ModuleDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 10:18
+     */
+    List selectByGuideId(@Param("customerId") String customerId, @Param("guideId") String guideId);
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDao.java
new file mode 100644
index 0000000000..8af7910511
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.entity.GuideModuleDictEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideModuleDictDao extends BaseDao {
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDefaultDao.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDefaultDao.java
new file mode 100644
index 0000000000..071c7ed2c1
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/dao/GuideModuleDictDefaultDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.entity.GuideModuleDictDefaultEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 指南模块默认字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Mapper
+public interface GuideModuleDictDefaultDao extends BaseDao {
+	
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideAttachmentEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideAttachmentEntity.java
new file mode 100644
index 0000000000..192f52b306
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideAttachmentEntity.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 办事指南附件
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_attachment")
+public class GuideAttachmentEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户ID
+     */
+	private String customerId;
+
+    /**
+     * 办事指南ID
+     */
+	private String guideId;
+
+    /**
+     * 附件名
+     */
+	private String attachmentName;
+
+    /**
+     * 文件大小 单位byte
+     */
+	private Integer attachmentSize;
+
+    /**
+     * 文件格式 word、excel、pdf
+     */
+	private String attachmentFormat;
+
+    /**
+     * 类型 
+     */
+	private String attachmentType;
+
+    /**
+     * 附件地址
+     */
+	private String attachmentUrl;
+
+    /**
+     * 语音或视频时长,秒
+     */
+	private Integer duration;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCategoryEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCategoryEntity.java
new file mode 100644
index 0000000000..c13a7a3df9
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCategoryEntity.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-08
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_category")
+public class GuideCategoryEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 客户id,产品默认配置此列存储default
+	 */
+	private String customerId;
+
+	/**
+	 * 分类名,客户内唯一
+	 */
+	private String categoryName;
+
+	/**
+	 * 分类编码:分类名的全拼; eg:gongjijin
+	 */
+	private String categoryCode;
+
+	/**
+	 * 排序
+	 */
+	private Integer sort;
+
+	/**
+	 * 状态 禁用disable 启用enable
+	 */
+	private String status;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCollectionEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCollectionEntity.java
new file mode 100644
index 0000000000..f522884f79
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideCollectionEntity.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 指南收藏表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_collection")
+public class GuideCollectionEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 用户ID
+     */
+	private String userId;
+
+    /**
+     * 用户所属客户端 居民端resi 工作端gov
+     */
+	private String app;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideEntity.java
new file mode 100644
index 0000000000..5909729866
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideEntity.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 办事指南表 
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide")
+public class GuideEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户ID
+     */
+	private String customerId;
+
+	/**
+	 * 发布单位类型 机关agency 网格grid 部门dept
+	 */
+	private String orgType;
+
+	/**
+	 * 发布单位ID
+	 */
+	private String orgId;
+
+	/**
+	 * 发布单位名称
+	 */
+	private String orgName;
+
+    /**
+     * 所属组织机构ID(customer_agency.id)
+     */
+	private String pid;
+
+    /**
+     * 所有上级组织ID,英文:隔开
+     */
+	private String pids;
+
+    /**
+     * 标题
+     */
+	private String title;
+
+    /**
+     * 分类ID
+     */
+	private String categoryCode;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideExternalLinkEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideExternalLinkEntity.java
new file mode 100644
index 0000000000..3773c6acea
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideExternalLinkEntity.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 指南外链表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_external_link")
+public class GuideExternalLinkEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 链接说明
+     */
+	private String description;
+
+    /**
+     * 外部链接
+     */
+	private String externalLink;
+
+	/**
+	 * 排序
+	 */
+	private Integer sort;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictDefaultEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictDefaultEntity.java
new file mode 100644
index 0000000000..f01788acdc
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictDefaultEntity.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 指南模块默认字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_module_dict_default")
+public class GuideModuleDictDefaultEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 模块key
+     */
+	private String moduleValue;
+
+    /**
+     * 模块名
+     */
+	private String moduleName;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+	private String status;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictEntity.java
new file mode 100644
index 0000000000..2816effef0
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleDictEntity.java
@@ -0,0 +1,66 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_module_dict")
+public class GuideModuleDictEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 模块key
+     */
+	private String moduleValue;
+
+    /**
+     * 模块名
+     */
+	private String moduleName;
+
+    /**
+     * 排序
+     */
+	private Integer sort;
+
+    /**
+     * 状态 禁用disable 启用enable
+     */
+	private String status;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleEntity.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleEntity.java
new file mode 100644
index 0000000000..35d602602e
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/entity/GuideModuleEntity.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 指南模块关联表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("guide_module")
+public class GuideModuleEntity extends BaseEpmetEntity {
+
+	private static final long serialVersionUID = 1L;
+
+    /**
+     * 客户id
+     */
+	private String customerId;
+
+    /**
+     * 指南ID
+     */
+	private String guideId;
+
+    /**
+     * 模块ID
+     */
+	private String moduleId;
+
+    /**
+     * 
+     */
+	private String moduleContent;
+
+}
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideAttachmentService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideAttachmentService.java
new file mode 100644
index 0000000000..4b297fed10
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideAttachmentService.java
@@ -0,0 +1,114 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.AttachmentDTO;
+import com.epmet.dto.GuideAttachmentDTO;
+import com.epmet.entity.GuideAttachmentEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 办事指南附件
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideAttachmentService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideAttachmentDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideAttachmentDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideAttachmentDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideAttachmentDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * @Description 删除指南附件
+     * @Param guideId
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 17:16
+     */
+    void deleteByGuideId(String guideId);
+
+    /**
+     * @Description 获取指南附件
+     * @Param guideId
+     * @Return {@link List< AttachmentDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 10:49
+     */
+    List getByGuideId(String guideId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCategoryService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCategoryService.java
new file mode 100644
index 0000000000..5bde4619e6
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCategoryService.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.GuideCategoryDTO;
+import com.epmet.dto.form.EditGuideCategoryFormDTO;
+import com.epmet.dto.form.GuideCateOrderFormDTO;
+import com.epmet.dto.form.GuideCategoryDropDownFormDTO;
+import com.epmet.dto.form.GuideCategoryPageFormDTO;
+import com.epmet.dto.result.GuideDictResDTO;
+import com.epmet.entity.GuideCategoryEntity;
+
+import java.util.List;
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideCategoryService extends BaseService {
+
+    /**
+     * 【办事指南】分类列表-工作端PC和运营端用不分页
+     *
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result>
+     * @author yinzuomei
+     * @date 2021/9/8 1:33 下午
+     */
+    PageData page(GuideCategoryPageFormDTO formDTO);
+
+    /**
+     * 办事指南】可用分类列表 新增、编辑指南时的下拉框:展示未禁用的分类; 查询指南列表:如果禁用的分类下存在指南列表,则展示,不存在直接不展示
+     *
+     * @param formDTO
+     * @return  java.util.List
+     * @author yinzuomei
+     * @date 2021/9/8 3:06 下午
+     */
+    List getCategory(GuideCategoryDropDownFormDTO formDTO);
+
+    /**
+     * 保存排序
+     *
+     * @param formDTO
+     * @return  void
+     * @author yinzuomei
+     * @date 2021/9/8 4:09 下午
+     */
+    void saveOrder(GuideCateOrderFormDTO formDTO);
+
+
+    /**
+     * 启用或者禁用分类
+     *
+     * @param formDTO
+     * @return  int
+     * @author yinzuomei
+     * @date 2021/9/8 4:20 下午
+     */
+    void disableGuideCategory(EditGuideCategoryFormDTO formDTO);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideCategoryDTO save(EditGuideCategoryFormDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideCategoryDTO update(EditGuideCategoryFormDTO dto);
+
+    /**
+     * 删除分类,存在办事指南的不允许删除,给予提示
+     *
+     * @param formDTO
+     * @return  void
+     * @author yinzuomei
+     * @date 2021/9/8 4:34 下午
+     */
+    void delete(EditGuideCategoryFormDTO formDTO);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCollectionService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCollectionService.java
new file mode 100644
index 0000000000..bd2e97c482
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideCollectionService.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.dto.GuideCollectionDTO;
+import com.epmet.dto.form.GuideFormDTO;
+import com.epmet.entity.GuideCollectionEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南收藏表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideCollectionService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideCollectionDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideCollectionDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideCollectionDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideCollectionDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * @Description 收藏指南
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/9 9:46
+     */
+    void collection(TokenDto tokenDto, GuideFormDTO formDTO);
+
+    /**
+     * @Description 获取收藏信息
+     * @Param tokenDto
+     * @Param guideId
+     * @Return {@link GuideCollectionDTO}
+     * @Author zhaoqifeng
+     * @Date 2021/9/10 9:52
+     */
+    GuideCollectionDTO getCollection(TokenDto tokenDto, String guideId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideExternalLinkService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideExternalLinkService.java
new file mode 100644
index 0000000000..e54c0d4675
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideExternalLinkService.java
@@ -0,0 +1,114 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.ExternalLinkDTO;
+import com.epmet.dto.GuideExternalLinkDTO;
+import com.epmet.entity.GuideExternalLinkEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南外链表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideExternalLinkService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideExternalLinkDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideExternalLinkDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideExternalLinkDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideExternalLinkDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * @Description 删除指南外链
+     * @Param guideId
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 17:20
+     */
+    void deleteByGuideId(String guideId);
+
+    /**
+     * @Description 获取指南外链
+     * @Param guideId
+     * @Return {@link List< ExternalLinkDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 11:05
+     */
+    List getByGuideId(String guideId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictDefaultService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictDefaultService.java
new file mode 100644
index 0000000000..2bf1b3aac7
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictDefaultService.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.GuideModuleDictDefaultDTO;
+import com.epmet.entity.GuideModuleDictDefaultEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南模块默认字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideModuleDictDefaultService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideModuleDictDefaultDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideModuleDictDefaultDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideModuleDictDefaultDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideModuleDictDefaultDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * 获取默认配置
+     * @Param
+     * @Return {@link List< GuideModuleDictDefaultDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 17:44
+     */
+    List getList();
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictService.java
new file mode 100644
index 0000000000..7f1ae4a0e4
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleDictService.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.GuideModuleDictDTO;
+import com.epmet.dto.ModuleDTO;
+import com.epmet.entity.GuideModuleDictEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南模块字典表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideModuleDictService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideModuleDictDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideModuleDictDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideModuleDictDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideModuleDictDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * @Description 获取模块列表
+     * @Param customerId
+     * @Return {@link List< ModuleDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 17:50
+     */
+    List getModuleList(String customerId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleService.java
new file mode 100644
index 0000000000..dc7857f8f9
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideModuleService.java
@@ -0,0 +1,124 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.dto.GuideModuleDTO;
+import com.epmet.dto.ModuleDTO;
+import com.epmet.entity.GuideModuleEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南模块关联表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideModuleService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideModuleDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideModuleDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideModuleDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideModuleDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * @Description 删除指南的内容模块
+     * @Param guideId
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 17:01
+     */
+    void deleteByGuideId(String guideId);
+
+    /**
+     * @Description
+     * @Param customerId
+     * @Param guideId
+     * @Return {@link ModuleDTO}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 10:13
+     */
+    List getByGuideId(String customerId, String guideId);
+
+    /**
+     * @Description 获取模块列表
+     * @Param customerId
+     * @Return {@link List< ModuleDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/9 14:46
+     */
+    List getModuleList(String customerId);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideService.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideService.java
new file mode 100644
index 0000000000..a2493a88ac
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/GuideService.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.dto.form.PageFormDTO;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.dto.GuideDTO;
+import com.epmet.dto.form.GuideAddFormDTO;
+import com.epmet.dto.form.GuideEditFormDTO;
+import com.epmet.dto.form.GuideFormDTO;
+import com.epmet.dto.form.GuideListFormDTO;
+import com.epmet.dto.result.GuideDetailResultDTO;
+import com.epmet.dto.result.GuideListResultDTO;
+import com.epmet.entity.GuideEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 办事指南表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+public interface GuideService extends BaseService {
+
+    /**
+     * 默认分页
+     *
+     * @param params
+     * @return PageData
+     * @author generator
+     * @date 2021-09-06
+     */
+    PageData page(Map params);
+
+    /**
+     * 默认查询
+     *
+     * @param params
+     * @return java.util.List
+     * @author generator
+     * @date 2021-09-06
+     */
+    List list(Map params);
+
+    /**
+     * 单条查询
+     *
+     * @param id
+     * @return GuideDTO
+     * @author generator
+     * @date 2021-09-06
+     */
+    GuideDTO get(String id);
+
+    /**
+     * 默认保存
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void save(GuideDTO dto);
+
+    /**
+     * 默认更新
+     *
+     * @param dto
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void update(GuideDTO dto);
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return void
+     * @author generator
+     * @date 2021-09-06
+     */
+    void delete(String[] ids);
+
+    /**
+     * 办事指南列表
+     *
+     * @Param formDTO
+     * @Return {@link PageData}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:00
+     */
+    PageData guideList(TokenDto tokenDto, GuideListFormDTO formDTO);
+
+    /**
+     * 添加指南
+     *
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:12
+     */
+    void guideAdd(TokenDto tokenDto, GuideAddFormDTO formDTO);
+
+    /**
+     * 修改指南
+     *
+     * @Param formDTO
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:12
+     */
+    void guideEdit(GuideEditFormDTO formDTO);
+
+    /**
+     * 删除指南
+     *
+     * @Param formDTO
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:12
+     */
+    void guideDel(GuideFormDTO formDTO);
+
+    /**
+     * 指南详情
+     *
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link GuideDetailResultDTO}
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 14:12
+     */
+    GuideDetailResultDTO guideDetail(TokenDto tokenDto, GuideFormDTO formDTO);
+
+    /**
+     * @Description 收藏列表
+     * @Param tokenDto
+     * @Param formDTO
+     * @Return {@link PageData< GuideListResultDTO>}
+     * @Author zhaoqifeng
+     * @Date 2021/9/9 10:07
+     */
+    PageData collectionList(TokenDto tokenDto, PageFormDTO formDTO);
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
index 62274c346b..1d95335423 100644
--- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java
@@ -976,7 +976,8 @@ public class ArticleServiceImpl extends BaseServiceImpl
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
+import com.epmet.commons.tools.constant.FieldConstant;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.dao.GuideAttachmentDao;
+import com.epmet.dto.AttachmentDTO;
+import com.epmet.dto.GuideAttachmentDTO;
+import com.epmet.entity.GuideAttachmentEntity;
+import com.epmet.service.GuideAttachmentService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 办事指南附件
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Service
+public class GuideAttachmentServiceImpl extends BaseServiceImpl implements GuideAttachmentService {
+
+
+    @Override
+    public PageData page(Map params) {
+        IPage page = baseDao.selectPage(
+                getPage(params, FieldConstant.CREATED_TIME, false),
+                getWrapper(params)
+        );
+        return getPageData(page, GuideAttachmentDTO.class);
+    }
+
+    @Override
+    public List list(Map params) {
+        List entityList = baseDao.selectList(getWrapper(params));
+
+        return ConvertUtils.sourceToTarget(entityList, GuideAttachmentDTO.class);
+    }
+
+    private QueryWrapper getWrapper(Map params){
+        String id = (String)params.get(FieldConstant.ID_HUMP);
+
+        QueryWrapper wrapper = new QueryWrapper<>();
+        wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id);
+
+        return wrapper;
+    }
+
+    @Override
+    public GuideAttachmentDTO get(String id) {
+        GuideAttachmentEntity entity = baseDao.selectById(id);
+        return ConvertUtils.sourceToTarget(entity, GuideAttachmentDTO.class);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void save(GuideAttachmentDTO dto) {
+        GuideAttachmentEntity entity = ConvertUtils.sourceToTarget(dto, GuideAttachmentEntity.class);
+        insert(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(GuideAttachmentDTO dto) {
+        GuideAttachmentEntity entity = ConvertUtils.sourceToTarget(dto, GuideAttachmentEntity.class);
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(String[] ids) {
+        // 逻辑删除(@TableLogic 注解)
+        baseDao.deleteBatchIds(Arrays.asList(ids));
+    }
+
+    /**
+     * @param guideId
+     * @Description 删除指南附件
+     * @Param guideId
+     * @Return
+     * @Author zhaoqifeng
+     * @Date 2021/9/7 17:16
+     */
+    @Override
+    public void deleteByGuideId(String guideId) {
+        LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(GuideAttachmentEntity::getGuideId, guideId);
+        baseDao.delete(wrapper);
+    }
+
+    /**
+     * @param guideId
+     * @Description 获取指南附件
+     * @Param guideId
+     * @Return {@link List<  AttachmentDTO >}
+     * @Author zhaoqifeng
+     * @Date 2021/9/8 10:49
+     */
+    @Override
+    public List getByGuideId(String guideId) {
+        LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(GuideAttachmentEntity::getGuideId, guideId);
+        wrapper.orderByAsc(GuideAttachmentEntity::getSort);
+        List list = baseDao.selectList(wrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        return list.stream().map(item -> {
+            AttachmentDTO dto = new AttachmentDTO();
+            dto.setName(item.getAttachmentName());
+            dto.setType(item.getAttachmentType());
+            dto.setUrl(item.getAttachmentUrl());
+            dto.setSize(item.getAttachmentSize());
+            dto.setFormat(item.getAttachmentFormat());
+            dto.setDuration(item.getDuration());
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+}
\ No newline at end of file
diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/GuideCategoryServiceImpl.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/GuideCategoryServiceImpl.java
new file mode 100644
index 0000000000..6f3f7a082a
--- /dev/null
+++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/GuideCategoryServiceImpl.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+
+package com.epmet.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
+import com.epmet.commons.tools.constant.Constant;
+import com.epmet.commons.tools.constant.FieldConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.RenException;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.commons.tools.utils.Pinyin4jUtil;
+import com.epmet.dao.GuideCategoryDao;
+import com.epmet.dto.GuideCategoryDTO;
+import com.epmet.dto.form.EditGuideCategoryFormDTO;
+import com.epmet.dto.form.GuideCateOrderFormDTO;
+import com.epmet.dto.form.GuideCategoryDropDownFormDTO;
+import com.epmet.dto.form.GuideCategoryPageFormDTO;
+import com.epmet.dto.result.GuideDictResDTO;
+import com.epmet.entity.GuideCategoryEntity;
+import com.epmet.service.GuideCategoryService;
+import com.github.pagehelper.PageInfo;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指南分类
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-09-06
+ */
+@Service
+public class GuideCategoryServiceImpl extends BaseServiceImpl implements GuideCategoryService {
+
+
+    /**
+     * 【办事指南】分类列表-工作端PC和运营端用不分页
+     *
+     * @param formDTO
+     * @return  com.epmet.commons.tools.utils.Result>
+     * @author yinzuomei
+     * @date 2021/9/8 1:33 下午
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public PageData page(GuideCategoryPageFormDTO formDTO) {
+        List list = baseDao.selectPageByCid(formDTO.getCustomerId());
+        if (CollectionUtils.isEmpty(list) && !formDTO.getCustomerId().equals(Constant.DEFAULT_CUSTOMER)) {
+            //初始化默认的给客户
+            initCustomerGuideCategory(formDTO.getCustomerId());
+            list = baseDao.selectPageByCid(formDTO.getCustomerId());
+        }
+        PageInfo pageInfo = new PageInfo<>(list);
+        return new PageData<>(list, pageInfo.getTotal());
+    }
+
+    /**
+     *  产品默认分类同步给客户,已经禁用的不同步
+     * 
+     * @param customerId 
+     * @return  void 
+     * @author yinzuomei 
+     * @date 2021/9/8 2:17 下午
+     */
+    private void initCustomerGuideCategory(String customerId) {
+        List list = baseDao.selectPageByCid(Constant.DEFAULT_CUSTOMER);
+        int sort = 0;
+        for (GuideCategoryDTO dto : list) {
+            // 已经禁用的,不同步给客户
+            if (Constant.DISABLE.equals(dto.getStatus())) {
+                continue;
+            }
+            dto.setCustomerId(customerId);
+            //清空主键
+            dto.setId(null);
+            dto.setSort(sort);
+            GuideCategoryEntity entity = ConvertUtils.sourceToTarget(dto, GuideCategoryEntity.class);
+            insert(entity);
+            sort++;
+        }
+    }
+
+
+    /**
+     * 办事指南】可用分类列表 新增、编辑指南时的下拉框:展示未禁用的分类; 查询指南列表:如果禁用的分类下存在指南列表,则展示,不存在直接不展示
+     *
+     * @param formDTO
+     * @return java.util.List
+     * @author yinzuomei
+     * @date 2021/9/8 3:06 下午
+     */
+    @Override
+    public List getCategory(GuideCategoryDropDownFormDTO formDTO) {
+        List list=baseDao.selectCategoryDict(formDTO.getCustomerId(),formDTO.getQueryOrigin());
+        if (CollectionUtils.isEmpty(list) && !formDTO.getCustomerId().equals(Constant.DEFAULT_CUSTOMER)) {
+            //初始化默认的给客户
+            initCustomerGuideCategory(formDTO.getCustomerId());
+            list=baseDao.selectCategoryDict(formDTO.getCustomerId(),formDTO.getQueryOrigin());
+        }
+        return list;
+    }
+
+    /**
+     * 保存排序
+     *
+     * @param formDTO
+     * @return void
+     * @author yinzuomei
+     * @date 2021/9/8 4:09 下午
+     */
+    @Transactional
+    @Override
+    public void saveOrder(GuideCateOrderFormDTO formDTO) {
+        for (GuideCateOrderFormDTO.OrderIndexDTO idx : formDTO.getOrderList()) {
+            baseDao.updateOrder(idx.getId(), idx.getOrderIndex(),formDTO.getStaffId());
+        }
+    }
+
+    /**
+     * 启用或者禁用分类
+     *
+     * @param formDTO
+     * @return int
+     * @author yinzuomei
+     * @date 2021/9/8 4:20 下午
+     */
+    @Override
+    public void disableGuideCategory(EditGuideCategoryFormDTO formDTO) {
+        baseDao.updateStatus(formDTO.getId(), formDTO.getStatus(),formDTO.getStaffId());
+    }
+
+    private QueryWrapper getWrapper(Map