Commit 68881eaf by 翁国栋

Merge remote-tracking branch 'origin/feature_20230426_test' into feature_20230426_test

parents 632b2d01 ab8133df
package cn.timer.api.bean.crm;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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;
import javax.persistence.*;
import java.util.Date;
/**
* Title: 客户跟进动态日志表
*
* @Description:
* @author wuqingjun
* @date 2023年7月31日
* @version 1.0
*/
@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "crm_client_log")
@ApiModel("客户跟进动态日志表")
public class CrmClientLog extends Model<CrmClientLog> {
private static final long serialVersionUID = -7362549097557018582L;
@Id
@GeneratedValue
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "编号")
private Integer id;
@ApiModelProperty(value = "客户数据id")
private Integer cid;
@ApiModelProperty(value = "变更前客户数据状态")
private Integer beforeClientStatus;
@ApiModelProperty(value = "变更后客户数据状态")
private Integer afterClientStatus;
@ApiModelProperty(value = "创建人")
private Integer createUser;
@ApiModelProperty(value = "企业id")
private Integer orgCode;
@ApiModelProperty(value = "创建人姓名")
private String createUserName;
@ApiModelProperty(value = "备注")
private String remark;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date createTime;
}
......@@ -4,8 +4,10 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
......@@ -14,14 +16,15 @@ import cn.timer.api.bean.crm.*;
import cn.timer.api.bean.insure.InsurePolicy;
import cn.timer.api.bean.insure.InsureProductPlan;
import cn.timer.api.controller.zpgl.sevice.ZpglService;
import cn.timer.api.dao.crm.CrmRemindRuleMapper;
import cn.timer.api.dao.crm.*;
import cn.timer.api.dto.clazz.CityClazzDto;
import cn.timer.api.dto.crm.CrmCartogramCountExportDto;
import cn.timer.api.dto.crm.*;
import cn.timer.api.dto.insure.PolicyDto;
import cn.timer.api.dto.yggl.YgCityDto;
import cn.timer.api.utils.ExcelUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
......@@ -57,11 +60,7 @@ import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.config.enums.SysRoleType;
import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.dao.crm.CrmClientContactsMapper;
import cn.timer.api.dao.crm.CrmClientDataMapper;
import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper;
import cn.timer.api.dto.crm.CrmCartogramDto;
import cn.timer.api.dto.crm.CrmClientDataImportVo;
import cn.timer.api.dto.kqmk.DailyDetailsDto;
import cn.timer.api.dto.xcgl.ImportDescriptionDto;
import cn.timer.api.utils.CheckUtil;
......@@ -101,6 +100,10 @@ public class CrmController {
@Autowired
private CrmRemindRuleMapper crmRemindRuleMapper;
@Autowired
private CrmClientFollowMapper crmClientFollowMapper;
@Autowired
private CrmClientLogMapper crmClientLogMapper;
private Integer getEmpNum(UserBean userBean) {
return userBean.getEmpNum();
......@@ -447,6 +450,14 @@ public class CrmController {
}
crmClientData.setContactsNum(contactsnum);
crmClientData.updateById();
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(crmClientData.getId())
.beforeClientStatus(0).afterClientStatus(crmClientData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(orgCode)
.remark("新增客户")
.build().insert();
return ResultUtil.success("新增成功");
}
......@@ -518,23 +529,24 @@ public class CrmController {
return ResultUtil.data(list, "获取成功");
}
// 归属我的客户
private List<CrmClientData> getMyCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,
String like, String startCreateTime, String endCreateTime, String startFollowTime, String endFollowTime, Integer typei) {
return CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(CrmClientData::getBelongUser, empNum)
.eq(groupId != null && groupId > 0, CrmClientData::getBelongGroup, groupId)
.eq(status != null && status > 0, CrmClientData::getClientStatus, status).eq(typei != null && typei > 0, CrmClientData::getClientType, typei)
.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime).like(!StrUtil.isBlank(like), CrmClientData::getBelongUserName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like).having("org_code = {0}", orgCode).having("belong_user = {0}", empNum)
.orderByDesc(CrmClientData::getCreateTime));
}
// 归属我的客户
private List<CrmClientData> getMyCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,
String like,String startCreateTime, String endCreateTime, String startFollowTime, String endFollowTime,Integer typei,Integer industry) {
return CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(CrmClientData::getBelongUser, empNum)
.eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
.eq(groupId != null && groupId > 0, CrmClientData::getBelongGroup, groupId)
.eq(status != null && status > 0, CrmClientData::getClientStatus, status).eq(typei != null && typei > 0, CrmClientData::getClientType, typei)
.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime).like(!StrUtil.isBlank(like), CrmClientData::getBelongUserName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like).having("org_code = {0}", orgCode).having("belong_user = {0}", empNum)
.orderByDesc(CrmClientData::getCreateTime));
}
// 我协作的客户
private List<CrmClientData> getMyAssociateCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,
......@@ -562,27 +574,38 @@ public class CrmController {
return myCrmClientAssociates;
}
// 我的全部客户
private List<CrmClientData> getMyTotalCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,
String like, Integer typei) {
return CheckUtil.distinct(getMyCilent(empNum, orgCode, groupId, status, like, null, null, null, null, null),
getMyAssociateCilent(empNum, orgCode, groupId, status, like, typei, null, null, null, null), true);
}
// 我关注的客户
private List<CrmClientData> getMyStarCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status, Integer typei) {
return getMyTotalCilent(empNum, orgCode, groupId, status, null, null).stream()
.filter(item -> item.getStar().equals(1)).collect(Collectors.toList());
}
// 七天未跟进的客户
private List<CrmClientData> getCilentFollowOvertime(Integer empNum, Integer orgCode, Integer groupId,
Integer status, Integer typei) {
return getMyTotalCilent(empNum, orgCode, groupId, status, null, null).stream()
.filter(item -> item.getLastFollowTime() != null
&& item.getLastFollowTime().before(DateUtil.offsetDay(new Date(), -7)))
.collect(Collectors.toList());
}
// 我的全部客户
private List<CrmClientData> getMyTotalCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,
String like,Integer typei,Integer industry) {
return CheckUtil.distinct(getMyCilent(empNum, orgCode, groupId, status, like,null,null,null,null,null,industry),
getMyAssociateCilent(empNum, orgCode, groupId, status, like,typei,null,null,null,null), true);
}
// 我关注的客户
private List<CrmClientData> getMyStarCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status,Integer typei,Integer industry) {
return getMyTotalCilent(empNum, orgCode, groupId, status, null,null,industry).stream()
.filter(item -> item.getStar().equals(1)).collect(Collectors.toList());
}
// 七天未跟进的客户
private List<CrmClientData> getCilentFollowOvertime(Integer empNum, Integer orgCode, Integer groupId,
Integer status,Integer typei) {
return getMyTotalCilent(empNum, orgCode, groupId, status, null,null,null).stream()
.filter(item -> item.getLastFollowTime() != null
&& item.getLastFollowTime().before(DateUtil.offsetDay(new Date(), -7)))
.collect(Collectors.toList());
}
private List<CrmClientData> getCilentFollowNotDays(Integer empNum, Integer orgCode, Integer groupId,
Integer status,String like,String startCreateTime, String endCreateTime, String startFollowTime,
String endFollowTime,Integer typei,Integer industry,Integer unfollowedDays) {
return CheckUtil.distinct(getMyCilent(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,typei,industry),
getMyAssociateCilent(empNum, orgCode, groupId, status, like,typei,startFollowTime,endFollowTime,startCreateTime,endCreateTime), true).stream()
.filter(item -> item.getLastFollowTime() != null
&& item.getLastFollowTime().before(DateUtil.offsetDay(new Date(), 0-unfollowedDays)))
.collect(Collectors.toList());
}
private <T> List<T> getPageList(List<T> list, int pageNumber, int pageSize, Comparator<T> comparator) {
return list.stream().sorted(comparator).skip((pageNumber - 1) * pageSize).limit(pageSize)
......@@ -590,45 +613,53 @@ public class CrmController {
}
@GetMapping("getMyCilentTotal")
@ApiOperation(value = "获取我的客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
public Result<List<CrmClientData>> getMyCilentTotal(@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, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize,
@RequestParam(required = false) String startCreateTime,
@RequestParam(required = false) String endCreateTime,
@RequestParam(required = false) String startFollowTime,
@RequestParam(required = false) String endFollowTime,
@RequestParam(required = false) Integer typei) {
if (endCreateTime != null && !("").equals(endCreateTime)) {
endCreateTime = endCreateTime.substring(0, 10) + " 23:59:59";
}
if (endFollowTime != null && !("").equals(endFollowTime)) {
endFollowTime = endFollowTime.substring(0, 10) + " 23:59:59";
}
Integer empNum = getEmpNum(userBean);
Integer orgCode = getOrgCode(userBean);
List<CrmClientData> crmClientDatas = null;
if (type == null || type == 0) { // 全部客户(去重)
List<CrmClientData> myClient = getMyCilent(empNum, orgCode, groupId, status, like, startCreateTime, endCreateTime, startFollowTime, endFollowTime, typei);
List<CrmClientData> myAsso = getMyAssociateCilent(empNum, orgCode, groupId, status, like, typei, startFollowTime, endFollowTime, startCreateTime, endCreateTime);
crmClientDatas = CheckUtil.distinct(myClient, myAsso, true).stream()
.filter(CheckUtil.distinctByKey(CrmClientData::getId)).collect(Collectors.toList());
} else if (type == 1) // 我负责的客户
crmClientDatas = getMyCilent(empNum, orgCode, groupId, status, like, startCreateTime, endCreateTime, startFollowTime, endFollowTime, typei);
else if (type == 2) // 我协作的客户
crmClientDatas = getMyAssociateCilent(empNum, orgCode, groupId, status, like, typei, startFollowTime, endFollowTime, startCreateTime, endCreateTime);
else if (type == 3) // 我关注的客户
crmClientDatas = getMyStarCilent(empNum, orgCode, groupId, status, typei);
else if (type == 4) // 七天未跟进的客户
crmClientDatas = getCilentFollowOvertime(empNum, orgCode, groupId, status, typei);
else
return ResultUtil.error("查询失败");
@GetMapping("getMyCilentTotal")
@ApiOperation(value = "获取我的客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
public Result<List<CrmClientData>> getMyCilentTotal(@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, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize,
@RequestParam(required = false) String startCreateTime,
@RequestParam(required = false) String endCreateTime,
@RequestParam(required = false) String startFollowTime,
@RequestParam(required = false) String endFollowTime,
@RequestParam(required = false) Integer typei,
@RequestParam(required = false) Integer unfollowedDays,
@RequestParam(required = false) Integer followNumber,
@RequestParam(required = false) Integer industry) {
if(endCreateTime != null && !("").equals(endCreateTime)) {
endCreateTime = endCreateTime.substring(0, 10)+" 23:59:59";
}
if(endFollowTime != null && !("").equals(endFollowTime)) {
endFollowTime = endFollowTime.substring(0, 10)+" 23:59:59";
}
Integer empNum = getEmpNum(userBean);
Integer orgCode = getOrgCode(userBean);
List<CrmClientData> crmClientDatas = null;
if (type == null || type == 0) { // 全部客户(去重)
//List<CrmClientData> myClient = getMyCilent(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,typei,industry);
List<CrmClientData> myClient = crmClientDataMapper.getCrmClientData(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,typei,unfollowedDays,followNumber,industry);
List<CrmClientData> myAsso = getMyAssociateCilent(empNum, orgCode, groupId, status, like,typei,startFollowTime,endFollowTime,startCreateTime,endCreateTime);
crmClientDatas = CheckUtil.distinct(myClient, myAsso, true).stream()
.filter(CheckUtil.distinctByKey(CrmClientData::getId)).collect(Collectors.toList());
// if (unfollowedDays != null){
// crmClientDatas = getCilentFollowNotDays(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,typei,industry,unfollowedDays);
// }
} else if (type == 1) // 我负责的客户
crmClientDatas = getMyCilent(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,typei,industry);
else if (type == 2) // 我协作的客户
crmClientDatas = getMyAssociateCilent(empNum, orgCode, groupId, status, like,typei,startFollowTime,endFollowTime,startCreateTime,endCreateTime);
else if (type == 3) // 我关注的客户
crmClientDatas = getMyStarCilent(empNum, orgCode, groupId, status,typei,industry);
else if (type == 4) // 七天未跟进的客户
crmClientDatas = getCilentFollowOvertime(empNum, orgCode, groupId, status,typei);
else
return ResultUtil.error("查询失败");
// Collections.sort(crmClientDatas, Comparator.comparing(CrmClientData::getCreateTime).reversed()); // 按时间降序排序
// int pageNumber = 1;
......@@ -686,36 +717,38 @@ public class CrmController {
return managers.stream().map(CrmBusinessGroupMember::getGid).collect(Collectors.toList());
}
@GetMapping("getSeaCilentTotal")
@ApiOperation(value = "获取公海客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
public Result<List<CrmClientData>> getSeaCilentTotal(@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, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
Integer empNum = getEmpNum(userBean);
Integer orgCode = getOrgCode(userBean);
@GetMapping("getSeaCilentTotal")
@ApiOperation(value = "获取公海客户列表(全)", httpMethod = "GET", notes = "接口发布说明")
public Result<List<CrmClientData>> getSeaCilentTotal(@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) Integer industry,
@RequestParam(required = false, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
Integer empNum = getEmpNum(userBean);
Integer orgCode = getOrgCode(userBean);
// YgglMainEmp yg = YgglMainEmp.builder().build()
// .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, orgCode)
// .eq(YgglMainEmp::getEmpNum, empNum).select(YgglMainEmp::getIsManager));
// if (yg != null && yg.getIsManager() != null && (yg.getIsManager() == 1 || yg.getIsManager() == 2)) {
QyzxEmpEntAsso qyzxEmpEntAsso = QyzxEmpEntAsso.builder().build()
.selectOne(new LambdaQueryWrapper<QyzxEmpEntAsso>().eq(QyzxEmpEntAsso::getOrgCode, orgCode)
.eq(QyzxEmpEntAsso::getEmpNum, empNum));
if (qyzxEmpEntAsso != null && qyzxEmpEntAsso.getUserType() != null
&& (qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_ADMIN.getType()
|| qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_C_ADMIN.getType())) {
List<CrmClientData> list = CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(CrmClientData::getBelongUser, 0)
.eq(CrmClientData::getHidingcustomers, 1)
.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));
QyzxEmpEntAsso qyzxEmpEntAsso = QyzxEmpEntAsso.builder().build()
.selectOne(new LambdaQueryWrapper<QyzxEmpEntAsso>().eq(QyzxEmpEntAsso::getOrgCode, orgCode)
.eq(QyzxEmpEntAsso::getEmpNum, empNum));
if (qyzxEmpEntAsso != null && qyzxEmpEntAsso.getUserType() != null
&& (qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_ADMIN.getType()
|| qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_C_ADMIN.getType())) {
List<CrmClientData> list = CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(CrmClientData::getBelongUser, 0)
.eq(CrmClientData::getHidingcustomers, 1)
.eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
.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));
// int pageNumber = 1;
// int pageSize = 5;
......@@ -728,45 +761,49 @@ public class CrmController {
} else {
// 当前用户加入的组
List<Integer> gids1 = MyJoinGroup(empNum, orgCode);
// 当前用户管理的组
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) {
List<CrmClientData> datas = CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getBelongGroup, gid)
.eq(CrmClientData::getBelongUser, 0)
.eq(CrmClientData::getHidingcustomers, 1)
.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));
for (CrmClientData data : datas)
crmClientDatas.add(data);
}
List<CrmClientData> result = getPageList(crmClientDatas, pageNumber, pageSize,
Comparator.comparing(CrmClientData::getCreateTime).reversed());
// 当前用户加入的组
List<Integer> gids1 = MyJoinGroup(empNum, orgCode);
// 当前用户管理的组
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) {
List<CrmClientData> datas = CrmClientData.builder().build()
.selectList(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getBelongGroup, gid)
.eq(CrmClientData::getBelongUser, 0)
.eq(CrmClientData::getHidingcustomers, 1)
.eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
.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));
for (CrmClientData data : datas)
crmClientDatas.add(data);
}
List<CrmClientData> result = getPageList(crmClientDatas, pageNumber, pageSize,
Comparator.comparing(CrmClientData::getCreateTime).reversed());
return ResultUtil.pageData(result, (long) crmClientDatas.size(), "查询成功");
// 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 customerowner,
@RequestParam(required = false) String startCreateTime,
@RequestParam(required = false) String endCreateTime,
@RequestParam(required = false) String startFollowTime,
@RequestParam(required = false) String endFollowTime,
@RequestParam(required = false) String ifPhone,
@RequestParam(required = false, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
@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 customerowner,
@RequestParam(required = false) String startCreateTime,
@RequestParam(required = false) String endCreateTime,
@RequestParam(required = false) String startFollowTime,
@RequestParam(required = false) String endFollowTime,
@RequestParam(required = false) String ifPhone,
@RequestParam(required = false, defaultValue = "1") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize,
@RequestParam(required = false) Integer unfollowedDays,
@RequestParam(required = false) Integer followNumber,
@RequestParam(required = false) Integer industry) {
Integer empNum = getEmpNum(userBean);
Integer orgCode = getOrgCode(userBean);
......@@ -789,86 +826,98 @@ public class CrmController {
&& (qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_ADMIN.getType()
|| qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_C_ADMIN.getType())) {
IPage<CrmClientData> page = new Page<CrmClientData>(pageNumber, pageSize);
List<CrmBusinessGroupMember> grouplis = CrmBusinessGroupMember.builder().build().selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getEmpNum, userBean.getEmpNum())
.eq(CrmBusinessGroupMember::getOrgCode, userBean.getOrgCode()));
String keywordStr = "";
IPage<CrmClientData> datas;
Integer count = new LambdaQueryChainWrapper<QyzxEmpEntAsso>(qyzxEmpEntAssoMapper)
.eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())
.eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode())
.in(QyzxEmpEntAsso::getUserType, "0,1")
.count();
if (count > 0) {
//qw -> qw.like(ZpglRcxx::getName, query).or().eq(ZpglRcxx::getMobile, query).or().eq(ZpglRcxx::getMail, query)
datas = CrmClientData.builder().build().selectPage(page,
new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
.eq(type != null && type >= 0, CrmClientData::getClientType, type)
.likeRight(!StringUtils.isBlank(ifPhone) && "1".equals(ifPhone), CrmClientData::getClientCellphone, "1")
.and(!StringUtils.isBlank(ifPhone) && "2".equals(ifPhone), qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone, ""))
.eq(status != null && status >= 0, CrmClientData::getClientStatus, status).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)
.orderByDesc(CrmClientData::getCreateTime));
} else {
if (grouplis.size() > 0 && grouplis != null) {
StringBuffer sb = new StringBuffer();
for (CrmBusinessGroupMember grp : grouplis) {
sb.append(grp.getGid()).append(",");
}
keywordStr = sb.deleteCharAt(sb.length() - 1).toString();
}
datas = CrmClientData.builder().build().selectPage(page,
new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
.eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
.eq(type != null && type >= 0, CrmClientData::getClientType, type).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
.eq(status != null && status >= 0, CrmClientData::getClientStatus, status).in(CrmClientData::getBelongGroup, keywordStr)
.likeRight(!StringUtils.isBlank(ifPhone) && "1".equals(ifPhone), CrmClientData::getClientCellphone, "1")
.and(!StringUtils.isBlank(ifPhone) && "2".equals(ifPhone), qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone, ""))
.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)
.orderByDesc(CrmClientData::getCreateTime));
}
IPage<CrmClientData> page = new Page<CrmClientData>(pageNumber, pageSize);
List<CrmBusinessGroupMember> grouplis = CrmBusinessGroupMember.builder().build().selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getEmpNum, userBean.getEmpNum())
.eq(CrmBusinessGroupMember::getOrgCode, userBean.getOrgCode()));
String keywordStr = "";
IPage<CrmClientData> datas;
Integer count = new LambdaQueryChainWrapper<QyzxEmpEntAsso>(qyzxEmpEntAssoMapper)
.eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())
.eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode())
.in(QyzxEmpEntAsso::getUserType, "0,1")
.count();
if(count > 0) {
//qw -> qw.like(ZpglRcxx::getName, query).or().eq(ZpglRcxx::getMobile, query).or().eq(ZpglRcxx::getMail, query)
// datas = CrmClientData.builder().build().selectPage(page,
// new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
// .eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
// .eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
// .eq(type != null && type >= 0, CrmClientData::getClientType, type)
// .likeRight(!StringUtils.isBlank(ifPhone)&&"1".equals(ifPhone),CrmClientData::getClientCellphone,"1")
// .and(!StringUtils.isBlank(ifPhone)&&"2".equals(ifPhone),qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone,""))
// .eq(status != null && status >= 0, CrmClientData::getClientStatus, status).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
// .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
// .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
// .ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
// .le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
// .like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
// .like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)
// .orderByDesc(CrmClientData::getCreateTime));
datas = crmClientDataMapper.getCrmClientData1(page,empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,type,ifPhone,customerowner,unfollowedDays,followNumber,industry);
}else {
if(grouplis.size()>0 && grouplis != null) {
StringBuffer sb = new StringBuffer();
for(CrmBusinessGroupMember grp : grouplis) {
sb.append(grp.getGid()).append(",");
}
keywordStr = sb.deleteCharAt(sb.length() - 1).toString();
}
// datas = CrmClientData.builder().build().selectPage(page,
// new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode)
// .eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
// .eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
// .eq(type != null && type >= 0, CrmClientData::getClientType, type).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
// .eq(status != null && status >= 0, CrmClientData::getClientStatus, status).in(CrmClientData::getBelongGroup, keywordStr)
// .likeRight(!StringUtils.isBlank(ifPhone)&&"1".equals(ifPhone),CrmClientData::getClientCellphone,"1")
// .and(!StringUtils.isBlank(ifPhone)&&"2".equals(ifPhone),qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone,""))
// .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
// .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
// .ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
// .le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
// .like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
// .like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)
// .orderByDesc(CrmClientData::getCreateTime));
datas = crmClientDataMapper.getCrmClientData2(page,empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,type,ifPhone,customerowner,unfollowedDays,followNumber,industry);
}
return ResultUtil.pageData(datas.getRecords(), datas.getTotal(), "查询成功");
} else {
// 当前用户管理的组
List<Integer> gids = MyManageGroup(empNum, orgCode);
List<CrmClientData> crmClientDatas = new ArrayList<CrmClientData>();
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).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
.eq(status != null && status >= 0, CrmClientData::getClientStatus, status)
.likeRight(!StringUtils.isBlank(ifPhone) && "1".equals(ifPhone), CrmClientData::getClientCellphone, "1")
.and(!StringUtils.isBlank(ifPhone) && "2".equals(ifPhone), qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone, ""))
.ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
.le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
.ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
.le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
.like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
.like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like));
for (CrmClientData data : datas)
crmClientDatas.add(data);
}
// 当前用户管理的组
List<Integer> gids = MyManageGroup(empNum, orgCode);
List<CrmClientData> crmClientDatas = new ArrayList<CrmClientData>();
for (Integer gid : gids) {
// List<CrmClientData> datas = CrmClientData.builder().build().selectList(new QueryWrapper<CrmClientData>()
// .lambda().eq(CrmClientData::getBelongGroup, gid)
// .eq(industry != null && industry > 0, CrmClientData::getIndustry,industry)
// .eq(groupId != null && groupId >= 0, CrmClientData::getBelongGroup, groupId)
// .eq(type != null && type >= 0, CrmClientData::getClientType, type).like(!StrUtil.isBlank(customerowner), CrmClientData::getBelongUserName, customerowner)
// .eq(status != null && status >= 0, CrmClientData::getClientStatus, status)
// .likeRight(!StringUtils.isBlank(ifPhone)&&"1".equals(ifPhone),CrmClientData::getClientCellphone,"1")
// .and(!StringUtils.isBlank(ifPhone)&&"2".equals(ifPhone),qw -> qw.isNull(CrmClientData::getClientCellphone).or().eq(CrmClientData::getClientCellphone,""))
// .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime)
// .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)
// .ge(StringUtils.isNotBlank(startFollowTime), CrmClientData::getLastFollowTime, startFollowTime)
// .le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getLastFollowTime, endFollowTime)
// .like(!StrUtil.isBlank(like), CrmClientData::getClientName, like).or()
// .like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like));
List<CrmClientData> datas = crmClientDataMapper.getCrmClientData3(empNum, orgCode, groupId, status, like,startCreateTime,endCreateTime,startFollowTime,endFollowTime,type,ifPhone,customerowner,unfollowedDays,followNumber,industry);
for (CrmClientData data : datas)
crmClientDatas.add(data);
}
List<CrmClientData> result = getPageList(crmClientDatas, pageNumber, pageSize,
Comparator.comparing(CrmClientData::getCreateTime).reversed());
......@@ -983,6 +1032,14 @@ public class CrmController {
crmRemindRule.setCreateTime(new Date());
crmRemindRule.insert();
}
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(oldData.getId())
.beforeClientStatus(oldData.getClientStatus()).afterClientStatus(crmClientFollow.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(orgCode)
.remark("新增跟进记录")
.build().insert();
return ResultUtil.success("新增成功");
}
return ResultUtil.error("新增失败");
......@@ -1030,10 +1087,26 @@ public class CrmController {
if (status != null && status != 5) {
crmClientData.setClientStatus(5);
crmClientData.updateById();
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(crmClientData.getId())
.beforeClientStatus(status).afterClientStatus(crmClientData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("封档成功")
.build().insert();
return ResultUtil.success("封档成功");
} else if (status == 5) {
crmClientData.setClientStatus(1); // 解封后默认潜在状态
crmClientData.updateById();
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(crmClientData.getId())
.beforeClientStatus(status).afterClientStatus(crmClientData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("解封成功")
.build().insert();
return ResultUtil.success("解封成功");
} else
return ResultUtil.error("失败");
......@@ -1065,6 +1138,14 @@ public class CrmController {
if (CrmClientData.builder().id(cid).belongUser(belongUser)
.belongUserName(getEmpName(getOrgCode(userBean), belongUser)).build().updateById())
return ResultUtil.success("指派成功");
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(oldData.getId())
.beforeClientStatus(oldData.getClientStatus()).afterClientStatus(oldData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("指派成功")
.build().insert();
return ResultUtil.error("指派失败");
}
......@@ -1091,8 +1172,17 @@ public class CrmController {
// 删除协作人列表
CrmClientAssociate.builder().build()
.delete(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid));
if (oldData.updateById())
if (oldData.updateById()){
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(oldData.getId())
.beforeClientStatus(oldData.getClientStatus()).afterClientStatus(oldData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("释放到公海")
.build().insert();
return ResultUtil.success("释放成功");
}
return ResultUtil.error("释放失败");
}
......@@ -1112,8 +1202,17 @@ public class CrmController {
return ResultUtil.error("不是当前业务组成员");
oldData.setBelongUser(empNum);
oldData.setBelongUserName(getEmpName(orgCode, empNum));
if (oldData.updateById())
if (oldData.updateById()){
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(oldData.getId())
.beforeClientStatus(oldData.getClientStatus()).afterClientStatus(oldData.getClientStatus())
.createUser(empNum)
.createUserName(userBean.getUserInfo().getName())
.orgCode(orgCode)
.remark("接收客户")
.build().insert();
return ResultUtil.success("接收成功");
}
return ResultUtil.error("接收失败");
}
......@@ -1159,6 +1258,14 @@ public class CrmController {
crmClientData.setBelongUser(belonger);
crmClientData.setBelongUserName(getEmpName(getOrgCode(userBean), belonger));
crmClientData.updateById();
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(crmClientData.getId())
.beforeClientStatus(crmClientData.getClientStatus()).afterClientStatus(crmClientData.getClientStatus())
.createUser(userBean.getEmpNum())
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("转移客户")
.build().insert();
}
return ResultUtil.success("转移成功");
......@@ -1195,6 +1302,14 @@ public class CrmController {
CrmClientData.builder().id(yid).hidingcustomers(0).build().updateById();
/*** 客户跟进动态日志 ***/
CrmClientLog.builder().cid(crda.getId())
.beforeClientStatus(crda.getClientStatus()).afterClientStatus(crda.getClientStatus())
.createUser(userBean.getEmpNum())
.createUserName(userBean.getUserInfo().getName())
.orgCode(userBean.getOrgCode())
.remark("隐藏客户")
.build().insert();
}
......@@ -1251,6 +1366,69 @@ public class CrmController {
listAll.add(cartogram6);
// 跟进图
listAll.add(cartogram(orgCode, groupId, 7, belonger, startCreateTime, endCreateTime));
// 新增潜在客户数量跟进的客户数量8
Calendar calendar= Calendar.getInstance();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM");
List<String> list = cn.timer.api.utils.DateUtil.getDayByMonth(dateFormat.format(calendar.getTime()));
CrmClientFollowCountParam param = new CrmClientFollowCountParam();
param.setStartTime(startCreateTime);
if(org.springframework.util.StringUtils.isEmpty(startCreateTime)){
calendar.set(Calendar.DAY_OF_MONTH, 1);
SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
param.setStartTime(df.format(calendar.getTime()));
}
if(org.springframework.util.StringUtils.isEmpty(endCreateTime)){
param.setEndTime(list.get(list.size()-1)+" 23:59:59");
}
param.setOrgCode(orgCode);
//
List<CrmClientFollowCountDto> crmList = crmClientFollowMapper.selectCrmClientFollowList(param);
CrmClientFollowListDto source = new CrmClientFollowListDto();
source.setCreateStr(list);
List<CrmClientFollowCountDto> dtos = null;
CrmClientFollowCountParam countParam = null;
CrmClientFollowCountDto countDto = null;
dtos = new ArrayList<>();
for (CrmClientFollowCountDto dto : crmList) {
countDto = new CrmClientFollowCountDto();
BeanUtils.copyProperties(dto,countDto);
List<Integer> count = new ArrayList<>();
countParam = new CrmClientFollowCountParam();
for (String day : list) {
countParam.setStartTime(day);
countParam.setCreateUser(dto.getCreateUser());
count.add(crmClientFollowMapper.selectCountByParam(countParam));
countDto.setCreateTime(day);
}
countDto.setFollowCount(count);
dtos.add(countDto);
}
source.setDtos(dtos);
listAll.add(source);
//跟进动态
List<Map<String, Object>> cartogram9 = new ArrayList<Map<String, Object>>();// 图9
// 统计类型标记
List<ClientTypeClass> typeCount = new ArrayList<>();
typeCount.add(ClientTypeClass.builder().id(1).name("潜在客户转化为意向客户").build());
typeCount.add(ClientTypeClass.builder().id(2).name("意向客户转为合作的客户").build());
for (ClientTypeClass clientTypeClass : typeCount) {
Map<String, Object> map = new HashMap<>();
map.put("level", clientTypeClass.getId());
map.put("name", clientTypeClass.getName());
if(clientTypeClass.getId()==1){
map.put("num", CrmClientLog.builder().build().selectCount(new QueryWrapper<CrmClientLog>().lambda().eq(CrmClientLog::getBeforeClientStatus,1).eq(CrmClientLog::getAfterClientStatus,2)));
}else if(clientTypeClass.getId()==2){
map.put("num", CrmClientLog.builder().build().selectCount(new QueryWrapper<CrmClientLog>().lambda().eq(CrmClientLog::getAfterClientStatus,4)));
}
if ((Integer) map.get("num") > 0) {
cartogram9.add(map);
}
}
listAll.add(cartogram9);
return ResultUtil.data(listAll, "获取成功");
}
......
......@@ -10,6 +10,9 @@ package cn.timer.api.dao.crm;
import java.util.List;
import cn.timer.api.dto.crm.CrmCartogramCountExportDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
......@@ -38,4 +41,41 @@ public interface CrmClientDataMapper extends BaseMapper<CrmClientData> {
@RequestParam(name = "belongGroup", required = false) Integer belongGroup,
@RequestParam(name = "startCreateTime", required = false) String startCreateTime,
@RequestParam(name = "endCreateTime", required = false) String endCreateTime);
}
List<CrmClientData> getCrmClientData(@Param("empNum") Integer empNum, @Param("orgCode") Integer orgCode,
@Param("groupId") Integer groupId, @Param("status") Integer status,
@Param("like") String like, @Param("startCreateTime") String startCreateTime,
@Param("endCreateTime") String endCreateTime, @Param("startFollowTime") String startFollowTime,
@Param("endFollowTime") String endFollowTime, @Param("typei") Integer typei,
@Param("unfollowedDays") Integer unfollowedDays, @Param("followNumber") Integer followNumber,
@Param("industry") Integer industry);
IPage<CrmClientData> getCrmClientData1(IPage<CrmClientData> page,
@Param("empNum") Integer empNum, @Param("orgCode") Integer orgCode,
@Param("groupId") Integer groupId, @Param("status") Integer status,
@Param("like") String like, @Param("startCreateTime") String startCreateTime,
@Param("endCreateTime") String endCreateTime, @Param("startFollowTime") String startFollowTime,
@Param("endFollowTime") String endFollowTime,@Param("type") Integer type,
@Param("ifPhone") String ifPhone,@Param("customerowner") String customerowner,
@Param("unfollowedDays") Integer unfollowedDays, @Param("followNumber") Integer followNumber,
@Param("industry") Integer industry);
IPage<CrmClientData> getCrmClientData2(IPage<CrmClientData> page,
@Param("empNum") Integer empNum, @Param("orgCode") Integer orgCode,
@Param("groupId") Integer groupId, @Param("status") Integer status,
@Param("like") String like, @Param("startCreateTime") String startCreateTime,
@Param("endCreateTime") String endCreateTime, @Param("startFollowTime") String startFollowTime,
@Param("endFollowTime") String endFollowTime,@Param("type") Integer type,
@Param("ifPhone") String ifPhone,@Param("customerowner") String customerowner,
@Param("unfollowedDays") Integer unfollowedDays, @Param("followNumber") Integer followNumber,
@Param("industry") Integer industry);
List<CrmClientData> getCrmClientData3(@Param("empNum") Integer empNum, @Param("orgCode") Integer orgCode,
@Param("groupId") Integer groupId, @Param("status") Integer status,
@Param("like") String like, @Param("startCreateTime") String startCreateTime,
@Param("endCreateTime") String endCreateTime, @Param("startFollowTime") String startFollowTime,
@Param("endFollowTime") String endFollowTime,@Param("type") Integer type,
@Param("ifPhone") String ifPhone,@Param("customerowner") String customerowner,
@Param("unfollowedDays") Integer unfollowedDays, @Param("followNumber") Integer followNumber,
@Param("industry") Integer industry);
}
\ No newline at end of file
......@@ -7,9 +7,16 @@
*/
package cn.timer.api.dao.crm;
import cn.timer.api.dto.crm.CrmCartogramCountExportDto;
import cn.timer.api.dto.crm.CrmClientFollowCountDto;
import cn.timer.api.dto.crm.CrmClientFollowCountParam;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.timer.api.bean.crm.CrmClientFollow;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* Title: CrmClientFollowMapper.java
......@@ -20,5 +27,25 @@ import cn.timer.api.bean.crm.CrmClientFollow;
* @version 1.0
*/
public interface CrmClientFollowMapper extends BaseMapper<CrmClientFollow> {
/**
* 根据条件查询 统计跟进数据
* @param param
* @return
*/
List<CrmClientFollowCountDto> selectCrmClientFollowCount(@Param("param") CrmClientFollowCountParam param);
/**
* 根据条件查询 统计跟进数据 需要显示的人数
* @param param
* @return
*/
List<CrmClientFollowCountDto> selectCrmClientFollowList(@Param("param") CrmClientFollowCountParam param);
/**
* 根据条件查询 统计跟进数据
* @param param
* @return
*/
Integer selectCountByParam(@Param("param") CrmClientFollowCountParam param);
}
package cn.timer.api.dao.crm;
import cn.timer.api.bean.crm.CrmClientLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* Title: 客户跟进动态日志表
*
* @Description:
* @author wuqingjun
* @date 2023年7月31日
* @version 1.0
*/
public interface CrmClientLogMapper extends BaseMapper<CrmClientLog> {
}
package cn.timer.api.dto.crm;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.awt.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
* @author wuqingjun
* @date 2023年7月28日
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CrmClientFollowCountDto implements Serializable {
@ApiModelProperty(value = "跟进数")
private List<Integer> followCount;
@ApiModelProperty(value = "创建人")
private Integer createUser;
@ApiModelProperty(value = "创建人姓名")
private String createUserName;
@ApiModelProperty(value = "时间")
private String createTime;
}
package cn.timer.api.dto.crm;
import cn.timer.api.config.exception.ValidationMsg;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author wuqingjun
* @date 2023年7月28日
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CrmClientFollowCountParam implements Serializable {
private static final long serialVersionUID = -1230023773946170911L;
/**
* 开始时间
*/
@ApiModelProperty(value = "开始时间")
private String startTime;
/**
* 结束时间
*/
@ApiModelProperty(value = "结束时间")
private String endTime;
/**
* 当前企业id
*/
@ApiModelProperty(value = "当前企业id")
private Integer orgCode;
/**
* 当前用户ID
*/
@ApiModelProperty(value = "当前用户ID")
private Integer createUser;
}
package cn.timer.api.dto.crm;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
*
* @author wuqingjun
* @date 2023年7月28日
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CrmClientFollowListDto implements Serializable {
@ApiModelProperty(value = "时间")
private List<String> createStr;
private List<CrmClientFollowCountDto> dtos;
}
......@@ -3,12 +3,10 @@ package cn.timer.api.utils;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import cn.hutool.core.util.StrUtil;
import org.springframework.util.StringUtils;
public class DateUtil {
......@@ -479,4 +477,40 @@ public class DateUtil {
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dft.format(calendar.getTime());
}
/**
* 获取当前月的所有天数
* @param yearMonth
* @return
*/
public static List<String> getDayByMonth(String yearMonth){
List<String> list = new ArrayList<>();
if(StringUtils.isEmpty(yearMonth)){
return list;
}
String[] year_monnth = yearMonth.split("-");
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(Integer.parseInt(year_monnth[0]), Integer.parseInt(year_monnth[1])-1, 1);
int year = calendar.get(Calendar.YEAR);//年份
int month = calendar.get(Calendar.MONTH) + 1;//月份
int day = calendar.getActualMaximum(Calendar.DATE);
for (int i = 1; i <= day; i++) {
String date=null;
if(month<10 && i<10){
date = String.valueOf(year)+"-0"+month+"-0"+i;
}
if(month<10 && i>=10){
date = String.valueOf(year)+"-0"+month+"-"+i;
}
if(month>=10 && i<10){
date = String.valueOf(year)+"-"+month+"-0"+i;
}
if(month>=10 && i>=10){
date = String.valueOf(year)+"-"+month+"-"+i;
}
list.add(date);
}
return list;
}
}
......@@ -6,11 +6,12 @@
<select id="crmCartogram"
resultType="cn.timer.api.dto.crm.CrmCartogramDto">
SELECT
province_id,province as provinceName,count(province_id) num
province_id,city as provinceName,count(address) num
FROM
crm_client_data
WHERE
org_code = #{orgCode}
and client_cellphone != ''
<if test='null != belongUser and belongUser !=""'>AND
belong_user = #{belongUser}
</if>
......@@ -24,7 +25,7 @@
create_time <![CDATA[<=]]> #{endCreateTime}
</if>
GROUP BY
province_id
city
</select>
<select id="selectCrmCartogramCount" resultType="cn.timer.api.dto.crm.CrmCartogramCountExportDto">
SELECT belong_user_name,
......@@ -50,4 +51,192 @@
</where>
GROUP BY ccd.belong_user
</select>
<select id="getCrmClientData" resultType="CrmClientData">
SELECT *
FROM crm_client_data ccd
WHERE ccd.org_code = #{orgCode}
AND ccd.belong_user = #{empNum}
<if test="industry != null and industry > 0">
AND ccd.industry = #{industry}
</if>
<if test="groupId != null and groupId > 0">
AND ccd.belong_group = #{groupId}
</if>
<if test="status != null and status > 0">
AND ccd.client_status = #{status}
</if>
<if test="typei != null and typei > 0">
AND ccd.client_type = #{typei}
</if>
<if test="startCreateTime != null and endCreateTime != null">
AND ccd.create_time BETWEEN #{startCreateTime} AND #{endCreateTime}
</if>
<if test="startFollowTime != null and endFollowTime != null">
AND ccd.last_follow_time BETWEEN #{startFollowTime} AND #{endFollowTime}
</if>
<if test="like != null and like.trim().length() > 0">
AND (ccd.belong_user_name LIKE CONCAT('%', #{like}, '%')
OR ccd.client_name LIKE CONCAT('%', #{like}, '%')
OR ccd.client_cellphone LIKE CONCAT('%', #{like}, '%'))
</if>
<if test="unfollowedDays != null and unfollowedDays > 0">
AND DATEDIFF(NOW(), (SELECT MAX(last_follow_time) FROM crm_client_follow ccf WHERE ccf.cid = ccd.id)) >= #{unfollowedDays}
</if>
<if test="followNumber != null and followNumber > 0">
AND (
SELECT COUNT(*)
FROM crm_client_follow ccf
WHERE ccf.cid = ccd.id
) >= #{followNumber}
</if>
ORDER BY ccd.create_time DESC
</select>
<select id="getCrmClientData1" resultType="CrmClientData">
SELECT ccd.*
FROM crm_client_data ccd
WHERE ccd.org_code = #{orgCode}
AND ccd.belong_user = #{empNum}
<if test="industry != null and industry > 0">
AND ccd.industry = #{industry}
</if>
<if test="groupId != null and groupId >= 0">
AND ccd.belong_group = #{groupId}
</if>
<if test="type != null and type >= 0">
AND ccd.client_type = #{type}
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '1'">
AND ccd.client_cellphone LIKE '%1'
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '2'">
AND (ccd.client_cellphone IS NULL OR ccd.client_cellphone = '')
</if>
<if test="status != null and status >= 0">
AND ccd.client_status = #{status}
</if>
<if test="customerowner != null and customerowner != ''">
AND ccd.belong_user_name LIKE CONCAT('%', #{customerowner}, '%')
</if>
<if test="startCreateTime != null and startCreateTime != '' and endCreateTime != null and endCreateTime != '' ">
AND ccd.create_time BETWEEN #{startCreateTime} AND #{endCreateTime}
</if>
<if test="startFollowTime != null and endFollowTime != null">
AND ccd.last_follow_time BETWEEN #{startFollowTime} AND #{endFollowTime}
</if>
<if test="like != null and like.trim().length() > 0">
AND (ccd.client_name LIKE CONCAT('%', #{like}, '%') OR ccd.client_cellphone LIKE CONCAT('%', #{like}, '%'))
</if>
<if test="unfollowedDays != null and unfollowedDays > 0">
AND DATEDIFF(NOW(), (SELECT MAX(last_follow_time) FROM crm_client_follow ccf WHERE ccf.cid = ccd.id)) >= #{unfollowedDays}
</if>
<if test="followNumber != null and followNumber > 0">
AND (
SELECT COUNT(*)
FROM crm_client_follow
WHERE cid = ccd.id
) >= #{followNumber}
</if>
ORDER BY ccd.create_time DESC
</select>
<select id="getCrmClientData2" resultType="CrmClientData">
SELECT *
FROM crm_client_data ccd
WHERE ccd.org_code = #{orgCode}
AND ccd.belong_user = #{empNum}
<if test="industry != null and industry > 0">
AND ccd.industry = #{industry}
</if>
<if test="groupId != null and groupId >= 0">
AND ccd.belong_group = #{groupId}
</if>
<if test="type != null and type >= 0">
AND ccd.client_type = #{type}
</if>
<if test="customerowner != null and customerowner != ''">
AND ccd.belong_user_name LIKE CONCAT('%', #{customerowner}, '%')
</if>
<if test="status != null and status >= 0">
AND ccd.client_status = #{status}
</if>
<if test="keywordStr != null and keywordStr != ''">
AND ccd.belong_group IN (${keywordStr})
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '1'">
AND ccd.client_cellphone LIKE '%1'
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '2'">
AND (ccd.client_cellphone IS NULL OR ccd.client_cellphone = '')
</if>
<if test="startCreateTime != null and startCreateTime != '' and endCreateTime != null and endCreateTime != '' ">
AND ccd.create_time BETWEEN #{startCreateTime} AND #{endCreateTime}
</if>
<if test="startFollowTime != null and endFollowTime != null">
AND ccd.last_follow_time BETWEEN #{startFollowTime} AND #{endFollowTime}
</if>
<if test="like != null and like.trim().length() > 0">
AND (ccd.client_name LIKE CONCAT('%', #{like}, '%') OR ccd.client_cellphone LIKE CONCAT('%', #{like}, '%'))
</if>
<if test="unfollowedDays != null and unfollowedDays > 0">
AND DATEDIFF(NOW(), (SELECT MAX(last_follow_time) FROM crm_client_follow ccf WHERE ccf.cid = ccd.id)) >= #{unfollowedDays}
</if>
<if test="followNumber != null and followNumber > 0">
AND (
SELECT COUNT(*)
FROM crm_client_follow
WHERE cid = ccd.id
) >= #{followNumber}
</if>
ORDER BY ccd.create_time DESC;
</select>
<select id="getCrmClientData3" resultType="CrmClientData">
SELECT *
FROM crm_client_data ccd
WHERE ccd.belong_group = #{gid}
<if test="industry != null and industry > 0">
AND ccd.industry = #{industry}
</if>
<if test="groupId != null and groupId >= 0">
AND ccd.belong_group = #{groupId}
</if>
<if test="type != null and type >= 0">
AND ccd.client_type = #{type}
</if>
<if test="customerowner != null and customerowner != ''">
AND ccd.belong_user_name LIKE CONCAT('%', #{customerowner}, '%')
</if>
<if test="status != null and status >= 0">
AND ccd.client_status = #{status}
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '1'">
AND ccd.client_cellphone LIKE '%1'
</if>
<if test="ifPhone != null and ifPhone != '' and ifPhone == '2'">
AND (ccd.client_cellphone IS NULL OR ccd.client_cellphone = '')
</if>
<if test="startCreateTime != null and startCreateTime != '' and endCreateTime != null and endCreateTime != '' ">
AND ccd.create_time BETWEEN #{startCreateTime} AND #{endCreateTime}
</if>
<if test="startFollowTime != null and endFollowTime != null">
AND ccd.last_follow_time BETWEEN #{startFollowTime} AND #{endFollowTime}
</if>
<if test="like != null and like.trim().length() > 0">
AND (ccd.client_name LIKE CONCAT('%', #{like}, '%') OR ccd.client_cellphone LIKE CONCAT('%', #{like}, '%'))
</if>
<if test="unfollowedDays != null and unfollowedDays > 0">
AND DATEDIFF(NOW(), (SELECT MAX(last_follow_time) FROM crm_client_follow ccf WHERE ccf.cid = ccd.id)) >= #{unfollowedDays}
</if>
<if test="followNumber != null and followNumber > 0">
AND (
SELECT COUNT(*)
FROM crm_client_follow
WHERE cid = ccd.id
) >= #{followNumber}
</if>
ORDER BY ccd.create_time DESC;
</select>
</mapper>
\ No newline at end of file
<?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="cn.timer.api.dao.crm.CrmClientFollowMapper">
<select id="selectCrmClientFollowCount" resultType="cn.timer.api.dto.crm.CrmClientFollowCountDto">
SELECT
create_user_name createUserName,
create_user createUser,
DATE(create_time) AS createTime,
COUNT(*) AS followCount
FROM
crm_client_follow
<where>
<if test='null != param.startTime and param.startTime !=""'>
AND create_time <![CDATA[>=]]> #{param.startTime}
</if>
<if test='null != param.endTime and param.endTime !=""'>
AND create_time <![CDATA[<=]]> #{param.endTime}
</if>
<if test='null != param.orgCode and param.orgCode !=""'>
AND org_code = #{param.orgCode}
</if>
</where>
GROUP BY
createUser, DATE(create_time)
ORDER BY
createUser, DATE(create_time);
</select>
<select id="selectCrmClientFollowList" resultType="cn.timer.api.dto.crm.CrmClientFollowCountDto">
SELECT
create_user_name createUserName,
create_user createUser
FROM
crm_client_follow
<where>
<if test='null != param.startTime and param.startTime !=""'>
AND create_time <![CDATA[>=]]> #{param.startTime}
</if>
<if test='null != param.endTime and param.endTime !=""'>
AND create_time <![CDATA[<=]]> #{param.endTime}
</if>
<if test='null != param.orgCode and param.orgCode !=""'>
AND org_code = #{param.orgCode}
</if>
</where>
GROUP BY
createUser
ORDER BY
createUser
</select>
<select id="selectCountByParam" resultType="int">
SELECT
COUNT(*)
FROM
crm_client_follow
<where>
<if test='null != param.startTime and param.startTime !=""'>
AND DATE(create_time) = #{param.startTime}
</if>
<if test='null != param.createUser and param.createUser !=""'>
AND create_user = #{param.createUser}
</if>
<if test='null != param.orgCode and param.orgCode !=""'>
AND org_code = #{param.orgCode}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
<?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="cn.timer.api.dao.crm.CrmClientLogMapper">
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment