diff --git a/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupManager.java b/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupManager.java
deleted file mode 100644
index dfa26ed..0000000
--- a/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupManager.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**  
-* Title: CrmBusinessManager.java 
-* Description: 
-* @author dsc  
-* @date 2020年6月9日  
-* @version 1.0  
-*/
-package cn.timer.api.bean.crm;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * Title: CrmBusinessGroupManager.java
- * 
- * @Description:
- * @author dsc
- * @date 2020年6月9日
- * @version 1.0
- */
-
-@Entity
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Table(name = "crm_business_group_manager")
-@ApiModel("业务组管理员表")
-public class CrmBusinessGroupManager extends Model<CrmBusinessGroupManager> {
-
-	private static final long serialVersionUID = -957497237692110042L;
-
-	@Id
-	@GeneratedValue
-	@TableId(type = IdType.AUTO)
-	@ApiModelProperty(value = "编号")
-	private Integer id;
-
-	@ApiModelProperty(value = "组id")
-	private Integer gid;
-
-	@ApiModelProperty(value = "员工id")
-	private Integer empNum;
-	
-	@ApiModelProperty(value = "企业id")
-	private Integer orgCode;
-}
diff --git a/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupMember.java b/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupMember.java
index ab83ce5..c3153c5 100644
--- a/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupMember.java
+++ b/src/main/java/cn/timer/api/bean/crm/CrmBusinessGroupMember.java
@@ -54,6 +54,9 @@ public class CrmBusinessGroupMember extends Model<CrmBusinessGroupMember>{
 	@ApiModelProperty(value = "员工id")
 	private Integer empNum;
 	
+	@ApiModelProperty(value = "0-普通成员 1-管理员")
+	private Integer type;
+	
 	@ApiModelProperty(value = "企业id")
 	private Integer orgCode;
 }
diff --git a/src/main/java/cn/timer/api/bean/crm/CrmClientAssociate.java b/src/main/java/cn/timer/api/bean/crm/CrmClientAssociate.java
index 56eb8d8..6e662d5 100644
--- a/src/main/java/cn/timer/api/bean/crm/CrmClientAssociate.java
+++ b/src/main/java/cn/timer/api/bean/crm/CrmClientAssociate.java
@@ -37,7 +37,7 @@ import lombok.NoArgsConstructor;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-@Table(name = "crm_client_associates")
+@Table(name = "crm_client_associate")
 @ApiModel("客户协作人表")
 public class CrmClientAssociate extends Model<CrmClientAssociate> {
 
diff --git a/src/main/java/cn/timer/api/controller/crm/CrmController.java b/src/main/java/cn/timer/api/controller/crm/CrmController.java
index 08e5702..2f552ca 100644
--- a/src/main/java/cn/timer/api/controller/crm/CrmController.java
+++ b/src/main/java/cn/timer/api/controller/crm/CrmController.java
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -25,7 +26,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
@@ -35,7 +38,6 @@ import cn.timer.api.bean.clazz.ClientTypeClass;
 import cn.timer.api.bean.clazz.IndustryClass;
 import cn.timer.api.bean.clazz.SysRegion;
 import cn.timer.api.bean.crm.CrmBusinessGroup;
-import cn.timer.api.bean.crm.CrmBusinessGroupManager;
 import cn.timer.api.bean.crm.CrmBusinessGroupMember;
 import cn.timer.api.bean.crm.CrmClientAssociate;
 import cn.timer.api.bean.crm.CrmClientContacts;
@@ -45,6 +47,7 @@ import cn.timer.api.bean.crm.CrmSeaRule;
 import cn.timer.api.bean.yggl.YgglMainEmp;
 import cn.timer.api.config.annotation.CurrentUser;
 import cn.timer.api.config.annotation.UserBean;
+import cn.timer.api.dao.crm.CrmClientDataMapper;
 import cn.timer.api.utils.CheckUtil;
 import cn.timer.api.utils.Result;
 import cn.timer.api.utils.ResultUtil;
@@ -66,6 +69,9 @@ import io.swagger.annotations.ApiOperation;
 @RequestMapping(value = "/crm", produces = { "application/json" })
 public class CrmController {
 
+	@Autowired
+	private CrmClientDataMapper crmClientDataMapper;
+
 	private Integer getEmpNum(UserBean userBean) {
 		return userBean.getEmpNum();
 	}
@@ -129,11 +135,11 @@ public class CrmController {
 		Integer gid = crmBusinessGroup.getId();
 		Integer[] memberIds = crmBusinessGroup.getMemberIds();
 		for (Integer empId : memberIds) {
-			CrmBusinessGroupMember.builder().gid(gid).empNum(empId).orgCode(orgCode).build().insert();
+			CrmBusinessGroupMember.builder().gid(gid).empNum(empId).orgCode(orgCode).type(0).build().insert();
 		}
 		Integer[] managerIds = crmBusinessGroup.getManagerIds();
 		for (Integer empId : managerIds) {
-			CrmBusinessGroupManager.builder().gid(gid).empNum(empId).orgCode(orgCode).build().insert();
+			CrmBusinessGroupMember.builder().gid(gid).empNum(empId).orgCode(orgCode).type(1).build().insert();
 		}
 
 		CrmSeaRule crmSeaRule = crmBusinessGroup.getCrmSeaRules();
@@ -151,11 +157,11 @@ public class CrmController {
 								CrmBusinessGroup::getSort, CrmBusinessGroup::getName, CrmBusinessGroup::getModifyTime));
 		for (CrmBusinessGroup crmBusinessGroup : list) {
 			Integer gid = crmBusinessGroup.getId();
-			List<CrmBusinessGroupManager> crmBusinessGroupManagers = CrmBusinessGroupManager.builder().build()
-					.selectList(new QueryWrapper<CrmBusinessGroupManager>().lambda()
-							.eq(CrmBusinessGroupManager::getGid, gid).select(CrmBusinessGroupManager::getEmpNum));
+			List<CrmBusinessGroupMember> crmBusinessGroupManagers = CrmBusinessGroupMember.builder().build().selectList(
+					new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, gid)
+							.eq(CrmBusinessGroupMember::getType, 1).select(CrmBusinessGroupMember::getEmpNum));
 			List<Map<String, Object>> managers = new ArrayList<Map<String, Object>>();
-			for (CrmBusinessGroupManager crmBusinessGroupManager : crmBusinessGroupManagers) {
+			for (CrmBusinessGroupMember crmBusinessGroupManager : crmBusinessGroupManagers) {
 				Integer empNum = crmBusinessGroupManager.getEmpNum();
 				String name = getEmpName(getOrgCode(userBean), empNum);
 				Map<String, Object> map = new HashMap<String, Object>();
@@ -380,6 +386,21 @@ public class CrmController {
 		return ResultUtil.data(crmClientDatas, "查询成功");
 	}
 
+	private List<Integer> MyJoinGroup(Integer empNum, Integer orgCode) {
+		List<CrmBusinessGroupMember> members = CrmBusinessGroupMember.builder().build()
+				.selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda()
+						.eq(CrmBusinessGroupMember::getEmpNum, empNum).eq(CrmBusinessGroupMember::getOrgCode, orgCode));
+		return members.stream().map(CrmBusinessGroupMember::getGid).collect(Collectors.toList());
+	}
+
+	private List<Integer> MyManageGroup(Integer empNum, Integer orgCode) {
+		List<CrmBusinessGroupMember> managers = CrmBusinessGroupMember.builder().build()
+				.selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda()
+						.eq(CrmBusinessGroupMember::getEmpNum, empNum).eq(CrmBusinessGroupMember::getOrgCode, orgCode)
+						.eq(CrmBusinessGroupMember::getType, 1));
+		return managers.stream().map(CrmBusinessGroupMember::getGid).collect(Collectors.toList());
+	}
+
 	@GetMapping("getSeaCilentTotal")
 	@ApiOperation(value = "获取公海客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
 	public Result<List<CrmClientData>> getSeaCilentTotal(@CurrentUser UserBean userBean,
@@ -388,29 +409,55 @@ public class CrmController {
 		Integer empNum = getEmpNum(userBean);
 		Integer orgCode = getOrgCode(userBean);
 		// 当前用户加入的组
-		List<CrmBusinessGroupMember> members = CrmBusinessGroupMember.builder().build()
-				.selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda()
-						.eq(CrmBusinessGroupMember::getEmpNum, empNum).eq(CrmBusinessGroupMember::getOrgCode, orgCode));
-		List<Integer> gids1 = members.stream().map(CrmBusinessGroupMember::getGid).collect(Collectors.toList());
+		List<Integer> gids1 = MyJoinGroup(empNum, orgCode);
 		// 当前用户管理的组
-		List<CrmBusinessGroupManager> managers = CrmBusinessGroupManager.builder().build()
-				.selectList(new QueryWrapper<CrmBusinessGroupManager>().lambda()
-						.eq(CrmBusinessGroupManager::getEmpNum, empNum)
-						.eq(CrmBusinessGroupManager::getOrgCode, orgCode));
-		List<Integer> gids2 = managers.stream().map(CrmBusinessGroupManager::getGid).collect(Collectors.toList());
-
+		List<Integer> gids2 = MyManageGroup(empNum, orgCode);
 		List<Integer> myGids = CheckUtil.distinct(gids1, gids2, true); // 当前用户所有业务组id
 		List<CrmClientData> crmClientDatas = new ArrayList<CrmClientData>();
 		for (Integer gid : myGids) {
-			crmClientDatas.add(CrmClientData.builder().build()
-					.selectOne(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getBelongGroup, gid)
+			List<CrmClientData> datas = CrmClientData.builder().build()
+					.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getBelongGroup, gid)
 							.eq(CrmClientData::getBelongUser, 0)
 							.eq(type != null && type >= 0, CrmClientData::getClientType, type)
 							.eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
 							.eq(status != null && status >= 0, CrmClientData::getClientStatus, status)
 							.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
-							.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)));
-		} // TODO
+							.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like));
+			for (CrmClientData data : datas)
+				crmClientDatas.add(data);
+		}
+		return ResultUtil.data(crmClientDatas, "查询成功");
+	}
+
+	@GetMapping("getAllCilentTotal")
+	@ApiOperation(value = "获取所有客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
+	public Result<Object> getAllCilentTotal(@CurrentUser UserBean userBean,
+			@RequestParam(required = false) Integer type, @RequestParam(required = false) Integer groupId,
+			@RequestParam(required = false) Integer status, @RequestParam(required = false) String like,
+			@RequestParam(required = false) String startCreateTime,
+			@RequestParam(required = false) String endCreateTime,
+			@RequestParam(required = false) String startFollowTime,
+			@RequestParam(required = false) String endFollowTime) {
+		Integer empNum = getEmpNum(userBean);
+		Integer orgCode = getOrgCode(userBean);
+		// 当前用户管理的组
+		List<Integer> gids = MyManageGroup(empNum, orgCode);
+		List<Object> crmClientDatas = new ArrayList<Object>();
+		for (Integer gid : gids) {
+			List<CrmClientData> datas = CrmClientData.builder().build()
+					.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getBelongGroup, gid)
+							.eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
+							.eq(type != null && type >= 0, CrmClientData::getClientType, type)
+							.eq(status != null && status >= 0, CrmClientData::getClientStatus, status)
+							.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
+							.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
+							.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getCreateTime, startFollowTime)
+							.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getCreateTime, endFollowTime)
+							.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
+							.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like));
+			for (CrmClientData data : datas)
+				crmClientDatas.add(data);
+		}
 		return ResultUtil.data(crmClientDatas, "查询成功");
 	}
 
@@ -505,6 +552,13 @@ public class CrmController {
 				.eq(CrmClientFollow::getOrgCode, orgCode).eq(CrmClientFollow::getCid, cid)), "获取成功");
 	}
 
+	// 根据组id和员工号查询组管理员
+	private CrmBusinessGroupMember getGroupManager(Integer groupId, Integer empNum) {
+		return CrmBusinessGroupMember.builder().build().selectOne(
+				new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, groupId)
+						.eq(CrmBusinessGroupMember::getEmpNum, empNum).eq(CrmBusinessGroupMember::getType, 1));
+	}
+
 	@PostMapping("addClientArchive")
 	@ApiOperation(value = "客户封档/解封", httpMethod = "POST", notes = "接口发布说明")
 	public Result<Void> addClientArchive(@CurrentUser UserBean userBean, @RequestParam Integer cid) {
@@ -512,8 +566,9 @@ public class CrmController {
 		CrmClientData crmClientData = CrmClientData.builder().id(cid).build().selectById();
 		if (crmClientData == null)
 			return ResultUtil.error("请确认该客户是否存在");
-		if (!crmClientData.getBelongUser().equals(empNum))
-			return ResultUtil.error("不是当前客户归属人");
+		if (!crmClientData.getBelongUser().equals(empNum)
+				&& getGroupManager(crmClientData.getBelongGroup(), empNum) == null)
+			return ResultUtil.error("不是当前客户归属人或组管理员");
 		Integer status = crmClientData.getClientStatus();
 		if (status != null && status != 5) {
 			crmClientData.setClientStatus(5);
@@ -531,13 +586,14 @@ public class CrmController {
 	@ApiOperation(value = "指派客户归属人", httpMethod = "POST", notes = "接口发布说明")
 	public Result<Void> designateClientBelonger(@CurrentUser UserBean userBean, @RequestParam Integer cid,
 			@RequestParam Integer belongUser) {
+		Integer empNum = getEmpNum(userBean);
 		if (cid == null)
 			return ResultUtil.error("请传入id再试");
 		CrmClientData oldData = CrmClientData.builder().id(cid).build().selectById();
 		if (oldData == null)
 			return ResultUtil.error("请确认该客户数据是否存在");
-		if (!oldData.getBelongUser().equals(getEmpNum(userBean)))
-			return ResultUtil.error("不是当前客户归属人");
+		if (!oldData.getBelongUser().equals(empNum) && getGroupManager(oldData.getBelongGroup(), empNum) == null)
+			return ResultUtil.error("不是当前客户归属人或组管理员");
 		if (oldData.getClientStatus() == 5)
 			return ResultUtil.error("请解封后继续编辑操作");
 
@@ -560,23 +616,253 @@ public class CrmController {
 	@Transactional
 	@ApiOperation(value = "释放客户到公海", httpMethod = "POST", notes = "接口发布说明")
 	public Result<Void> freeClientToSea(@CurrentUser UserBean userBean, @RequestParam Integer cid) {
+		Integer empNum = getEmpNum(userBean);
 		if (cid == null)
 			return ResultUtil.error("请传入id再试");
 		CrmClientData oldData = CrmClientData.builder().id(cid).build().selectById();
 		if (oldData == null)
 			return ResultUtil.error("请确认该客户数据是否存在");
-		if (!oldData.getBelongUser().equals(getEmpNum(userBean)))
-			return ResultUtil.error("不是当前客户归属人");
+		if (oldData.getBelongUser() == 0)
+			return ResultUtil.error("该客户已在公海列表");
+		if ((!oldData.getOrgCode().equals(getOrgCode(userBean)) || !oldData.getBelongUser().equals(empNum))
+				&& getGroupManager(oldData.getBelongGroup(), empNum) == null)
+			return ResultUtil.error("不是当前客户归属人或组管理员");
 		if (oldData.getClientStatus() == 5)
 			return ResultUtil.error("请解封后继续编辑操作");
 		oldData.setBelongUser(0); // 0-进入客户公海
 		oldData.setBelongUserName(null);
-		if (oldData.updateById() && CrmClientAssociate.builder().build()
-				.delete(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid)))
+		// 删除协作人列表
+		CrmClientAssociate.builder().build()
+				.delete(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid));
+		if (oldData.updateById())
 			return ResultUtil.success("释放成功");
 		return ResultUtil.error("释放失败");
 	}
 
-	// TODO
+	@PostMapping("receiveSeaClient")
+	@ApiOperation(value = "接收公海客户", httpMethod = "POST", notes = "接口发布说明")
+	public Result<Void> receiveSeaClient(@CurrentUser UserBean userBean, @RequestParam Integer cid) {
+		Integer empNum = getEmpNum(userBean);
+		Integer orgCode = getOrgCode(userBean);
+		if (cid == null)
+			return ResultUtil.error("请传入id再试");
+		CrmClientData oldData = CrmClientData.builder().id(cid).build().selectById();
+		if (oldData == null)
+			return ResultUtil.error("请确认该客户数据是否存在");
+		// 当前用户所有组id
+		List<Integer> myGids = CheckUtil.distinct(MyJoinGroup(empNum, orgCode), MyManageGroup(empNum, orgCode), true);
+		if (!myGids.contains(oldData.getBelongGroup()))
+			return ResultUtil.error("不是当前业务组成员");
+		oldData.setBelongUser(empNum);
+		oldData.setBelongUserName(getEmpName(orgCode, empNum));
+		if (oldData.updateById())
+			return ResultUtil.success("接收成功");
+		return ResultUtil.error("接收失败");
+	}
+
+	@Transactional
+	@PostMapping("designateClientBelongers")
+	@ApiOperation(value = "转移客户归属人(批量客户)", httpMethod = "POST", notes = "接口发布说明")
+	public Result<Void> designateClientBelongers(@CurrentUser UserBean userBean, @RequestParam List<Integer> cids,
+			@RequestParam Integer belonger) {
+		// 所选的客户列表
+		List<CrmClientData> crmClientDatas = crmClientDataMapper.selectBatchIds(cids);
+		// 业务组id列表
+		List<Integer> gids = crmClientDatas.stream().map(CrmClientData::getBelongGroup).collect(Collectors.toList());
+		Integer gid = gids.get(0);
+		// 当前操作人是否管理员
+		CrmBusinessGroupMember nowManager = CrmBusinessGroupMember.builder().build()
+				.selectOne(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, gid)
+						.eq(CrmBusinessGroupMember::getEmpNum, getEmpNum(userBean))
+						.eq(CrmBusinessGroupMember::getType, 1));
+		if (nowManager == null)
+			return ResultUtil.error("没有操作权限,请联系组管理员进行操作");
+		// 是否有不同组的客户
+		if (gids.stream().distinct().count() > 1)
+			return ResultUtil.error("请确认是否同一业务组客户");
+		// 转移人业务组信息
+		CrmBusinessGroupMember crmBusinessGroupMember = CrmBusinessGroupMember.builder().build()
+				.selectOne(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, gid)
+						.eq(CrmBusinessGroupMember::getEmpNum, belonger));
+		if (crmBusinessGroupMember == null)
+			return ResultUtil.error("请确认转移目标是当前业务组成员");
+		for (CrmClientData crmClientData : crmClientDatas) {
+			crmClientData.setBelongUser(belonger);
+			crmClientData.setBelongUserName(getEmpName(getOrgCode(userBean), belonger));
+			crmClientData.updateById();
+		}
+		return ResultUtil.success("转移成功");
+
+	}
+
+	/**
+	 * 
+	 * @param userBean
+	 * @param type            统计图类型(暂时不要)
+	 * @param groupId         业务组id
+	 * @param memberId        业务员id
+	 * @param startCreateTime 创建时间-开始时间
+	 * @param endCreateTime   创建时间-结束时间
+	 * @return 对应客户数据count
+	 */
+	@GetMapping("getAllCartogram")
+	@ApiOperation(value = "获取统计图(全)", httpMethod = "GET", notes = "接口发布说明")
+	public Result<Object> getAllCartogram(@CurrentUser UserBean userBean,
+			@RequestParam(required = false) Integer groupId, @RequestParam(required = false) Integer belonger,
+			@RequestParam(required = false) String startCreateTime,
+			@RequestParam(required = false) String endCreateTime) {
+		Integer orgCode = getOrgCode(userBean);
+		List<Object> listAll = new ArrayList<Object>();
+		listAll.add(cartogram(orgCode, groupId, 1, belonger, startCreateTime, endCreateTime));// 图1
+		listAll.add(cartogram(orgCode, groupId, 2, belonger, startCreateTime, endCreateTime));// 图2
+		listAll.add(cartogram(orgCode, groupId, 3, belonger, startCreateTime, endCreateTime));// 图3
+		listAll.add(cartogram(orgCode, groupId, 4, belonger, startCreateTime, endCreateTime));// 图4
+
+		List<List<Map<String, Object>>> cartogram5 = new ArrayList<List<Map<String, Object>>>();// 图5
+		cartogram5.add(cartogram2(orgCode, groupId, 1, belonger, startCreateTime, endCreateTime));
+		cartogram5.add(cartogram2(orgCode, groupId, 2, belonger, startCreateTime, endCreateTime));
+		cartogram5.add(cartogram2(orgCode, groupId, 3, belonger, startCreateTime, endCreateTime));
+		listAll.add(cartogram5);
+
+		List<List<Map<String, Object>>> cartogram6 = new ArrayList<List<Map<String, Object>>>(); // 图6
+		for (String regionName : getRegionNameList()) {
+			cartogram6.add(cartogram3(orgCode, groupId, regionName, belonger, startCreateTime, endCreateTime));
+		}
+		listAll.add(cartogram6);
+
+		return ResultUtil.data(listAll, "获取成功");
+	}
+
+	// 获取省份名
+	private List<String> getRegionNameList() {
+		List<SysRegion> list = SysRegion.builder().build()
+				.selectList(new LambdaQueryWrapper<SysRegion>().eq(SysRegion::getLevel, 1));
+		return list.stream().map(SysRegion::getRegionName).collect(Collectors.toList());
+	}
+
+	// 获取公司全部业务员
+	private List<Integer> getAllBusinessGroupMember(Integer orgCode, Integer groupId) {
+		List<CrmBusinessGroupMember> list = CrmBusinessGroupMember.builder().build()
+				.selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda()
+						.eq(CrmBusinessGroupMember::getOrgCode, orgCode)
+						.eq(groupId != null && groupId >= 0, CrmBusinessGroupMember::getGid, groupId));
+		return list.stream().map(CrmBusinessGroupMember::getEmpNum).collect(Collectors.toList()).stream().distinct()
+				.collect(Collectors.toList());
+//		list.stream().filter(CheckUtil.distinctByKey(CrmBusinessGroupMember::getEmpNum)).collect(Collectors.toList());
+	}
+
+	// 封装条形图数据Map
+	private Map<String, Object> selectMap(Integer orgCode, Integer belonger, Integer status, String startCreateTime,
+			String endCreateTime) {
+		Map<String, Object> map = new HashMap<String, Object>();
+		Integer num = CrmClientData.builder().build()
+				.selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
+						.eq(CrmClientData::getClientStatus, status).eq(CrmClientData::getBelongUser, belonger)
+						.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
+						.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime));
+		String name = getEmpName(orgCode, belonger);
+		map.put("name", name);
+		map.put("num", num);
+		return map;
+	}
+
+	// 封装⚪形图数据Map1
+	private Map<String, Object> selectMap1(Integer orgCode, Integer belonger, Integer level, String startCreateTime,
+			String endCreateTime) {
+		Map<String, Object> map = new HashMap<String, Object>();
+		Integer num = CrmClientData.builder().build()
+				.selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
+						.eq(CrmClientData::getClientType, level).eq(CrmClientData::getBelongUser, belonger)
+						.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
+						.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime));
+		map.put("level", level);
+		map.put("num", num);
+		return map;
+	}
+
+	// 封装⚪形图数据Map2
+	private Map<String, Object> selectMap2(Integer orgCode, Integer belonger, String province, String startCreateTime,
+			String endCreateTime) {
+		Map<String, Object> map = new HashMap<String, Object>();
+		Integer num = CrmClientData.builder().build()
+				.selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
+						.eq(CrmClientData::getProvince, province).eq(CrmClientData::getBelongUser, belonger)
+						.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
+						.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime));
+		map.put("province", province);
+		map.put("num", num);
+		return map;
+	}
+
+	/**
+	 * 统计图1,2,3,4
+	 * 
+	 * @param orgCode  企业id(必填)
+	 * @param groupId  组id (可不填)
+	 * @param status   分类 1 2 3 4 (必填)
+	 * @param belonger 业务员id (可不填)
+	 * @return
+	 */
+	private List<Map<String, Object>> cartogram(Integer orgCode, Integer groupId, Integer status, Integer belonger,
+			String startCreateTime, String endCreateTime) {
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+		if (belonger == null) {
+			List<Integer> members = getAllBusinessGroupMember(orgCode, groupId);
+			for (Integer memberId : members) {
+				list.add(selectMap(orgCode, memberId, status, startCreateTime, endCreateTime));
+			}
+		} else {
+			list.add(selectMap(orgCode, belonger, status, startCreateTime, endCreateTime));
+		}
+		return list;
+	}
+
+	/**
+	 * 统计图5
+	 * 
+	 * @param orgCode  企业id(必填)
+	 * @param groupId  组id (可不填)
+	 * @param level    客户等级分类 (必填)
+	 * @param belonger 业务员id (可不填)
+	 * @return
+	 */
+	private List<Map<String, Object>> cartogram2(Integer orgCode, Integer groupId, Integer level, Integer belonger,
+			String startCreateTime, String endCreateTime) {
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+		if (belonger == null) {
+			List<Integer> members = getAllBusinessGroupMember(orgCode, groupId);
+			for (Integer memberId : members) {
+				Map<String, Object> map = selectMap1(orgCode, memberId, level, startCreateTime, endCreateTime);
+				list.add(map);
+			}
+		} else {
+			list.add(selectMap1(orgCode, belonger, level, startCreateTime, endCreateTime));
+		}
+		return list;
+	}
+
+	/**
+	 * 统计图6
+	 * 
+	 * @param orgCode  企业id(必填)
+	 * @param groupId  组id (可不填)
+	 * @param level    客户等级分类 (必填)
+	 * @param belonger 业务员id (可不填)
+	 * @return
+	 */
+	private List<Map<String, Object>> cartogram3(Integer orgCode, Integer groupId, String province, Integer belonger,
+			String startCreateTime, String endCreateTime) {
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+		if (belonger == null) {
+			List<Integer> members = getAllBusinessGroupMember(orgCode, groupId);
+			for (Integer memberId : members) {
+				list.add(selectMap2(orgCode, memberId, province, startCreateTime, endCreateTime));
+			}
+		} else {
+			list.add(selectMap2(orgCode, belonger, province, startCreateTime, endCreateTime));
+		}
+		return list;
+	}
 
+	// TODO 统计图
 }
diff --git a/src/main/java/cn/timer/api/dao/crm/CrmBusinessGroupManagerMapper.java b/src/main/java/cn/timer/api/dao/crm/CrmBusinessGroupManagerMapper.java
deleted file mode 100644
index 850bea2..0000000
--- a/src/main/java/cn/timer/api/dao/crm/CrmBusinessGroupManagerMapper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**  
-* Title: CrmBusinessGroupManagerMapper.java 
-* Description: 
-* @author dsc  
-* @date 2020年6月9日  
-* @version 1.0  
-*/
-package cn.timer.api.dao.crm;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-import cn.timer.api.bean.crm.CrmBusinessGroupManager;
-
-/**
- * Title: CrmBusinessGroupManagerMapper.java
- * 
- * @Description:
- * @author dsc
- * @date 2020年6月9日
- * @version 1.0
- */
-public interface CrmBusinessGroupManagerMapper extends BaseMapper<CrmBusinessGroupManager> {
-
-}
diff --git a/src/main/java/cn/timer/api/utils/CheckUtil.java b/src/main/java/cn/timer/api/utils/CheckUtil.java
index ae79375..0351fcb 100644
--- a/src/main/java/cn/timer/api/utils/CheckUtil.java
+++ b/src/main/java/cn/timer/api/utils/CheckUtil.java
@@ -9,6 +9,10 @@ package cn.timer.api.utils;
 
 import java.lang.reflect.Field;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
@@ -86,6 +90,17 @@ public class CheckUtil {
 			return list1;
 		return list1.stream().distinct().collect(Collectors.toList());
 	}
+	
+	/**
+	 * 字段条件去重
+	 * @param <T>
+	 * @param keyExtractor
+	 * @return
+	 */
+	public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
+		Map<Object, Boolean> seen = new ConcurrentHashMap<>();
+		return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null;
+	}
 
 //	public static void main(String[] args) {
 //		List<String> list1 = new ArrayList<String>();