瀏覽代碼

客户画像改版/协销小组

zhijiezhao 3 年之前
父節點
當前提交
f9d1910e67
共有 40 個文件被更改,包括 2227 次插入33 次删除
  1. 18 0
      src/main/java/com/caimei/modules/consult/dao/type/CmConsulttypeDao.java
  2. 75 0
      src/main/java/com/caimei/modules/consult/entity/type/CmConsulttype.java
  3. 58 0
      src/main/java/com/caimei/modules/consult/service/type/CmConsulttypeService.java
  4. 95 0
      src/main/java/com/caimei/modules/consult/web/type/CmConsulttypeController.java
  5. 9 0
      src/main/java/com/caimei/modules/project/model/ServiceProviderModel.java
  6. 32 0
      src/main/java/com/caimei/modules/serviceteam/dao/CmServiceteamRoleDao.java
  7. 94 0
      src/main/java/com/caimei/modules/serviceteam/entity/CmServiceteamRole.java
  8. 86 0
      src/main/java/com/caimei/modules/serviceteam/service/CmServiceteamRoleService.java
  9. 85 0
      src/main/java/com/caimei/modules/serviceteam/web/CmServiceteamRoleController.java
  10. 7 0
      src/main/java/com/caimei/modules/user/dao/CmSpDao.java
  11. 12 4
      src/main/java/com/caimei/modules/user/dao/NewCmClubDao.java
  12. 3 0
      src/main/java/com/caimei/modules/user/dao/VisitRemarkDao.java
  13. 120 2
      src/main/java/com/caimei/modules/user/entity/CmClubRemarks.java
  14. 64 0
      src/main/java/com/caimei/modules/user/entity/CmSaleMan.java
  15. 10 1
      src/main/java/com/caimei/modules/user/entity/NewCmSp.java
  16. 93 0
      src/main/java/com/caimei/modules/user/entity/VisitRemarkVo.java
  17. 10 0
      src/main/java/com/caimei/modules/user/service/CmSpService.java
  18. 49 10
      src/main/java/com/caimei/modules/user/service/NewCmClubService.java
  19. 34 0
      src/main/java/com/caimei/modules/user/service/VisitRemarkService.java
  20. 46 1
      src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java
  21. 24 5
      src/main/java/com/caimei/modules/user/web/newUser/SpController.java
  22. 38 0
      src/main/java/com/caimei/modules/user/web/newUser/VisitRemarkController.java
  23. 2 2
      src/main/resources/config/beta/caimei.properties
  24. 2 2
      src/main/resources/config/dev/caimei.properties
  25. 2 2
      src/main/resources/config/prod/caimei.properties
  26. 113 0
      src/main/resources/mappings/modules/consult/type/CmConsulttypeMapper.xml
  27. 137 0
      src/main/resources/mappings/modules/serviceteam/CmServiceteamRoleMapper.xml
  28. 15 2
      src/main/resources/mappings/modules/user/CmSpMapper.xml
  29. 51 0
      src/main/resources/mappings/modules/user/NewCmClubMapper.xml
  30. 30 0
      src/main/resources/mappings/modules/user/VisitRemarkMapper.xml
  31. 68 0
      src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeForm.jsp
  32. 99 0
      src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeList.jsp
  33. 147 0
      src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleForm.jsp
  34. 96 0
      src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleList.jsp
  35. 198 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmRegistRemarksList.jsp
  36. 2 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpForm.jsp
  37. 2 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpList.jsp
  38. 44 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmSpTeamList.jsp
  39. 155 0
      src/main/webapp/WEB-INF/views/modules/userNew/cmUnRegistRemarksList.jsp
  40. 2 2
      src/main/webapp/WEB-INF/views/modules/userNew/cmVisitList.jsp

+ 18 - 0
src/main/java/com/caimei/modules/consult/dao/type/CmConsulttypeDao.java

@@ -0,0 +1,18 @@
+package com.caimei.modules.consult.dao.type;
+
+import com.thinkgem.jeesite.common.persistence.CrudDao;
+import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+
+import java.util.List;
+
+/**
+ * 咨询类别DAO接口
+ * @author zzj
+ * @version 2022-01-18
+ */
+@MyBatisDao
+public interface CmConsulttypeDao extends CrudDao<CmConsulttype> {
+
+    List<CmConsulttype> sort(CmConsulttype cmConsulttype);
+}

+ 75 - 0
src/main/java/com/caimei/modules/consult/entity/type/CmConsulttype.java

@@ -0,0 +1,75 @@
+package com.caimei.modules.consult.entity.type;
+
+import org.hibernate.validator.constraints.Length;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+/**
+ * 咨询类别Entity
+ * @author zzj
+ * @version 2022-01-18
+ */
+public class CmConsulttype extends DataEntity<CmConsulttype> {
+	
+	private static final long serialVersionUID = 1L;
+	private String className;		// 咨询类别名称
+	private String status;		// 状态 1启用,2停用,默认1
+	private String sortNumber;		// 咨询类别排序 正整数值大小排序
+	private Date createdTime;		// 创建时间
+	private String delflag;		// 删除标记 0未删除,1删除,默认0
+	
+	public CmConsulttype() {
+		super();
+	}
+
+	public CmConsulttype(String id){
+		super(id);
+	}
+
+	@Length(min=0, max=30, message="咨询类别名称长度必须介于 0 和 30 之间")
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+	
+	@Length(min=0, max=2, message="状态 1启用,2停用,默认1长度必须介于 0 和 2 之间")
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+	public String getSortNumber() {
+		return sortNumber;
+	}
+
+	public void setSortNumber(String sortNumber) {
+		this.sortNumber = sortNumber;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCreatedTime() {
+		return createdTime;
+	}
+
+	public void setCreatedTime(Date createdTime) {
+		this.createdTime = createdTime;
+	}
+	
+	@Length(min=0, max=1, message="删除标记 0未删除,1删除,默认0长度必须介于 0 和 1 之间")
+	public String getDelflag() {
+		return delflag;
+	}
+
+	public void setDelflag(String delflag) {
+		this.delflag = delflag;
+	}
+	
+}

+ 58 - 0
src/main/java/com/caimei/modules/consult/service/type/CmConsulttypeService.java

@@ -0,0 +1,58 @@
+package com.caimei.modules.consult.service.type;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.service.CrudService;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.consult.dao.type.CmConsulttypeDao;
+
+/**
+ * 咨询类别Service
+ * @author zzj
+ * @version 2022-01-18
+ */
+@Service
+@Transactional(readOnly = true)
+public class CmConsulttypeService extends CrudService<CmConsulttypeDao, CmConsulttype> {
+
+	@Autowired
+	private CmConsulttypeDao dao;
+
+	public CmConsulttype get(String id) {
+		return super.get(id);
+	}
+
+	public List<CmConsulttype> findList(CmConsulttype cmConsulttype) {
+		return super.findList(cmConsulttype);
+	}
+
+	public Page<CmConsulttype> findPage(Page<CmConsulttype> page, CmConsulttype cmConsulttype) {
+		return super.findPage(page, cmConsulttype);
+	}
+
+	@Transactional(readOnly = false)
+	public void save(CmConsulttype cmConsulttype) {
+		super.save(cmConsulttype);
+	}
+
+	@Transactional(readOnly = false)
+	public void delete(CmConsulttype cmConsulttype) {
+		super.delete(cmConsulttype);
+	}
+
+	public Page<CmConsulttype> sort(Page<CmConsulttype> page, CmConsulttype cmConsulttype){
+		cmConsulttype.setPage(page);
+		page.setList(dao.sort(cmConsulttype));
+		return page;
+	}
+
+	@Transactional(readOnly = false)
+	public void use(CmConsulttype cmConsulttype){
+		dao.update(cmConsulttype);
+	}
+}

+ 95 - 0
src/main/java/com/caimei/modules/consult/web/type/CmConsulttypeController.java

@@ -0,0 +1,95 @@
+package com.caimei.modules.consult.web.type;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.thinkgem.jeesite.common.config.Global;
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.web.BaseController;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.consult.service.type.CmConsulttypeService;
+
+/**
+ * 咨询类别Controller
+ * @author zzj
+ * @version 2022-01-18
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/consult/type/cmConsulttype")
+public class CmConsulttypeController extends BaseController {
+
+	@Autowired
+	private CmConsulttypeService cmConsulttypeService;
+	
+	@ModelAttribute
+	public CmConsulttype get(@RequestParam(required=false) String id) {
+		CmConsulttype entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = cmConsulttypeService.get(id);
+		}
+		if (entity == null){
+			entity = new CmConsulttype();
+		}
+		return entity;
+	}
+	
+
+	@RequestMapping(value = {"list", ""})
+	public String list(CmConsulttype cmConsulttype, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CmConsulttype> page = cmConsulttypeService.findPage(new Page<CmConsulttype>(request, response), cmConsulttype); 
+		model.addAttribute("page", page);
+		return "modules/consult/type/cmConsulttypeList";
+	}
+
+	@RequestMapping(value = "sort")
+	public String sort(CmConsulttype cmConsulttype, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<CmConsulttype> page = cmConsulttypeService.sort(new Page<CmConsulttype>(request, response), cmConsulttype);
+		model.addAttribute("page", page);
+		return "modules/consult/type/cmConsulttypeList";
+	}
+
+	@RequestMapping(value = "form")
+	public String form(CmConsulttype cmConsulttype, Model model) {
+		model.addAttribute("cmConsulttype", cmConsulttype);
+		return "modules/consult/type/cmConsulttypeForm";
+	}
+
+
+	@RequestMapping(value = "save")
+	@Transactional(rollbackFor = Exception.class)
+	public String save(CmConsulttype cmConsulttype, Model model, RedirectAttributes redirectAttributes) throws Exception {
+		if (!beanValidator(model, cmConsulttype)){
+			return form(cmConsulttype, model);
+		}
+		cmConsulttypeService.save(cmConsulttype);
+		addMessage(redirectAttributes, "保存咨询类别成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+	
+
+	@RequestMapping(value = "delete")
+	public String delete(CmConsulttype cmConsulttype, RedirectAttributes redirectAttributes) {
+		cmConsulttypeService.delete(cmConsulttype);
+		addMessage(redirectAttributes, "删除咨询类别成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+
+	@RequestMapping(value = "use")
+	public String use(CmConsulttype cmConsulttype, RedirectAttributes redirectAttributes) {
+		cmConsulttypeService.use(cmConsulttype);
+		addMessage(redirectAttributes, "改变状态成功");
+		return "redirect:"+Global.getAdminPath()+"/consult/type/cmConsulttype/?repage";
+	}
+
+}

+ 9 - 0
src/main/java/com/caimei/modules/project/model/ServiceProviderModel.java

@@ -11,6 +11,7 @@ public class ServiceProviderModel extends DataEntity<ServiceProviderModel> {
     private String name;
     private Integer userID;
     private Integer mainServiceProviderID;
+    private Integer teamFlag;  //协销小组编辑页面回显标记,后台取数据的时候给1
 
     public Integer getServiceProviderID() {
         return serviceProviderID;
@@ -36,6 +37,14 @@ public class ServiceProviderModel extends DataEntity<ServiceProviderModel> {
         this.mainServiceProviderID = mainServiceProviderID;
     }
 
+    public Integer getTeamFlag() {
+        return teamFlag;
+    }
+
+    public void setTeamFlag(Integer teamFlag) {
+        this.teamFlag = teamFlag;
+    }
+
     public ServiceProviderModel() {
         super();
     }

+ 32 - 0
src/main/java/com/caimei/modules/serviceteam/dao/CmServiceteamRoleDao.java

@@ -0,0 +1,32 @@
+package com.caimei.modules.serviceteam.dao;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.thinkgem.jeesite.common.persistence.CrudDao;
+import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 协销小组DAO接口
+ * @author zzj
+ * @version 2022-01-20
+ */
+@MyBatisDao
+public interface CmServiceteamRoleDao extends CrudDao<CmServiceteamRole> {
+
+    List<CmServiceteamRole> findTeams(CmServiceteamRole cmServiceteamRole);
+
+    List<ServiceProviderModel> findGroups(String id);
+
+    void deleteAll(String teamId);
+    //查所有没有组队的协销
+    List<ServiceProviderModel> findAllGroups();
+
+    void save(CmServiceteamRole cmServiceteamRole);
+
+    void saveGroup(@Param("teamId")String teamId,@Param("i") String i);
+
+    CmServiceteamRole findLeader(String teamId);
+}

+ 94 - 0
src/main/java/com/caimei/modules/serviceteam/entity/CmServiceteamRole.java

@@ -0,0 +1,94 @@
+package com.caimei.modules.serviceteam.entity;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import org.hibernate.validator.constraints.Length;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+/**
+ * 协销小组Entity
+ * @author zzj
+ * @version 2022-01-20
+ */
+public class CmServiceteamRole extends DataEntity<CmServiceteamRole> {
+	
+	private static final long serialVersionUID = 1L;
+	private String teamId;
+	private String leaderId;		// 组长协销id
+	private String leaderName;    //组长姓名
+	private List<ServiceProviderModel> group;  //组员
+	private String manager;		// 总管理员标记,1是,2否
+	private Date createdTime;		// 创建时间
+	private Integer fullFlag;		//回显小组满员标记
+	
+	public CmServiceteamRole() {
+		super();
+	}
+
+	public CmServiceteamRole(String id){
+		super(id);
+	}
+
+	@Length(min=0, max=10, message="组长协销id长度必须介于 0 和 10 之间")
+	public String getLeaderId() {
+		return leaderId;
+	}
+
+	public void setLeaderId(String leaderId) {
+		this.leaderId = leaderId;
+	}
+
+	public Integer getFullFlag() {
+		return fullFlag;
+	}
+
+	public void setFullFlag(Integer fullFlag) {
+		this.fullFlag = fullFlag;
+	}
+
+	public String getTeamId() {
+		return teamId;
+	}
+
+	public void setTeamId(String teamId) {
+		this.teamId = teamId;
+	}
+
+	@Length(min=0, max=2, message="总管理员标记,1是,2否长度必须介于 0 和 2 之间")
+	public String getManager() {
+		return manager;
+	}
+
+	public void setManager(String manager) {
+		this.manager = manager;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	public Date getCreatedTime() {
+		return createdTime;
+	}
+
+	public void setCreatedTime(Date createdTime) {
+		this.createdTime = createdTime;
+	}
+
+	public String getLeaderName() {
+		return leaderName;
+	}
+
+	public void setLeaderName(String leaderName) {
+		this.leaderName = leaderName;
+	}
+
+	public List<ServiceProviderModel> getGroup() {
+		return group;
+	}
+
+	public void setGroup(List<ServiceProviderModel> group) {
+		this.group = group;
+	}
+}

+ 86 - 0
src/main/java/com/caimei/modules/serviceteam/service/CmServiceteamRoleService.java

@@ -0,0 +1,86 @@
+package com.caimei.modules.serviceteam.service;
+
+import java.util.List;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.service.CrudService;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import com.caimei.modules.serviceteam.dao.CmServiceteamRoleDao;
+
+/**
+ * 协销小组Service
+ *
+ * @author zzj
+ * @version 2022-01-20
+ */
+@Service
+@Transactional(readOnly = true)
+public class CmServiceteamRoleService extends CrudService<CmServiceteamRoleDao, CmServiceteamRole> {
+
+    @Autowired
+    private CmServiceteamRoleDao dao;
+
+
+    public CmServiceteamRole get(String id) {
+        return super.get(id);
+    }
+
+    public List<CmServiceteamRole> findList(CmServiceteamRole cmServiceteamRole) {
+        return super.findList(cmServiceteamRole);
+    }
+
+    public Page<CmServiceteamRole> findPage(Page<CmServiceteamRole> page, CmServiceteamRole cmServiceteamRole) {
+        cmServiceteamRole.setPage(page);
+        List<CmServiceteamRole> list = dao.findTeams(cmServiceteamRole);
+        list.forEach(l -> l.setGroup(dao.findGroups(l.getTeamId())));
+        page.setList(list);
+        return page;
+    }
+
+    @Transactional(readOnly = false)
+    public void save(CmServiceteamRole cmServiceteamRole) {
+
+    }
+
+    @Transactional(readOnly = false)
+    public void delete(CmServiceteamRole cmServiceteamRole) {
+        //删组长
+        dao.delete(cmServiceteamRole.getTeamId());
+        //删组员
+        dao.deleteAll(cmServiceteamRole.getTeamId());
+    }
+
+    public CmServiceteamRole findGroup(CmServiceteamRole cmServiceteamRole) {
+        if (null != cmServiceteamRole.getTeamId()) {
+            cmServiceteamRole=dao.findLeader(cmServiceteamRole.getTeamId());
+            List<ServiceProviderModel> list=dao.findGroups(cmServiceteamRole.getTeamId());
+            list.forEach(l->l.setTeamFlag(1));
+            if(null!=list&&list.size()>=10){
+                //如果有十个组员返回满员标记
+                cmServiceteamRole.setFullFlag(1);
+            }
+            List<ServiceProviderModel> allList= dao.findAllGroups();
+            list.addAll(allList);
+            cmServiceteamRole.setGroup(list);
+            return cmServiceteamRole;
+        } else {
+            cmServiceteamRole.setGroup(dao.findAllGroups());
+            return cmServiceteamRole;
+        }
+    }
+
+    @Transactional(readOnly = false)
+    public void saveGroup(List<String> ids, CmServiceteamRole cmServiceteamRole) {
+        if (null != cmServiceteamRole.getTeamId()) {
+            //如果小组存在,先删原小组,再保存
+            delete(cmServiceteamRole);
+        }
+        dao.save(cmServiceteamRole);
+        ids.forEach(i->dao.saveGroup(cmServiceteamRole.getId(),i));
+    }
+}

+ 85 - 0
src/main/java/com/caimei/modules/serviceteam/web/CmServiceteamRoleController.java

@@ -0,0 +1,85 @@
+package com.caimei.modules.serviceteam.web;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.thinkgem.jeesite.common.config.Global;
+import com.thinkgem.jeesite.common.persistence.Page;
+import com.thinkgem.jeesite.common.web.BaseController;
+import com.thinkgem.jeesite.common.utils.StringUtils;
+import com.caimei.modules.serviceteam.entity.CmServiceteamRole;
+import com.caimei.modules.serviceteam.service.CmServiceteamRoleService;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 协销小组Controller
+ *
+ * @author zzj
+ * @version 2022-01-20
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/serviceteam/cmServiceteamRole")
+public class CmServiceteamRoleController extends BaseController {
+
+    @Autowired
+    private CmServiceteamRoleService cmServiceteamRoleService;
+
+    @ModelAttribute
+    public CmServiceteamRole get(@RequestParam(required = false) String id) {
+        CmServiceteamRole entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = cmServiceteamRoleService.get(id);
+        }
+        if (entity == null) {
+            entity = new CmServiceteamRole();
+        }
+        return entity;
+    }
+
+    @RequestMapping(value = {"list", ""})
+    public String list(CmServiceteamRole cmServiceteamRole, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<CmServiceteamRole> page = cmServiceteamRoleService.findPage(new Page<CmServiceteamRole>(request, response), cmServiceteamRole);
+        model.addAttribute("page", page);
+        return "modules/serviceteam/cmServiceteamRoleList";
+    }
+
+    @RequestMapping(value = "form")
+    public String form(CmServiceteamRole cmServiceteamRole, Model model) {
+        cmServiceteamRole = cmServiceteamRoleService.findGroup(cmServiceteamRole);
+        model.addAttribute("cmServiceteamRole", cmServiceteamRole);
+        return "modules/serviceteam/cmServiceteamRoleForm";
+    }
+
+    @RequestMapping(value = "save")
+    public String save(CmServiceteamRole cmServiceteamRole, Model model, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, cmServiceteamRole)) {
+            return form(cmServiceteamRole, model);
+        }
+        List<String> ids = Arrays.asList(request.getParameterValues("ids"));
+        if (null != ids && ids.size() > 0) {
+            cmServiceteamRoleService.saveGroup(ids,cmServiceteamRole);
+        }
+        addMessage(redirectAttributes, "保存协销小组成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
+    @RequestMapping(value = "delete")
+    public String delete(CmServiceteamRole cmServiceteamRole, RedirectAttributes redirectAttributes) {
+        cmServiceteamRoleService.delete(cmServiceteamRole);
+        addMessage(redirectAttributes, "删除协销小组成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
+}

+ 7 - 0
src/main/java/com/caimei/modules/user/dao/CmSpDao.java

@@ -1,5 +1,6 @@
 package com.caimei.modules.user.dao;
 
+import com.caimei.modules.user.entity.CmSaleMan;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmSp;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
@@ -23,4 +24,10 @@ public interface CmSpDao extends CrudDao<NewCmSp> {
     List<NewCmSp> findSelectList(NewCmSp newCmSp);
 
     NewCmSp findByUserId(Integer userId);
+
+    List<CmSaleMan> findTeam();
+
+    void updateManager();
+
+    void choseManager(Integer serviceProviderID);
 }

+ 12 - 4
src/main/java/com/caimei/modules/user/dao/NewCmClubDao.java

@@ -1,9 +1,8 @@
 package com.caimei.modules.user.dao;
 
-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.UserBeansHistory;
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.caimei.modules.user.entity.*;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import org.apache.ibatis.annotations.Param;
@@ -37,4 +36,13 @@ public interface NewCmClubDao extends CrudDao<NewCmClub> {
 
     UserBeansHistory findLowOrder(Integer orderID);
 
+    List<CmClubRemarks> findRegistList(CmClubRemarks cmClubRemarks);
+
+    List<CmConsulttype> findConsults();
+
+    List<CmSaleMan> findTeams();
+
+    List<ServiceProviderModel> findGroup(Integer leaderId);
+
+    String findClassName(String string);
 }

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

@@ -19,4 +19,7 @@ public interface VisitRemarkDao extends CrudDao<VisitRemarkVo> {
 
     List<RemarksFileVo> getRemarksFileList(Integer remarksId);
 
+    List<VisitRemarkVo> findRegistList(VisitRemarkVo visit);
+
+    String findClassName(String string);
 }

+ 120 - 2
src/main/java/com/caimei/modules/user/entity/CmClubRemarks.java

@@ -1,5 +1,7 @@
 package com.caimei.modules.user.entity;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
+import com.caimei.modules.project.model.ServiceProviderModel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.thinkgem.jeesite.common.persistence.DataEntity;
 import org.hibernate.validator.constraints.Length;
@@ -30,12 +32,43 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
     private Integer remarksId;
 
     /**
-     *
+     *  协销姓名
      */
     private String spName;
+    /**
+     * 机构名称
+     */
+    private String clubName;
+    /**
+     * 总咨询类别
+     */
+    private List<CmConsulttype> consults;
+    //记录的咨询类别
+    private String consultType;
+    /**
+     * 咨询类别
+     */
+    private String consult;
 
     /**
-     * 文字备注
+     * 协销id
+     */
+    private Integer serviceProviderId;
+
+    /**
+     * 总小组
+     */
+    private List<CmSaleMan> teams;
+    /**
+     * 组长id/管理员id
+     */
+    private Integer leaderId;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+    /**
+     * 文字备注/关键词
      */
     private String remarks;
     /**
@@ -43,6 +76,12 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date addTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startAddTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endAddTime;
     /**
      * 咨询人
      */
@@ -57,6 +96,85 @@ public class CmClubRemarks extends DataEntity<CmClubRemarks> {
      */
     private List<RemarksFileVo> fileList;
 
+    public String getConsultType() {
+        return consultType;
+    }
+
+    public void setConsultType(String consultType) {
+        this.consultType = consultType;
+    }
+
+    public Date getStartAddTime() {
+        return startAddTime;
+    }
+
+    public void setStartAddTime(Date startAddTime) {
+        this.startAddTime = startAddTime;
+    }
+
+    public Date getEndAddTime() {
+        return endAddTime;
+    }
+
+    public void setEndAddTime(Date endAddTime) {
+        this.endAddTime = endAddTime;
+    }
+
+    public Integer getServiceProviderId() {
+        return serviceProviderId;
+    }
+
+    public void setServiceProviderId(Integer serviceProviderId) {
+        this.serviceProviderId = serviceProviderId;
+    }
+
+    public String getClubName() {
+        return clubName;
+    }
+
+    public void setClubName(String clubName) {
+        this.clubName = clubName;
+    }
+
+    public List<CmConsulttype> getConsults() {
+        return consults;
+    }
+
+    public void setConsults(List<CmConsulttype> consults) {
+        this.consults = consults;
+    }
+
+    public String getConsult() {
+        return consult;
+    }
+
+    public void setConsult(String consult) {
+        this.consult = consult;
+    }
+
+    public List<CmSaleMan> getTeams() {
+        return teams;
+    }
+
+    public void setTeams(List<CmSaleMan> teams) {
+        this.teams = teams;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
 
     public Integer getRemarksId() {
         return remarksId;

+ 64 - 0
src/main/java/com/caimei/modules/user/entity/CmSaleMan.java

@@ -0,0 +1,64 @@
+package com.caimei.modules.user.entity;
+
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.util.Date;
+import java.util.List;
+
+public class CmSaleMan extends DataEntity<CmSaleMan> {
+
+    private static final long serialVersionUID = 1L;
+    //协销组员
+    private List<ServiceProviderModel> groups;
+    //协销组长id
+    private Integer leaderId;
+    //协销组长姓名
+    private String leaderName;
+    //总管理标记 1是,2不是
+    private String manager;
+    //小组创建时间
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    public List<ServiceProviderModel> getGroups() {
+        return groups;
+    }
+
+    public void setGroups(List<ServiceProviderModel> groups) {
+        this.groups = groups;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
+
+    public String getManager() {
+        return manager;
+    }
+
+    public void setManager(String manager) {
+        this.manager = manager;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+}

+ 10 - 1
src/main/java/com/caimei/modules/user/entity/NewCmSp.java

@@ -5,6 +5,7 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
 import java.beans.Transient;
+import java.util.List;
 
 /**
  * 用户模块重构-协销人员管理Entity
@@ -29,7 +30,7 @@ public class NewCmSp extends DataEntity<NewCmSp> {
 	private Integer status;		// 创客状态,见表c_serviceproviderstatus或枚举ServiceProviderStatus
 	private String addTime;		// 创建时间
 	private Integer mainServiceProviderID;		// 创客经理Id
-
+	private List<CmSaleMan> teams;  //小组组长列表
 //	private String nameEn;		// 英文名
 //	private String site;		// 网址
 //	private String logo;		// 头像
@@ -91,6 +92,14 @@ public class NewCmSp extends DataEntity<NewCmSp> {
 		super(id);
 	}
 
+	public List<CmSaleMan> getTeams() {
+		return teams;
+	}
+
+	public void setTeams(List<CmSaleMan> teams) {
+		this.teams = teams;
+	}
+
 	@NotNull(message="serviceProviderID不能为空")
 	public Integer getServiceProviderID() {
 		return serviceProviderID;

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

@@ -1,5 +1,6 @@
 package com.caimei.modules.user.entity;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.thinkgem.jeesite.common.persistence.DataEntity;
 
@@ -33,6 +34,34 @@ public class VisitRemarkVo extends DataEntity<VisitRemarkVo> {
      * 同步clubid
      */
     private String clubId;
+    /**
+     * 总咨询类别
+     */
+    private List<CmConsulttype> consults;
+    //记录的咨询类别
+    private String consultType;
+    /**
+     * 咨询类别
+     */
+    private String consult;
+    /**
+     * 总小组
+     */
+    private List<CmSaleMan> teams;
+    /**
+     * 组长id/管理员id
+     */
+    private Integer leaderId;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startAddTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endAddTime;
     /**
      * 备注/关键词
      */
@@ -72,6 +101,70 @@ public class VisitRemarkVo extends DataEntity<VisitRemarkVo> {
      */
     private List<Server> serverList;
 
+    public String getConsultType() {
+        return consultType;
+    }
+
+    public void setConsultType(String consultType) {
+        this.consultType = consultType;
+    }
+
+    public List<CmConsulttype> getConsults() {
+        return consults;
+    }
+
+    public void setConsults(List<CmConsulttype> consults) {
+        this.consults = consults;
+    }
+
+    public String getConsult() {
+        return consult;
+    }
+
+    public void setConsult(String consult) {
+        this.consult = consult;
+    }
+
+    public List<CmSaleMan> getTeams() {
+        return teams;
+    }
+
+    public void setTeams(List<CmSaleMan> teams) {
+        this.teams = teams;
+    }
+
+    public Integer getLeaderId() {
+        return leaderId;
+    }
+
+    public void setLeaderId(Integer leaderId) {
+        this.leaderId = leaderId;
+    }
+
+    public String getLeaderName() {
+        return leaderName;
+    }
+
+    public void setLeaderName(String leaderName) {
+        this.leaderName = leaderName;
+    }
+
+    public Date getStartAddTime() {
+        return startAddTime;
+    }
+
+    public void setStartAddTime(Date startAddTime) {
+        this.startAddTime = startAddTime;
+    }
+
+    public Date getEndAddTime() {
+        return endAddTime;
+    }
+
+    public void setEndAddTime(Date endAddTime) {
+        this.endAddTime = endAddTime;
+    }
+
     public String getClubName() {
         return clubName;
     }

+ 10 - 0
src/main/java/com/caimei/modules/user/service/CmSpService.java

@@ -1,6 +1,7 @@
 package com.caimei.modules.user.service;
 
 import com.caimei.modules.user.dao.CmSpDao;
+import com.caimei.modules.user.entity.CmSaleMan;
 import com.caimei.modules.user.entity.CmUser;
 import com.caimei.modules.user.entity.NewCmSp;
 import com.thinkgem.jeesite.common.persistence.Page;
@@ -58,4 +59,13 @@ public class CmSpService extends CrudService<CmSpDao, NewCmSp> {
 	public int updateSpManager(Integer spManagerID) {
 		return cmSpDao.updateSpManager(spManagerID);
 	}
+
+    public List<CmSaleMan> findTeam() {
+    	return cmSpDao.findTeam();
+	}
+	@Transactional(readOnly = false)
+	public void saveLeader(Integer serviceProviderID) {
+		cmSpDao.updateManager();
+		cmSpDao.choseManager(serviceProviderID);
+	}
 }

+ 49 - 10
src/main/java/com/caimei/modules/user/service/NewCmClubService.java

@@ -1,13 +1,15 @@
 package com.caimei.modules.user.service;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 
+import com.caimei.modules.consult.entity.type.CmConsulttype;
 import com.caimei.modules.oss.service.CmOssArchiveService;
 import com.caimei.modules.oss.utils.OSSUtils;
-import com.caimei.modules.user.entity.CmClubRemarks;
-import com.caimei.modules.user.entity.RemarksFileVo;
-import com.caimei.modules.user.entity.UserBeansHistory;
+import com.caimei.modules.project.model.ServiceProviderModel;
+import com.caimei.modules.user.entity.*;
+import com.thinkgem.jeesite.common.utils.StringUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -15,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.service.CrudService;
-import com.caimei.modules.user.entity.NewCmClub;
 import com.caimei.modules.user.dao.NewCmClubDao;
 
 import javax.servlet.http.HttpServletRequest;
@@ -59,7 +60,7 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
     }
 
     @Transactional(readOnly = false)
-    public void insert(NewCmClub userClub){
+    public void insert(NewCmClub userClub) {
         newCmClubDao.insert(userClub);
     }
 
@@ -75,9 +76,9 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
 
     public NewCmClub findClubById(Integer clubId) {
         List<NewCmClub> newCmClubs = newCmClubDao.findClubById(clubId);
-        if(CollectionUtils.isNotEmpty(newCmClubs) && newCmClubs.size() > 0 ){
+        if (CollectionUtils.isNotEmpty(newCmClubs) && newCmClubs.size() > 0) {
             return newCmClubs.get(0);
-        }else{
+        } else {
             return null;
         }
     }
@@ -87,13 +88,13 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
         newCmClubDao.insertBeansHistory(beansHistory);
     }
 
-    public Page<CmClubRemarks> findRemarksPage(Page<CmClubRemarks> page, CmClubRemarks cmClubRemarks){
+    public Page<CmClubRemarks> findRemarksPage(Page<CmClubRemarks> page, CmClubRemarks cmClubRemarks) {
         cmClubRemarks.setPage(page);
         List<CmClubRemarks> remarksList = newCmClubDao.findRemarksList(cmClubRemarks);
-        remarksList.forEach(remarks->{
+        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())));
+            fileList.forEach(f -> f.setFileUrl(OSSUtils.getOssUrl(f.getOssName())));
             remarks.setImageList(imageList);
             remarks.setFileList(fileList);
         });
@@ -105,4 +106,42 @@ public class NewCmClubService extends CrudService<NewCmClubDao, NewCmClub> {
         OSSUtils.downFile(ossName, fileName);
         cmOssArchiveService.download(request, response, fileName);
     }
+
+    public Page<CmClubRemarks> findRegistPage(Page<CmClubRemarks> cmClubRemarksPage, CmClubRemarks cmClubRemarks) {
+        cmClubRemarks.setPage(cmClubRemarksPage);
+        List<CmClubRemarks> remarksList = newCmClubDao.findRegistList(cmClubRemarks);
+        remarksList.forEach(remarks -> {
+            if (null != remarks.getConsultType()) {
+                List<String> strings = Arrays.asList(remarks.getConsultType().split(","));
+                String cons = "";
+                for (String string : strings) {
+                    cons += newCmClubDao.findClassName(string) + ",";
+                }
+                cons = cons.substring(0, cons.length() - 1);
+                remarks.setConsultType(cons);
+            }
+            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);
+        });
+        if (StringUtils.isNotBlank(cmClubRemarks.getConsult())) {
+            remarksList.removeIf(r -> !r.getConsult().contains(cmClubRemarks.getConsult()));
+        }
+        cmClubRemarksPage.setList(remarksList);
+        return cmClubRemarksPage;
+    }
+
+    public List<CmConsulttype> findConsults() {
+        return newCmClubDao.findConsults();
+    }
+
+    public List<CmSaleMan> findTeams() {
+        return newCmClubDao.findTeams();
+    }
+
+    public List<ServiceProviderModel> findGroup(Integer leaderId) {
+        return newCmClubDao.findGroup(leaderId);
+    }
 }

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

@@ -1,13 +1,21 @@
 package com.caimei.modules.user.service;
 
+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.RemarksFileVo;
 import com.caimei.modules.user.entity.Server;
 import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.service.CrudService;
+import com.thinkgem.jeesite.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Stream;
 
 @Service
 public class VisitRemarkService extends CrudService<VisitRemarkDao, VisitRemarkVo> {
@@ -18,4 +26,30 @@ public class VisitRemarkService extends CrudService<VisitRemarkDao, VisitRemarkV
     public List<Server> getServer() {
         return visitRemarkDao.getServer();
     }
+
+    public Page<VisitRemarkVo> findUnregistPage(Page<VisitRemarkVo> visitRemarkVoPage, VisitRemarkVo visit) {
+        visit.setPage(visitRemarkVoPage);
+        List<VisitRemarkVo> remarksList = visitRemarkDao.findRegistList(visit);
+        remarksList.forEach(remarks -> {
+            if (null != remarks.getConsultType()) {
+                List<String> strings = Arrays.asList(remarks.getConsultType().split(","));
+                String cons = "";
+                for (String string : strings) {
+                    cons += visitRemarkDao.findClassName(string) + ",";
+                }
+                cons = cons.substring(0, cons.length() - 1);
+                remarks.setConsultType(cons);
+            }
+            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);
+        });
+        if (StringUtils.isNotBlank(visit.getConsult())) {
+            remarksList.removeIf(r -> !r.getConsult().contains(visit.getConsult()));
+        }
+        visitRemarkVoPage.setList(remarksList);
+        return visitRemarkVoPage;
+    }
 }

+ 46 - 1
src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java

@@ -4,6 +4,7 @@ import com.caimei.constants.ClubStatus;
 import com.caimei.dfs.image.beens.ImageUploadInfo;
 import com.caimei.modules.common.utils.UploadUtils;
 import com.caimei.modules.product.service.CmShoporderService;
+import com.caimei.modules.project.model.ServiceProviderModel;
 import com.caimei.modules.sys.utils.CmMsgUtils;
 import com.caimei.modules.sys.utils.SMSUtils;
 import com.caimei.modules.sys.utils.UploadImageUtils;
@@ -35,6 +36,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -688,13 +691,49 @@ public class AgencyController extends BaseController {
      * 资料备注列表
      */
     @RequestMapping("remarks")
-    public String remarksList(CmClubRemarks cmClubRemarks,HttpServletRequest request, HttpServletResponse response, Model model) {
+    public String remarksList(CmClubRemarks cmClubRemarks, HttpServletRequest request, HttpServletResponse response, Model model) {
         Page<CmClubRemarks> page = newCmClubService.findRemarksPage(new Page<CmClubRemarks>(request, response, 20), cmClubRemarks);
         model.addAttribute("cmClubRemarks", cmClubRemarks);
         model.addAttribute("page", page);
         return "modules/userNew/cmAgencyRemarksList";
     }
 
+    /**
+     * 已注册用户咨询记录
+     *
+     * @param cmClubRemarks
+     * @param request
+     * @param response
+     * @param model
+     * @return
+     */
+    @RequestMapping("regist")
+    public String registList(CmClubRemarks cmClubRemarks, HttpServletRequest request, HttpServletResponse response, Model model) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            if(null!=cmClubRemarks.getStartAddTime()){
+                Date startAddTime = cmClubRemarks.getStartAddTime();
+                String start = format.format(startAddTime);
+                start+="00:00:00";
+                cmClubRemarks.setStartAddTime(format.parse(start));
+            }
+            if(null!=cmClubRemarks.getEndAddTime()){
+                Date endAddTime = cmClubRemarks.getEndAddTime();
+                String end=format.format(endAddTime);
+                end+="23:59:59";
+                cmClubRemarks.setEndAddTime(format.parse(end));
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        Page<CmClubRemarks> page = newCmClubService.findRegistPage(new Page<CmClubRemarks>(request, response, 20), cmClubRemarks);
+        cmClubRemarks.setConsults(newCmClubService.findConsults());
+        cmClubRemarks.setTeams(newCmClubService.findTeams());
+        model.addAttribute("cmClubRemarks", cmClubRemarks);
+        model.addAttribute("page", page);
+        return "modules/userNew/cmRegistRemarksList";
+    }
+
     /**
      * 资料备注列表
      */
@@ -702,4 +741,10 @@ public class AgencyController extends BaseController {
     public void downloadRemarks(String fileName, String ossName, HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {
         newCmClubService.downloadRemarks(fileName, ossName, request, response);
     }
+
+    @RequestMapping("group")
+    @ResponseBody
+    public List<ServiceProviderModel> group(Integer leaderId) {
+        return newCmClubService.findGroup(leaderId);
+    }
 }

+ 24 - 5
src/main/java/com/caimei/modules/user/web/newUser/SpController.java

@@ -10,10 +10,7 @@ import com.caimei.modules.project.dao.ServiceProviderDao;
 import com.caimei.modules.project.model.ClubModel;
 import com.caimei.modules.project.model.ServiceProviderModel;
 import com.caimei.modules.sys.utils.ValidateUtils;
-import com.caimei.modules.user.entity.ClubChangeSp;
-import com.caimei.modules.user.entity.CmBind;
-import com.caimei.modules.user.entity.CmUser;
-import com.caimei.modules.user.entity.NewCmSp;
+import com.caimei.modules.user.entity.*;
 import com.caimei.modules.user.service.ClubChangeSpReviewService;
 import com.caimei.modules.user.service.CmBindService;
 import com.caimei.modules.user.service.CmSpService;
@@ -175,6 +172,7 @@ public class SpController extends BaseController {
 
     /**
      * 协销管理
+     *
      * @param newCmSp
      * @param request
      * @param response
@@ -196,6 +194,7 @@ public class SpController extends BaseController {
 
     /**
      * 添加协销人员
+     *
      * @param newCmSp
      * @param model
      * @return
@@ -271,7 +270,9 @@ public class SpController extends BaseController {
         cmSp.setAuditStatus(AppKeys.FLAG_YES);
         cmSp.setValidFlag(AppKeys.FLAG_YES);
         // 默认的协销经理 1304 王小萌
-        if ("0".equals(duty)) {cmSp.setMainServiceProviderID(1304);}
+        if ("0".equals(duty)) {
+            cmSp.setMainServiceProviderID(1304);
+        }
         cmSpService.save(cmSp);
         try {
             cmUser.setPassword(MD5Utils.MD5(password));
@@ -414,4 +415,22 @@ public class SpController extends BaseController {
         return "redirect:" + Global.getAdminPath() + "/new/user/cmSp/cmSpList/?repage";
     }
 
+    @RequestMapping(value = "leader")
+    public String leader(NewCmSp newCmSp, Model model, RedirectAttributes redirectAttributes) {
+        newCmSp.setTeams(cmSpService.findTeam());
+        model.addAttribute("newCmSp", newCmSp);
+        return "modules/userNew/cmSpTeamList";
+    }
+
+    @RequestMapping(value = "leader/save")
+    public String leaderSave(NewCmSp newCmSp, Model model, RedirectAttributes redirectAttributes) {
+        if (null == newCmSp.getServiceProviderID()) {
+            model.addAttribute("message", "请选择管理人员!");
+            return "redirect:" + Global.getAdminPath() + "/new/user/cmSp/leader/?repage";
+        }
+        cmSpService.saveLeader(newCmSp.getServiceProviderID());
+        addMessage(redirectAttributes, "保存大总管成功");
+        return "redirect:" + Global.getAdminPath() + "/serviceteam/cmServiceteamRole/?repage";
+    }
+
 }

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

@@ -5,6 +5,7 @@ import com.caimei.modules.oss.utils.OSSUtils;
 import com.caimei.modules.user.dao.VisitRemarkDao;
 import com.caimei.modules.user.entity.RemarksFileVo;
 import com.caimei.modules.user.entity.VisitRemarkVo;
+import com.caimei.modules.user.service.NewCmClubService;
 import com.caimei.modules.user.service.VisitRemarkService;
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.utils.StringUtils;
@@ -18,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 
@@ -31,6 +35,9 @@ public class VisitRemarkController extends BaseController {
     @Autowired
     private VisitRemarkService visitRemarkService;
 
+    @Autowired
+    private NewCmClubService newCmClubService;
+
     @ModelAttribute
     public VisitRemarkVo get(@RequestParam(required = false) String id) {
         VisitRemarkVo entity = null;
@@ -84,4 +91,35 @@ public class VisitRemarkController extends BaseController {
         return "modules/userNew/cmVisitRemarksList";
     }
 
+
+    /**
+     * 资料备注列表
+     */
+    @RequestMapping("unregist")
+    public String unregist(VisitRemarkVo visit, HttpServletRequest request, HttpServletResponse response, Model model) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            if(null!=visit.getStartAddTime()){
+                Date startAddTime = visit.getStartAddTime();
+                String start = format.format(startAddTime);
+                start+="00:00:00";
+                visit.setStartAddTime(format.parse(start));
+            }
+            if(null!=visit.getEndAddTime()){
+                Date endAddTime = visit.getEndAddTime();
+                String end=format.format(endAddTime);
+                end+="23:59:59";
+                visit.setEndAddTime(format.parse(end));
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        Page<VisitRemarkVo> page = visitRemarkService.findUnregistPage(new Page<VisitRemarkVo>(request, response, 20), visit);
+        visit.setConsults(newCmClubService.findConsults());
+        visit.setTeams(newCmClubService.findTeams());
+        model.addAttribute("page", page);
+        model.addAttribute("visit", visit);
+        return "modules/userNew/cmUnRegistRemarksList";
+    }
+
 }

+ 2 - 2
src/main/resources/config/beta/caimei.properties

@@ -155,8 +155,8 @@ yeepay.divideCallback=http://admintest.365mdd.com/a/order/newShouldPay/divideCal
 yeepay.mails=jun.li@caimei365.com
 
 #微信公众号信息(测试公众号无数据此处使用正式公众号)
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 encryptMessage=false
 encodingAesKey=wJWhhXuWAByeBPA8NicwFGraVhjKqWBUm94sOKN3s66

+ 2 - 2
src/main/resources/config/dev/caimei.properties

@@ -168,8 +168,8 @@ yeepay.divideCallback=http://localhost:8181/a/order/newShouldPay/divideCallback
 yeepay.mails=jun.li@caimei365.com
 
 #΢���������
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 ##�Ƿ����Ϣ���м��ܣ��Ƿ����Ϣ���м��ܣ���Ӧ��΢��ƽ̨����Ϣ�ӽ��ܷ�ʽ��false֧������ģʽ������ģʽ��true֧�ְ�ȫģʽ������ģʽ
 encryptMessage=false

+ 2 - 2
src/main/resources/config/prod/caimei.properties

@@ -156,8 +156,8 @@ yeepay.divideCallback=http://admin.caimei365.com/a/order/newShouldPay/divideCall
 yeepay.mails=jun.li@caimei365.com,718478952@qq.com,472492267@qq.com
 
 #微信公众号功信息
-appId=wxea43a0f9ebce9e66
-appSecret=1c3cd60908e72dd280840bee9e15f7f6
+appId=wx91c4152b60ca91a3
+appSecret=a563dd2c07c9c815a4e697c8b6cb73dc
 token=caimei
 encryptMessage=false
 encodingAesKey=wJWhhXuWAByeBPA8NicwFGraVhjKqWBUm94sOKN3s66

+ 113 - 0
src/main/resources/mappings/modules/consult/type/CmConsulttypeMapper.xml

@@ -0,0 +1,113 @@
+<?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.consult.dao.type.CmConsulttypeDao">
+    
+	<sql id="cmConsulttypeColumns">
+		a.id AS "id",
+		a.className AS "className",
+		a.status AS "status",
+		a.sortNumber AS "sortNumber",
+		a.createdTime AS "createdTime",
+		a.delflag AS "delflag"
+	</sql>
+	
+	<sql id="cmConsulttypeJoins">
+	</sql>
+    
+	<select id="get" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			<if test="status != null and status !=''">
+				and a.status = #{status}
+			</if>
+		    <if test="className != null and className != ''">
+				AND a.className LIKE concat('%',#{className},'%')
+			</if>
+		</where>
+		order by createdTime asc
+	</select>
+	
+	<select id="findAllList" resultType="CmConsulttype">
+		SELECT 
+			<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+	<select id="sort" resultType="com.caimei.modules.consult.entity.type.CmConsulttype">
+		SELECT
+		<include refid="cmConsulttypeColumns"/>
+		FROM cm_consulttype a
+		<include refid="cmConsulttypeJoins"/>
+		<where>
+			<if test="status != null and status !=''">
+				and a.status = #{status}
+			</if>
+			<if test="className != null and className != ''">
+				AND a.className LIKE concat('%',#{className},'%')
+			</if>
+		</where>
+		order by sortNumber asc
+	</select>
+	<insert id="insert" parameterType="CmConsulttype"  keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_consulttype(
+			className,
+			status,
+			sortNumber,
+			createdTime,
+			delflag
+		) VALUES (
+			#{className},
+			1,
+			#{sortNumber},
+			now(),
+			0
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE cm_consulttype SET
+		<if test="className != null and className != '' ">
+			className = #{className},
+		</if>
+		<if test="status != null and status != ''">
+			status = #{status},
+		</if>
+		<if test="sortNumber != null and sortNumber != '' ">
+			sortNumber = #{sortNumber},
+		</if>
+		<if test="createdTime != null">
+			createdTime = #{createdTime},
+		</if>
+		<if test="delflag != null and delflag != ''">
+		delflag = #{delflag}
+		</if>
+		WHERE id = #{id}
+	</update>
+	
+	<delete id="delete">
+		DELETE FROM cm_consulttype
+		WHERE id = #{id}
+	</delete>
+	
+</mapper>

+ 137 - 0
src/main/resources/mappings/modules/serviceteam/CmServiceteamRoleMapper.xml

@@ -0,0 +1,137 @@
+<?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.serviceteam.dao.CmServiceteamRoleDao">
+    
+	<sql id="cmServiceteamRoleColumns">
+		a.id AS "id",
+		a.leaderId AS "leaderId",
+		a.manager AS "manager",
+		a.createdTime AS "createdTime",
+		a.delflag AS "delflag"
+	</sql>
+	
+	<sql id="cmServiceteamRoleJoins">
+	</sql>
+    
+	<select id="get" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		<where>
+			
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="CmServiceteamRole">
+		SELECT 
+			<include refid="cmServiceteamRoleColumns"/>
+		FROM cm_serviceteam_role a
+		<include refid="cmServiceteamRoleJoins"/>
+		<where>
+			
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+			</otherwise>
+		</choose>
+	</select>
+    <select id="findTeams" resultType="com.caimei.modules.serviceteam.entity.CmServiceteamRole">
+		SELECT DISTINCT
+		csr.leaderId,csr.manager,csr.createdTime,s.name as leaderName,csr.id as teamId
+		FROM cm_serviceteam_role csr
+		LEFT JOIN serviceprovider s ON csr.leaderId=s.serviceProviderID
+		<if test="leaderName != null and leaderName != ''">
+		LEFT JOIN cm_serviceteam_group csg ON csg.teamId = csr.id
+		WHERE csg.serviceId IN
+		(SELECT s.serviceProviderID FROM serviceprovider s
+		WHERE s.name LIKE CONCAT('%',#{leaderName},'%'))
+		</if>
+	</select>
+	<select id="findGroups" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		SELECT csg.serviceId AS serviceProviderID,s.name
+		FROM cm_serviceTeam_group csg
+		LEFT JOIN serviceprovider s ON csg.serviceId=s.serviceProviderID
+		WHERE csg.teamId = #{id}
+	</select>
+	<select id="findAllGroups" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		select s.serviceProviderID,s.name
+		from serviceprovider s
+		WHERE s.serviceProviderID NOT IN (SELECT serviceId FROM cm_serviceteam_group)
+	</select>
+	<select id="findLeader" resultType="com.caimei.modules.serviceteam.entity.CmServiceteamRole">
+		select csr.id as teamId,csr.leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on csr.leaderId=s.serviceProviderID
+		where id=#{teamId}
+		and csr.delflag = 0
+	</select>
+	<insert id="insert" parameterType="CmServiceteamRole"  keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_serviceteam_role(
+			id,
+			leaderId,
+			manager,
+			createdTime,
+			delflag
+		) VALUES (
+			#{id},
+			#{leaderId},
+			2,
+			now(),
+			0
+		)
+	</insert>
+	<insert id="save" parameterType="CmServiceteamRole" keyProperty="id" useGeneratedKeys="true">
+		INSERT INTO cm_serviceteam_role(
+			leaderId,
+			manager,
+			createdTime,
+			delflag
+		) VALUES (
+					 #{leaderId},
+					 2,
+					 now(),
+					 0
+				 )
+	</insert>
+	<insert id="saveGroup">
+		insert into cm_serviceteam_group
+		(teamId,serviceId)
+		values (#{teamId},#{i})
+	</insert>
+	<update id="update">
+		UPDATE cm_serviceteam_role SET 	
+			leaderId = #{leaderId},
+			manager = #{manager},
+			createdTime = #{createdTime},
+			delflag = #{delflag}
+		WHERE id = #{id}
+	</update>
+	
+	<delete id="delete">
+		DELETE FROM cm_serviceteam_role
+		WHERE id = #{id}
+	</delete>
+	<delete id="deleteAll">
+		delete from cm_serviceteam_group
+		where teamId = #{teamId}
+	</delete>
+</mapper>

+ 15 - 2
src/main/resources/mappings/modules/user/CmSpMapper.xml

@@ -193,7 +193,15 @@
 		UPDATE serviceprovider SET
 		mainServiceProviderID = #{spManagerID}
 	</update>
-	
+	<update id="updateManager">
+		update cm_serviceteam_role set
+		manager = 2
+	</update>
+	<update id="choseManager">
+		update cm_serviceteam_role set
+		manager = 1
+		where leaderId = #{serviceProviderID}
+	</update>
 	<select id="findByUserId" resultType="com.caimei.modules.user.entity.NewCmSp">
 		SELECT
 		<include refid="newCmSpColumns"/>
@@ -201,5 +209,10 @@
 		<include refid="newCmSpJoins"/>
 		WHERE a.userID = #{userId}
 	</select>
-
+    <select id="findTeam" resultType="com.caimei.modules.user.entity.CmSaleMan">
+		select leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on csr.leaderId = s.serviceProviderID
+		where csr.delflag = 0
+	</select>
 </mapper>

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

@@ -441,4 +441,55 @@
 		  and type = 2
 		  and num = 500
 	</select>
+	<select id="findRegistList" resultType="com.caimei.modules.user.entity.CmClubRemarks">
+		SELECT ccr.id AS remarksId, ccr.remarks,s.name AS spName, ccr.addTime,ccr.questionMan,
+		       csr.leaderId AS leaderId,ccr.consultType, c.Name as clubName,
+			   (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID= csr.leaderId) AS leaderName
+		FROM cm_club_remarks ccr
+				 LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+				 LEFT JOIN club c ON c.clubId=ccr.clubId
+				 LEFT JOIN cm_serviceTeam_role csr ON csr.leaderId = ccr.serviceProviderId
+				 LEFT JOIN cm_serviceTeam_group csg ON csr.id=csg.teamId
+		<where>
+			<if test="remarks != null and remarks !=''">
+				AND ccr.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="clubName !=null and clubName !=''">
+				AND c.Name like concat('%',#{clubName},'%')
+			</if>
+			<if test="leaderId != null">
+				and csr.leaderId = #{leaderId}
+			</if>
+			<if test="serviceProviderId != null">
+				and csg.serviceId = #{serviceProviderId}
+			</if>
+			<if test="startAddTime != null">
+				and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+			</if>
+			<if test="endAddTime != null">
+				and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+			</if>
+		</where>
+		ORDER BY ADDTIME DESC
+	</select>
+	<select id="findConsults" resultType="com.caimei.modules.consult.entity.type.CmConsulttype">
+		select id,className,createdTime from cm_consulttype
+		where delflag = 0
+	</select>
+	<select id="findTeams" resultType="com.caimei.modules.user.entity.CmSaleMan">
+		select csr.leaderId,s.name as leaderName
+		from cm_serviceteam_role csr
+		left join serviceprovider s on s.serviceProviderID = csr.leaderId
+		where csr.delflag = 0
+	</select>
+	<select id="findGroup" resultType="com.caimei.modules.project.model.ServiceProviderModel">
+		SELECT serviceId as serviceProviderID,s.name FROM
+		cm_serviceteam_group csg
+		LEFT JOIN cm_serviceTeam_role csr ON csr.id=csg.teamid
+		LEFT JOIN serviceprovider s ON s.serviceProviderID=csg.serviceId
+		WHERE csr.leaderId = #{leaderId}
+	</select>
+	<select id="findClassName" resultType="java.lang.String">
+		select className from cm_consulttype where id = #{string}
+	</select>
 </mapper>

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

@@ -61,4 +61,34 @@
         where remarksId = #{remarksId}
           and fileType = 2
     </select>
+    <select id="findRegistList" resultType="com.caimei.modules.user.entity.VisitRemarkVo">
+        SELECT ccr.id AS remarksId, ccr.remarks,s.name AS spName, ccr.addTime,ccr.questionMan,
+        csr.leaderId AS leaderId,ccr.consultType,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID= csr.leaderId) AS leaderName
+        FROM cm_visitor_remarks ccr
+        LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+        LEFT JOIN cm_serviceTeam_role csr ON csr.leaderId = ccr.serviceProviderId
+        LEFT JOIN cm_serviceTeam_group csg ON csr.id=csg.teamId
+        <where>
+            <if test="remarks != null and remarks !=''">
+                AND ccr.remarks LIKE concat('%',#{remarks},'%')
+            </if>
+            <if test="leaderId != null">
+                and csr.leaderId = #{leaderId}
+            </if>
+            <if test="serviceProviderId != null">
+                and csg.serviceId = #{serviceProviderId}
+            </if>
+            <if test="startAddTime != null">
+                and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+            </if>
+            <if test="endAddTime != null">
+                and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+            </if>
+        </where>
+        ORDER BY ADDTIME DESC
+    </select>
+    <select id="findClassName" resultType="java.lang.String">
+        select className from cm_consulttype where id = #{string}
+    </select>
 </mapper>

+ 68 - 0
src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeForm.jsp

@@ -0,0 +1,68 @@
+<%@ 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();
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    var sortNumber = $("#sortNumber").val();
+                    var jy = /^[1-9]\d*$/;
+                    console.log(sortNumber);
+                    if (!jy.test(sortNumber)) {
+                        alert("排序值只能为正整数 !");
+                        return;
+                    }
+                    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);
+                    }
+                }
+            });
+
+        });
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+    <li class="active"><a
+            href="${ctx}/consult/type/cmConsulttype/form?id=${cmConsulttype.id}">咨询类别${not empty cmConsulttype.id?'编辑':'添加'}</a>
+    </li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="cmConsulttype" action="${ctx}/consult/type/cmConsulttype/save" method="post"
+           class="form-horizontal">
+    <form:hidden path="id"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <label class="control-label">咨询类别名称:</label>
+        <div class="controls">
+            <form:input path="className" htmlEscape="false" maxlength="30" class="input-xlarge "/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">咨询类别排序 :</label>
+        <div class="controls">
+            <form:input path="sortNumber" htmlEscape="false" class="input-xlarge "/>
+        </div>
+    </div>
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+</body>
+</html>

+ 99 - 0
src/main/webapp/WEB-INF/views/modules/consult/type/cmConsulttypeList.jsp

@@ -0,0 +1,99 @@
+<%@ 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">
+        .table th {
+            text-align: center;
+        }
+
+        .table td {
+            text-align: center;
+        }
+    </style>
+    <script type="text/javascript">
+
+        $(document).ready(function () {
+        });
+
+        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/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li class="active"><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+<%--    <li><a href="${ctx}/consult/type/cmConsulttype/form">咨询类别添加</a></li>--%>
+</ul>
+<form:form id="searchForm" modelAttribute="cmConsulttype" action="${ctx}/consult/type/cmConsulttype/" 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}"/>
+    <%--    < class="ul-form">--%>
+    <label>类别名称:</label>
+    <form:input path="className" class="input-medium" maxlength="20"/>
+    <label>状态:</label>
+    <form:select path="status" class="input-xlarge" cssStyle="width: 150px">
+        <form:option value="" label="全部"></form:option>
+        <form:option value="1" label="启用"></form:option>
+        <form:option value="2" label="停用"></form:option>
+    </form:select>
+
+    &nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="${ctx}/consult/type/cmConsulttype/form"  class="btn btn-primary" style="width: 70px">添加类别</a>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+    &nbsp;&nbsp;&nbsp;&nbsp;
+    <a class="btn btn-primary" style="width: 70px"
+       href="${ctx}/consult/type/cmConsulttype/sort">一键排序</a>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+
+    <div class="clearfix"></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 id="sortbody">
+    <c:forEach items="${page.list}" var="cmConsulttype">
+        <tr>
+            <td>${cmConsulttype.id}</td>
+            <td>${cmConsulttype.className}</td>
+            <td><c:if test="${cmConsulttype.status eq 1}">
+                <div style="color: green">已启用<a style="text-decoration: none" href="${ctx}/consult/type/cmConsulttype/use?id=${cmConsulttype.id}&status=2">&nbsp&nbsp&nbsp 停用</a></div>
+            </c:if>
+                <c:if test="${cmConsulttype.status eq 2}">
+                    <div style="color: red">已停用<a style="text-decoration: none" href="${ctx}/consult/type/cmConsulttype/use?id=${cmConsulttype.id}&status=1">&nbsp&nbsp&nbsp 启用</a></div>
+                </c:if>
+            </td>
+            <td>${cmConsulttype.sortNumber}</td>
+            <td><fmt:formatDate value="${cmConsulttype.createdTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
+            <td>
+                <a href="${ctx}/consult/type/cmConsulttype/form?id=${cmConsulttype.id}">编辑</a>
+                <a href="${ctx}/consult/type/cmConsulttype/delete?id=${cmConsulttype.id}"
+                   onclick="return confirmx('确认要删除该咨询类别吗?', this.href)">删除</a>
+            </td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+<div class="pagination">${page}</div>
+</body>
+</html>

+ 147 - 0
src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleForm.jsp

@@ -0,0 +1,147 @@
+<%@ 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();
+            $("#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 getMember() {
+            var m = document.getElementsByName("ids");
+            var opts = "";
+            var count = 0;
+            for (let i = 0; i < m.length; i++) {
+                if (count >= 10) {
+                    var n = document.getElementsByName("ids");
+                    for (let i = 0; i < n.length; i++) {
+                        if (!n[i].checked) {
+                            var p = n[i].className;
+                            $('.' + p).hide();
+                        }
+                    }
+                } else {
+                    var n = document.getElementsByName("ids");
+                    for (let i = 0; i < n.length; i++) {
+                        if (!n[i].checked) {
+                            var p = n[i].className;
+                            $('.' + p).show();
+                        }
+                    }
+                }
+                if (m[i].checked && count < 10) {
+                    opts += "<option value='" + m[i].value + "'>" + m[i].id + "</option>";
+                    count++;
+                }
+            }
+            if (count >= 10) {
+                alert("最多选择十个组员!");
+            }
+            $("#findgroup").html('').append(opts);
+        }
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
+    <shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+    <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+    <li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+    <li class="active"><a
+            href="${ctx}/serviceteam/cmServiceteamRole/form?teamId=${cmServiceteamRole.teamId}">协销小组${not empty cmServiceteamRole.teamId?'编辑':'添加'}</a>
+    </li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="cmServiceteamRole" action="${ctx}/serviceteam/cmServiceteamRole/save"
+           method="post" class="form-horizontal">
+    <form:hidden path="id"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <div class="controls">
+            <c:if test="${not empty cmServiceteamRole.teamId}">
+            <span style="color:red;">本页面包含本组组员和所有未分组协销账号,上限选择十个,如已选十个则不可选更多组员,取消已选项可复选至十个</span>
+                <br/>
+                <br/>
+            </c:if>
+            <c:if test="${empty cmServiceteamRole.teamId}">
+                <span style="color:red;">本页面包含所有未分组协销账号,上限选择十个,如已选十个则不可选更多组员,取消已选项可复选至十个</span>
+                <br/>
+                <br/>
+            </c:if>
+        </div>
+        <label class="control-label">组员:</label>
+        <div class="controls">
+            <c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="status">
+                <c:if test="${not empty group.teamFlag}">
+                    <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                       value="${group.serviceProviderID}" style="zoom: 150%" checked
+                       onclick="getMember()">
+                    <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                </c:if>
+                <c:if test="${empty group.teamFlag}">
+                    <c:if test="${empty cmServiceteamRole.fullFlag}">
+                        <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                               value="${group.serviceProviderID}" style="zoom: 150%"
+                               onclick="getMember()">
+                        <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                    </c:if>
+                    <c:if test="${not empty cmServiceteamRole.fullFlag}">
+                        <input class="N${group.serviceProviderID}" type="checkbox" name="ids" id="${group.name}"
+                               value="${group.serviceProviderID}" style="zoom: 150%;display: none"
+                               onclick="getMember()">
+                        <span style="font-size: 15px;" id="${group.serviceProviderID}">${group.name}&nbsp;&nbsp;</span>
+                    </c:if>
+                </c:if>
+                <c:if test="${status.count%10 eq 0}">
+                    <hr/>
+                </c:if>
+            </c:forEach>
+        </div>
+        <br/>
+        <br/>
+        <label class="control-label">小组管理员:</label>
+        <div class="controls">
+            <c:if test="${not empty cmServiceteamRole.teamId}">
+                <form:select path="leaderId" class="input-medium" id="findgroup">
+                <form:option value="" label="请在组员中选择"/>
+                    <form:option value="${cmServiceteamRole.leaderId}" label="${cmServiceteamRole.leaderName}"/>
+                <c:forEach items="${cmServiceteamRole.group}" var="group">
+                    <c:if test="${group.serviceProviderID ne cmServiceteamRole.leaderId && not empty group.teamFlag}">
+                    <form:option value="${group.serviceProviderID}" label="${group.name}"/>
+                    </c:if>
+                </c:forEach>
+                </form:select>
+            </c:if>
+            <c:if test="${empty cmServiceteamRole.teamId}">
+                <form:select path="leaderId" class="input-medium" id="findgroup">
+                    <form:option value="" label="请在组员中选择"/>
+                </form:select>
+            </c:if>
+        </div>
+    </div>
+
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+</body>
+</html>

+ 96 - 0
src/main/webapp/WEB-INF/views/modules/serviceteam/cmServiceteamRoleList.jsp

@@ -0,0 +1,96 @@
+<%@ 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">
+		.table th{text-align: center;}
+		.table td{text-align: center;}
+	</style>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			
+		});
+		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/cmSp/cmSpList/">协销人员列表</a></li>
+		<shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+		<li class="active"><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+		<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+	</ul>
+	<form:form id="searchForm" modelAttribute="cmServiceteamRole" action="${ctx}/serviceteam/cmServiceteamRole/" 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="leaderName" class="input-medium" maxlength="50"/>
+		</div>
+		<div class="item">
+			&nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+		</div>
+		<div class="item">
+			<a class="btn btn-primary" href="${ctx}/serviceteam/cmServiceteamRole/form" style="margin-left: 15px">添加小组</a>
+		</div>
+		<div class="clearfix"></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="cmServiceteamRole" varStatus="status">
+			<tr>
+				<td>小组${status.index+1}</td>
+				<td>
+				<c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="g">
+					<c:if test="${!g.last}">
+						${group.name},
+					</c:if>
+					<c:if test="${g.last}">
+					${group.name}
+					</c:if>
+				</c:forEach>
+				</td>
+				<td>
+					<c:forEach items="${cmServiceteamRole.group}" var="group" varStatus="g">
+						<c:if test="${g.last}">
+							${g.count}
+						</c:if>
+					</c:forEach>
+				</td>
+				<td>
+						${cmServiceteamRole.leaderName}<c:if test="${cmServiceteamRole.manager eq 1}">(总管理员)</c:if>
+				</td>
+				<td>
+					<fmt:formatDate value="${cmServiceteamRole.createdTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</td>
+				<td>
+    				<a href="${ctx}/serviceteam/cmServiceteamRole/form?teamId=${cmServiceteamRole.teamId}">编辑</a>
+					<a href="${ctx}/serviceteam/cmServiceteamRole/delete?teamId=${cmServiceteamRole.teamId}" onclick="return confirmx('确认要删除该协销小组吗?', this.href)">删除</a>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	<div class="pagination">${page}</div>
+</body>
+</html>

+ 198 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmRegistRemarksList.jsp

@@ -0,0 +1,198 @@
+<%@ 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 getmember() {
+            var leaderId = $("#leaderId").val();
+            if (leaderId > 0) {
+                $.get("${ctx}/new/user/agency/group", {'leaderId': leaderId}, function (data) {
+                    console.log(data);
+                    var opts = "<option value='" + data[0].serviceProviderID + "'>" + data[0].name + "</option>";
+                    if (data.length > 1) {
+                        for (let i = 1; i < data.length; i++) {
+                            opts += "<option value='" + data[i].serviceProviderID + "' >" + data[i].name + "</option>";
+                        }
+                    }
+                    $("#findgroup").html('').append(opts);
+                });
+            } else {
+                $("#findgroup").html('');
+            }
+        }
+
+        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 class="active"><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+    <li><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+    <li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+</ul>
+<br/>
+<form:form id="searchForm" modelAttribute="cmClubRemarks" action="${ctx}/new/user/agency/regist" 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>
+            <label>关键词:</label>
+            <form:input path="remarks" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>咨询类别:</label>
+            <form:select path="consult" class="input-medium">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${cmClubRemarks.consults}" var="consults">
+                    <form:option value="${consults.id}">${consults.className}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>机构名称:</label>
+            <form:input path="clubName" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>小组:</label>
+            <form:select path="leaderId" class="input-medium" onchange="getmember()">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${cmClubRemarks.teams}" var="team">
+                    <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>组员:</label>
+            <form:select path="serviceProviderId" class="input-medium" id="findgroup">
+                <form:option value="" label="全部"/>
+            </form:select>
+        </div>
+        <div class="item">
+            <label class="control-label">添加日期:</label>
+            <form:input path="startAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${cmClubRemarks.startAddTime}" cssStyle="width: 130px"
+                        onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+            -
+            <form:input path="endAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${cmClubRemarks.endAddTime}" cssStyle="width: 130px"
+                        onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+        </div>
+        <div class="item">
+            &nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        </div>
+    </div>
+</form:form>
+<form:form id="inputForm" modelAttribute="cmClubRemarks" 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="clubRemarks" varStatus="remark">
+                <div class="td clear" style="dashed:#0066CC;">
+                    <div style="font-weight: bold;width: 100%;float: left;">
+                        <span style="float: left;">${clubRemarks.spName}</span>
+                        <span style="float: left;margin-left:20px;"><fmt:formatDate value="${clubRemarks.addTime}"
+                                                                                    pattern="yyyy-MM-dd HH:mm"/></span>
+                        <span style="float: left;margin-left:120px;">管理员:${clubRemarks.leaderName}</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: 300px;float: left;margin: 10px 0;">${clubRemarks.questionMan}</div>
+                        <div style="width: 100px;font-weight: bold;margin: 10px 0;float: left;text-align: right;margin-right: 10px;">
+                            机构名称:
+                        </div>
+                        <div style="width: 300px;float: left;margin: 10px 0;">${clubRemarks.clubName}</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: 300px;float: left;margin: 10px 0;">${clubRemarks.consultType}</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>
+                    </div>
+                    <div class="td-text" style="width: 100%;float: left;">
+                        <c:if test="${not empty clubRemarks.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="${clubRemarks.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 clubRemarks.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="${clubRemarks.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>

+ 2 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpForm.jsp

@@ -57,6 +57,8 @@
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
 		<li class="active"><a href="${ctx}/new/user/cmSp/cmSpForm?id=${cmSp.id}"><shiro:hasPermission name="user:newCmClub:edit">${not empty cmSp.id?'编辑':'添加'}</shiro:hasPermission><shiro:lacksPermission name="user:newCmClub:edit">查看</shiro:lacksPermission>协销人员</a></li>
+		<li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+		<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
 	</ul><br/>
 	<form id="inputForm" onsubmit="return false" action="##" method="post" class="form-horizontal">
 		<div class="control-group">

+ 2 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpList.jsp

@@ -32,6 +32,8 @@
 <ul class="nav nav-tabs">
 	<li class="active"><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
 	<shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+	<li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+	<li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
 </ul>
 <form:form id="searchForm" modelAttribute="newCmSp" action="${ctx}/new/user/cmSp/cmSpList/" method="post" class="breadcrumb form-search">
 	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>

+ 44 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmSpTeamList.jsp

@@ -0,0 +1,44 @@
+<%@ 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>
+    $(document).ready(function () {
+    });
+  </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+  <li><a href="${ctx}/new/user/cmSp/cmSpList/">协销人员列表</a></li>
+  <shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>
+  <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>
+  <li class="active"><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="newCmSp" action="${ctx}/new/user/cmSp/leader/save" method="post"
+           class="form-horizontal">
+  <sys:message content="${message}"/>
+
+  <div class="control-group">
+    <div class="controls" style="color: red;margin-left:4%">请在协销人员中选择某人作为协销总管理员,总管理员拥有管理全部协销小组的权限(未选择小组管理员前无可选项)</div>
+    <br/>
+    <label class="control-label"><span class="help-inline"><font color="red">*</font> </span>协销总管理员:</label>
+    <div class="controls">
+      <form:select path="serviceProviderID" class="input-medium">
+        <form:option value="" label="请选择"/>
+        <c:forEach items="${newCmSp.teams}" var="team">
+          <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+        </c:forEach>
+      </form:select>
+    </div>
+  </div>
+
+  <div class="form-actions">
+    <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+  </div>
+</form:form>
+</body>
+
+</html>

+ 155 - 0
src/main/webapp/WEB-INF/views/modules/userNew/cmUnRegistRemarksList.jsp

@@ -0,0 +1,155 @@
+<%@ 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();
+		}
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/new/user/agency/regist">已注册用户咨询记录</a></li>
+		<li class="active"><a href="${ctx}/new/user/visit/unregist">未注册用户咨询记录</a></li>
+		<li><a href="${ctx}/consult/type/cmConsulttype/">咨询类别设置</a></li>
+	</ul><br/>
+<form:form id="searchForm" modelAttribute="visit" action="${ctx}/new/user/visit/unregist" 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>
+            <label>关键词:</label>
+            <form:input path="remarks" class="input-medium" maxlength="50"/>
+        </div>
+        <div class="item">
+            <label>咨询类别:</label>
+            <form:select path="consult" class="input-medium">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${visit.consults}" var="consults">
+                    <form:option value="${consults.id}">${consults.className}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>小组:</label>
+            <form:select path="leaderId" class="input-medium" onchange="getmember()">
+                <form:option value="" label="全部"/>
+                <c:forEach items="${visit.teams}" var="team">
+                    <form:option value="${team.leaderId}">${team.leaderName}</form:option>
+                </c:forEach>
+            </form:select>
+        </div>
+        <div class="item">
+            <label>组员:</label>
+            <form:select path="serviceProviderId" class="input-medium" id="findgroup">
+                <form:option value="" label="全部"/>
+            </form:select>
+        </div>
+        <div class="item">
+            <label class="control-label">添加日期:</label>
+			<form:input path="startAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${visit.startAddTime}" cssStyle="width: 130px"
+						onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+			-
+			<form:input path="endAddTime" type="text" maxlength="20" class="input-mini Wdate" value="${visit.endAddTime}" cssStyle="width: 130px"
+						onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+        </div>
+        <div class="item">
+			&nbsp;&nbsp;&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
+        </div>
+    </div>
+</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">
+				<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>
+                    <span style="float: left;margin-left:120px;">管理员:${visitRemarks.leaderName}</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.consultType}</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>

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

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <head>
-    <title>潜在用户画像信息</title>
+    <title>未注册用户咨询记录</title>
     <meta name="decorator" content="default"/>
     <style>
         .reg-row .new-tag.active {
@@ -258,7 +258,7 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/new/user/visit/">潜在用户画像信息</a></li>
+    <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">