package com.goafanti.customer.service.impl; import com.goafanti.admin.bo.AdminListBo; import com.goafanti.common.bo.Error; import com.goafanti.common.bo.Result; import com.goafanti.common.bo.userDaysBo; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.dao.*; import com.goafanti.common.enums.*; import com.goafanti.common.error.BusinessException; import com.goafanti.common.model.*; import com.goafanti.common.utils.*; import com.goafanti.common.utils.excel.NewExcelUtil; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.core.websocket.SystemWebSocketHandler; import com.goafanti.customer.bo.*; import com.goafanti.customer.service.CustomerService; import com.goafanti.order.bo.TOrderNewBo; import com.goafanti.user.bo.OutUserChannel; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; import org.apache.ibatis.builder.BuilderException; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.socket.TextMessage; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Service public class CustomerServiceImpl extends BaseMybatisDao implements CustomerService { @Autowired private UserMapper userMapper; @Autowired private UserIdentityMapper userIdentityMapper; @Autowired private OrganizationIdentityMapper organizationIdentityMapper; @Autowired private OrganizationContactBookMapper organizationContactBookMapper; @Resource(name = "passwordUtil") private PasswordUtil passwordUtil; @Value(value = "${user_remind_days}") private Integer USER_REMIND_DAYS = null; @Value(value = "${user_channel_days}") private Integer USER_CHANNEL_DAYS= null; @Value(value = "${user.receive.max}") private Integer USER_RECEIVE_MAX = null; @Value(value = "${yxzj_max}") private Integer YXZJ_MAX = null; @Value(value = "${yxy_max}") private Integer YXY_MAX = null; @Value(value = "${yxjl_max}") private Integer YXJL_MAX = null; @Resource private UserFollowMapper userFollowMapper; @Resource private UserBusinessMapper userBusinessMapper; @Resource private UserFollowBusinessMapper userFollowBusinessMapper; @Resource private BusinessProjectMapper businessProjectMapper; @Resource private UserLockReleaseMapper userLockReleaseMapper; @Resource private AdminMapper adminMapper; @Resource private OrganizationApplicationInfoMapper organizationApplicationInfoMapper; @Resource private OrganizationAnnualReportMapper organizationAnnualReportMapper; @Resource private OrganizationBusinessScopeMapper organizationBusinessScopeMapper; @Resource private OrganizationSalesTargetMapper organizationSalesTargetMapper; @Resource private UserTransferLogMapper userTransferLogMapper; @Resource private UserChannelMapper userChannelMapper; @Resource private UserNamesMapper userNamesMapper; @Resource private UserMidMapper userMidMapper; @Resource private UserDataLogMapper userDataLogMapper; @Resource private TOrderNewMapper tOrderNewMapper; @Resource private TOrderMidMapper tOrderMidMapper; @Resource private TOrderLogMapper tOrderLogMapper; @Resource private PublicExamineMapper publicExamineMapper; @Resource private PublicReleaseLogMapper publicReleaseLogMapper; @Resource private PublicReleaseMapper publicReleaseMapper; @Autowired private SystemWebSocketHandler systemWebSocketHandler; @Autowired private AdminUserCountMapper adminUserCountMapper; @Autowired private RestrictProjectMapper restProjectMapper; @Autowired private AsyncUtils asyncUtils; @Value(value = "${upload.path}") private String uploadPath = null; @SuppressWarnings("unchecked") @Override public Pagination listPrivatePersonalCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_PERSONAL); cli.setAid(TokenManager.getAdminId()); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectPrivatePersonalCustomerList", "selectPrivatePersonalCustomerCount", params, pageNo, pageSize); List tmpList = (List) list.getList(); setCustomerList(tmpList, 0, null); list.setList(tmpList); return list; } @SuppressWarnings("unchecked") @Override public Pagination listPublicPersonalCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_PERSONAL); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectPublicPersonalCustomerList", "selectPublicPersonalCustomerCount", params, pageNo, pageSize); return list; } @SuppressWarnings("unchecked") @Override public Pagination listAllPersonalCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_PERSONAL); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectPersonalCustomerList", "selectPersonalCustomerCount", params, pageNo, pageSize); return list; } @SuppressWarnings("unchecked") @Override public Pagination listAllManagePersonalCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_PERSONAL); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectManagePersonalCustomerList", "selectManagePersonalCustomerCount", params, pageNo, pageSize); return list; } @SuppressWarnings("unchecked") @Override public Pagination listPrivateOrganizationCustomer(CustomerListIn cli, Integer sort, Integer sortType, Integer power, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setAid(TokenManager.getAdminId()); // cli.setAid("1"); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); Map params = disposeParams(cli); params.put("sort", sort); params.put("sortType", sortType); List alist = new ArrayList<>(); if (power == 0 || TokenManager.hasRole(AFTConstants.SALESMAN)) { params.put("power", 0); } else if (TokenManager.hasRole(AFTConstants.SALESMAN_MANAGER)) { params.put("power", 1); alist = adminMapper.selectBySuperId(cli.getAid()); } else if (TokenManager.hasRole(AFTConstants.SALESMAN_DIRECTOR)) { params.put("power", 2); alist = adminMapper.selectBySuperId(cli.getAid()); List alist2 = new ArrayList<>(); if (!alist.isEmpty()) { for (String string : alist) { alist2.addAll(adminMapper.selectBySuperId(string)); } alist.addAll(alist2); } } else if (TokenManager.hasRole(AFTConstants.CED)) { params.put("power", 3); } params.put("alist", alist); Pagination list = (Pagination) findPage( "selectPrivateOrganizationCustomerList", "selectPrivateOrganizationCustomerCount", params, pageNo, pageSize); List tmpList = (List) list.getList(); if(!tmpList.isEmpty()){ setCustomerList(tmpList, 0, power); list.setList(tmpList); } return list; } @SuppressWarnings("unchecked") @Override public Pagination listPublicOrganizationCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PUBLIC)); Map params = disposeParams(cli); Pagination p = (Pagination) findPage("selectPublicOrganizationCustomerList", "selectPublicOrganizationCustomerCount", params, pageNo, pageSize); return p; } @SuppressWarnings("unchecked") @Override public Pagination listAllOrganizationCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); String name=null; String orgCode=null; if (StringUtils.isContainChinese(cli.getName())){ name= cli.getName(); }else { orgCode= cli.getName(); cli.setName(null); } Map params = disposeParams(cli); if (TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)) { params.put("role", 1); if (name!=null)params.put("name",name); else params.put("orgCode",orgCode); } else { //处理为空报错 params.put("role", 0); if (orgCode!=null) { params.put("orgCode",orgCode); }else { String [] names =pushNames(name); if (names.length>0){ params.put("names", names); }else { return new Pagination<>(); } } } Pagination p = (Pagination) findPage("selectOrganizationCustomerList", "selectOrganizationCustomerCount", params, pageNo, pageSize); List l = (List) p.getList(); for (CustomerListOut c : l) { if (null != c) { if (null != c.getAid()) c.setAdminName(adminMapper.selectNameByid(c.getAid())); if (null != c.getShareType() && c.getShareType().equals("1")) c.setAdminName("暂无"); if (null != c.getMid()) c.setInformationMaintainer(adminMapper.selectNameByid(c.getMid())); } } return p; } private String[] pushNames(String name) { if (name==null)name=""; String newstr1=name.replaceAll(" ",","); //先把所有空格替换成 逗号。 String newstr2=newstr1.replaceAll("\t",","); //再把所有的制表符替换成逗号。 String newstr3=newstr2.replaceAll(",+", ","); //把所有重复的逗号合并成一个逗号。 String[] strings=newstr3.split(","); //按逗号分解该字符串。 return strings; } @Override public Pagination listAllManageOrganizationCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); cli.setAid(TokenManager.getAdminId()); Map params = disposeParams(cli); @SuppressWarnings("unchecked") Pagination list = (Pagination) findPage( "selectManageOrganizationCustomerList", "selectManageOrganizationCustomerCount", params, pageNo, pageSize); return list; } private Map disposeParams(CustomerListIn cli) { Map params = new HashMap(); if (StringUtils.isNotBlank(cli.getType())) params.put("type", Integer.parseInt(cli.getType())); if (StringUtils.isNotBlank(cli.getName())) params.put("name", cli.getName()); if (StringUtils.isNotBlank(cli.getProvince())) params.put("province", Integer.parseInt(cli.getProvince())); if (StringUtils.isNotBlank(cli.getCity())) params.put("city", Integer.parseInt(cli.getCity())); if (StringUtils.isNotBlank(cli.getArea())) params.put("area", Integer.parseInt(cli.getArea())); if (StringUtils.isNotBlank(cli.getStartDate())) params.put("startDate", cli.getStartDate()); if (StringUtils.isNotBlank(cli.getEndDate())) params.put("endDate", cli.getEndDate()+" 23:59:59"); if (StringUtils.isNotBlank(cli.getIndustry())) params.put("industry", Integer.parseInt(cli.getIndustry())); if (StringUtils.isNotBlank(cli.getAid())) params.put("aid", cli.getAid()); if (StringUtils.isNotBlank(cli.getDepartmentId())) params.put("departmentId", cli.getDepartmentId()); if (StringUtils.isNotBlank(cli.getStatus())) params.put("status", Integer.parseInt(cli.getStatus())); if (StringUtils.isNotBlank(cli.getSocietyTag())) params.put("societyTag", cli.getSocietyTag()); if (StringUtils.isNotBlank(cli.getFollow())) params.put("follow", cli.getFollow()); if (null != cli.getDataGrade()) params.put("dataGrade", cli.getDataGrade()); if (null != cli.getLevel()) params.put("level", cli.getLevel()); if (null != cli.getSort()) params.put("sort", cli.getSort()); if (null != cli.getChannel()) params.put("channel", cli.getChannel()); if (null != cli.getBusinessScope()) params.put("businessScope", cli.getBusinessScope()); return params; } @Override public List findCustomerByName(String name) { return userMapper.findCustomerByName(name); } @Override public int judgeCustomerByName(String name) { return userMapper.judgeCustomerByName(name); } @Override @Transactional public int addCustomer(InputAddCustomer in) throws BusinessException { User user = new User(); Date now = new Date(); String aid=TokenManager.getAdminId(); String uid = UUID.randomUUID().toString(); String identifyId = UUID.randomUUID().toString(); user.setId(uid); user.setSource(1);// 客户来源为录入 user.setIdentifyName(in.getName()); user.setNickname(in.getName()); user.setUsername(in.getName()); user.setStatus(AFTConstants.USER_STATUS_NORMAL); user.setShareType(in.getShareType()); user.setAid(TokenManager.getAdminId()); // user.setAid("1"); user.setType(in.getType()); user.setLvl(UserLevel.CERTIFIED.getCode()); user.setSocietyTag(in.getSocietyTag()); user.setCreateTime(now); user.setTransferTime(now); user.setUpdateTime(now); user.setSignBills(0); user.setNewChannel(0); if(StringUtils.isNotBlank(in.getIntroduction()))user.setIntroduction(in.getIntroduction()); user.setMobile(in.getContactMobile()); user.setPassword(AFTConstants.INITIALPASSWORD); user.setInformationMaintainer(TokenManager.getAdminId()); double f = 0; user.setIntegrity(f); // user.setInformationMaintainer("1"); if(in.getNewChannel()!=null)user.setNewChannel(in.getNewChannel()); user.setChannel(0); passwordUtil.encryptPassword(user); String aname = adminMapper.selectByPrimaryKey(TokenManager.getAdminId()).getName(); if (Objects.equals(in.getType(), UserType.PERSONAL.getCode())) { if (!userMapper.checkUser("", "", in.getContactMobile(), in.getType(), null, null).isEmpty()) throw new BusinessException(new Error(ErrorConstants.CUSTOMER_ALREADY_EXIST, in.getName(), "")); UserIdentity ui = new UserIdentity(); ui.setId(identifyId); ui.setUid(uid); ui.setContacts(in.getContacts()); ui.setContactMobile(in.getContactMobile()); ui.setUsername(in.getName()); ui.setProvince(in.getProvince()); ui.setCity(in.getCity()); ui.setArea(in.getArea()); ui.setExpert(AFTConstants.NO); ui.setCelebrity(AFTConstants.NO); ui.setInternational(AFTConstants.NO); ui.setAuditStatus(IdentityProcess.SUCCESS.getCode());// 认证个人 userIdentityMapper.insert(ui); } else if (Objects.equals(in.getType(), UserType.ORGANIZATION.getCode())) { checkUserName(in); UserMid um=new UserMid(); um.setAid(user.getAid()); um.setUid(uid); um.setChannelType(in.getChannelType()); userMidMapper.insertSelective(um); // 创建企业认证信息 OrganizationIdentity oi = new OrganizationIdentity(); oi.setUnitName(in.getName()); oi.setId(identifyId); oi.setUid(uid); oi.setOrgCode(in.getOrgCode()); oi.setContacts(in.getContacts()); oi.setContactMobile(in.getContactMobile()); oi.setContactsPosition(in.getPosition()); oi.setLocationProvince(in.getProvince()); oi.setLocationCity(in.getCity()); oi.setLocationArea(in.getArea()); oi.setHighTechZone(AFTConstants.NO); oi.setInternational(AFTConstants.NO); oi.setListed(AFTConstants.NO); oi.setAuditStatus(IdentityProcess.SUCCESS.getCode()); // 实名企业 oi.setBusinessScope(in.getBusinessScope()); if(in.getBusinessScope()!=null){ updateBusinessScope(uid,in.getBusinessScope(),null,now); } oi.setIntendedProject(in.getIntendedProject()); // oi.setIndustry(in.getIndustry()); organizationIdentityMapper.insert(oi); } userMapper.insertSelective(user); UserNames un=new UserNames(); un.setUid(uid); un.setAid(aid); un.setName(user.getNickname()); userNamesMapper.insertSelective(un); // 新增企业联系人 OrganizationContactBook cob = new OrganizationContactBook(); cob.setAid(TokenManager.getAdminId()); cob.setAname(aname); cob.setId(UUID.randomUUID().toString()); cob.setPosition(in.getPosition()); cob.setUid(uid); cob.setName(in.getContacts()); cob.setMobile(in.getContactMobile()); cob.setMajor(AFTConstants.YES); organizationContactBookMapper.insert(cob); // 新增锁定数据 boolean isUs = false; if (uid.contains(",")) { isUs = true; } List uList = new ArrayList<>(); if (isUs) { uList = Arrays.asList(uid.split(",")); } addUserLock(uid, TokenManager.getAdminId(), now, uList); addUserTransferLog(uid, TokenManager.getAdminId(), null,0, null, now, uList); updateAdminUserCount(user.getAid(),user.getTransferTime()); return 1; } /** * * @param aid 管理员编号 * @param transferTime 客户转换时间 */ @Override public void updateAdminUserCount(String aid ,Date transferTime) { String startTime=DateUtils.formatDate(transferTime,AFTConstants.YYYYMMDD); String endTime=startTime+" 23:59:59"; AdminUserCount adminUserCount=getAdminUserCount(aid,startTime); if (adminUserCount==null){ AdminUserCount selectAUC=userMapper.selectByaidAndDate(aid,startTime,endTime); if(selectAUC!=null) adminUserCountMapper.insertSelective(selectAUC); }else { AdminUserCount selectAUC=userMapper.selectByaidAndDate(aid,startTime,endTime); AdminUserCount newAUC=new AdminUserCount(); newAUC.setId(adminUserCount.getId()); if (selectAUC==null){ newAUC.setPrivateCount(0); newAUC.setChannelCount(0); newAUC.setSignCount(0); }else { if (selectAUC.getPrivateCount()==null)selectAUC.setPrivateCount(0); if (selectAUC.getChannelCount()==null)selectAUC.setChannelCount(0); if (selectAUC.getSignCount()==null)selectAUC.setSignCount(0); newAUC.setPrivateCount(selectAUC.getPrivateCount()); newAUC.setChannelCount(selectAUC.getChannelCount()); newAUC.setSignCount(selectAUC.getSignCount()); } adminUserCountMapper.updateByPrimaryKeySelective(newAUC); } } @Override public void updateAdminUserCountByAid(String aid) { List list = userMapper.selectListByaidAndDate(aid); for (AdminUserCount e : list) { String startTime=DateUtils.formatDate(e.getDateTime(),AFTConstants.YYYYMMDD); AdminUserCount selectAUC = getAdminUserCount(aid, startTime); if (selectAUC==null){ adminUserCountMapper.insertSelective(e); }else { AdminUserCount newAUC=new AdminUserCount(); newAUC.setId(selectAUC.getId()); if (e.getPrivateCount()==null)selectAUC.setPrivateCount(0); if (e.getChannelCount()==null)selectAUC.setChannelCount(0); if (e.getSignCount()==null)selectAUC.setSignCount(0); newAUC.setPrivateCount(e.getPrivateCount()); newAUC.setChannelCount(e.getChannelCount()); newAUC.setSignCount(e.getSignCount()); adminUserCountMapper.updateByPrimaryKeySelective(newAUC); } } } /** * 用于处理异常多产生数据,删除多余数据修改原本数据 * @param aid * @param startTime * @return */ @Override public AdminUserCount getAdminUserCount(String aid, String startTime) { List selectList = adminUserCountMapper.selectByaidAndDate(aid, startTime); AdminUserCount selectAUC=null; if(!selectList.isEmpty())selectAUC=selectList.get(0); if (selectList.size()>1){ for (int i=1;i l = organizationApplicationInfoMapper.selectByUid(bo.getUid()); if (l.size() > 0) { oa = l.get(0); oa.setPojectApplicationUrl(bo.getPojectApplicationUrl()); organizationApplicationInfoMapper.updateByPrimaryKey(oa); } else { oa.setId(UUID.randomUUID().toString()); oa.setCreateTime(date); oa.setUid(bo.getUid()); oa.setPojectApplicationUrl(bo.getPojectApplicationUrl()); organizationApplicationInfoMapper.insert(oa); } } } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } if (bo.getBusinessScope() != null) { OrganizationIdentity use=organizationIdentityMapper.selectByPrimaryKey(bo.getId()); if (!bo.getBusinessScope().equals(use.getBusinessScope())){ updateBusinessScope(bo.getUid(),bo.getBusinessScope() ,use.getBusinessScope(), date); } } organizationSalesTargetMapper.deleteByUid(bo.getUid()); if (bo.getSalesTarget() != null) { if (bo.getSalesTarget().contains(",")) { String[] ss = bo.getSalesTarget().split(","); List list = new ArrayList<>(); for (int i = 0; i < ss.length; i++) { String string = ss[i]; OrganizationSalesTarget obs = new OrganizationSalesTarget(); obs.setUid(bo.getUid()); obs.setKeyword(string); list.add(obs); } organizationSalesTargetMapper.insertBatch(list); } else { OrganizationSalesTarget obs = new OrganizationSalesTarget(); obs.setUid(bo.getUid()); obs.setKeyword(bo.getSalesTarget()); organizationSalesTargetMapper.insertSelective(obs); } } organizationIdentityMapper.updateByPrimaryKeySelective(oi); userMapper.updateByPrimaryKeySelective(user); return 1; } /** * * @param uid * @param businnessScope * @param useBusinnessScope * @param date */ private void updateBusinessScope( String uid, String businnessScope,String useBusinnessScope, Date date) { if(date==null)date=new Date(); organizationBusinessScopeMapper.deleteByUid(uid); if (businnessScope.contains(",")) { String[] ss = businnessScope.split(","); List list = new ArrayList<>(); for (int i = 0; i < ss.length; i++) { String string = ss[i]; OrganizationBusinessScope obs = new OrganizationBusinessScope(); obs.setUid(uid); obs.setKeyword(string); list.add(obs); } organizationBusinessScopeMapper.insertBatch(list); } else { OrganizationBusinessScope obs = new OrganizationBusinessScope(); obs.setUid(uid); obs.setKeyword(businnessScope); organizationBusinessScopeMapper.insertSelective(obs); } UserMid um=new UserMid(); um.setDateUpdateTime(date); um.setUid(uid); String aid=TokenManager.getAdminId(); um.setUpdateAid(aid); Admin a=adminMapper.selectByPrimaryKey(aid); um.setUpdateName(a.getName()); int i=userMidMapper.updateByUid(um); if (i==0) { um.setAid(aid); userMidMapper.insertSelective(um); } StringBuffer str=new StringBuffer(a.getName()).append("修改了主营产品"); if (useBusinnessScope==null){useBusinnessScope="无";} str.append("[").append(useBusinnessScope).append("=> ").append(businnessScope).append("]"); userDataLogMapper.insertSelective(new UserDataLog(uid,str.toString())); } public Double countIntegrity(CustomerOrganizationDetailBo bo) { // 完整资料总数 int max = 10; int number = 0; if (null != bo.getIndustry()) number += 1; if (bo.getLocationProvince() != null) number += 1; if (StringUtils.isNotBlank(bo.getBusinessScope())) number += 1; if (bo.getRegisteredCapital() != null) number += 1; if (StringUtils.isNotBlank(bo.getCooperationSituation())) number += 1; if (StringUtils.isNotBlank(bo.getQualification())) number += 1; if (organizationAnnualReportMapper.selectOrgAnnualCount(bo.getUid()) > 0) number += 1; if (organizationAnnualReportMapper.selectOrgYearProjectCount(bo.getUid()) > 0) number += 1; if (StringUtils.isNotBlank(bo.getCoreTechnology())) number += 1; if (bo.getCreditRating() != null) number += 1; Double d = (double) number / max; return d; } @Override public int updatePersonalCustomer(CustomerPersonalDetailBo bo) { UserIdentity ui = new UserIdentity(); User user = new User(); try { try { PropertyUtils.copyProperties(ui, bo); } catch (NoSuchMethodException e) { e.printStackTrace(); } user.setId(bo.getUid()); user.setSocietyTag(bo.getSocietyTag()); user.setHeadPortraitUrl(bo.getHeadPortraitUrl()); user.setIntroduction(bo.getIntroduction()); user.setUpdateTime(new Date()); if (null == bo.getExpertAudit() && bo.getExpert() == 1) ui.setExpertAudit(2); } catch (InvocationTargetException | IllegalAccessException e) { e.printStackTrace(); } userIdentityMapper.updateByPrimaryKeySelective(ui); userMapper.updateByPrimaryKeySelective(user); return 1; } @SuppressWarnings("unchecked") @Override public Pagination listFollowHistory(Integer pageNo, Integer pageSize, String uid, String businessProjectId, Integer type) { Map params = new HashMap(); if (StringUtils.isNotBlank(uid)) params.put("uid", uid); if (StringUtils.isNotBlank(businessProjectId)) params.put("businessProjectId", businessProjectId); Pagination page = (Pagination) findPage("selectFollowHistoryList", "selectFollowHistoryCount", params, pageNo, pageSize); List list = (List) page.getList(); for (FollowListBo bo : list) { if (bo.getAid().equals(TokenManager.getAdminId())) { bo.setReadOnly(AFTConstants.NO); } else { bo.setContactMobile("***"); bo.setContacts("***"); bo.setReadOnly(AFTConstants.YES); } } page.setList(list); return page; } /** * 推动指导已读 * * @param uid */ @Override public int pushGuidance(String uid) { User u = userMapper.findUserAccountDetail(uid); if (u != null && u.getGuidance() != 0) { return userMapper.pushUserGuidance(uid, 2); } return 0; } @Override public User findUserAccountDetail(String uid) { return userMapper.findUserAccountDetail(uid); } @Override public int updateUserAccount(User user) { return userMapper.updateByPrimaryKeySelective(user); } @Override public List findCustomerContacts(String uid) { List list = userMapper.findCustomerContacts(uid, null); for (OrganizationContactBook ob : list) { if (!ob.getAid().equals(TokenManager.getAdminId())){ ob.setName("***"); ob.setMobile("***"); } } return list; } @Transactional @Override public int addFollow(FollowBusinessBo fbb,String ufid,Integer mainStatus,Integer type) throws BusinessException { // 更新跟进记录表 Date followTime=DateUtils.StringToDate(fbb.getFollowTime(),AFTConstants.YYYYMMDDHHMMSS); UserFollow userFollow = new UserFollow(); String followId = ufid==null?UUID.randomUUID().toString():ufid; userFollow.setId(followId); String aid=TokenManager.getAdminId(); userFollow.setAid(aid); AdminListBo a=adminMapper.getDeptNameByAid(aid); userFollow.setFollowName(a.getName()); userFollow.setFollowDep(a.getDepartmentName()); userFollow.setContactType(Integer.parseInt(fbb.getContactType())); userFollow.setEffective(DeleteStatus.UNDELETE.getCode()); userFollow.setCreateTime(followTime); userFollow.setOcbId(fbb.getOcbId()); userFollow.setResult(fbb.getResult()); userFollow.setUid(fbb.getUid()); int followCount = userBusinessMapper.selectFollowCountByUAid(fbb.getUid(), null) + 1; userFollow.setFollowCount(followCount); userFollow.setType(0); //处理中间表 UserMid um =new UserMid(); um.setUid(userFollow.getUid()); //检查客户,修改小程序打卡,如果负责人和跟进人是同一个,则刷新最后跟进时间 User user = userMapper.selectByPrimaryKey(fbb.getUid()); if (aid.equals(user.getAid())){ um.setLastFollowTime(userFollow.getCreateTime()); } um.setFollowNumber(followCount); um.setFollowExplain(userFollow.getResult()); um.setFollowDep(userFollow.getFollowDep()); um.setLastFollowType(userFollow.getContactType()); um.setFollowAname(a.getName()); userMidMapper.updateByUid(um); if (type==0){ addUserFllow( fbb, ufid, mainStatus,followTime,followId); }else if (type==1){ addRestrictProject(fbb, ufid, mainStatus,followTime,followId); } userFollowMapper.insert(userFollow); return 1; } private void addRestrictProject(FollowBusinessBo fbb, String ufid, Integer mainStatus, Date followTime, String followId) { List businessLockedList = null; String businessName = ""; String ufbId = ""; UserBusiness userBusiness = null; UserFollowBusiness userFollowBusiness = null; for (BusinessListBo ub : fbb.getUserBusinessList()) { userBusiness = new UserBusiness(); userFollowBusiness = new UserFollowBusiness(); ufbId = UUID.randomUUID().toString(); businessName = businessProjectMapper.selectByPrimaryKey(ub.getBusinessProjectId()).getBname(); UserBusiness us = userBusinessMapper.selectByPrimaryKey(ub.getBusinessId()); if (StringUtils.isNotBlank(ub.getBusinessId())) { // 更新业务表 userBusiness.setId(ub.getBusinessId()); if (us.getFollowSituation() == 5) {// 如果已签合同,则不允许变更 if (ub.getCustomerStatus() != us.getCustomerStatus() && ub.getFollowSituation() != 5) { throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, "")); } } userBusiness.setBusinessProjectId(ub.getBusinessProjectId()); userBusiness.setCustomerStatus(ub.getCustomerStatus()); userBusiness.setFollowSituation(ub.getFollowSituation()); userBusiness.setRemarks(ub.getRemarks()); userBusiness.setUid(fbb.getUid()); userBusiness.setUpdateTime(followTime); userBusiness.setAid(TokenManager.getAdminId()); userBusinessMapper.updateByPrimaryKeySelective(userBusiness); // 更新业务中间表 addUserFollowBusiness(userFollowBusiness, ub.getBusinessProjectId(), ub, ufbId, followId); } else { if (userBusinessMapper.judgeBusiness(fbb.getUid(), ub.getBusinessProjectId(), "") > 0) { throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_EXIST, businessName, "")); } String ubId = UUID.randomUUID().toString(); // 更新业务表 userBusiness.setId(ubId); userBusiness.setBusinessProjectId(ub.getBusinessProjectId()); userBusiness.setCreateTime(followTime); userBusiness.setUpdateTime(followTime); userBusiness.setCustomerStatus(ub.getCustomerStatus()); userBusiness.setFollowSituation(ub.getFollowSituation()); userBusiness.setUid(fbb.getUid()); userBusiness.setAid(TokenManager.getAdminId()); userBusiness.setRemarks(ub.getRemarks()); userBusinessMapper.insert(userBusiness); // 更新业务中间表 addUserFollowBusiness(userFollowBusiness, ubId, ub, ufbId, followId); } restProjectMapper.updateRefreshLockTime(fbb.getUid(),ub.getBusinessProjectId(),TokenManager.getAdminId()); } } private void addUserFllow(FollowBusinessBo fbb,String ufid,Integer mainStatus,Date followTime,String followId) { boolean isUserOwner = false; // 检查客户锁定情况 if (fbb.getUserBusinessList()!=null&& !fbb.getUserBusinessList().isEmpty()) { List userLockedList = userMapper.selectLockedProject(fbb.getUid(), TokenManager.getAdminId(), null, 0, UserLockReleaseStatus.LOCKED.getCode()); if (!userLockedList.isEmpty()) { isUserOwner = true; } boolean isBusinessOwner = false; List businessLockedList = null; String businessName = ""; String ufbId = ""; UserBusiness userBusiness = null; UserFollowBusiness userFollowBusiness = null; for (BusinessListBo ub : fbb.getUserBusinessList()) { userBusiness = new UserBusiness(); userFollowBusiness = new UserFollowBusiness(); ufbId = UUID.randomUUID().toString(); businessName = businessProjectMapper.selectByPrimaryKey(ub.getBusinessProjectId()).getBname(); UserBusiness us = userBusinessMapper.selectByPrimaryKey(ub.getBusinessId()); if (StringUtils.isNotBlank(ub.getBusinessId())) { // 更新业务表 userBusiness.setId(ub.getBusinessId()); if (us.getFollowSituation() == 5) {// 如果已签合同,则不允许变更 if (ub.getCustomerStatus() != us.getCustomerStatus() && ub.getFollowSituation() != 5) { throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, "")); } } // 检查业务锁定情况 businessLockedList = userMapper.selectLockedProject(fbb.getUid(), null, ub.getBusinessProjectId(), 1, UserLockReleaseStatus.LOCKED.getCode()); if (businessLockedList.size() > 0) { for (LockingReleaseBo bo : businessLockedList) { if (!bo.getAid().equals(TokenManager.getAdminId())) isBusinessOwner = true; } if (isBusinessOwner) throw new BusinessException( new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, businessName, "")); } else { if (!isUserOwner) throw new BusinessException( new Error(ErrorConstants.CUSTOMER_ALREADY_LOCKED, businessName, "")); } // if (us.getFollowSituation()!=5&&ub.getFollowSituation()==5) {//如果改成已签合同,则锁定业务 // if (StringUtils.isNotBlank(fbb.getUid())) ub.setUid(fbb.getUid()); // lockProject(ub);//锁定客户业务 // x=1; // } userBusiness.setBusinessProjectId(ub.getBusinessProjectId()); userBusiness.setCustomerStatus(ub.getCustomerStatus()); userBusiness.setFollowSituation(ub.getFollowSituation()); userBusiness.setRemarks(ub.getRemarks()); userBusiness.setUid(fbb.getUid()); userBusiness.setUpdateTime(followTime); userBusiness.setAid(TokenManager.getAdminId()); userBusinessMapper.updateByPrimaryKeySelective(userBusiness); // 更新业务中间表 addUserFollowBusiness(userFollowBusiness, ub.getBusinessProjectId(), ub, ufbId, followId); } else { // 检查业务锁定情况 businessLockedList = userMapper.selectLockedProject(fbb.getUid(), null, ub.getBusinessProjectId(), 1, UserLockReleaseStatus.LOCKED.getCode()); if (!businessLockedList.isEmpty()) { for (LockingReleaseBo bo : businessLockedList) { if (bo.getAid().equals(TokenManager.getAdminId())) isBusinessOwner = true; } if (!isBusinessOwner) throw new BusinessException( new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, businessName, "")); } else { if (!isUserOwner) throw new BusinessException( new Error(ErrorConstants.CUSTOMER_ALREADY_LOCKED, businessName, "")); } if (userBusinessMapper.judgeBusiness(fbb.getUid(), ub.getBusinessProjectId(), "") > 0) { throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_EXIST, businessName, "")); } // if (ub.getFollowSituation()==5) {//如果改成已签合同,则锁定业务 // if (StringUtils.isNotBlank(fbb.getUid())) ub.setUid(fbb.getUid()); // lockProject(ub);//锁定客户业务 // x=1; // } String ubId = UUID.randomUUID().toString(); // 更新业务表 userBusiness.setId(ubId); userBusiness.setBusinessProjectId(ub.getBusinessProjectId()); userBusiness.setCreateTime(followTime); userBusiness.setUpdateTime(followTime); userBusiness.setCustomerStatus(ub.getCustomerStatus()); userBusiness.setFollowSituation(ub.getFollowSituation()); userBusiness.setUid(fbb.getUid()); userBusiness.setAid(TokenManager.getAdminId()); userBusiness.setRemarks(ub.getRemarks()); userBusinessMapper.insert(userBusiness); // 更新业务中间表 addUserFollowBusiness(userFollowBusiness, ubId, ub, ufbId, followId); } } } if (mainStatus==1){ followProject(fbb.getUid()); } updateADminUserCountFollow(TokenManager.getAdminId(),followTime); } private void addUserFollowBusiness(UserFollowBusiness userFollowBusiness, String ub, BusinessListBo ub1, String ufbId, String followId) { userFollowBusiness.setBusinessId(ub); userFollowBusiness.setCustomerStatus(ub1.getCustomerStatus()); userFollowBusiness.setFollowSituation(ub1.getFollowSituation()); userFollowBusiness.setId(ufbId); userFollowBusiness.setFollowId(followId); userFollowBusiness.setRemarks(ub1.getRemarks()); userFollowBusiness.setBusinessProjectId(ub1.getBusinessProjectId()); userFollowBusinessMapper.insert(userFollowBusiness); } private void updateADminUserCountFollow(String aid, Date transferTime) { { String startTime= DateUtils.formatDate(transferTime,AFTConstants.YYYYMMDD); String endTime=startTime+" 23:59:59"; AdminUserCount adminUserCount = getAdminUserCount(aid,startTime); int count = userFollowMapper.selectByaidAndDate(aid, startTime, endTime); if (adminUserCount==null){ AdminUserCount selectAUC=userMapper.selectByaidAndDate(aid,startTime,endTime); if (selectAUC==null)selectAUC=new AdminUserCount(); selectAUC.setFollowCount(count); selectAUC.setAid(aid); selectAUC.setDateTime(transferTime); adminUserCountMapper.insertSelective(selectAUC); }else { AdminUserCount selectAUC=userMapper.selectByaidAndDate(aid,startTime,endTime); AdminUserCount newAUC=new AdminUserCount(); newAUC.setId(adminUserCount.getId()); newAUC.setFollowCount(count); if (selectAUC==null){ newAUC.setPrivateCount(0); newAUC.setChannelCount(0); newAUC.setSignCount(0); }else { if (selectAUC.getPrivateCount()==null)selectAUC.setPrivateCount(0); if (selectAUC.getChannelCount()==null)selectAUC.setChannelCount(0); if (selectAUC.getSignCount()==null)selectAUC.setSignCount(0); newAUC.setPrivateCount(selectAUC.getPrivateCount()); newAUC.setChannelCount(selectAUC.getChannelCount()); newAUC.setSignCount(selectAUC.getSignCount()); } adminUserCountMapper.updateByPrimaryKeySelective(newAUC); } } } /** * 跟进更新用户中间表 * */ private void followProject(String uid) { Date date = new Date(); String aid = TokenManager.getAdminId(); UserMid um=new UserMid(); um.setUid(uid); um.setAid(aid); um.setLastFollowTime(date); int x=userMidMapper.updateByUid(um); if (x==0){ userMidMapper.insertSelective(um); } } @SuppressWarnings("unused") private void releaseProject(List businessLockedList) { if (businessLockedList != null && businessLockedList.size() > 0) { UserLockRelease ulr = null; for (LockingReleaseBo bo : businessLockedList) { ulr = new UserLockRelease(); ulr.setId(bo.getId()); ulr.setStatus(UserLockReleaseStatus.RELEASE.getCode()); userLockReleaseMapper.updateByPrimaryKeySelective(ulr); } } } @Override public FollowBusinessBo findFollowById(String followId) { return userMapper.findFollowById(followId); } @Override public List findBusinessByFollowId(String followId) { return userMapper.findBusinessByFollowId(followId); } @Override @Transactional public int updateFollow(FollowBusinessBo fbb) throws BusinessException { UserFollow userFollow = new UserFollow(); SimpleDateFormat format = new SimpleDateFormat(AFTConstants.YYYYMMDDHHMMSS); userFollow.setId(fbb.getFollowId()); if (StringUtils.isNotBlank(fbb.getOcbId())) userFollow.setOcbId(fbb.getOcbId()); userFollow.setResult(fbb.getResult()); userFollow.setContactType(Integer.parseInt(fbb.getContactType())); userFollowMapper.updateByPrimaryKeySelective(userFollow); // 修改拜访记录表 if (fbb.getUserBusinessList().size() > 0) { // 检查客户锁定情况 boolean isUserOwner = false; List userLockedList = userMapper.selectLockedProject(fbb.getUid(), TokenManager.getAdminId(), null, 0, UserLockReleaseStatus.LOCKED.getCode()); if (userLockedList.size() > 0) { isUserOwner = true; } boolean isBusinessOwner = false; List businessLockedList = null; String businessName = ""; UserFollowBusiness userFollowBusiness = null; for (BusinessListBo ub : fbb.getUserBusinessList()) { userFollowBusiness = new UserFollowBusiness(); businessName = businessProjectMapper.selectByPrimaryKey(ub.getBusinessProjectId()).getBname(); if (StringUtils.isNotBlank(ub.getUfbId())) { userFollowBusiness.setId(ub.getUfbId()); userFollowBusiness.setFollowSituation(ub.getFollowSituation()); userFollowBusiness.setCustomerStatus(ub.getCustomerStatus()); userFollowBusiness.setRemarks(ub.getRemarks()); userFollowBusinessMapper.updateByPrimaryKeySelective(userFollowBusiness); // 修改拜访记录中间表 } else { // 检查业务锁定情况 businessLockedList = userMapper.selectLockedProject(fbb.getUid(), null, ub.getBusinessProjectId(), 1, UserLockReleaseStatus.LOCKED.getCode()); if (businessLockedList.size() > 0) { for (LockingReleaseBo bo : businessLockedList) { if (bo.getAid().equals(TokenManager.getAdminId())) isBusinessOwner = true; } if (!isBusinessOwner) throw new BusinessException( new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, businessName, "")); } else { if (!isUserOwner) throw new BusinessException( new Error(ErrorConstants.CUSTOMER_ALREADY_LOCKED, businessName, "")); } if (userBusinessMapper.judgeBusiness(fbb.getUid(), ub.getBusinessProjectId(), "") > 0) { throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_EXIST, businessName, "")); } String ubId = UUID.randomUUID().toString(); UserBusiness userBusiness = new UserBusiness(); // 更新业务表 userBusiness.setId(ubId); userBusiness.setBusinessProjectId(ub.getBusinessProjectId()); try { userBusiness.setCreateTime(format.parse(fbb.getFollowTime())); userBusiness.setUpdateTime(format.parse(fbb.getFollowTime())); } catch (ParseException e) { e.printStackTrace(); } userBusiness.setCustomerStatus(ub.getCustomerStatus()); userBusiness.setFollowSituation(ub.getFollowSituation()); userBusiness.setUid(fbb.getUid()); userBusiness.setAid(TokenManager.getAdminId()); userBusinessMapper.insert(userBusiness); // 更新业务中间表 String ufbId = UUID.randomUUID().toString(); userFollowBusiness.setId(ufbId); userFollowBusiness.setFollowId(fbb.getFollowId()); userFollowBusiness.setBusinessId(ubId); userFollowBusiness.setCustomerStatus(ub.getCustomerStatus()); userFollowBusiness.setFollowSituation(ub.getFollowSituation()); userFollowBusiness.setRemarks(ub.getRemarks()); userFollowBusiness.setBusinessProjectId(ub.getBusinessProjectId()); userFollowBusinessMapper.insert(userFollowBusiness); } } } return 1; } @Override public Set findAllContacts(String uid) { Set result = new HashSet(); result.addAll(userMapper.findAllContacts(uid)); return result; } @Override public int updateCustomerContacts(List ocbList, String uid) { if (ocbList.size() > 0) { OrganizationContactBook ocb = null; for (OrganizationContactBook item : ocbList) { if (item != null && item.getMajor() != null && item.getMajor() == 1) { // 改变用户原本的联系人 OrganizationIdentity oi = new OrganizationIdentity(); oi.setContacts(item.getName()); oi.setContactMobile(item.getMobile()); oi.setUid(uid); organizationIdentityMapper.updateServiceByUid(oi); } ocb = new OrganizationContactBook(); try { BeanUtils.copyProperties(ocb, item); if (StringUtils.isBlank(ocb.getId())) { ocb.setId(UUID.randomUUID().toString()); ocb.setUid(uid); ocb.setAid(TokenManager.getAdminId()); Admin ad = adminMapper.selectByPrimaryKey(TokenManager.getAdminId()); ocb.setAname(ad.getName()); organizationContactBookMapper.insert(ocb); } else { organizationContactBookMapper.updateByPrimaryKeySelective(ocb); } } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } } return 1; } @Override public int deleteFollow(String followId) { UserFollow uf = new UserFollow(); List list = userMapper.findBusinessByFollowId(followId); for (BusinessListBo b : list) { if (b.getFollowSituation() == 5) throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, "")); ; } uf.setId(followId); uf.setEffective(DeleteStatus.DELETED.getCode()); return userFollowMapper.updateByPrimaryKeySelective(uf); } @Override public void checkCustomer(Set boSet, Set existRows, Set filterRows) { List list = null; CustomerExcelBo[] bos = boSet.toArray(new CustomerExcelBo[] {}); for (int i = 0; i < bos.length; i++) { CustomerExcelBo bo = bos[i]; CustomerExcelBo ceb = null; for (int j = 0; j < i; j++) { ceb = bos[j]; if (bo.getCustomerType().equals(AFTConstants.USER_TYPE_PERSONAL)) { // 个人 if (ceb.getMobile().equals(bo.getMobile()) && ceb.getCustomerType().equals(bo.getCustomerType())) { bo.setUid(ceb.getUid()); bo.setNewData(false); filterRows.add(bo.getRowNumber()); break; } } else if (bo.getCustomerType().equals(AFTConstants.USER_TYPE_ORGANIZATION)) { // 单位 if (ceb.getIdentifyName().equals(bo.getIdentifyName()) && ceb.getCustomerType().equals(bo.getCustomerType())) { bo.setUid(ceb.getUid()); bo.setNewData(false); filterRows.add(bo.getRowNumber()); break; } } } if (StringUtils.isBlank(bo.getUid())) { // 是否已经存在 if (bo.getCustomerType().equals(AFTConstants.USER_TYPE_PERSONAL)) { list = userMapper.checkUser("", "", bo.getMobile(), Integer.parseInt(bo.getCustomerType()), null, null); } else if (bo.getCustomerType().equals(AFTConstants.USER_TYPE_ORGANIZATION)) { list = userMapper.checkUser("", bo.getIdentifyName(), "", Integer.parseInt(bo.getCustomerType()), null, null); } if (list.size() > 0) { bo.setUid(list.get(0).getId()); bo.setNewData(false); List businessLockedList = userMapper.selectLockedProject(bo.getUid(), null, bo.getBusinessProjectId(), 1, UserLockReleaseStatus.LOCKED.getCode()); if (businessLockedList.size() > 0) { existRows.add(bo.getRowNumber()); } } else { bo.setUid(UUID.randomUUID().toString()); bo.setNewData(true); } } else { List businessLockedList = userMapper.selectLockedProject(bo.getUid(), null, bo.getBusinessProjectId(), 1, UserLockReleaseStatus.LOCKED.getCode()); if (businessLockedList.size() > 0) { existRows.add(bo.getRowNumber()); } } } } @Override @Transactional public int saveUploadData(Set boSet) { Date now = new Date(); String uid = ""; for (CustomerExcelBo bo : boSet) { uid = bo.getUid(); if (bo.isNewData()) { // 新建客户 createUser(bo, uid, now); createIdentity(bo, bo.getCustomerType(), uid); createBusiness(bo, uid, now); createContacts(bo, uid); } else { // 新建业务 createBusiness(bo, uid, now); if (organizationContactBookMapper.checkContacts(uid, bo.getMobile(), TokenManager.getAdminId()) <= 0) { createContacts(bo, uid); } } } return 1; } private void createUser(CustomerExcelBo bo, String uid, Date now) { User user = new User(); user.setId(uid); user.setIdentifyName(bo.getIdentifyName()); user.setSource(AFTConstants.USER_SOURCE_CREATE); user.setNickname(bo.getIdentifyName()); user.setStatus(AFTConstants.USER_STATUS_NORMAL); user.setShareType(AFTConstants.USER_SHARE_PRIVATE); user.setAid(TokenManager.getAdminId()); user.setType(Integer.parseInt(bo.getCustomerType())); user.setLvl(UserLevel.CERTIFIED.getCode()); user.setCreateTime(now); user.setUpdateTime(now); user.setMobile(bo.getMobile()); user.setPassword(AFTConstants.INITIALPASSWORD); passwordUtil.encryptPassword(user); userMapper.insert(user); } private void createIdentity(CustomerExcelBo bo, String type, String uid) { String identifyId = UUID.randomUUID().toString(); if (type.equals(AFTConstants.USER_TYPE_PERSONAL)) { // 新增个人认证信息 UserIdentity ui = new UserIdentity(); ui.setId(identifyId); ui.setUid(uid); ui.setContacts(bo.getContacts()); ui.setContactMobile(bo.getMobile()); ui.setUsername(bo.getIdentifyName()); ui.setExpert(AFTConstants.NO); ui.setCelebrity(AFTConstants.NO); ui.setInternational(AFTConstants.NO); ui.setAuditStatus(5); userIdentityMapper.insert(ui); } else if (type.equals(AFTConstants.USER_TYPE_ORGANIZATION)) { // 创建企业认证信息 OrganizationIdentity oi = new OrganizationIdentity(); oi.setId(identifyId); oi.setUnitName(bo.getIdentifyName()); oi.setUid(uid); oi.setContacts(bo.getContacts()); oi.setContactMobile(bo.getMobile()); oi.setHighTechZone(AFTConstants.NO); oi.setInternational(AFTConstants.NO); oi.setListed(AFTConstants.NO); oi.setAuditStatus(5); // 实名企业 organizationIdentityMapper.insert(oi); } } private void createContacts(CustomerExcelBo bo, String uid) { // 新增企业联系人 OrganizationContactBook cob = new OrganizationContactBook(); cob.setAid(TokenManager.getAdminId()); cob.setId(UUID.randomUUID().toString()); cob.setUid(uid); cob.setName(bo.getContacts()); cob.setMobile(bo.getMobile()); cob.setMajor(AFTConstants.NO); organizationContactBookMapper.insert(cob); } private void createBusiness(CustomerExcelBo bo, String uid, Date now) { // 新增业务 UserBusiness ub = new UserBusiness(); ub.setId(UUID.randomUUID().toString()); ub.setAid(TokenManager.getAdminId()); ub.setBusinessProjectId(bo.getBusinessProjectId()); ub.setUid(uid); ub.setCreateTime(now); ub.setUpdateTime(now); ub.setCustomerStatus(Integer.parseInt(bo.getCustomerStatus())); ub.setFollowSituation(Integer.parseInt(bo.getFollowSituation())); userBusinessMapper.insert(ub); } @Override @Transactional public List updateByOperatorType(String uid,String aid, String oldAid, Integer operatorType,Integer data) { User user = new User(); Date now = new Date(); List errors=new ArrayList<>(); if(aid==null)aid=TokenManager.getAdminId(); if(data==null)data=0; // 是否多个客户 boolean isUs = false; if (uid.contains(",")) { isUs = true; } List uList = new ArrayList<>(); if (isUs) { uList = Arrays.asList(uid.split(",")); } user.setId(uid); user.setTransferTime(now); int flag = 0; //记录旧数据值,与新数据值 将旧数据与新数据都需要更新 List useList=new ArrayList<>(); List newList=new ArrayList<>(); //领取 if (AFTConstants.USER_RECEIVE.equals(operatorType)) { user.setAid(TokenManager.getAdminId()); user.setShareType(AFTConstants.USER_SHARE_PRIVATE); user.setInformationMaintainer(TokenManager.getAdminId()); user.setSource(2);// 客户来源设置为领取 flag = addUserLock(uid, TokenManager.getAdminId(), now, uList); // 指定用户锁定客户 addUserTransferLog(uid, TokenManager.getAdminId(), null,1, null, now, uList); updateUserMid(aid,uid,0,null); organizationContactBookMapper.updateAdmin(uid,aid); //转交 } else if (AFTConstants.USER_TRANSFER_TO_OTHER.equals(operatorType) || AFTConstants.SIGN_USER_TRANSFER_TO_OTHER .equals(operatorType) || AFTConstants.CHANNEL_USER_TRANSFER_TO_OTHER .equals(operatorType)) { if (!isUs) { user.setAid(aid); if (data==1||data==3){ informationMaintainerHandOver(uid, aid, oldAid, errors); } if (data==2||data==3){ updateOrderHandOver(uid,aid,oldAid); } user.setSource(3);// 客户来源设置为转交 //私有和渠道有客户锁操作 if (AFTConstants.USER_TRANSFER_TO_OTHER == operatorType||AFTConstants.CHANNEL_USER_TRANSFER_TO_OTHER == operatorType) { // 查询这个客户是否是登陆人的客户 if (userMapper.getAidAndUser(uid, TokenManager.getAdminId()) <= 0) throw new BusinessException(new Error("请勿非法操作!", "请勿非法操作!")); flag = updateUserLock(uid, oldAid, UserLockReleaseStatus.LOCKED.getCode(), UserLockReleaseStatus.RELEASE.getCode()); // 原用户释放客户 if (flag > 0) flag = addUserLock(uid,aid, now, uList); // 指定用户锁定客户 if (flag <= 0) throw new BusinessException(new Error(ErrorConstants.CUSTOMER_TRANSFER_FAIL, "")); } updateUserMid(aid,uid,0,null); //单客户转交,需要将客户原来得数据修改,需要将新数据刷新 User use = userMapper.selectByPrimaryKey(uid); useList.add(use); User newUser=new User(); newUser.setAid(aid); newUser.setTransferTime(now); newUser.setShareType(use.getShareType()); newList.add(newUser); } else { for (String us : uList) { if (userMapper.getAidAndUser(us, TokenManager.getAdminId()) <= 0){ throw new BusinessException(new Error("请勿非法操作!", "请勿非法操作!")); } if (data==1||data==3){ informationMaintainerHandOver(us, aid, oldAid, errors); } if (data==2||data==3){ updateOrderHandOver(uid,aid,oldAid); } //单客户转交,需要将客户原来得数据修改,需要将新数据刷新 User use = userMapper.selectByPrimaryKey(us); useList.add(use); User newUser=new User(); newUser.setAid(aid); newUser.setTransferTime(use.getTransferTime()); newUser.setShareType(use.getShareType()); newList.add(newUser); } if (AFTConstants.USER_TRANSFER_TO_OTHER == operatorType) { flag = updateUsersLock(uList, oldAid, UserLockReleaseStatus.LOCKED.getCode(), UserLockReleaseStatus.RELEASE.getCode()); // 原用户释放客户 if (flag > 0){ flag = addUserLock(uid, aid, now, uList); // 指定用户锁定客户 } if (flag <= 0) throw new BusinessException(new Error(ErrorConstants.CUSTOMER_TRANSFER_FAIL, "")); } } Integer type = 2; if (AFTConstants.SIGN_USER_TRANSFER_TO_OTHER == operatorType)type = 7; addUserTransferLog(uid, aid,oldAid, type, null, now, uList); //转交客户后公出审核人也切换 transferUser(uList,aid,uid); } if (isUs) { if (AFTConstants.USER_RECEIVE == operatorType) { userMapper.updateList(aid, null, 3, null, 2, uList,null); } else { userMapper.updateList(aid, null, 3, null, null, uList,data); } } else { userMapper.updateByPrimaryKeySelective(user); } //处理用户客户统计 if (AFTConstants.USER_RECEIVE.equals(operatorType)){ updateAdminUserCount(user.getAid(),user.getTransferTime()); } if (AFTConstants.USER_TRANSFER_TO_OTHER.equals(operatorType) || AFTConstants.SIGN_USER_TRANSFER_TO_OTHER .equals(operatorType) || AFTConstants.CHANNEL_USER_TRANSFER_TO_OTHER .equals(operatorType)) { updateAdminUserCountTransfer(useList,newList); } return errors; } /** * * @param useList * @param newList */ private void updateAdminUserCountTransfer(List useList, List newList) { for (User u : useList) { updateAdminUserCount(u.getAid(),u.getTransferTime()); } for (User u : newList) { updateAdminUserCount(u.getAid(),u.getTransferTime()); } } @Override public void transferUser(List uList, String aid, String uid) { if(uList.isEmpty())uList.add(uid); //先查出所有在其他审核的公出 List list=publicExamineMapper.selectByuList(uList); Admin admin = adminMapper.selectByPrimaryKey(aid); Integer logStatus=null; String logMsg=null; StringBuffer content=null; String noticeAid=null; for (PublicReleaseTransferUserBo e : list) { PublicExamine pe=new PublicExamine(); pe.setPrid(e.getId()); if (e.getAid().equals(aid)){ content=new StringBuffer().append("[").append(e.getUserNames()).append("]公司的外出申请已发起,请尽快审核。"); //再查比对和发起者一致的全部走入下一个审核流程 PublicRelease pr=new PublicRelease(); pr.setId(e.getId()); pr.setPublicType(0); publicReleaseMapper.updateByPrimaryKeySelective(pr); Admin sendAdmin=adminMapper.selectByPrimaryKey(admin.getReviewer()); noticeAid=sendAdmin.getId(); logStatus=2; logMsg="转交客户到发起公出审核人,自动审核通过。"; pe.setAid(sendAdmin.getId()); pe.setAname(sendAdmin.getName()); pe.setCreateTime(new Date()); }else { //与发起者不一致的就需要修改审核人员 pe.setAid(aid); pe.setAname(admin.getName()); //给新的审核人发送消息 logStatus=5; logMsg="转交客户归属人到["+admin.getName()+"]。"; content=new StringBuffer().append("[").append(e.getUserNames()).append("]公司已转交给您,相关公出请尽快审核。"); noticeAid=aid; } PublicReleaseLog log = new PublicReleaseLog(e.getId(), TokenManager.getAdminId(), logStatus, logMsg, new Date()); publicReleaseLogMapper.insertSelective(log); systemWebSocketHandler.sendMessageToUser(noticeAid, new TextMessage("unread")); Notice n =new Notice(); n.setId(UUID.randomUUID().toString()); n.setAid(noticeAid); n.setNoticeType(NoticeStatus.PUBLIC_RELEASE_START.getCode()); n.setContent(content.toString()); n.setReaded(0);//未读 asyncUtils.addNotice(n); publicExamineMapper.updateByPridSelective(pe); } } private void updateOrderHandOver(String uid, String aid, String oldAid) { List list = tOrderNewMapper.selectByuidandAid(uid, oldAid); for (TOrderNewBo bo : list) { bo.setSalesmanId(aid); bo.setOldSalesmanId(oldAid); tOrderNewMapper.updateByPrimaryKeySelective(bo); TOrderMid mid=new TOrderMid(); mid.setOrderNo(bo.getOrderNo()); Admin admin = adminMapper.selectByPrimaryKey(aid); Admin oldadmin = adminMapper.selectByPrimaryKey(oldAid); mid.setSalesmanName(admin.getName()); tOrderMidMapper.updateByOrderNo(mid); TOrderLog log=new TOrderLog(); log.setProcess(OrderLogProcess.DDZJ.getCode()); log.setAid(oldAid); log.setOrderNo(bo.getOrderNo()); log.setCreateTime(new Date()); log.setRemarks("订单转交:"+oldadmin.getName()+"=>"+admin.getName()); tOrderLogMapper.insert(log); } } private void informationMaintainerHandOver(String uid, String aid, String oldAid, List errors) { User useUser = userMapper.selectByPrimaryKey(uid); if (useUser.getInformationMaintainer().equals(oldAid)){ organizationContactBookMapper.updateAdmin(uid, aid); }else { errors.add("客户["+useUser.getNickname()+"]归属不正确,资料转交失败。"); } } @Override public Integer receiveEveryDay(String uid) { if (uid !=null ){ User u=userMapper.selectByPrimaryKey(uid); if (u.getShareType()!=1)return -1; if (u.getNewChannel()==1)return 0; } if (userMapper.UserReceiveCount(TokenManager.getAdminId()) >= USER_RECEIVE_MAX)return -2; if(checkMax(uid,TokenManager.getAdminId()))return -3; if(checkBeforeChannel(uid)) return -4; return 0; } @Override public int pushReceiveAsChannel(String uid) { Date date = new Date(); User use=userMapper.selectByPrimaryKey(uid); User u =new User(); String aid=TokenManager.getAdminId(); u.setId(uid); u.setChannel(0); u.setSource(2); u.setShareType(0); u.setTransferTime(date); u.setNewChannel(1); u.setAid(aid); u.setInformationMaintainer(aid); addUserLock(uid,aid, date, null); // 指定用户锁定客户 updateUserMid(aid,uid,0,null); addUserTransferLog(uid, aid,null, 15, null, date, null); userMapper.updateByPrimaryKeySelective(u); updateAdminUserCount(use.getAid(),use.getTransferTime()); return 1; } @Override public boolean checkOrgCode(String orgCode) { OrganizationIdentity organizationIdentity = organizationIdentityMapper.selectByOrgCode(orgCode); if (organizationIdentity!=null)return true; return false; } @Override public Integer queryUserMax() { String aid=TokenManager.getAdminId(); int limitmax = 0; int mymax = userMapper.checkUserMax(aid); List roles=adminMapper.getAdminRoleListByAid(aid); for (String role : roles) { if (role.equals(AFTConstants.SALESMAN_DIRECTOR)){ if(limitmax list){ if (type==0){ UserMid um=new UserMid(); um.setAid(aid); um.setUid(uid); um.setLastFollowTime(null); userMidMapper.updateByUid(um); }else{ if (!list.isEmpty())userMidMapper.updateListByUid(aid,1,list); } } /** * * @param uid 客户id * @param aid 接受者id * @param lockTime 时间 * @param uList 是不是多人客户 * @return */ private int addUserLock(String uid, String aid, Date lockTime, List uList) { if (uList ==null|| uList.isEmpty()) { UserLockRelease ulr = new UserLockRelease(); ulr.setId(UUID.randomUUID().toString()); ulr.setType(0); ulr.setAid(aid); ulr.setLockTime(lockTime); ulr.setStatus(UserLockReleaseStatus.LOCKED.getCode()); ulr.setUid(uid); userLockReleaseMapper.insert(ulr); } else { List ulrList = new ArrayList<>(); for (String s : uList) { UserLockRelease ulr = new UserLockRelease(); ulr.setId(UUID.randomUUID().toString()); ulr.setType(0); ulr.setAid(aid); ulr.setLockTime(lockTime); ulr.setStatus(UserLockReleaseStatus.LOCKED.getCode()); ulr.setUid(s); ulrList.add(ulr); } userLockReleaseMapper.insertList(ulrList); } return 1; } /** * * @param type 类型 0录入 1 领取 2 转交私有客户 3转交业务 4 未跟进丢失(30) 5未签单丢失(270天)6释放 7转交签单客户 8渠道录入 9渠道客户总监分配 10 渠道客户经理分配 11渠道释放 12回收 13离职客户转交 14离职签单业务转交 * 15 领取为私有渠道 */ private void addUserTransferLog(String uid, String aid,String oldAid, Integer type, String pid, Date lockTime, List uList) { if (uList ==null || uList.isEmpty()) { UserTransferLog utl = new UserTransferLog(); if (type == 0 || type == 1 ||type ==15) utl.setAid(aid); else if (type == 2 || type == 3 || type == 7) { utl.setAid(TokenManager.getAdminId()); utl.setTakeAid(aid); if (type == 3) utl.setPid(pid); } utl.setType(type); utl.setCreateTime(lockTime); utl.setUid(uid); userTransferLogMapper.insertSelective(utl); } else { List ulist = Arrays.asList(uid.split(",")); List utlList = new ArrayList<>(); for (String string : ulist) { UserTransferLog utl = new UserTransferLog(); if (type == 0 || type == 1) utl.setAid(aid); else if (type == 2 || type == 3 || type == 7) { utl.setAid(TokenManager.getAdminId()); utl.setTakeAid(aid); } if (type == 3) utl.setPid(pid); utl.setCreateTime(lockTime); utl.setUid(string); utl.setType(type); utlList.add(utl); } userTransferLogMapper.insertList(utlList); } } @SuppressWarnings("unchecked") @Override public Pagination customerStatistics(Date sDate, Date eDate, String depNo, String businessGlossoryId, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if (null != sDate) params.put("sDate", sDate); if (null != eDate) params.put("eDate", eDate); if (StringUtils.isNotBlank(depNo)) params.put("depNo", depNo); if (StringUtils.isNotBlank(businessGlossoryId)) params.put("businessGlossoryId", businessGlossoryId); Pagination page = (Pagination) findPage("customerStatisticsList", "customerStatisticsCount", params, pageNo, pageSize); return page; } @SuppressWarnings("unchecked") @Override public Pagination businessStatistic(Date sDate, Date eDate, String depNo, String businessGlossoryId, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if (null != sDate) params.put("sDate", sDate); if (null != eDate) params.put("eDate", eDate); if (StringUtils.isNotBlank(depNo)) params.put("depNo", depNo); if (StringUtils.isNotBlank(businessGlossoryId)) params.put("businessGlossoryId", businessGlossoryId); Pagination page = (Pagination) findPage("businessStatisticList", "businessStatisticCount", params, pageNo, pageSize); return page; } @SuppressWarnings("unchecked") @Override public Pagination followStatistic(Date sDate, Date eDate, String depNo, Integer pageNo, Integer pageSize) { Map params = new HashMap(); if (null != sDate) params.put("sDate", sDate); if (null != eDate) params.put("eDate", eDate); if (StringUtils.isNotBlank(depNo)) params.put("depNo", depNo); Pagination page = (Pagination) findPage("followStatisticList", "followStatisticCount", params, pageNo, pageSize); return page; } @SuppressWarnings("unchecked") @Override public Pagination listBusiness(BusinessListBo blo, Integer pageNo, Integer pageSize) { blo.setAid(TokenManager.getAdminId()); return (Pagination) findPage("selectBusinessList", "selectBusinessCount", disposeParams(blo), pageNo, pageSize); } @SuppressWarnings("unchecked") @Override public Pagination listAllBusiness(BusinessListBo blo, Integer pageNo, Integer pageSize) { return (Pagination) findPage("selectBusinessList", "selectBusinessCount", disposeParams(blo), pageNo, pageSize); } @SuppressWarnings("unchecked") @Override public Pagination listManageBusiness(BusinessListBo blo, Integer pageNo, Integer pageSize) { blo.setAid(TokenManager.getAdminId()); return (Pagination) findPage("selectBusinessManageList", "selectBusinessManageCount", disposeParams(blo), pageNo, pageSize); } private Map disposeParams(BusinessListBo blo) { Map params = new HashMap(); if (StringUtils.isNotBlank(blo.getUid())) params.put("uid", blo.getUid()); if (StringUtils.isNotBlank(blo.getAid())) params.put("aid", blo.getAid()); if (StringUtils.isNotBlank(blo.getAdminName())) params.put("adminName", blo.getAdminName()); if (StringUtils.isNotBlank(blo.getStartDate())) params.put("startDate", blo.getStartDate() + " 00:00:00"); if (StringUtils.isNotBlank(blo.getEndDate())) params.put("endDate", blo.getEndDate() + " 23:59:59"); if (StringUtils.isNotBlank(blo.getIdentifyName())) params.put("identifyName", blo.getIdentifyName()); if (blo.getFollowSituation() != null) params.put("followSituation", blo.getFollowSituation()); if (blo.getCustomerStatus() != null) params.put("customerStatus", blo.getCustomerStatus()); return params; } @Override public List findBusinessGlossory() { return userBusinessMapper.selectBusinessGlossory(); } @Override public int judgeBusiness(String uid, String businessProjectId) { return userMapper.selectLockedProject(uid, null, businessProjectId, 1, UserLockReleaseStatus.LOCKED.getCode()) .size(); } @Override @Transactional public void addBusinessAndFollow(BussinessFollowBo bfb) throws ParseException { UserBusiness ub = new UserBusiness(); String ubId = UUID.randomUUID().toString(); SimpleDateFormat format = new SimpleDateFormat(AFTConstants.YYYYMMDDHHMMSS); ub.setCustomerStatus(Integer.parseInt(bfb.getCustomerStatus())); ub.setFollowSituation(Integer.parseInt(bfb.getFollowSituation())); ub.setId(ubId); ub.setUid(bfb.getUid()); ub.setAid(TokenManager.getAdminId()); ub.setRemarks(bfb.getRemarks()); ub.setBusinessProjectId(bfb.getBusinessProjectId()); ub.setUpdateTime(format.parse(bfb.getCreateTime())); ub.setCreateTime(format.parse(bfb.getCreateTime())); userBusinessMapper.insert(ub); if (StringUtils.isNotBlank(bfb.getOcbId())) { // 跟进联系人不为空则添加跟进记录 UserFollow uf = new UserFollow(); String ufId = UUID.randomUUID().toString(); uf.setId(ufId); uf.setUid(bfb.getUid()); uf.setCreateTime(format.parse(bfb.getFollowTime())); uf.setOcbId(bfb.getOcbId()); uf.setResult(bfb.getResult()); uf.setContactType(Integer.parseInt(bfb.getContactType())); uf.setAid(TokenManager.getAdminId()); uf.setEffective(0); int followCount = userBusinessMapper.selectFollowCountByUAid(bfb.getUid(), TokenManager.getAdminId()) + 1; uf.setFollowCount(followCount); userFollowMapper.insert(uf); UserFollowBusiness ufb = new UserFollowBusiness(); ufb.setId(UUID.randomUUID().toString()); ufb.setBusinessId(ubId); ufb.setFollowId(ufId); ufb.setCustomerStatus(ub.getCustomerStatus()); ufb.setFollowSituation(ub.getFollowSituation()); ufb.setBusinessProjectId(bfb.getBusinessProjectId()); userFollowBusinessMapper.insert(ufb); } } @Override public List findBusinessByUAid(String uid, String aid) { return userBusinessMapper.selectBusinessByUAid(uid, aid); } @Override public List findLockedBusinessByUAid(String uid, String aid) { return userBusinessMapper.selectLockedBusinessByUAid(uid, aid); } @Override public BussinessFollowBo findBusinessDetail(String businessId) { return userBusinessMapper.findBusinessDetail(businessId); } @Override public int updateBusiness(BussinessFollowBo bfb) { UserBusiness userBusiness = new UserBusiness(); userBusiness.setId(bfb.getBusinessId()); userBusiness.setCustomerStatus(Integer.parseInt(bfb.getCustomerStatus())); userBusiness.setFollowSituation(Integer.parseInt(bfb.getFollowSituation())); userBusiness.setRemarks(bfb.getRemarks()); userBusiness.setUpdateTime(new Date()); return userBusinessMapper.updateByPrimaryKeySelective(userBusiness); } @Override @Transactional public int addFollowOneBusiness(BussinessFollowBo bfb) throws ParseException { Date updateTime = new Date(); SimpleDateFormat format = new SimpleDateFormat(AFTConstants.YYYYMMDDHHMMSS); UserBusiness userBusiness = new UserBusiness(); userBusiness.setId(bfb.getBusinessId()); userBusiness.setUpdateTime(updateTime); userBusiness.setCustomerStatus(Integer.parseInt(bfb.getCustomerStatus())); userBusiness.setFollowSituation(Integer.parseInt(bfb.getFollowSituation())); userBusinessMapper.updateByPrimaryKeySelective(userBusiness); UserFollow userFollow = new UserFollow(); String followId = UUID.randomUUID().toString(); int followCount = userBusinessMapper.selectFollowCountByUAid(bfb.getUid(), TokenManager.getAdminId()) + 1; userFollow.setId(followId); userFollow.setResult(bfb.getResult()); userFollow.setCreateTime(format.parse(bfb.getFollowTime())); userFollow.setEffective(0); userFollow.setOcbId(bfb.getOcbId()); userFollow.setFollowCount(followCount); userFollow.setContactType(Integer.parseInt(bfb.getContactType())); userFollow.setAid(TokenManager.getAdminId()); userFollow.setUid(bfb.getUid()); userFollowMapper.insert(userFollow); UserFollowBusiness userFollowBusiness = new UserFollowBusiness(); String ufbId = UUID.randomUUID().toString(); userFollowBusiness.setId(ufbId); userFollowBusiness.setFollowId(followId); userFollowBusiness.setBusinessProjectId(bfb.getBusinessProjectId()); userFollowBusiness.setBusinessId(bfb.getBusinessId()); userFollowBusiness.setCustomerStatus(Integer.parseInt(bfb.getCustomerStatus())); userFollowBusiness.setFollowSituation(Integer.parseInt(bfb.getFollowSituation())); userFollowBusiness.setRemarks(bfb.getRemarks()); userFollowBusinessMapper.insert(userFollowBusiness); return 1; } @Override public BussinessFollowBo findFollowOneBusiness(String ufbId) { return userBusinessMapper.findFollowOneBusiness(ufbId); } @Override public int updateFollowOneBusiness(BussinessFollowBo bfb) { // 修改业务跟进中间表 UserFollowBusiness userFollowBusiness = new UserFollowBusiness(); userFollowBusiness.setId(bfb.getUfbId()); userFollowBusiness.setRemarks(bfb.getRemarks()); userFollowBusiness.setCustomerStatus(Integer.parseInt(bfb.getCustomerStatus())); userFollowBusiness.setFollowSituation(Integer.parseInt(bfb.getFollowSituation())); userFollowBusinessMapper.updateByPrimaryKeySelective(userFollowBusiness); // 修改跟进记录表 UserFollow userFollow = new UserFollow(); userFollow.setId(bfb.getFollowId()); userFollow.setContactType(Integer.parseInt(bfb.getContactType())); userFollow.setResult(bfb.getResult()); if (StringUtils.isNotBlank(bfb.getOcbId())) userFollow.setOcbId(bfb.getOcbId()); userFollowMapper.updateByPrimaryKeySelective(userFollow); return 1; } @Override public int addOneContact(OrganizationContactBook ocb) { ocb.setAid(TokenManager.getAdminId()); ocb.setId(UUID.randomUUID().toString()); Admin ad = adminMapper.selectByPrimaryKey(TokenManager.getAdminId()); ocb.setAname(ad.getName()); if (ocb.getMajor()==1){ organizationContactBookMapper.updateSubContact(ocb.getUid()); OrganizationIdentity n=new OrganizationIdentity(); n.setUid(ocb.getUid()); n.setContacts(ocb.getName()); n.setContactMobile(ocb.getMobile()); n.setContactsDep(ocb.getDepartment()); n.setContactsPosition(ocb.getPosition()); organizationIdentityMapper.updateServiceByUid(n); } return organizationContactBookMapper.insert(ocb); } @Override public int deleteBusiness(String businessId) { return userBusinessMapper.deleteByPrimaryKey(businessId); } @Override public int updateBusinessToStop(String businessId) { UserBusiness ub = new UserBusiness(); ub.setId(businessId); ub.setCustomerStatus(CustomerStatusFiled.STATUS_STOP.getCode()); return userBusinessMapper.updateByPrimaryKeySelective(ub); } @Override public int deleteFollowOneBusiness(String ufbId) { UserFollowBusiness ufb = userFollowBusinessMapper.selectByPrimaryKey(ufbId); if (ufb.getFollowSituation() == 5) {// 如果业务是已签合同则不允许删除 throw new BusinessException(new Error(ErrorConstants.BUSINESS_ALREADY_LOCKED, "")); } return userFollowBusinessMapper.deleteByPrimaryKey(ufbId); } @Override public int deleteOneContact(String ocbId) { return organizationContactBookMapper.deleteByPrimaryKey(ocbId); } @Override public List findAdminName() { String aid = TokenManager.getAdminId(); return userMapper.findAdminName(aid); } @Override public int updatePersonalCustomerz(CustomerPersonalDetailBo bo) { UserIdentity ui = new UserIdentity(); User user = new User(); try { BeanUtilsExt.copyProperties(ui, bo); user.setId(bo.getUid()); user.setSocietyTag(bo.getSocietyTag()); user.setHeadPortraitUrl(bo.getHeadPortraitUrl()); user.setIntroduction(bo.getIntroduction()); user.setUpdateTime(new Date()); if (!StringUtils.isBlank(bo.getAid())) { user.setAid(bo.getAid()); user.setShareType(0); } } catch (InvocationTargetException | IllegalAccessException e) { e.printStackTrace(); } userMapper.updateByPrimaryKeySelective(user); return 1; } @Override public Pagination findEnteringAudit(CustomerListOut clo, Integer pageNo, Integer pageSize) { Map params = disposeParams(clo); if (!StringUtils.isBlank(clo.getAdminName())) params.put("adminName", clo.getAdminName()); @SuppressWarnings("unchecked") Pagination list = (Pagination) findPage("findEnteringAuditList", "findEnteringAuditCount", params, pageNo, pageSize); return list; } @Override public Pagination findEnteringAuditIsNo(CustomerListOut clo, Integer pageNo, Integer pageSize) { clo.setAid(TokenManager.getAdminId()); Map params = disposeParams(clo); if (!StringUtils.isBlank(clo.getAdminName())) params.put("adminName", clo.getAdminName()); @SuppressWarnings("unchecked") Pagination list = (Pagination) findPage("findEnteringAuditIsNoList", "findEnteringAuditIsNoCount", params, pageNo, pageSize); return list; } @Override public int updateEnteringAudit(User bo) { String[] ary = bo.getId().split(","); for (String s : ary) { String id = s; Integer auditStatus = bo.getAuditStatus(); String auditOpinion = bo.getAuditOpinion(); userMapper.updateEnteringAudit(id, auditStatus, auditOpinion); } return 1; } @Override public int updateMainContact(String ocbId, String uid) { organizationContactBookMapper.updateSubContact(uid); OrganizationIdentity oi = new OrganizationIdentity(); OrganizationContactBook ocb = organizationContactBookMapper.selectByPrimaryKey(ocbId); oi.setUid(uid); oi.setContacts(ocb.getName()); oi.setContactMobile(ocb.getMobile()); organizationIdentityMapper.updateServiceByUid(oi); organizationContactBookMapper.updateMainContact(ocbId); return 1; } @Override public int updateRefusedCustomer(String id, String nickname, String mobile, String societyTag) { User u = userMapper.selectByPrimaryKey(id); u.setNickname(nickname); u.setMobile(mobile); u.setSocietyTag(societyTag); return userMapper.updateRefusedCustomer(id, nickname, mobile, societyTag); } /** * 计算私有客户剩余时间 * @param tmpList * @param i * @param power */ private void setCustomerList(List tmpList, int i, Integer power) { Date now = new Date(); String s1, s2; Long l1, l2; int diff1 = 0, diff2 = 0; for (CustomerListOut clo : tmpList) { try { // 如果最近跟进为空直接取转换时间 if (StringUtils.isNotBlank(clo.getLastFollowTime())) { // 如果最近跟进小于转换取转换时间 if (StringUtils.isNotBlank(clo.getTransferTime())&&(DateUtils.parseDate(clo.getLastFollowTime(), AFTConstants.YYYYMMDDHHMMSS).getTime() > DateUtils .parseDate(clo.getTransferTime(), AFTConstants.YYYYMMDDHHMMSS).getTime()) ) { s1 = clo.getLastFollowTime(); } else { s1 = clo.getTransferTime(); } } else { s1 = clo.getTransferTime(); } // 另外一个时间取转换时间 s2 = clo.getTransferTime(); l1 = DateUtils.parseDate(s1, AFTConstants.YYYYMMDDHHMMSS).getTime(); l2 = DateUtils.parseDate(s2, AFTConstants.YYYYMMDDHHMMSS).getTime(); if (i == 0) { diff1 = (int) ((l1 + AFTConstants.USER_FOLLOW_LIMIT_MS - now.getTime()) / (24 * 3600 * 1000)); diff2 = (int) ((l2 + AFTConstants.USER_SIGN_LIMIT_MS - now.getTime()) / (24 * 3600 * 1000)); } else if (i == 1) { diff1 = (int) ((l1 + AFTConstants.PROJECT_FOLLOW_LIMIT_MS - now.getTime()) / (24 * 3600 * 1000)); diff2 = (int) ((l2 + AFTConstants.PROJECT_SIGN_LIMIT_MS - now.getTime()) / (24 * 3600 * 1000)); } clo.setSurplusFollowTime(diff1 + ""); clo.setSurplusSignTime(diff2 + ""); } catch (ParseException e) { e.printStackTrace(); } if (power == 1) { if (!clo.getAid().equals(TokenManager.getAdminId())) { clo.setContacts("***"); clo.setContactMobile("***"); } } } } @SuppressWarnings("unchecked") @Override public Pagination listSignOrganizationCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setAid(TokenManager.getAdminId()); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectSignOrganizationCustomerList", "selectSignOrganizationCustomerCount", params, pageNo, pageSize); return list; } @SuppressWarnings("unchecked") @Override public Pagination listSignPersonalCustomer(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setAid(TokenManager.getAdminId()); Map params = disposeParams(cli); Pagination list = (Pagination) findPage("selectSignPersonalCustomerList", "selectSignPersonalCustomerCount", params, pageNo, pageSize); List tmpList = (List) list.getList(); setCustomerList(tmpList, 0, null); list.setList(tmpList); return list; } @Override public List selectLockedProject(String uid) { List list = userMapper.selectLockedProject(uid, null, null, 1, 0); for (LockingReleaseBo lrb : list) { if (lrb.getAid().equals(TokenManager.getAdminId())) { lrb.setMySign(1); } else { lrb.setMySign(0); } } return list; } @Override public List getPrivateCustomerByName(String name) { return userMapper.selectPrivateCustomerByName(name, TokenManager.getAdminId()); } @Override public List getSignedCustomerByName(String name) { return userMapper.selectSignedCustomerByName(name, TokenManager.getAdminId(), 1); } @Override public List getChannelCustomerByName(String name) { return userMapper.selectSignedCustomerByName(name, TokenManager.getAdminId(), 2); } private int updateUserLock(String uid, String aid, Integer oldStatus, Integer newStatus) { return userLockReleaseMapper.updateUserLock(uid, aid, oldStatus, newStatus); } private int updateUsersLock(List uList, String aid, Integer oldStatus, Integer newStatus) { return userLockReleaseMapper.updateUsersLock(uList, aid, oldStatus, newStatus); } @Override public List selectWaitReleaseCustomer(String uid) { List list = new ArrayList<>(); List lockingReleaseBos = userLockReleaseMapper.selectWaitReleaseCustomer(uid); for (LockingReleaseBo bo : lockingReleaseBos) { if (bo.getChannelType()==null||bo.getChannelType()!=1){ list.add(bo); } } return list; } /** * 查询需要释放的业务 * * @param uid * @return */ @Override public List selectWaitReleaseBusiness(String uid) { return userLockReleaseMapper.selectWaitReleaseBusiness(uid); } /** * 处理需要释放 * */ @Override public void updateReleaseLock(Date releaseTime) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = formatter.format(releaseTime); userMapper.updateReleaseLock(time); } @Override public int updateAgainProjectTask(String uid, String projectId, String aid) { List businessLockedList = userMapper.selectLockedProject(uid, TokenManager.getAdminId(), projectId, 1, UserLockReleaseStatus.LOCKED.getCode()); // List businessLockedList = userMapper.selectLockedProject(uid, aid, projectId, 1, UserLockReleaseStatus.LOCKED.getCode()); UserLockRelease u = new UserLockRelease(); if (businessLockedList.size() == 1) { for (LockingReleaseBo l : businessLockedList) { u.setId(l.getId()); u.setLockTime(new Date()); } return userLockReleaseMapper.updateByPrimaryKeySelective(u); } return 0; } @Override public int updateInformationMaintainerr(String id, String aid) { User u = new User(); u.setId(id); u.setInformationMaintainer(aid); return userMapper.updateByPrimaryKeySelective(u); } @SuppressWarnings("unchecked") @Override public Pagination listCustomerInformation(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setAid(TokenManager.getAdminId()); // cli.setAid("1"); if (cli.getShareType()==null){ cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); } Map params = disposeParams(cli); return (Pagination) findPage("selectCustomerInformationList", "selectCustomerInformationCount", params, pageNo, pageSize); } @SuppressWarnings("unchecked") @Override public Pagination listDepCustomerInformation(CustomerListIn cli, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setAid(TokenManager.getAdminId()); // cli.setAid("1"); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); Map params = disposeParams(cli); return (Pagination) findPage("selectDepCustomerInformationList", "selectDepCustomerInformationCount", params, pageNo, pageSize); } public boolean checkCustomerInformation(String uid) { int i = userMapper.checkCustomerInformation(uid); if (i < 1) { return true; } return false; } @Override public void updatePendingReleaseLock(List newList) { String lockIds = ""; for (LockingReleaseBo bo : newList) { lockIds += bo.getId() + ","; } if (lockIds.length() > 0) { lockIds = "'" + lockIds.substring(0, lockIds.length() - 1).replace(",", "','") + "'"; userLockReleaseMapper.updatePendingReleaseLock(lockIds); } } @Override public List selectPendinglockUserList() { return userLockReleaseMapper.selectPendinglockUserList(); } @Override public int updateUserLevel(User u) { if (!u.getId().contains(",")) { userMapper.updateByPrimaryKeySelective(u); } else { List ulist = Arrays.asList(u.getId().split(",")); userMapper.updateList(null, u.getLevel(), null, null, null, ulist,null); } return 1; } @Override public XSSFWorkbook privateUnitCustomerOutXls(CustomerListIn cli, Integer sort, Integer sortType, Integer pageNo, Integer pageSize) { cli.setType(AFTConstants.USER_TYPE_ORGANIZATION); cli.setAid(TokenManager.getAdminId()); // cli.setAid("1"); cli.setShareType(String.valueOf(AFTConstants.USER_SHARE_PRIVATE)); Map params = disposeParams(cli); params.put("sort", sort); params.put("sortType", sortType); List list = userMapper.privateUnitCustomerList(params); setCustomerList(list, 0, 0); if (list == null || list.size() == 0) return null; String[] comment = { "客户名称", "地区", "联系人", "联系电话", "社会性质", "客户初始时间", "剩余私有天数", "最新跟进时间", "客户等级" }; String filePath = uploadPath + "/privateUnitCustomer"; XSSFWorkbook wb = ExportExcelUtil.exportSelectPrivateOrganizationCustomer(list, comment, filePath); return wb; } @Override public int customerHandOver(String userIds, String receiveId) { /* * String [] str=userIds.split(","); String aid=TokenManager.getAdminId(); * List uids=Arrays.asList(str); * userLockReleaseMapper.updateBatchReleaseProject(uids,receiveId,aid); * userLockReleaseMapper.updateBatchlockProject(uids,receiveId,aid); */ return 0; } @Override public int updatePrivateBusinessTransfer(String inputId, String uid, String pid) { List list = userLockReleaseMapper.checkUserProject(uid, pid, TokenManager.getAdminId()); if (list.isEmpty()) { throw new BusinessException(new Error("客户归属错误", "客户归属错误")); } LockingReleaseBo l = list.get(0); UserLockRelease ul = new UserLockRelease(); ul.setId(l.getId()); ul.setAid(inputId); userLockReleaseMapper.updateByPrimaryKeySelective(ul); addtransferLog(uid, pid, TokenManager.getAdminId(), inputId, 3, false); List bl = userBusinessMapper.selectBusinessProjectByUAPid(uid, TokenManager.getAdminId(), pid); if (bl.size() == 1) { UserBusiness ub = new UserBusiness(); ub.setId(bl.get(0).getBusinessId()); ub.setAid(inputId); ub.setRemarks("转交客户业务触发"); userBusinessMapper.updateByPrimaryKeySelective(ub); } return 1; } private void addtransferLog(String uid, String pid, String aid, String takeAid, Integer type, boolean isUs) { if (!isUs) { UserTransferLog utl = new UserTransferLog(); utl.setAid(aid); utl.setCreateTime(new Date()); utl.setPid(pid); utl.setTakeAid(takeAid); utl.setType(type); utl.setUid(uid); userTransferLogMapper.insertSelective(utl); } else { List ulist = Arrays.asList(uid.split(",")); List utfList = new ArrayList<>(); for (String us : ulist) { UserTransferLog utl = new UserTransferLog(); utl.setAid(aid); utl.setCreateTime(new Date()); utl.setPid(pid); utl.setTakeAid(takeAid); utl.setType(type); utl.setUid(us); utfList.add(utl); } userTransferLogMapper.insertList(utfList); } } @Override public List transferList(String uid) { return userTransferLogMapper.selectByUidGetList(uid); } @Override public int pushReleaseUser(String id) { Date date = new Date(); String aid = TokenManager.getAdminId(); if (!id.contains(",")) { User u = userMapper.selectByPrimaryKey(id); if (!u.getAid().equals(aid)) { throw new BuilderException("客户归属错误!"); } UserTransferLog utl = new UserTransferLog(); u.setTransferTime(date); u.setShareType(1); userMapper.updateByPrimaryKeySelective(u); utl.setAid(aid); utl.setCreateTime(date); utl.setType(6); utl.setUid(id); userTransferLogMapper.insertSelective(utl); userLockReleaseMapper.updateUserTypeLock(u.getId(), TokenManager.getAdminId(), 0, 2, date); //用户客户统计移除时修改 updateAdminUserCount(u.getAid(),u.getTransferTime()); } else { List list = Arrays.asList(id.split(",")); List ulList = new ArrayList(); List userList=new ArrayList<>(); for (String str : list) { User u = userMapper.selectByPrimaryKey(str); if (!u.getAid().equals(TokenManager.getAdminId())) { throw new BuilderException("客户归属错误!"); } UserTransferLog utl = new UserTransferLog(); utl.setAid(aid); utl.setCreateTime(date); utl.setType(6); utl.setUid(str); ulList.add(utl); userList.add(u); } userTransferLogMapper.insertList(ulList); userMapper.updateList(null, null, null, date, 1, list,null); userLockReleaseMapper.updateUserTypeLockList(list, TokenManager.getAdminId(), 0, 2, date); //批量移除客户,需要单独处理客户每天得计算。 updateAdminUserAllCount(userList); } return 1; } private void updateAdminUserAllCount(List userList) { for (User user : userList) { updateAdminUserCount(user.getAid(),user.getTransferTime()); } } @Override public List selectReleaseUserDays(String id) { //渠道 Integer y = USER_CHANNEL_DAYS; y = y - USER_REMIND_DAYS; List list = userLockReleaseMapper.selectUserDays(id, y); return list; } @Override public List selectChannelUserDays(String id) { return userLockReleaseMapper.selectChannelUserDays(USER_CHANNEL_DAYS,id); } @Override public int addGuidance(String followId, String guidance) { UserFollow uf = new UserFollow(); uf.setId(followId); uf.setGuidance(guidance); uf.setGuidanceTime(new Date()); String aid=TokenManager.getAdminId(); Admin a=adminMapper.selectByPrimaryKey(aid); uf.setGuidanceAid(a.getId()); uf.setGuidanceName(a.getName()); userFollowMapper.pushUserGuidance(followId, 1); return userFollowMapper.updateByPrimaryKeySelective(uf); } @Override public boolean checkMax(String uid,String aid) { boolean isUs = false; if (uid !=null &&uid.contains(",")) { isUs = true; } List uList = new ArrayList<>(); int x=0; if (isUs) { uList = Arrays.asList(uid.split(",")); uid=uList.get(0); x=uList.size(); }else { x=1; } int limitmax = 0; int i = userMapper.checkUserMax(aid); if (uid !=null){ User user =userMapper.selectByPrimaryKey(uid); if (user.getNewChannel()==1){ return false; } } List roles=adminMapper.getAdminRoleListByAid(aid); for (String role : roles) { if (role.equals(AFTConstants.SALESMAN_DIRECTOR)){ if(limitmax= limitmax) { return true; } return false; } @Override public void pushReleaseLog(List list, Integer type) throws InterruptedException { Date date = new Date(); List newList = new ArrayList(); List list3 = new ArrayList(); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { newList.add(list.get(i)); if (50 == newList.size() || i == list.size() - 1) { if (newList.size() > 0) { // 处理日志 for (LockingReleaseBo lrb : newList) { UserTransferLog utl = new UserTransferLog(); utl.setAid(lrb.getAid()); utl.setCreateTime(date); if (type == 0) utl.setType(4); else if (type == 1) utl.setType(5); utl.setUid(lrb.getUid()); list3.add(utl); } userTransferLogMapper.insertList(list3); list3.clear(); } newList.clear(); Thread.sleep(2000); } } } } @Override public Object listChannelCustomer(InputListChannel in) { Map params = new HashMap<>(); if (StringUtils.isNotBlank(in.getName())) params.put("name", in.getName()); if (in.getProvince() != null) params.put("province", in.getProvince()); if (in.getCity() != null) params.put("city", in.getCity()); if (in.getStatus() != null) params.put("status", in.getStatus()); params.put("type", in.getType() == null ? 0 : in.getType()); if (StringUtils.isNotBlank(in.getStartTime())) params.put("startTime", in.getStartTime()); if (StringUtils.isNotBlank(in.getEndTime())) params.put("endTime", in.getEndTime() + " 23:59:59"); // 0营销员 1渠道专员 2营销总监 3营销经理 4释放 5未分配 6已分配 7已签单 if (in.getType()==0) { if(StringUtils.isNotBlank(in.getAid()))params.put("aid", in.getAid()); params.put("sid", TokenManager.getAdminId()); } else if (in.getType()==1) { params.put("aid", in.getAid() == null ? TokenManager.getAdminId() : in.getAid()); } else if (in.getType()==2) { if(StringUtils.isNotBlank(in.getAid()))params.put("aid", in.getAid()); }else if (in.getType()==3) { params.put("maid", TokenManager.getAdminId()); if(StringUtils.isNotBlank(in.getAid()))params.put("aid", in.getAid()); } else { params.put("aid", in.getAid() == null ? TokenManager.getAdminId() : in.getAid()); } Pagination p=findPage("selectChannelCustomerList", "selectChannelCustomerCount", params, in.getPageNo(), in.getPageSize()); @SuppressWarnings("unchecked") List list=(List) p.getList(); Date date=new Date(); for (OutUserChannel o : list) { if (o.getDistributionTime()!=null) { int days = (int) ((o.getDistributionTime().getTime() + AFTConstants.USER_CHENNL_LIMIT_MS - date.getTime()) / (24 * 3600 * 1000)); o.setDays(days); } } return p; } @Override public Object pushChannelDeliver(List uids, String receiveId, String remarks, Integer type) { Date date = new Date(); Integer i = userMapper.updatechannelCustomerDeliver(uids, receiveId); Integer status = null; if (i > 0) { List l = new ArrayList(); for (String string : uids) { UserTransferLog u = new UserTransferLog(); u.setAid(TokenManager.getAdminId()); u.setUid(string); if (type == 0) { u.setTakeAid(receiveId); u.setType(9); } else if (type == 1) { u.setTakeAid(receiveId); u.setType(10); } else if (type == 2) { u.setType(12); } u.setCreateTime(date); u.setRemarks(remarks); l.add(u); } userTransferLogMapper.insertList(l); } if (type != 2) { userLockReleaseMapper.insertChannelList(uids, receiveId); String role = userMapper.checkRoleMax(receiveId); if (role.equals(AFTConstants.SALESMAN_MANAGER)) { status = ChannelStatus.YFPJL.getCode(); } else { status = ChannelStatus.YFPYXY.getCode(); } } else { userLockReleaseMapper.updateChannelList(uids); status = ChannelStatus.HT.getCode(); } if (type == 0) { userChannelMapper.updateByuids(uids, type, date, receiveId, status); } else { userChannelMapper.updateByuids(uids, type, date, null, status); } organizationContactBookMapper.updateByUids(uids, receiveId); return 1; } @Override public boolean checkChannel(List uids) { for (String uid : uids) { List list = userFollowMapper.selectbyUid(uid, TokenManager.getAdminId()); if (!list.isEmpty()) { return true; } } return false; } @Override public boolean checkBeforeChannel(String uid) { String aid = userMapper.checkBeforeChannel(uid); if (aid != null && aid.equals(TokenManager.getAdminId())) { return true; } return false; } @Override public boolean checkRecovery(List uids) { List list = userChannelMapper.checkRecovery(uids); for (String string : list) { if (string.equals("1")) { return true; } } return false; } @Override public List selectChannelNotFollow(String aid) { Integer days = 15; return userLockReleaseMapper.selectChannelNotFollow(days,aid); } @Override public Object listChannelCounts(InputChannelCounts in) { Map params = new HashMap<>(); params.put("type", in.getType() == null ? 0 : in.getType()); if (StringUtils.isNotBlank(in.getStartTime())) params.put("startTime", in.getStartTime()); if (StringUtils.isNotBlank(in.getEndTime())) params.put("endTime", in.getEndTime() + " 23:59:59"); return findPage("selectChannelCountsList", "selectChannelCountsCount", params, in.getPageNo(), in.getPageSize()); } @Override public Object getUserByName(String name) { return userMapper.getUserByName(name); } @Override public Object getUserByNames(String name, Integer type,Integer pageNo, Integer pageSize) { Map params = new HashMap<>(); params.put("name", name); Pagination page =findPage("getUserByNameList", "getUserByNameCount", params, pageNo, pageSize); return pushRetrun(page); } private Object pushRetrun(Pagination page) { Admin admin = adminMapper.selectByPrimaryKey(TokenManager.getAdminId()); List list = (List) page.getList(); //公出权限 0正常 1全部 =1的用户,公出status=0(应该是不用审核) //不然,就是 客户是公共客户 status=2 //再不然就是 是我自己的客户就是 status=0 //再不然就是status=1 (也就是不是公共客户,也不是我自己的客户,按理是需要审核) list.forEach(e ->{ if (admin.getPublicPurview()==1){ //如果是白名单不管是不是自己都可以公出 e.setStatus(0); }else { //不是白名单不是自己的需要审核 if (e.getShareType()==1){ e.setStatus(2); }else if (admin.getId().equals(e.getAid())){ e.setStatus(0); }else { e.setStatus(1); } } }); return page; } @Override public int updateUserName(String uid, String userName) { userNamesMapper.updateAddUserName(uid,userName); UserNames un=new UserNames(); un.setAid(TokenManager.getAdminId()); un.setUid(uid); un.setName(userName); userNamesMapper.insertSelective(un); return 1; } @Override public boolean checkUserName(String uid,String userName) { String name2=null; if (userName.contains("(")){ name2=userName.replace("(","(").replace(")",")"); }else if (userName.contains("(")){ name2=userName.replace("(","(").replace(")",")"); } List list=userNamesMapper.checkUserName(userName); List list2=userNamesMapper.checkUserName(name2); int i=0; for (UserNamesListBo userNamesListBo : list) { if (!userNamesListBo.getUid().equals(uid)){ i++; } } for (UserNamesListBo userNamesListBo : list2) { if (!userNamesListBo.getUid().equals(uid)){ i++; } } return i > 0; } @Override public List listUserName(String uid) { List list=userNamesMapper.getUserList(uid); return list; } @Override public Pagination mainProductsList( InputMainProductsList in) { Map map =new HashMap<>(); map.put("aid",TokenManager.getAdminId()); if(in.getUserName()!=null)map.put("userName",in.getUserName()); if(in.getKey()!=null)map.put("key",in.getKey()); if(in.getStartTime()!=null)map.put("startTime",in.getStartTime()); if(in.getEndTime()!=null)map.put("endTime",in.getEndTime()+" 23:59:59"); if(in.getShiroType()==null){in.setShiroType(0);} if(in.getShareType()!=null)map.put("shareType",in.getShareType()); else if(in.getShiroType()==2){ if(in.getAdminName()!=null)map.put("adminName",in.getAdminName()); if(in.getDepId()!=null)map.put("depId",in.getDepId()); } map.put("shiroType",in.getShiroType()); return (Pagination) findPage("findMainProductsList","findMainProductsCount",map,in.getPageNo(),in.getPageSize()); } @Override public List userDateLogList(String uid) { return userDataLogMapper.userDateLogList(uid); } @Override public int updateuserBusinessScope(String id, String businessScope) { Date date =new Date(); OrganizationIdentity use=organizationIdentityMapper.selectByPrimaryKey(id); if(!businessScope.equals(use.getBusinessScope())){ updateBusinessScope(use.getUid(),businessScope,use.getBusinessScope(),date); OrganizationIdentity oi=new OrganizationIdentity(); oi.setId(id); oi.setBusinessScope(businessScope); return organizationIdentityMapper.updateByPrimaryKeySelective(oi); } return 0; } @Override public boolean checkData(String uid, String aid) { List list=Arrays.asList(uid.split(",")); for (String s : list) { User u=userMapper.selectByPrimaryKey(s); if (!u.getInformationMaintainer().equals(aid)){ return true; } } return false; } @Override public int updateUserDate(String uid,Integer province, Integer city, Integer area, String businessScope, String intendedProject, String introduction,Integer channelType,String orgCode) { OrganizationIdentity oi =new OrganizationIdentity(); oi.setUid(uid); if (province!=null ||city !=null ||area!=null|| businessScope!=null ||intendedProject!=null||orgCode!=null){ if(province!=null)oi.setLocationProvince(province); if(city!=null)oi.setLocationCity(city); if(area!=null)oi.setLocationArea(area); if (orgCode!=null)oi.setOrgCode(orgCode); if (businessScope!=null){ OrganizationIdentity use=organizationIdentityMapper.selectOrgIdentityByUserId(uid); updateBusinessScope(uid,businessScope,use.getBusinessScope(),new Date()); oi.setBusinessScope(businessScope); } if(intendedProject!=null)oi.setIntendedProject(intendedProject); organizationIdentityMapper.updateServiceByUid(oi); } if (introduction!=null){ User user=new User(); user.setId(uid); user.setIntroduction(introduction); userMapper.updateByPrimaryKeySelective(user); } if (channelType !=null){ UserMid um =new UserMid(); um.setUid(uid); um.setChannelType(channelType); userMidMapper.updateByUid(um); } return 1; } @Override public Pagination channelUserList(InputChannelListBo in) { Map params = new HashMap<>(); addParams(in, params); Pagination p = (Pagination) findPage( "channelUserList", "channelUserCout", params, in.getPageNo(), in.getPageSize()); //只有私有客户才需要剩余时间 if (in.getShareType()==null || in.getShareType()!=1){ List list = (List) p.getList(); for (OutChannelListBo out : list) { if(out.getType()!=null&&out.getType()==1){ out.setaName(null); out.setCreateTime(null); out.setLastFollowTime(null); }else { out.setRemainingDays(getRemainingDays(out)); } } } return p; } /** * 组装参数 * @param in * @param params */ private void addParams(InputChannelListBo in, Map params) { if (StringUtils.isNotBlank(in.getName())) params.put("name", in.getName()); if (StringUtils.isNotBlank(in.getStartDate())) params.put("startDate", in.getStartDate()); if (StringUtils.isNotBlank(in.getEndDate())) params.put("endDate", in.getEndDate()+" 23:59:59"); if (null!= in.getProvince()) params.put("province", in.getProvince()); if (null!= in.getArea()) params.put("area", in.getArea()); if (null!= in.getCity()) params.put("city", in.getCity()); if (null!= in.getType()) params.put("type", in.getType()); if (null!= in.getShareType()) { params.put("shareType", in.getShareType()); if(!TokenManager.hasRole(AFTConstants.SUPERADMIN)){ if (in.getShareType()==0){ if (in.getAid()==null||in.getAid().equals(TokenManager.getAdminId())){ params.put("aid", TokenManager.getAdminId()); }else{ params.put("aid", ""); } } }else{ if (null != in.getAid())params.put("aid", in.getAid()); } } if (null != in.getNewChannel())params.put("newChannel", in.getNewChannel()); } @Override public List selectChannelUserList(InputChannelListBo in) { Map params = new HashMap<>(); addParams(in, params); return userMapper.channelUserList(params); } /** * 根据您 初始时间、最后跟进时间当前时间计算剩余天数 * @param out * @return */ private String getRemainingDays(OutChannelListBo out) { Date now = new Date(); Long lastFollow=null,transfer=null,endLong = null; Integer diff1 = 0; // 如果最近跟进为空直接取转换时间 try { if (StringUtils.isNotBlank(out.getLastFollowTime())) { lastFollow = DateUtils.parseDate(out.getLastFollowTime(), AFTConstants.YYYYMMDDHHMMSS).getTime(); // 如果最近跟进小于转换取转换时间 if (StringUtils.isNotBlank(out.getTransferTime())) { transfer = DateUtils.parseDate(out.getTransferTime(), AFTConstants.YYYYMMDDHHMMSS).getTime(); }else { transfer=0L; } if (lastFollow > transfer) { endLong = lastFollow; } else { endLong = transfer; } } else { if (StringUtils.isNotBlank(out.getTransferTime())) { endLong = DateUtils.parseDate(out.getTransferTime(), AFTConstants.YYYYMMDDHHMMSS).getTime(); } else { return "0"; } } }catch (Exception e){ throw new BusinessException("转换异常"); } endLong=endLong+AFTConstants.USER_FOLLOW_LIMIT_MS; diff1 = (int) ((endLong - now.getTime()) / (24 * 3600 * 1000)); return diff1.toString(); } @Override public Pagination selectUserLastSign(InputSelectUserLastSignBo in) { Map param = addParam(in); Pagination p=(Pagination) findPage("selectUserLastSignList","selectUserLastSignCount",param,in.getPageNo(),in.getPageSize()); pushDays(p); return p; } @Override public Result selectUserLastSignExport(InputSelectUserLastSignBo in) { Map param = addParam(in); List list = (List) findList("selectUserLastSignList", param, 1, 99999); pushDays(list); NewExcelUtil excelUtil=new NewExcelUtil<>(OutUserLastSignBo.class); return excelUtil.exportExcel(list,"用户最后跟进表",uploadPath); } @Override public boolean checkAid(String aid, Integer roleType) { List roleTypes = adminMapper.selectRoleTypeByid(aid); for (Integer rt : roleTypes) { if (rt.equals(roleType))return true; } return false; } private void pushDays(Pagination p) { List list = (List) p.getList(); pushDays(list); } private void pushDays(List list) { for (OutUserLastSignBo bo : list) { String dates=null; if (bo.getLastFollowTimeStr()!=null)dates=bo.getLastFollowTimeStr(); else dates=bo.getTransferTimeStr(); Integer days=DateUtils.sumDays(dates); bo.setDays(days); } } private Map addParam(InputSelectUserLastSignBo in) { Map param=new HashMap<>(); Integer purview=null; if (TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.SUPERADMIN_ASSISTANT)){ purview=2; } else if (TokenManager.hasRole(AFTConstants.CED_ASSISTANT)){ purview=0; } else if (TokenManager.hasRole(AFTConstants.APPROVAL_DECISION_ASSISTANT)) { purview = 1; }else { throw new BusinessException("权限异常"); } param.put("purview",purview); if(in.getNickname()!=null)param.put("nickname",in.getNickname()); if(in.getAid()!=null)param.put("aid",in.getAid()); if(in.getShareType()!=null)param.put("shareType",in.getShareType()); if (in.getDaysType()!=null){ Calendar cal=Calendar.getInstance(); cal=DateUtils.setMidnight(cal); if (in.getDaysType()==0)cal.add(Calendar.DATE,-14); else if (in.getDaysType()==1)cal.add(Calendar.DATE,-29); else if (in.getDaysType()==2)cal.add(Calendar.DATE,-59); else if (in.getDaysType()==3)cal.add(Calendar.DATE,-89); else if (in.getDaysType()==4)cal.add(Calendar.DATE,-179); else if (in.getDaysType()==5)cal.add(Calendar.DATE,-364); else if (in.getDaysType()==6)cal.add(Calendar.DATE,-729); param.put("lastTime",DateUtils.formatDate(cal.getTime(),AFTConstants.YYYYMMDDHHMMSS)); } return param; } @Override public Object importExcel(MultipartFile file) { NewExcelUtil newExcelUtil=new NewExcelUtil<>(InputExcelUser.class); List list = null; try { list = newExcelUtil.importExcel(file.getInputStream(),0); } catch (Exception e) { throw new BusinessException(e.getMessage()); } return pushUserName(list); } private Object pushUserName(List list) { List res=new ArrayList<>(); List list2=new ArrayList<>(); int i = 0; for (InputExcelUser e : list) { i++; list2.add(e); if (list2.size()==100||i==list.size()){ List userNamesListBos = userNamesMapper.selectUserNameList(list2); if (!userNamesListBos.isEmpty()){ for (InputExcelUser excelUser : list2) { for (UserNamesListBo ex2 : userNamesListBos) { if (ex2.getName().equals(excelUser.getName())){ excelUser.setType(1); break; } } if(excelUser.getType()==null){ excelUser.setType(0); } if (excelUser.getType()==1){ res.add(excelUser); } } } list2.clear(); } } return res; } }