package cn.timer.api.controller.crm; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.HashMap; 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; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.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.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.timer.api.bean.clazz.ClientSourceClass; 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.CrmBusinessGroupMember; import cn.timer.api.bean.crm.CrmClientAssociate; import cn.timer.api.bean.crm.CrmClientContacts; import cn.timer.api.bean.crm.CrmClientData; import cn.timer.api.bean.crm.CrmClientFollow; import cn.timer.api.bean.crm.CrmSeaRule; import cn.timer.api.bean.qyzx.QyzxEmpEntAsso; 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.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.utils.CheckUtil; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; /** * Title: CrmController.java * * @Description: * @author dsc * @date 2020年6月5日 * @version 1.0 */ @RestController @Api(tags = "6.1客户管理") @Transactional @RequestMapping(value = "/crm", produces = { "application/json" }) public class CrmController { // @Value(value = "${config-8timer.crm-excel.realPath}") // private String realPath; @Autowired private CrmClientDataMapper crmClientDataMapper; @Autowired private CrmClientContactsMapper crmClientContactsMapper; private Integer getEmpNum(UserBean userBean) { return userBean.getEmpNum(); } private Integer getOrgCode(UserBean userBean) { return userBean.getOrgCode(); } private YgglMainEmp getYg(Integer orgCode, Integer empNum) { return YgglMainEmp.builder().build() .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, empNum) .eq(YgglMainEmp::getOrgCode, orgCode).select(YgglMainEmp::getName, YgglMainEmp::getHeadUrl)); } private String getEmpName(Integer orgCode, Integer empNum) { return getYg(orgCode, empNum).getName(); } // private Integer getQyzxManager(Integer orgCode, Integer empNum) { // return YgglMainEmp.builder().build() // .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, orgCode) // .eq(YgglMainEmp::getEmpNum, empNum).select(YgglMainEmp::getIsManager)) // .getIsManager(); // } @GetMapping("getIndustry") @ApiOperation(value = "获取行业列表", httpMethod = "GET", notes = "接口发布说明") public Result<List<IndustryClass>> getIndustry(@CurrentUser UserBean userBean) { return ResultUtil.data(IndustryClass.builder().build().selectAll()); } @GetMapping("getClientType") @ApiOperation(value = "获取客户类型", httpMethod = "GET", notes = "接口发布说明") public Result<List<ClientTypeClass>> getClientType(@CurrentUser UserBean userBean) { return ResultUtil.data(ClientTypeClass.builder().build().selectAll()); } @GetMapping("getClientSource") @ApiOperation(value = "获取客户来源", httpMethod = "GET", notes = "接口发布说明") public Result<List<ClientSourceClass>> getClientSource(@CurrentUser UserBean userBean) { return ResultUtil.data(ClientSourceClass.builder().build().selectAll()); } @PostMapping("addBusinessGroup") @Transactional @ApiOperation(value = "新增/编辑业务组", httpMethod = "POST", notes = "接口发布说明") public Result<Object> addBusinessGroup(@CurrentUser UserBean userBean, @RequestBody CrmBusinessGroup crmBusinessGroup) { Integer orgCode = getOrgCode(userBean); Integer empNum = getEmpNum(userBean); CrmSeaRule crmSeaRule = crmBusinessGroup.getCrmSeaRules(); Integer one = crmSeaRule.getOne(); Integer two = crmSeaRule.getTwo(); Integer three = crmSeaRule.getThree(); Integer four = crmSeaRule.getFour(); if ((one != null && one < 1) || (two != null && two < 1) || (three != null && three < 1) || (four != null && four < 1)) return ResultUtil.error("请输入正确的规则天数"); if (three <= one) return ResultUtil.error("该规则天数必须大于规则1的天数"); Integer gid = crmBusinessGroup.getId(); crmBusinessGroup.setModifyUser(empNum); // 修改人 if (gid == null) { CrmBusinessGroup crmBusinessGroupOld = CrmBusinessGroup.builder().build() .selectOne(new QueryWrapper<CrmBusinessGroup>().lambda().eq(CrmBusinessGroup::getOrgCode, orgCode) .select(CrmBusinessGroup::getSort).last("limit 1").orderByDesc(CrmBusinessGroup::getId)); if (crmBusinessGroupOld == null) crmBusinessGroup.setSort(1); else crmBusinessGroup.setSort(crmBusinessGroupOld.getSort() + 1);// 排序 crmBusinessGroup.setCreateUser(empNum); // 创建人 crmBusinessGroup.setOrgCode(orgCode); boolean result = crmBusinessGroup.insert(); if (!result) return ResultUtil.success("新增失败"); gid = crmBusinessGroup.getId(); List<Integer> memberIds = crmBusinessGroup.getMemberIds(); for (Integer empId : memberIds) { insertMembers(gid, empId, orgCode, 0); } List<Integer> managerIds = crmBusinessGroup.getManagerIds(); for (Integer empId : managerIds) { insertMembers(gid, empId, orgCode, 1); } crmSeaRule.setGid(gid); crmSeaRule.insert(); return ResultUtil.success("新增业务组成功"); } else { crmBusinessGroup.updateById(); List<Integer> memberIds = crmBusinessGroup.getMemberIds(); List<Integer> managerIds = crmBusinessGroup.getManagerIds(); // 更新组成员 updateMembers(orgCode, gid, memberIds, 0); updateMembers(orgCode, gid, managerIds, 1); // 更新公海规则 crmSeaRule.update(new LambdaQueryWrapper<CrmSeaRule>().eq(CrmSeaRule::getGid, gid)); return ResultUtil.success("编辑业务组成功"); } } private void insertMembers(Integer gid, Integer empId, Integer orgCode, Integer type) { CrmBusinessGroupMember.builder().gid(gid).empNum(empId).orgCode(orgCode).type(type).build().insert(); } private void updateMembers(Integer orgCode, Integer gid, List<Integer> memberIds, Integer type) { List<CrmBusinessGroupMember> oldMembers = CrmBusinessGroupMember.builder().build() .selectList(new LambdaQueryWrapper<CrmBusinessGroupMember>().eq(CrmBusinessGroupMember::getGid, gid) .eq(CrmBusinessGroupMember::getType, type).select(CrmBusinessGroupMember::getEmpNum)); // 旧组成员idlist List<Integer> oldIdsList = oldMembers.stream().map(CrmBusinessGroupMember::getEmpNum) .collect(Collectors.toList()); List<Integer> deList = CheckUtil.reduce(oldIdsList, memberIds); // 删 for (Integer integer : deList) { CrmBusinessGroupMember.builder().build() .delete(new LambdaQueryWrapper<CrmBusinessGroupMember>() .eq(CrmBusinessGroupMember::getEmpNum, integer).eq(CrmBusinessGroupMember::getGid, gid) .eq(CrmBusinessGroupMember::getOrgCode, orgCode).eq(CrmBusinessGroupMember::getType, type)); } List<Integer> addList = CheckUtil.reduce(memberIds, oldIdsList); // 增 for (Integer integer : addList) { CrmBusinessGroupMember.builder().empNum(integer).gid(gid).orgCode(orgCode).type(type).build().insert(); } } @GetMapping("getBusinessGroup") @ApiOperation(value = "获取业务组列表", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getBusinessGroup(@CurrentUser UserBean userBean) { Integer nowEmpNum = getEmpNum(userBean); Integer orgCode = getOrgCode(userBean); // YgglMainEmp yg = YgglMainEmp.builder().build() // .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, orgCode) // .eq(YgglMainEmp::getEmpNum, nowEmpNum).select(YgglMainEmp::getIsManager)); QyzxEmpEntAsso qyzxEmpEntAsso = QyzxEmpEntAsso.builder().build() .selectOne(new LambdaQueryWrapper<QyzxEmpEntAsso>().eq(QyzxEmpEntAsso::getOrgCode, orgCode) .eq(QyzxEmpEntAsso::getEmpNum, nowEmpNum)); if (qyzxEmpEntAsso != null && qyzxEmpEntAsso.getUserType() != null && (qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_ADMIN.getType() || qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_C_ADMIN.getType())) { List<CrmBusinessGroup> list = CrmBusinessGroup.builder().build() .selectList(new QueryWrapper<CrmBusinessGroup>().lambda() .eq(CrmBusinessGroup::getOrgCode, getOrgCode(userBean)).select(CrmBusinessGroup::getId, CrmBusinessGroup::getSort, CrmBusinessGroup::getName, CrmBusinessGroup::getModifyTime)); for (CrmBusinessGroup crmBusinessGroup : list) { Integer gid = crmBusinessGroup.getId(); List<CrmBusinessGroupMember> crmBusinessGroupManagers = CrmBusinessGroupMember.builder().build() .selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda() .eq(CrmBusinessGroupMember::getGid, gid).eq(CrmBusinessGroupMember::getType, 1) .eq(CrmBusinessGroupMember::getOrgCode, getOrgCode(userBean)) .select(CrmBusinessGroupMember::getEmpNum)); List<CrmBusinessGroupMember> crmBusinessGroupMembers = CrmBusinessGroupMember.builder().build() .selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda() .eq(CrmBusinessGroupMember::getGid, gid).eq(CrmBusinessGroupMember::getType, 0) .eq(CrmBusinessGroupMember::getOrgCode, getOrgCode(userBean)) .select(CrmBusinessGroupMember::getEmpNum)); List<Map<String, Object>> managers = new ArrayList<Map<String, Object>>(); for (CrmBusinessGroupMember crmBusinessGroupManager : crmBusinessGroupManagers) { Integer empNum = crmBusinessGroupManager.getEmpNum(); YgglMainEmp emps = YgglMainEmp.builder().build() .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, empNum) .eq(YgglMainEmp::getOrgCode, orgCode).select(YgglMainEmp::getName, YgglMainEmp::getHeadUrl)); if(emps != null) { String name = getEmpName(orgCode, empNum); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", name); map.put("empNum", empNum); managers.add(map); } } crmBusinessGroup.setManagers(managers); List<Map<String, Object>> members = new ArrayList<Map<String, Object>>(); for (CrmBusinessGroupMember crmBusinessGroupManager : crmBusinessGroupMembers) { Integer empNum = crmBusinessGroupManager.getEmpNum(); YgglMainEmp emps = YgglMainEmp.builder().build() .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, empNum) .eq(YgglMainEmp::getOrgCode, orgCode).select(YgglMainEmp::getName, YgglMainEmp::getHeadUrl)); if(emps != null) { String name = getEmpName(orgCode, empNum); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", name); map.put("empNum", empNum); members.add(map); } } crmBusinessGroup.setMembers(members); CrmSeaRule crmSeaRules = CrmSeaRule.builder().build() .selectOne(new QueryWrapper<CrmSeaRule>().lambda().eq(CrmSeaRule::getGid, gid)); crmBusinessGroup.setCrmSeaRules(crmSeaRules); } return ResultUtil.data(list, "获取成功"); } else return ResultUtil.error("暂无查看权限"); } @GetMapping("getBusinessGroupId") @ApiOperation(value = "获取业务组列表(id,name)", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getBusinessGroupId(@CurrentUser UserBean userBean) { Integer nowEmpNum = getEmpNum(userBean); Integer orgCode = getOrgCode(userBean); // YgglMainEmp yg = YgglMainEmp.builder().build() // .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, orgCode) // .eq(YgglMainEmp::getEmpNum, nowEmpNum).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, nowEmpNum)); if (qyzxEmpEntAsso != null && qyzxEmpEntAsso.getUserType() != null && (qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_ADMIN.getType() || qyzxEmpEntAsso.getUserType() == SysRoleType.U_TYPE_C_ADMIN.getType())) { List<CrmBusinessGroup> list = CrmBusinessGroup.builder().build() .selectList(new LambdaQueryWrapper<CrmBusinessGroup>().eq(CrmBusinessGroup::getOrgCode, orgCode) .select(CrmBusinessGroup::getName, CrmBusinessGroup::getId)); return ResultUtil.data(list, "获取成功"); } else { List<CrmBusinessGroupMember> list = CrmBusinessGroupMember.builder().build() .selectList(new LambdaQueryWrapper<CrmBusinessGroupMember>() .eq(CrmBusinessGroupMember::getEmpNum, getEmpNum(userBean)) .eq(CrmBusinessGroupMember::getOrgCode, getOrgCode(userBean)) .select(CrmBusinessGroupMember::getGid)); List<Integer> gids = list.stream().map(CrmBusinessGroupMember::getGid).collect(Collectors.toList()).stream() .distinct().collect(Collectors.toList()); List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); for (Integer gid : gids) { String name = CrmBusinessGroup.builder().build().selectOne(new LambdaQueryWrapper<CrmBusinessGroup>() .eq(CrmBusinessGroup::getId, gid).select(CrmBusinessGroup::getName)).getName(); Map<String, Object> map = new HashMap<String, Object>(); map.put("id", gid); map.put("name", name); result.add(map); } return ResultUtil.data(result, "获取成功"); } } // @GetMapping("getBusinessGroupMembers") // @ApiOperation(value = "获取业务组列表成员", httpMethod = "GET", notes = "接口发布说明") // public Result<Object> getBusinessGroupMembers(@CurrentUser UserBean userBean, @RequestParam Integer gid) { // List<CrmBusinessGroupMember> crmBusinessGroupMembers = CrmBusinessGroupMember.builder().build() // .selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, gid) // .eq(CrmBusinessGroupMember::getType, 0)); // List<YgglMainEmp> ygglMainEmps = new ArrayList<YgglMainEmp>(); // for (CrmBusinessGroupMember crmBusinessGroupMember : crmBusinessGroupMembers) { // ygglMainEmps.add(getYg(getOrgCode(userBean), crmBusinessGroupMember.getEmpNum())); // } // List<CrmBusinessGroupMember> crmBusinessGroupManagers = CrmBusinessGroupMember.builder().build() // .selectList(new QueryWrapper<CrmBusinessGroupMember>().lambda().eq(CrmBusinessGroupMember::getGid, gid) // .eq(CrmBusinessGroupMember::getType, 1)); // List<YgglMainEmp> ygglMainEmps2 = new ArrayList<YgglMainEmp>(); // for (CrmBusinessGroupMember crmBusinessGroupManager : crmBusinessGroupManagers) { // ygglMainEmps2.add(getYg(getOrgCode(userBean), crmBusinessGroupManager.getEmpNum())); // } // return ResultUtil.datas(ygglMainEmps2,ygglMainEmps, "获取成功"); // } // @GetMapping("getBusinessGroupRules") // @ApiOperation(value = "获取业务组公海规则", httpMethod = "GET", notes = "接口发布说明") // public Result<Object> getBusinessGroupRules(@RequestParam Integer gid) { // List<CrmSeaRule> crmSeaRules = CrmSeaRule.builder().build() // .selectList(new QueryWrapper<CrmSeaRule>().lambda().eq(CrmSeaRule::getGid, gid)); // return ResultUtil.data(crmSeaRules, "获取成功"); // } private SysRegion getSysRegion(Integer keyId) { return SysRegion.builder().build() .selectOne(new QueryWrapper<SysRegion>().lambda().eq(SysRegion::getKeyId, keyId).select( SysRegion::getRegionName, SysRegion::getKeyId, SysRegion::getZipCode, SysRegion::getRegionCode)); } @PostMapping("addClient") @Transactional @ApiOperation(value = "新增客户", httpMethod = "POST", notes = "接口发布说明") public Result<Object> addClient(@CurrentUser UserBean userBean, @RequestBody CrmClientData crmClientData) { Integer empNum = getEmpNum(userBean); Integer orgCode = getOrgCode(userBean); crmClientData.setClientStatus(1); crmClientData.setCreateUser(empNum); SysRegion district = getSysRegion(crmClientData.getDistrictId()); // crmClientData.setZipCode(district.getZipCode()); if (district != null) { crmClientData.setDistrict(district.getRegionName()); SysRegion city = getSysRegion(district.getRegionCode()); crmClientData.setCity(city.getRegionName()); crmClientData.setCityId(city.getKeyId()); SysRegion province = getSysRegion(city.getRegionCode()); crmClientData.setProvinceId(province.getKeyId()); crmClientData.setProvince(province.getRegionName()); } crmClientData.setBelongUserName(getEmpName(orgCode, crmClientData.getBelongUser())); crmClientData.setOrgCode(getOrgCode(userBean)); Integer belongGroup = crmClientData.getBelongGroup(); if (belongGroup == null) return ResultUtil.error("未选择业务组"); String belongGroupName = CrmBusinessGroup.builder().id(belongGroup).build().selectById().getName(); crmClientData.setBelongGroupName(belongGroupName); Integer clientSource = crmClientData.getClientSource(); Integer clientType = crmClientData.getClientType(); Integer industry = crmClientData.getIndustry(); if (clientSource != null && clientSource > 0) { String clientSourceName = ClientSourceClass.builder().id(clientSource).build().selectById().getName(); // 客户来源 crmClientData.setClientSourceName(clientSourceName); } if (clientType != null && clientType > 0) { String clientTypeName = ClientTypeClass.builder().id(clientType).build().selectById().getName(); // 客户类型 crmClientData.setClientTypeName(clientTypeName); } if (industry != null && industry > 0) { String industryName = IndustryClass.builder().id(industry).build().selectById().getName();// 行业名 crmClientData.setIndustryName(industryName); } if (!crmClientData.insert()) return ResultUtil.error("新增失败"); Integer crmDataId = crmClientData.getId(); Integer[] ids = crmClientData.getIds(); if(ids != null) { for (Integer id : ids) { CrmClientAssociate.builder().cid(crmDataId).associateId(id).orgCode(getOrgCode(userBean)).build().insert(); } } List<CrmClientContacts> crmClientContacts = crmClientData.getCrmClientContacts(); int contactsnum = 0; if(crmClientContacts != null) { for (CrmClientContacts crmClientContact : crmClientContacts) { if(crmClientContact.getName() != null) { crmClientContact.setCid(crmDataId); crmClientContact.insert(); contactsnum++; } } } crmClientData.setContactsNum(contactsnum); crmClientData.updateById(); return ResultUtil.success("新增成功"); } @PostMapping("editClient") @Transactional @ApiOperation(value = "编辑客户", httpMethod = "POST", notes = "接口发布说明") public Result<Object> editClient(@CurrentUser UserBean userBean, @RequestBody CrmClientData crmClientData) { Integer cid = crmClientData.getId(); if (cid == null) return ResultUtil.error("请传入id再试"); CrmClientData oldData = CrmClientData.builder().id(cid).build().selectById(); if (oldData == null) return ResultUtil.error("请确认该客户数据是否存在"); if (oldData.getClientStatus() == 5) return ResultUtil.error("请解封后继续编辑操作"); List<CrmClientContacts> crmClientContacts = crmClientData.getCrmClientContacts(); if (crmClientContacts != null) { CrmClientContacts.builder().build().delete(new QueryWrapper<CrmClientContacts>().lambda().eq(CrmClientContacts::getCid, cid)); for (CrmClientContacts crmClientContact : crmClientContacts) { // crmClientContact.updateById(); crmClientContact.insertOrUpdate(); } } if(crmClientContacts != null) { crmClientData.setContactsNum(crmClientContacts.size());//客户联系人数量 } List<CrmClientAssociate> oldAssociates = CrmClientAssociate.builder().build() .selectList(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid)); List<Integer> oldIdsList = oldAssociates.stream().map(CrmClientAssociate::getAssociateId) .collect(Collectors.toList()); // 旧协助人list Integer[] ids = crmClientData.getIds(); List<Integer> newIdsList = CollUtil.newArrayList(ids); // 新协助人list List<Integer> delList = CheckUtil.reduce(oldIdsList, newIdsList); // 要删的协助人 for (Integer id : delList) { CrmClientAssociate.builder().build().delete(new QueryWrapper<CrmClientAssociate>().lambda() .eq(CrmClientAssociate::getCid, cid).eq(CrmClientAssociate::getAssociateId, id)); } List<Integer> addList = CheckUtil.reduce(newIdsList, oldIdsList); // 要加的协助人 for (Integer id : addList) { CrmClientAssociate.builder().cid(cid).associateId(id).orgCode(getOrgCode(userBean)).build().insert(); } crmClientData.setModifyUser(getEmpNum(userBean)); crmClientData.setOrgCode(userBean.getOrgCode()); if (crmClientData.updateById()) return ResultUtil.success("编辑成功"); return ResultUtil.error("编辑失败"); } @GetMapping("getClientAssociate") @ApiOperation(value = "获取协作人列表", httpMethod = "GET", notes = "接口发布说明") public Result<List<Map<String, Object>>> getClientAssociate(@CurrentUser UserBean userBean, @RequestParam Integer cid) { List<CrmClientAssociate> crmClientAssociates = CrmClientAssociate.builder().build() .selectList(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid)); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (CrmClientAssociate crmClientAssociate : crmClientAssociates) { Integer orgCode = crmClientAssociate.getOrgCode(); Integer empNum = crmClientAssociate.getAssociateId(); YgglMainEmp ygglMainEmp = getYg(orgCode, empNum); String name = ygglMainEmp.getName(); String headUrl = ygglMainEmp.getHeadUrl(); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", name); map.put("empNum", empNum); map.put("headUrl", headUrl); list.add(map); } 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> getMyAssociateCilent(Integer empNum, Integer orgCode, Integer groupId, Integer status, String like,Integer typei,String startFollowTime, String endFollowTime,String startCreateTime, String endCreateTime) { List<CrmClientAssociate> crmClientAssociates = CrmClientAssociate.builder().build().selectList( new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getAssociateId, empNum) .eq(CrmClientAssociate::getOrgCode, orgCode).select(CrmClientAssociate::getCid)); List<CrmClientData> myCrmClientAssociates = new ArrayList<CrmClientData>(); for (CrmClientAssociate crmClientAssociate : crmClientAssociates) { Integer cid = crmClientAssociate.getCid(); CrmClientData crmClientData = CrmClientData.builder().build() .selectOne(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getId, cid) .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::getClientName, like).or() .like(!StrUtil.isBlank(like), CrmClientData::getClientCellphone, like)); if (crmClientData != null) myCrmClientAssociates.add(crmClientData); } 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 <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) .collect(Collectors.toList()); } @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("查询失败"); // Collections.sort(crmClientDatas, Comparator.comparing(CrmClientData::getCreateTime).reversed()); // 按时间降序排序 // int pageNumber = 1; // int pageSize = 10; List<CrmClientData> result = getPageList(crmClientDatas, pageNumber, pageSize, Comparator.comparing(CrmClientData::getCreateTime).reversed()); List<CrmClientData> resultlist = new ArrayList<CrmClientData>(); for(CrmClientData crmd : result) { CrmClientData crmdts = CrmClientData.builder().build(); BeanUtil.copyProperties(crmd, crmdts , "iscooperation"); List<CrmClientAssociate> crmClientAssociates = CrmClientAssociate.builder().build() .selectList(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, crmd.getId())); int u = 0; if(crmClientAssociates.size() > 0) { String[] collaborator = new String[crmClientAssociates.size()]; for (CrmClientAssociate crmClientAssociate : crmClientAssociates) { Integer empNum1 = crmClientAssociate.getAssociateId(); collaborator[u] = String.valueOf(empNum1); u++; } if(ClockInTool.contains(ClockInTool.deleteArrayNull(collaborator),String.valueOf(userBean.getEmpNum()))) { crmdts.setIscooperation(1); }else { crmdts.setIscooperation(0); } }else { crmdts.setIscooperation(0); } resultlist.add(crmdts); } return ResultUtil.pageData(resultlist, (long) crmClientDatas.size(), "查询成功"); // 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, @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); // 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(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; List<CrmClientData> result = getPageList(list, pageNumber, pageSize, Comparator.comparing(CrmClientData::getCreateTime).reversed()); return ResultUtil.pageData(result, (long) list.size(), "查询成功"); // return ResultUtil.data(list, "查询成功"); } 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(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, defaultValue = "1") int pageNumber, @RequestParam(required = false, defaultValue = "10") int pageSize) { Integer empNum = getEmpNum(userBean); Integer orgCode = getOrgCode(userBean); 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"; } // 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())) { 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) { 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) .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::getCreateTime, startFollowTime) .le(StringUtils.isNotBlank(endFollowTime), CrmClientData::getCreateTime, 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) .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) .orderByDesc(CrmClientData::getCreateTime)); } 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) .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); } List<CrmClientData> result = getPageList(crmClientDatas, pageNumber, pageSize, Comparator.comparing(CrmClientData::getCreateTime).reversed()); return ResultUtil.pageData(result, (long) crmClientDatas.size(), "查询成功"); // return ResultUtil.data(crmClientDatas, "查询成功"); } } @PostMapping("addCilentLinkMan") @Transactional @ApiOperation(value = "新增/编辑客户联系人", httpMethod = "POST", notes = "接口发布说明") public Result<Void> addCilentLinkMan(@CurrentUser UserBean userBean, @RequestBody CrmClientContacts crmClientContacts) { Integer cid = crmClientContacts.getCid(); if (crmClientContacts.getId() == null || crmClientContacts.getId().equals(0)) { if (cid == null) return ResultUtil.error("编辑失败,请传入客户id"); Integer num = CrmClientData.builder().id(crmClientContacts.getCid()).build().selectById().getContactsNum(); CrmClientData.builder().id(cid).contactsNum(++num).build().updateById(); } if (crmClientContacts.insertOrUpdate()) return ResultUtil.success("新增/编辑成功"); return ResultUtil.error("新增/编辑失败"); } @DeleteMapping("delCilentLinkMan") @Transactional @ApiOperation(value = "删除客户联系人", httpMethod = "DELETE", notes = "接口发布说明") public Result<Void> delCilentLinkMan(@CurrentUser UserBean userBean, @RequestParam Integer id, @RequestParam Integer cid) { if (cid == null) return ResultUtil.error("删除失败,请传入客户id"); Integer num = CrmClientData.builder().id(cid).build().selectById().getContactsNum(); if (--num < 0) { return ResultUtil.error("删除失败,已经没有可以删的联系人了"); } CrmClientData.builder().id(cid).contactsNum(num).build().updateById(); if (crmClientContactsMapper.deleteById(id) > 0) return ResultUtil.success("删除成功"); return ResultUtil.error("删除失败"); } @GetMapping("getCilentLinkMan") @ApiOperation(value = "获取客户联系人列表", httpMethod = "GET", notes = "接口发布说明") public Result<List<CrmClientContacts>> getCilentLinkMan(@CurrentUser UserBean userBean, Integer cid) { return ResultUtil.data(CrmClientContacts.builder().build() .selectList(new QueryWrapper<CrmClientContacts>().lambda().eq(CrmClientContacts::getCid, cid)), "获取成功"); } @PostMapping("addOrCancelClientStar") @ApiOperation(value = "新增客户收藏/取消收藏(仅归属人)", httpMethod = "POST", notes = "接口发布说明") public Result<Void> addOrCancelClientStar(@CurrentUser UserBean userBean, @RequestParam Integer cid) { Integer empNum = getEmpNum(userBean); CrmClientData crmClientData = CrmClientData.builder().id(cid).build().selectById(); if (crmClientData == null) return ResultUtil.error("请确认该客户是否存在"); if (!crmClientData.getBelongUser().equals(empNum)) return ResultUtil.error("不是当前客户归属人"); Integer star = crmClientData.getStar(); if (star == null || star == 0) { crmClientData.setStar(1); crmClientData.updateById(); return ResultUtil.success("收藏成功"); } else if (star == 1) { crmClientData.setStar(0); crmClientData.updateById(); return ResultUtil.success("取消收藏成功"); } else return ResultUtil.error("失败"); } @PostMapping("addClientFollow") @Transactional @ApiOperation(value = "新增跟进记录", httpMethod = "POST", notes = "接口发布说明") public Result<Void> addClientFollow(@CurrentUser UserBean userBean, @RequestBody CrmClientFollow crmClientFollow) { Integer cid = crmClientFollow.getCid(); if (cid == null) return ResultUtil.error("请传入id再试"); CrmClientData oldData = CrmClientData.builder().id(cid).build().selectById(); if (oldData == null) return ResultUtil.error("请确认该客户数据是否存在"); if (oldData.getClientStatus() == 5) return ResultUtil.error("请解封后继续编辑操作"); Integer orgCode = getOrgCode(userBean); Integer empNum = getEmpNum(userBean); CrmClientData.builder().id(crmClientFollow.getCid()).clientStatus(crmClientFollow.getClientStatus()) .lastFollowTime(new Date()).build().updateById(); // 更新客户最近跟进时间 crmClientFollow.setOrgCode(orgCode); crmClientFollow.setCreateUserName(getEmpName(orgCode, empNum)); if (crmClientFollow.insert()) return ResultUtil.success("新增成功"); return ResultUtil.error("新增失败"); } @GetMapping("getCilentFollow") @ApiOperation(value = "获取跟进记录", httpMethod = "GET", notes = "接口发布说明") public Result<List<CrmClientFollow>> getCilentFollow(@CurrentUser UserBean userBean, @RequestParam Integer cid) { Integer orgCode = getOrgCode(userBean); return ResultUtil.data(CrmClientFollow.builder().build().selectList(new QueryWrapper<CrmClientFollow>().lambda() .eq(CrmClientFollow::getOrgCode, orgCode).eq(CrmClientFollow::getCid, cid).orderByDesc(CrmClientFollow::getId)), "获取成功"); } // 根据组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) { Integer empNum = getEmpNum(userBean); CrmClientData crmClientData = CrmClientData.builder().id(cid).build().selectById(); if (crmClientData == null) return ResultUtil.error("请确认该客户是否存在"); QyzxEmpEntAsso ent = QyzxEmpEntAsso.builder().build().selectOne(new QueryWrapper<QyzxEmpEntAsso>().lambda().eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode()).eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())); if(ent != null) { if(ent.getUserType() == 2) { if (!crmClientData.getBelongUser().equals(empNum) && getGroupManager(crmClientData.getBelongGroup(), empNum) == null) 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); crmClientData.updateById(); return ResultUtil.success("封档成功"); } else if (status == 5) { crmClientData.setClientStatus(1); // 解封后默认潜在状态 crmClientData.updateById(); return ResultUtil.success("解封成功"); } else return ResultUtil.error("失败"); } @PostMapping("designateClientBelonger") @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(empNum) && getGroupManager(oldData.getBelongGroup(), empNum) == null) return ResultUtil.error("不是当前客户归属人或组管理员"); if (oldData.getClientStatus() == 5) return ResultUtil.error("请解封后继续编辑操作"); Integer belongGroup = oldData.getBelongGroup(); CrmBusinessGroupMember crmBusinessGroupMember = CrmBusinessGroupMember.builder().build() .selectOne(new QueryWrapper<CrmBusinessGroupMember>().lambda() .eq(CrmBusinessGroupMember::getGid, belongGroup) .eq(CrmBusinessGroupMember::getEmpNum, belongUser)); if (crmBusinessGroupMember == null) return ResultUtil.error("指派失败,该用户不是本组成员"); if (CrmClientData.builder().id(cid).belongUser(belongUser) .belongUserName(getEmpName(getOrgCode(userBean), belongUser)).build().updateById()) return ResultUtil.success("指派成功"); return ResultUtil.error("指派失败"); } @PostMapping("freeClientToSea") @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() == 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); // 删除协作人列表 CrmClientAssociate.builder().build() .delete(new QueryWrapper<CrmClientAssociate>().lambda().eq(CrmClientAssociate::getCid, cid)); if (oldData.updateById()) return ResultUtil.success("释放成功"); return ResultUtil.error("释放失败"); } @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("接收失败"); } @Autowired private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper; @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); 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) { // 是否有不同组的客户 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("转移成功"); } // 当前操作人是否管理员 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("没有操作权限,请联系组管理员进行操作"); 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) { if(endCreateTime != null && !("").equals(endCreateTime)) { endCreateTime = endCreateTime.substring(0, 10)+" 23:59:59"; } 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<Map<String, Object>> cartogram5 = new ArrayList<Map<String, Object>>();// 图5 List<ClientTypeClass> typeClasses = ClientTypeClass.builder().build().selectAll(); for (ClientTypeClass clientTypeClass : typeClasses) { Integer type = clientTypeClass.getId(); Map<String, Object> map = cartogram2(orgCode, groupId, type, belonger, startCreateTime, endCreateTime); if ((Integer) map.get("num") > 0) { cartogram5.add(map); } } listAll.add(cartogram5); // List<Map<String, Object>> cartogram6 = new ArrayList<Map<String, Object>>(); // 图6 // for (Integer keyId : getKeyIdList()) { // Map<String, Object> map = cartogram3(orgCode, groupId, keyId, belonger, startCreateTime, endCreateTime); // if ((Integer) map.get("num") > 0) { // cartogram6.add(map); // } // } List<CrmCartogramDto> cartogram6 = getCartogram6(orgCode, belonger, groupId, startCreateTime, endCreateTime); listAll.add(cartogram6); return ResultUtil.data(listAll, "获取成功"); } // 获取省份id // private List<Integer> getKeyIdList() { // List<SysRegion> list = SysRegion.builder().build() // .selectList(new LambdaQueryWrapper<SysRegion>().eq(SysRegion::getLevel, 1).select(SysRegion::getKeyId)); // return list.stream().map(SysRegion::getKeyId).collect(Collectors.toList()); // } @GetMapping("getAllBusinessMan") @ApiOperation(value = "获取全部业务员", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getAllBusinessMan(@CurrentUser UserBean userBean) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); List<Integer> empNums = getAllBusinessGroupMember(getOrgCode(userBean), null); for (Integer integer : empNums) { Map<String, Object> map = new HashMap<String, Object>(); map.put("empNum", integer); map.put("name", getEmpName(getOrgCode(userBean), integer)); list.add(map); } return ResultUtil.data(list, "获取成功"); } @GetMapping("getBusinessManByGroupId") @ApiOperation(value = "获取业务员ByGroupId", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getBusinessManByGroupId(@CurrentUser UserBean userBean, Integer gid) { List<CrmBusinessGroupMember> list = CrmBusinessGroupMember.builder().build() .selectList(new LambdaQueryWrapper<CrmBusinessGroupMember>().eq(CrmBusinessGroupMember::getGid, gid) .select(CrmBusinessGroupMember::getEmpNum)); List<Integer> empNums = list.stream().map(CrmBusinessGroupMember::getEmpNum).collect(Collectors.toList()); List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); for (Integer empNum : empNums) { String name = getEmpName(getOrgCode(userBean), empNum); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", name); map.put("empNum", empNum); result.add(map); } return ResultUtil.data(result, "获取成功"); } // 获取公司全部业务员 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 groupId, 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(belonger != null, CrmClientData::getBelongUser, belonger) .eq(groupId != null, CrmClientData::getBelongGroup, groupId) .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime) .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)); String name = "未知"; if (belonger == 0) name = "公海客户"; else if (belonger > 0) { YgglMainEmp emps = YgglMainEmp.builder().build() .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, belonger) .eq(YgglMainEmp::getOrgCode, orgCode).select(YgglMainEmp::getName, YgglMainEmp::getHeadUrl)); if(emps != null) { name = getEmpName(orgCode, belonger); } } map.put("name", name); 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) { Map<String, Object> map = selectMap(orgCode, groupId, memberId, status, startCreateTime, endCreateTime); if ((Integer) map.get("num") > 0) { list.add(map); } } Map<String, Object> map = selectMap(orgCode, groupId, 0, status, startCreateTime, endCreateTime); if ((Integer) map.get("num") > 0) list.add(map); } else { Map<String, Object> map = selectMap(orgCode, groupId, belonger, status, startCreateTime, endCreateTime); if ((Integer) map.get("num") > 0) { list.add(map); } } return list; } /** * 统计图5 * * @param orgCode 企业id(必填) * @param groupId 组id (可不填) * @param level 客户等级分类 (必填) * @param belonger 业务员id (可不填) * @return */ private Map<String, Object> cartogram2(Integer orgCode, Integer groupId, Integer level, Integer belonger, String startCreateTime, String endCreateTime) { Map<String, Object> map = new HashMap<String, Object>(); Integer num = 0; if (belonger == null) { List<Integer> members = getAllBusinessGroupMember(orgCode, groupId); for (Integer memberId : members) { num += CrmClientData.builder().build() .selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode) .eq(CrmClientData::getClientType, level).eq(CrmClientData::getBelongUser, memberId) .eq(groupId != null, CrmClientData::getBelongGroup, groupId) .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime) .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)); } num += CrmClientData.builder().build() .selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode) .eq(CrmClientData::getClientType, level).eq(CrmClientData::getBelongUser, 0) .eq(groupId != null, CrmClientData::getBelongGroup, groupId) .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime) .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)); map.put("level", level); String name = ClientTypeClass.builder().id(level).build().selectById().getName(); map.put("name", name); map.put("num", num); } else { 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); String name = ClientTypeClass.builder().id(level).build().selectById().getName(); map.put("name", name); map.put("num", num); } return map; } /** * 统计图6 * * @param orgCode 企业id(必填) * @param groupId 组id (可不填) * @param level 客户等级分类 (必填) * @param belonger 业务员id (可不填) * @return */ // private Map<String, Object> cartogram3(Integer orgCode, Integer groupId, Integer provinceId, Integer belonger, // String startCreateTime, String endCreateTime) { // Map<String, Object> map = new HashMap<String, Object>(); // Integer num = 0; // if (belonger == null) { // // List<Integer> members = getAllBusinessGroupMember(orgCode, groupId); // for (Integer memberId : members) { // num += CrmClientData.builder().build() // .selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode) // .eq(CrmClientData::getProvinceId, provinceId).eq(CrmClientData::getBelongUser, memberId) // .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, // startCreateTime) // .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, // endCreateTime)); // } // map.put("provinceId", provinceId); // String name = SysRegion.builder().build().selectOne(new QueryWrapper<SysRegion>().lambda() // .eq(SysRegion::getLevel, 1).eq(SysRegion::getKeyId, provinceId).select(SysRegion::getRegionName)) // .getRegionName(); // map.put("provinceName", name); // map.put("num", num); // // } else { // num = CrmClientData.builder().build() // .selectCount(new QueryWrapper<CrmClientData>().lambda().eq(CrmClientData::getOrgCode, orgCode) // .eq(CrmClientData::getProvinceId, provinceId).eq(CrmClientData::getBelongUser, belonger) // .ge(StringUtils.isNotBlank(startCreateTime), CrmClientData::getCreateTime, startCreateTime) // .le(StringUtils.isNotBlank(endCreateTime), CrmClientData::getCreateTime, endCreateTime)); // map.put("provinceId", provinceId); // String name = SysRegion.builder().build().selectOne(new QueryWrapper<SysRegion>().lambda() // .eq(SysRegion::getLevel, 1).eq(SysRegion::getKeyId, provinceId).select(SysRegion::getRegionName)) // .getRegionName(); // map.put("provinceName", name); // map.put("num", num); // } // return map; // } /** * 统计图6-籍贯 * * @param orgCode * @param belongGroup * @param createTime * @return */ private List<CrmCartogramDto> getCartogram6(Integer orgCode, Integer belongUser, Integer belongGroup, String startCreateTime, String endCreateTime) { return crmClientDataMapper.crmCartogram(orgCode, belongUser, belongGroup, startCreateTime, endCreateTime); } /** * 导入 * * @param url 上传路径 * @return */ @PostMapping("importClient") @Transactional @ApiOperation(value = "导入客户", httpMethod = "POST", notes = "接口发布说明") public Result<Object> importClient(@CurrentUser UserBean userBean, @RequestParam String url) { Integer empNum = getEmpNum(userBean); Integer orgCode = getOrgCode(userBean); // String filePath = null; // String time = null; // try { // time = DateUtil.format(new Date(), "yyyyMMddHHmmssSSS"); // filePath = FileHelper.downLoadFromUrl(url, time + ".xls", realPath); // } catch (IOException e) { // e.printStackTrace(); // } // 从文件中读取Excel为ExcelReader ExcelReader reader; // 从流中读取Excel为ExcelReader(比如从ClassPath中读取Excel文件) // reader = ExcelUtil.getReader(ResourceUtil.getStream(filePath)); // 从网络流OSS中读取excel资源 reader = getReaderByUrl(url); reader.addHeaderAlias("*客户名称(必填)", "clientName"); reader.addHeaderAlias("*所属分组(必填)", "belongGroupName"); reader.addHeaderAlias("行业", "industryName"); reader.addHeaderAlias("微信", "wechat"); reader.addHeaderAlias("产品", "product"); reader.addHeaderAlias("客户类型", "clientTypeName"); reader.addHeaderAlias("手机号码(客户)", "clientCellphone"); reader.addHeaderAlias("座机号码", "clientTelephone"); reader.addHeaderAlias("官网", "clientUrl"); reader.addHeaderAlias("邮箱", "clientEmail"); reader.addHeaderAlias("地址", "address"); reader.addHeaderAlias("联系人姓名", "linkName"); reader.addHeaderAlias("手机号码", "cellphone"); reader.addHeaderAlias("所属公司", "company"); reader.addHeaderAlias("性别", "gender"); reader.addHeaderAlias("职位", "position"); reader.addHeaderAlias("办公电话", "telephone"); reader.addHeaderAlias("个人邮箱", "email"); reader.addHeaderAlias("个人地址", "linkAddress"); List<CrmClientDataImportVo> list = reader.read(0, 1, CrmClientDataImportVo.class); for (CrmClientDataImportVo crmClientDataImportVo : list) { String clientName = crmClientDataImportVo.getClientName(); // 客户名称(必填) String belongGroupName = crmClientDataImportVo.getBelongGroupName(); // 分组名(必填) String industryName = crmClientDataImportVo.getIndustryName(); // 行业名 String clientTypeName = crmClientDataImportVo.getClientTypeName(); // 客户类型名 String clientCellphone = crmClientDataImportVo.getClientCellphone(); // 客户手机号 String clientTelephone = crmClientDataImportVo.getClientTelephone(); // 客户座机号 String clientUrl = crmClientDataImportVo.getClientUrl(); // 官网 String clientEmail = crmClientDataImportVo.getClientEmail(); // 邮箱 String clientAddress = crmClientDataImportVo.getAddress(); // 地址 String wechat = crmClientDataImportVo.getWechat(); // 微信 String product = crmClientDataImportVo.getProduct(); // 产品 String linkname = crmClientDataImportVo.getLinkName(); // 联系人姓名 String linkcellphone = crmClientDataImportVo.getCellphone(); // 手机号码 String linkcompany = crmClientDataImportVo.getCompany(); // 所属公司 String linkgender = crmClientDataImportVo.getGender(); // 性别 String linkposition = crmClientDataImportVo.getPosition(); // 职位 String linktelephone = crmClientDataImportVo.getTelephone(); // 办公电话 String linkemail = crmClientDataImportVo.getEmail(); // 个人邮箱 String linkaddress = crmClientDataImportVo.getLinkAddress(); // 个人地址 CrmClientData crmClientData = new CrmClientData(); // 业务组 CrmBusinessGroup crmBusinessGroup = CrmBusinessGroup.builder().build() .selectOne(new LambdaQueryWrapper<CrmBusinessGroup>().eq(CrmBusinessGroup::getOrgCode, orgCode) .eq(CrmBusinessGroup::getName, belongGroupName).select(CrmBusinessGroup::getId)); if (crmBusinessGroup == null) return ResultUtil.error("没有匹配的业务组名称"); if (StrUtil.isNotBlank(industryName)) { // 行业字典 IndustryClass industryClass = IndustryClass.builder().build() .selectOne(new LambdaQueryWrapper<IndustryClass>().eq(IndustryClass::getName, industryName) .select(IndustryClass::getId)); if (industryClass == null) return ResultUtil.error("没有匹配的行业名称"); crmClientData.setIndustry(industryClass.getId()); } if (StrUtil.isNotBlank(clientTypeName)) { // 客户类型 ClientTypeClass clientTypeClass = ClientTypeClass.builder().build() .selectOne(new LambdaQueryWrapper<ClientTypeClass>() .eq(ClientTypeClass::getName, clientTypeName).select(ClientTypeClass::getId)); if (clientTypeClass == null) return ResultUtil.error("没有匹配的客户类型名称"); crmClientData.setClientType(clientTypeClass.getId()); } crmClientData.setClientStatus(1); if(!("").equals(linkname) && linkname != null || !("").equals(linkcellphone) && linkcellphone != null) { crmClientData.setContactsNum(1); } crmClientData.setBelongUser(empNum); crmClientData.setBelongUserName(getEmpName(orgCode, empNum)); crmClientData.setClientName(clientName); crmClientData.setBelongGroupName(belongGroupName); crmClientData.setBelongGroup(crmBusinessGroup.getId()); crmClientData.setIndustryName(industryName); crmClientData.setWechat(wechat); crmClientData.setProduct(product); crmClientData.setClientTypeName(clientTypeName); crmClientData.setClientCellphone(clientCellphone); crmClientData.setClientTelephone(clientTelephone); crmClientData.setClientUrl(clientUrl); crmClientData.setClientEmail(clientEmail); crmClientData.setAddress(clientAddress); crmClientData.setOrgCode(orgCode); crmClientData.insert(); Integer cid = crmClientData.getId(); if(!("").equals(linkname) && linkname != null || !("").equals(linkcellphone) && linkcellphone != null) { CrmClientContacts contacts = new CrmClientContacts(); contacts.setName(linkname); contacts.setCellphone(linkcellphone); contacts.setCompany(linkcompany); if (("女").equals(linkgender)) contacts.setGender(0); else if (("男").equals(linkgender)) contacts.setGender(1); else contacts.setGender(null); contacts.setPosition(linkposition); contacts.setTelephone(linktelephone); contacts.setEmail(linkemail); contacts.setAddress(linkaddress); if (!(linkname == null && linkcellphone == null && linkcompany == null && linkgender == null && linkposition == null && linktelephone == null && linkemail == null && linkaddress == null)) { contacts.setCid(cid); contacts.insert(); } } } return ResultUtil.success("导入成功"); } private ExcelReader getReaderByUrl(String url) { InputStream is = null; try { is = new URL(url).openConnection().getInputStream(); } catch (IOException e) { e.printStackTrace(); } return ExcelUtil.getReader(is); } }