瀏覽代碼

客户画像

zhijiezhao 3 年之前
父節點
當前提交
c10825d6b0

+ 22 - 0
src/main/java/com/caimei/modules/user/dao/VisitRemarkDao.java

@@ -0,0 +1,22 @@
+package com.caimei.modules.user.dao;
+
+
+import com.caimei.modules.user.entity.RemarksFileVo;
+import com.caimei.modules.user.entity.Server;
+import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.thinkgem.jeesite.common.persistence.CrudDao;
+import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
+
+import java.util.List;
+
+@MyBatisDao
+public interface VisitRemarkDao extends CrudDao<VisitRemarkVo> {
+    List<Server> getServer();
+
+    List<VisitRemarkVo> findRemarksList(VisitRemarkVo visit);
+
+    List<String> getRemarksImageList(Integer remarksId);
+
+    List<RemarksFileVo> getRemarksFileList(Integer remarksId);
+
+}

+ 12 - 1
src/main/java/com/caimei/modules/user/entity/CmClubRemarks.java

@@ -43,7 +43,10 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date addTime;
-
+    /**
+     * 咨询人
+     */
+    private String questionMan;
     /**
      * 图片列表
      */
@@ -112,4 +115,12 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
     public void setSpName(String spName) {
         this.spName = spName;
     }
+
+    public String getQuestionMan() {
+        return questionMan;
+    }
+
+    public void setQuestionMan(String questionMan) {
+        this.questionMan = questionMan;
+    }
 }

+ 30 - 0
src/main/java/com/caimei/modules/user/entity/Server.java

@@ -0,0 +1,30 @@
+package com.caimei.modules.user.entity;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+public class Server extends DataEntity<Server> {
+    /**
+     * 协销id
+     */
+    private String serviceProviderId;
+    /**
+     * 协销姓名
+     */
+    private String name;
+
+    public String getServiceProviderId() {
+        return serviceProviderId;
+    }
+
+    public void setServiceProviderId(String serviceProviderId) {
+        this.serviceProviderId = serviceProviderId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 188 - 0
src/main/java/com/caimei/modules/user/entity/VisitRemarkVo.java

@@ -0,0 +1,188 @@
+package com.caimei.modules.user.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.util.Date;
+import java.util.List;
+
+public class VisitRemarkVo extends DataEntity<VisitRemarkVo> {
+
+    /**
+     * 潜在用户备注id
+     */
+    private Integer remarksId;
+    /**
+     * 咨询人id
+     */
+    private String questionManId;
+
+    /**
+     * 协销id
+     */
+    private Integer serviceProviderId;
+    /**
+     * 协销姓名
+     */
+    private String serviceName;
+    /**
+     * 同步机构名称
+     */
+    private String clubName;
+    /**
+     * 同步clubid
+     */
+    private String clubId;
+    /**
+     * 备注/关键词
+     */
+    private String remarks;
+    /**
+     * 添加时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date addTime;
+    /**
+     * 咨询人名字
+     */
+    private String questionMan;
+    /**
+     * 同步时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date concactTime;
+
+    /**
+     * 图片列表
+     */
+    private List<String> imageList;
+
+    /**
+     * 文件列表
+     */
+    private List<RemarksFileVo> fileList;
+
+    /**
+     * 是否同步 1已同步2未同步
+     */
+    private String concat;
+
+    /**
+     * cm_visitor_remarks协销列表
+     */
+    private List<Server> serverList;
+
+    public String getClubName() {
+        return clubName;
+    }
+
+    public void setClubName(String clubName) {
+        this.clubName = clubName;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public List<Server> getServerList() {
+        return serverList;
+    }
+
+    public void setServerList(List<Server> serverList) {
+        this.serverList = serverList;
+    }
+
+    public String getConcat() {
+        return concat;
+    }
+
+    public void setConcat(String concat) {
+        this.concat = concat;
+    }
+
+    public Integer getRemarksId() {
+        return remarksId;
+    }
+
+    public void setRemarksId(Integer remarksId) {
+        this.remarksId = remarksId;
+    }
+
+    public String getQuestionManId() {
+        return questionManId;
+    }
+
+    public void setQuestionManId(String questionManId) {
+        this.questionManId = questionManId;
+    }
+
+    public Integer getServiceProviderId() {
+        return serviceProviderId;
+    }
+
+    public void setServiceProviderId(Integer serviceProviderId) {
+        this.serviceProviderId = serviceProviderId;
+    }
+
+    public String getClubId() {
+        return clubId;
+    }
+
+    public void setClubId(String clubId) {
+        this.clubId = clubId;
+    }
+
+    @Override
+    public String getRemarks() {
+        return remarks;
+    }
+
+    @Override
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public Date getAddTime() {
+        return addTime;
+    }
+
+    public void setAddTime(Date addTime) {
+        this.addTime = addTime;
+    }
+
+    public String getQuestionMan() {
+        return questionMan;
+    }
+
+    public void setQuestionMan(String questionMan) {
+        this.questionMan = questionMan;
+    }
+
+    public Date getConcactTime() {
+        return concactTime;
+    }
+
+    public void setConcactTime(Date concactTime) {
+        this.concactTime = concactTime;
+    }
+
+    public List<String> getImageList() {
+        return imageList;
+    }
+
+    public void setImageList(List<String> imageList) {
+        this.imageList = imageList;
+    }
+
+    public List<RemarksFileVo> getFileList() {
+        return fileList;
+    }
+
+    public void setFileList(List<RemarksFileVo> fileList) {
+        this.fileList = fileList;
+    }
+}

+ 1 - 0
src/main/java/com/caimei/modules/user/service/NewCmClubService.java

@@ -93,6 +93,7 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
         remarksList.forEach(remarks->{
             List<String> imageList = newCmClubDao.getRemarksImageList(remarks.getRemarksId());
             List<RemarksFileVo> fileList = newCmClubDao.getRemarksFileList(remarks.getRemarksId());
+            fileList.forEach(f->f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
             remarks.setImageList(imageList);
             remarks.setFileList(fileList);
         });

+ 21 - 0
src/main/java/com/caimei/modules/user/service/VisitRemarkService.java

@@ -0,0 +1,21 @@
+package com.caimei.modules.user.service;
+
+import com.caimei.modules.user.dao.VisitRemarkDao;
+import com.caimei.modules.user.entity.Server;
+import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.thinkgem.jeesite.common.service.CrudService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class VisitRemarkService extends CrudService<VisitRemarkDao, VisitRemarkVo> {
+
+    @Autowired
+    private VisitRemarkDao visitRemarkDao;
+
+    public List<Server> getServer() {
+        return visitRemarkDao.getServer();
+    }
+}

+ 93 - 0
src/main/java/com/caimei/modules/user/web/newUser/VisitRemarkController.java

@@ -0,0 +1,93 @@
+package com.caimei.modules.user.web.newUser;
+
+
+import com.caimei.modules.oss.utils.OSSUtils;
+import com.caimei.modules.user.dao.VisitRemarkDao;
+import com.caimei.modules.user.entity.CmClubRemarks;
+import com.caimei.modules.user.entity.NewCmClub;
+import com.caimei.modules.user.entity.RemarksFileVo;
+import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.caimei.modules.user.service.VisitRemarkService;
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import com.thinkgem.jeesite.common.web.BaseController;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+
+@Controller
+@RequestMapping(value = "${adminPath}/new/user/visit")
+public class VisitRemarkController extends BaseController {
+
+    @Autowired
+    private VisitRemarkDao visitRemarkDao;
+
+    @Autowired
+    private VisitRemarkService visitRemarkService;
+
+    @ModelAttribute
+    public VisitRemarkVo get(@RequestParam(required = false) String id) {
+        VisitRemarkVo entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = visitRemarkService.get(id);
+        }
+        if (entity == null) {
+            entity = new VisitRemarkVo();
+        }
+        entity.setServerList(visitRemarkService.getServer());
+        return entity;
+    }
+
+    @RequestMapping(value = {"list", ""})
+    public String list(VisitRemarkVo visit, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<VisitRemarkVo> page = visitRemarkService.findPage(new Page<VisitRemarkVo>(request, response, 20), visit);
+        VisitRemarkVo visitRemarkVo = get(null);
+        model.addAttribute("visitRemark", visitRemarkVo);
+        model.addAttribute("page", page);
+        return "modules/userNew/cmVisitList";
+    }
+
+    /**
+     * 资料备注列表
+     */
+    @RequestMapping("remark")
+    public String remarksList(VisitRemarkVo visit, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<VisitRemarkVo> page = visitRemarkService.findPage(new Page<VisitRemarkVo>(request, response, 20), visit);
+        model.addAttribute("page", page);
+        VisitRemarkVo visitRemarkVo = get(null);
+        model.addAttribute("visitRemark", visitRemarkVo);
+        return "modules/userNew/cmVisitList";
+    }
+
+    /**
+     * 资料备注列表
+     */
+    @RequestMapping("find")
+    public String find(VisitRemarkVo visit, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<VisitRemarkVo> page = visitRemarkService.findPage(new Page<VisitRemarkVo>(request, response, 20), visit);
+        visit.setPage(page);
+        List<VisitRemarkVo> remarksList = visitRemarkDao.findRemarksList(visit);
+        remarksList.forEach(remarks->{
+            List<String> imageList = visitRemarkDao.getRemarksImageList(remarks.getRemarksId());
+            List<RemarksFileVo> fileList = visitRemarkDao.getRemarksFileList(remarks.getRemarksId());
+            fileList.forEach(f->f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
+            remarks.setImageList(imageList);
+            remarks.setFileList(fileList);
+        });
+        page.setList(remarksList);
+        model.addAttribute("page", page);
+        VisitRemarkVo visitRemarkVo = get(null);
+        model.addAttribute("visit", visitRemarkVo);
+        return "modules/userNew/cmVisitRemarksList";
+    }
+
+}

+ 1 - 1
src/main/resources/mappings/modules/user/NewCmClubMapper.xml

@@ -395,7 +395,7 @@
 		select serviceProviderID from serviceprovider where serviceProviderID = #{spID} and status = 90
 	</select>
     <select id="findRemarksList" resultType="com.caimei.modules.user.entity.CmClubRemarks">
-		select id as remarksId, remarks,s.linkMan as spName, ccr.addTime
+		select id as remarksId, remarks,s.linkMan as spName, ccr.addTime,ccr.questionMan
 		from cm_club_remarks ccr
 		left join serviceprovider s on ccr.serviceProviderId = s.serviceProviderID
 		where clubId = #{clubId}

+ 64 - 0
src/main/resources/mappings/modules/user/VisitRemarkMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei.modules.user.dao.VisitRemarkDao">
+
+    <select id="get" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
+        SELECT id as remarksId,
+               questionManId,
+               serviceProviderId,
+               remarks,
+               addTime,
+               questionMan,
+               clubId,
+               concactTime
+        FROM cm_visitor_remarks a
+        WHERE a.id = #{id}
+    </select>
+    <select id="getServer" resultType="com.caimei.modules.user.entity.Server">
+        SELECT DISTINCT cvr.serviceProviderId, s.linkMan
+        FROM cm_visitor_remarks cvr
+        LEFT JOIN serviceprovider s ON s.serviceProviderID = cvr.serviceProviderId
+    </select>
+    <select id="findList" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
+        SELECT cvr.id as remarksId,cvr.questionManId,cvr.serviceProviderId,cvr.remarks,cvr.addTime,cvr.questionMan,cvr.clubId,cvr.concactTime,c.name as clubName,s.linkMan as serviceName
+        FROM cm_visitor_remarks cvr
+        LEFT JOIN serviceprovider s  ON s.serviceProviderID = cvr.serviceProviderId
+        LEFT JOIN club c ON c.clubId= cvr.clubId
+        <where>
+            <if test="serviceProviderId != null and serviceProviderId != ''">
+                AND cvr.serviceProviderId = #{serviceProviderId}
+            </if>
+            <if test="concat == 1">
+                and cvr.clubId is not null
+            </if>
+            <if test="concat == 2">
+                and cvr.clubId is null
+            </if>
+            <if test="questionMan != null and questionMan != ''">
+                and cvr.questionMan LIKE concat('%',#{questionMan},'%')
+            </if>
+        </where>
+        GROUP BY cvr.questionManId
+        ORDER BY cvr.addTime DESC
+    </select>
+    <select id="findRemarksList" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
+        select id as remarksId, remarks,s.linkMan as serviceName, cvr.addTime,cvr.questionMan
+        from cm_visitor_remarks cvr
+        left join serviceprovider s on cvr.serviceProviderId = s.serviceProviderID
+        where questionManId = #{questionManId}
+        and remarks is not null
+        order by addTime desc
+    </select>
+    <select id="getRemarksImageList" resultType="java.lang.String">
+        select imageUrl
+        from cm_visitor_remarks_file
+        where remarksId = #{remarksId}
+          and fileType = 1
+    </select>
+    <select id="getRemarksFileList" resultType="com.caimei.modules.user.entity.RemarksFileVo">
+        select fileName, ossName
+        from cm_visitor_remarks_file
+        where remarksId = #{remarksId}
+          and fileType = 2
+    </select>
+</mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyList.jsp

@@ -258,7 +258,7 @@
                     </shiro:hasPermission>
                 </c:if>
                 <shiro:hasPermission name="club:cmAgency:remarks">
-                    <a href="${ctx}/new/user/agency/remarks?clubId=${newCmClubList.clubID}">资料备注</a>
+                    <a href="${ctx}/new/user/agency/remarks?clubId=${newCmClubList.clubID}">客户画像</a>
                 </shiro:hasPermission>
             </td>
         </tr>

+ 20 - 5
src/main/webapp/WEB-INF/views/modules/userNew/cmAgencyRemarksList.jsp

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
-	<title>机构资料备注</title>
+	<title>客户画像</title>
 	<meta name="decorator" content="default"/>
 	<script type="text/javascript">
 		$(document).ready(function() {
@@ -24,7 +24,16 @@
 			});
 		});
 
-
+		function previewFile(url) {
+			var index = url.lastIndexOf(".");
+			var suffix = url.substring(index);
+			if (suffix.startsWith(".png") || suffix.startsWith(".jpg") || suffix.startsWith(".pdf")) {
+				window.open(url, '_blank');
+			} else {
+				var previewUrl = "https://view.officeapps.live.com/op/view.aspx?src="+encodeURIComponent(url);
+				window.open(previewUrl, '_blank');
+			}
+		}
 		function page(n,s){
 			$("#pageNo").val(n);
 			$("#pageSize").val(s);
@@ -36,7 +45,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/new/user/agency/">机构列表</a></li>
-		<li class="active"><a href="${ctx}/new/user/agency/remarks?clubId=${cmClubRemarks.clubId}">资料备注</a></li>
+		<li class="active"><a href="${ctx}/new/user/agency/remarks?clubId=${cmClubRemarks.clubId}">客户画像</a></li>
 	</ul><br/>
 <form:form id="searchForm" modelAttribute="cmClubRemarks" action="${ctx}/new/user/agency/remarks" method="post" class="breadcrumb form-search">
 	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
@@ -52,7 +61,11 @@
 				<div style="font-weight: bold;width: 100%;float: left;"><span style="float: left;">${clubRemarks.spName}</span>
 					<span style="float: left;margin-left:10px;"><fmt:formatDate value="${clubRemarks.addTime}" pattern="yyyy-MM-dd HH:mm"/></span></div>
 				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
-					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">文字备注:</div>
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询人:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${clubRemarks.questionMan}</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">关键词记录:</div>
 					<div style="width: 800px;float: left;margin: 10px 0;">
 						${clubRemarks.remarks}
 					</div>
@@ -74,7 +87,9 @@
 						<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">文件:</div>
 						<div style="width: 1000px;float: left;margin: 10px 0;">
 							<c:forEach items="${clubRemarks.fileList}" var="item" varStatus="remarkFile">
-								<p>${item.fileName}&nbsp;&nbsp;&nbsp;&nbsp;<a href="${ctx}/new/user/agency/remarks/download?fileName=${item.fileName}&ossName=${item.ossName}">下载</a></p>
+								<p>${item.fileName}&nbsp;&nbsp;&nbsp;&nbsp;
+									<a onclick="previewFile('${item.fileUrl}')" target="_blank">预览</a>&nbsp;&nbsp;&nbsp;&nbsp;
+									<a href="${ctx}/new/user/agency/remarks/download?fileName=${item.fileName}&ossName=${item.ossName}">下载</a></p>
 							</c:forEach>
 						</div>
 					</c:if>

+ 335 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmVisitList.jsp

@@ -0,0 +1,335 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>潜在用户画像信息</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        .reg-row .new-tag.active {
+            border: 1px solid #de5801
+        }
+
+        .reg-row {
+            margin-bottom: 20px
+        }
+
+        .reg-row .reg-label {
+            display: inline-block;
+            width: 120px;
+            text-align: right;
+            font-size: 13px
+        }
+
+        .the-oradio {
+            display: inline-block;
+            vertical-align: top
+        }
+
+        .the-oradio div {
+            width: 85px;
+            display: inline-block;
+            font-size: 12px;
+            color: #666
+        }
+
+        .the-oradio div input[type="radio"] {
+            width: 17px;
+            height: 17px;
+            margin-right: 5px;
+            vertical-align: text-top
+        }
+
+        .med-option {
+            display: block;
+            margin: 10px 0 0 125px
+        }
+
+        .reg-row .business-license {
+            position: relative;
+            display: inline-block;
+            width: 166px;
+            height: 123px;
+            border-radius: 6px;
+            margin: 18px 0 0 125px
+        }
+
+        #medicalPracticeLicenseImgPreview {
+            display: inline-block
+        }
+
+        .qualification {
+            margin-top: 20px
+        }
+
+        .reg-row .tags-area {
+            display: inline-block;
+            width: 420px
+        }
+
+        .reg-row .new-tag {
+            display: inline-block;
+            width: 70px;
+            border: 1px solid #e5e5e5;
+            border-radius: 6px;
+            padding: 5px;
+            margin-right: 14px;
+            margin-bottom: 14px;
+            text-align: center;
+            font-size: 10px;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            cursor: pointer
+        }
+
+        .reg-row .tags-operate {
+            margin-left: 125px
+        }
+
+        .reg-row .reg-input {
+            width: 336px;
+            height: 32px;
+            padding: 0 8px;
+            margin-right: 20px;
+            border: 1px solid #dcdcdc;
+            border-radius: 6px
+        }
+
+        .reg-row .tags-operate .tag-input {
+            width: 159px;
+            margin-right: 13px;
+            display: none;
+            vertical-align: top
+        }
+
+        .reg-row .tags-operate .tag-add {
+            line-height: 20px;
+            vertical-align: middle;
+            margin-bottom: 0;
+            vertical-align: top
+        }
+
+        .reg-row .tags-area {
+            vertical-align: top
+        }
+
+        .tag-add {
+            display: none
+        }
+
+        .table th {
+            text-align: center
+        }
+
+        .table td {
+            text-align: center
+        }
+
+        .modal {
+            width: 700px;
+            margin-left: -350px
+        }
+
+        #myModal {
+            display: none
+        }
+
+        .modal-body {
+            max-height: 300px !important
+        }
+
+        .modal.fade.in {
+            top: 0 !important
+        }
+
+        #btnSubmit {
+            margin-left: 20px
+        }
+
+        .flex-wrap .item {
+            margin-right: 20px
+        }
+
+        #auditBox {
+            padding: 20px;
+            line-height: 30px
+        }
+
+        #auditBox .bd-row {
+            display: flex;
+            margin-bottom: 15px
+        }
+
+        #auditBox .bd-row > span {
+            display: inline-block;
+            width: 60px
+        }
+
+        #auditBox .auditCheckBox {
+            width: 250px
+        }
+
+        #auditBox .auditCheckBox label {
+            margin: 0 5px 5px 0
+        }
+
+        #auditBox .auditCheckBox input {
+            display: none
+        }
+
+        #auditBox .auditCheckBox input + span {
+            display: inline-block;
+            line-height: 24px;
+            padding: 0 12px;
+            border: 1px solid #666;
+            border-radius: 5px
+        }
+
+        #auditBox .auditCheckBox input:checked + span {
+            background-color: #E6633A
+        }
+
+        #alertModal {
+            width: 300px;
+            height: 200px;
+            border: 1px solid #ebebeb;
+            border-radius: 10px;
+            position: fixed;
+            top: 0;
+            bottom: 0;
+            left: 0;
+            right: 0;
+            margin: auto;
+            background: #FFFFFF;
+            display: none
+        }
+
+        #alertModal .title {
+            height: 50px;
+            line-height: 50px;
+            font-size: 14px;
+            font-weight: bold;
+            text-align: center;
+            position: relative;
+            border-bottom: 1px solid #EBEBEB
+        }
+
+        #alertModal .close {
+            width: 50px;
+            height: 50px;
+            display: block;
+            position: absolute;
+            right: 0;
+            top: 0;
+            line-height: 50px;
+            color: #000;
+            font-weight: bold;
+            text-align: center;
+            font-style: normal;
+            font-size: 18px
+        }
+
+        #alertModal .alert-content {
+            width: 260px;
+            height: 60px;
+            padding: 20px
+        }
+
+        #alertModal .alertModal-btn {
+            width: 260px;
+            height: 49px;
+            padding: 0 20px;
+            border-top: 1px solid #EBEBEB
+        }
+
+        #alertModal .alertModal-btn button {
+            float: right;
+            margin: 5px
+        }
+    </style>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li class="active"><a href="${ctx}/new/user/visit/">潜在用户画像信息</a></li>
+</ul>
+<form:form id="searchForm" modelAttribute="visitRemark" action="${ctx}/new/user/visit/remark" method="post"
+           class="breadcrumb form-search">
+    <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+    <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+    <div class="flex-wrap">
+        <div class="item">
+            <label>咨询人:</label>
+            <form:input path="questionMan" htmlEscape="false" maxlength="50" class="input-medium"/>
+        </div>
+        <div class="item">
+            <label> 所属协销:</label>
+            <form:select path="serviceProviderId" class="input-medium">
+                <form:option value="" label="请选择"/>
+                <c:forEach items="${visitRemark.serverList}" var="service">
+                    <form:option value="${service.serviceProviderId}">${service.name}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>同步至机构:</label>
+            <form:select path="concat" class="input-medium">
+                <form:option value="" label="全部"/>
+                <form:option value="1" label="已同步"/>
+                <form:option value="2" label="未同步"/>
+            </form:select>
+        </div>
+        <div class="item">
+            <input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        </div>
+    </div>
+</form:form>
+<sys:message content="${message}"/>
+<table id="contentTable" class="table table-striped table-bordered table-condensed">
+    <thead>
+    <tr>
+        <th>咨询人</th>
+        <th>所属协销</th>
+        <th>同步至机构</th>
+        <th>创建时间</th>
+        <th>同步时间</th>
+        <th>操作</th>
+    </tr>
+    </thead>
+    <tbody>
+    <c:forEach items="${page.list}" var="visit">
+        <tr>
+            <td>
+                    ${visit.questionMan}
+            </td>
+            <td>
+                    ${visit.serviceName}
+            </td>
+            <td>
+                <c:if test="${not empty visit.clubId}">
+                    已同步(${visit.clubName})
+                </c:if>
+                <c:if test="${empty visit.clubId}">
+                    未同步
+                </c:if>
+            </td>
+            <td>
+                <fmt:formatDate value="${visit.addTime}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
+            </td>
+            <td>
+                <fmt:formatDate value="${visit.concactTime}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
+            </td>
+            <td>
+                <c:if test="${empty visit.clubId}">
+                    <a href="${ctx}/new/user/visit/find?questionManId=${visit.questionManId}">查看信息</a>
+                </c:if>
+                <c:if test="${not empty visit.clubId}">
+                    <a href="${ctx}/new/user/agency/remarks?clubId=${visit.clubId}">查看信息</a>
+                </c:if>
+            </td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+<div class="pagination">${page}</div>
+</body>
+</html>

+ 107 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmVisitRemarksList.jsp

@@ -0,0 +1,107 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+	<title>信息详情</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			//$("#name").focus();cmOrderRemarksFormNew.jsp
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+
+		function previewFile(url) {
+			var index = url.lastIndexOf(".");
+			var suffix = url.substring(index);
+			if (suffix.startsWith(".png") || suffix.startsWith(".jpg") || suffix.startsWith(".pdf")) {
+				window.open(url, '_blank');
+			} else {
+				var previewUrl = "https://view.officeapps.live.com/op/view.aspx?src="+encodeURIComponent(url);
+				window.open(previewUrl, '_blank');
+			}
+		}
+		function page(n,s){
+			$("#pageNo").val(n);
+			$("#pageSize").val(s);
+			$("#searchForm").submit();
+			return false;
+		}
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/new/user/visit/">潜在用户画像信息</a></li>
+		<li class="active">   <a href="${ctx}/new/user/visit/find?questionManId=${visit.questionManId}">信息详情</a></li>
+	</ul><br/>
+<form:form id="questionManId" modelAttribute="visit" action="${ctx}/new/user/visit/find" method="post" class="breadcrumb form-search">
+	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+	<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+	<form:hidden path="questionManId"/>
+</form:form>
+<form:form id="inputForm" modelAttribute="visit" action="${ctx}" method="post" class="form-horizontal">
+	<sys:message content="${message}"/>
+	<c:if test="${not empty page.list}">
+	<div style="overflow-x: hidden;word-break:break-all">
+		<c:forEach items="${page.list}" var="visitRemarks" varStatus="remark">
+			<div class="td clear" style="dashed #0066CC;">
+				<div style="font-weight: bold;width: 100%;float: left;"><span style="float: left;">${visitRemarks.serviceName}</span>
+					<span style="float: left;margin-left:10px;"><fmt:formatDate value="${visitRemarks.addTime}" pattern="yyyy-MM-dd HH:mm"/></span></div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">咨询人:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">${visitRemarks.questionMan}</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;">
+					<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">关键词记录:</div>
+					<div style="width: 800px;float: left;margin: 10px 0;">
+						${visitRemarks.remarks}
+					</div>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;">
+					<c:if test="${not empty visitRemarks.imageList}">
+						<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">图片:</div>
+						<div style="width: 1000px;float: left;">
+							<c:forEach items="${visitRemarks.imageList}" var="imageUrl" varStatus="remarkImage">
+								<a href="${imageUrl}" target="_blank">
+									<img class="enlarge-pic" style="height: 150px;width: 150px;margin-top: 10px" src="${imageUrl}">&nbsp;
+								</a>
+							</c:forEach>
+						</div>
+					</c:if>
+				</div>
+				<div class="td-text" style="width: 100%;float: left;margin-top: 20px;border-bottom:1px dashed #999999;padding: 10px 0;">
+					<c:if test="${not empty visitRemarks.fileList}">
+						<div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">文件:</div>
+						<div style="width: 1000px;float: left;margin: 10px 0;">
+							<c:forEach items="${visitRemarks.fileList}" var="item" varStatus="remarkFile">
+								<p>${item.fileName}&nbsp;&nbsp;&nbsp;&nbsp;
+									<a onclick="previewFile('${item.fileUrl}')" target="_blank">预览</a>&nbsp;&nbsp;&nbsp;&nbsp;
+									<a href="${ctx}/new/user/agency/remarks/download?fileName=${item.fileName}&ossName=${item.ossName}">下载</a></p>
+							</c:forEach>
+						</div>
+					</c:if>
+				</div>
+			</div>
+		</c:forEach>
+	</div>
+	<div class="pagination">${page}</div>
+	</c:if>
+	<c:if test="${empty page.list}">
+		<font size="3" style="text-align: center;display: block;line-height: 80px;" color="#0066CC">暂无任何备注..</font>
+	</c:if>
+</form:form>
+</body>
+</html>