package com.goafanti.customer.service.impl; import com.goafanti.common.dao.*; import com.goafanti.common.model.*; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.customer.bo.InputSelectUserArchives; import com.goafanti.customer.bo.MyUserDetailsBo; import com.goafanti.customer.bo.OutSelectUserArchives; import com.goafanti.customer.bo.UserArchivesDetails; import com.goafanti.customer.service.CustomerService; import com.goafanti.customer.service.UserArchivesService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * 客户档案表(UserArchives)表服务实现类 * * @author makejava * @since 2024-07-12 11:52:01 */ @Service("userArchivesService") public class UserArchivesServiceImpl extends BaseMybatisDao< UserArchivesMapper> implements UserArchivesService { @Resource private UserArchivesMapper userArchivesMapper; @Resource private CustomerService customerService; @Resource private UserMapper userMapper; @Resource private UserMidMapper userMidMapper; @Resource private UserLimitCheckMapper userLimitCheckMapper; @Resource private AdminMapper adminMapper; @Resource private UserDataLogMapper userDataLogMapper; @Resource private PublicReleaseMapper publicReleaseMapper; @Override public Pagination list(UserArchives userArchives, Integer pageNo, Integer pageSize) { Map params = new HashMap<>(); params.put("in",userArchives); return (Pagination) findPage("findUserArchivesList", "findUserArchivesCount", params, pageNo, pageSize); } @Override public UserArchives queryByUid(String id) { UserArchives userArchives =userArchivesMapper.queryByUid(id); if (userArchives==null)userArchives =new UserArchives(); return userArchives; } @Override public Object queryByUidAll(String id) { UserArchivesDetails user = customerService.selectUserByUid(id); User u = userMapper.selectByPrimaryKey(id); if (u.getAid().equals(TokenManager.getAdminId())){ user.setMyUser(1); }else { user.setMyUser(0); } user.setSignBills(u.getSignBills()); UserArchives userArchives = queryByUid(id); List customerContacts = userMapper.findCustomerContacts(id, TokenManager.getAdminId()); if (!customerContacts.isEmpty()){ List collect = customerContacts.stream() .filter(e -> e.getMajor() == 1).collect(Collectors.toList()); for (OrganizationContactBook ob : collect) { ob.setName("***"); ob.setMobile("***"); } user.setContactList(collect); } BeanUtils.copyProperties(userArchives, user); return user; } @Override public boolean checkPermission(String id) { User user = userMapper.selectByPrimaryKey(id); if (user.getAid().equals(TokenManager.getAdminId())){ return false; } UserLimitCheck userLimitCheck = userLimitCheckMapper.selectByUid(id); //如果没有和大于时间则不能查看 if (userLimitCheck==null||System.currentTimeMillis()>userLimitCheck.getCheckTime().getTime()) { return true; } return false; } /** * 通过ID查询单条数据 * * @param id 主键 * @return 实例对象 */ @Override public UserArchives queryById(Integer id) { return this.userArchivesMapper.queryById(id); } /** * 新增数据 * * @param userArchives 实例对象 * @return 实例对象 */ @Override public UserArchives insert(UserArchives userArchives) { UserArchives query = userArchivesMapper.queryByUid(userArchives.getUid()); if (query != null){ userArchives.setId(query.getId()); return update(userArchives,null); }else { if (userArchives.getAppearancePatentCount()!=null|| userArchives.getInventionPatentCount()!=null|| userArchives.getUtilityModelCount() !=null|| userArchives.getSoftwareWorksCount()!=null|| userArchives.getOtherCount()!=null ){ int count = getCount(userArchives); userArchives.setPatentCount(count); } if(userArchives.getPatentCount()==null)userArchives.setPatentCount(0); this.userArchivesMapper.insert(userArchives); } return userArchives; } /** * 修改数据 * * @param userArchives 实例对象 * @return 实例对象 */ @Override public UserArchives update(UserArchives userArchives,Integer channelType) { if (userArchives.getAppearancePatentCount()!=null|| userArchives.getInventionPatentCount()!=null|| userArchives.getUtilityModelCount() !=null|| userArchives.getSoftwareWorksCount()!=null|| userArchives.getOtherCount()!=null ){ int count = getCount(userArchives); userArchives.setPatentCount(count); } if (channelType!=null){ String uid=null; if (userArchives.getUid()==null){ UserArchives useData = this.queryById(userArchives.getId()); uid=useData.getUid(); }else { uid=userArchives.getUid(); } userMidMapper.updateByUid(new UserMid(uid,channelType)); } if(userArchives.getId()==null){ return insert(userArchives); }else { addUserLog(userArchives); this.userArchivesMapper.update(userArchives); return this.queryById(userArchives.getId()); } } private void addUserLog(UserArchives userArchives) { UserArchives use = userArchivesMapper.queryById(userArchives.getId()); Admin admin = adminMapper.selectByPrimaryKey(TokenManager.getAdminId()); List list =new ArrayList<>(); if(userArchives.getFinancialData()!=null&&!Objects.equals(use.getFinancialData(),userArchives.getFinancialData())){ String builder = admin.getName() + "修改了财务数据: " + use.getFinancialData() + "=>" + userArchives.getFinancialData(); UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,1); list.add(userDataLog); } if (userArchives.getEarlyCommunication()!=null&&!Objects.equals(use.getEarlyCommunication(),userArchives.getEarlyCommunication())){ String builder = admin.getName() + "修改了前期沟通: " + use.getEarlyCommunication() + "=>" + userArchives.getEarlyCommunication(); UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,2); list.add(userDataLog); } if (userArchives.getInterviewIdeas()!=null&&!Objects.equals(use.getInterviewIdeas(),userArchives.getInterviewIdeas())){ String builder = admin.getName() + "修改了面谈思路: " + use.getInterviewIdeas() + "=>" + userArchives.getInterviewIdeas(); UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,3); list.add(userDataLog); } if (!list.isEmpty())userDataLogMapper.insertBatch(list); } /** * 计算专利总数,必须5个都传,不然会导致计算漏掉 * @param userArchives 用户档案参数 * @return count */ private int getCount(UserArchives userArchives) { int count = 0; if (userArchives.getAppearancePatentCount()!=null){ count+= userArchives.getAppearancePatentCount(); } if (userArchives.getInventionPatentCount()!=null){ count+= userArchives.getInventionPatentCount(); } if (userArchives.getUtilityModelCount() !=null){ count+= userArchives.getUtilityModelCount(); } if (userArchives.getSoftwareWorksCount() !=null){ count+= userArchives.getSoftwareWorksCount(); } if (userArchives.getOtherCount()!=null){ count+= userArchives.getOtherCount(); } return count; } /** * 通过主键删除数据 * * @param id 主键 * @return 是否成功 */ @Override public boolean deleteById(Integer id) { return this.userArchivesMapper.deleteById(id) > 0; } @Override public Object selectUserArchives(InputSelectUserArchives in) { Map params = new HashMap<>(); if (in.getNewChannel() != null)params.put("newChannel", in.getNewChannel()); if (in.getShareType() != null)params.put("shareType", in.getShareType()); if (in.getChannelType() != null){ String[] split = in.getChannelType().split(","); params.put("channelType", split); } if (in.getName() != null)params.put("name", in.getName()); if (in.getAid() != null)params.put("aid", in.getAid()); if (in.getBusinessScope() != null)params.put("businessScope", in.getBusinessScope()); if (in.getIndustry() != null){ String[] split = in.getIndustry().split(","); params.put("industry", split); } return pushPage(findPage("selectUserArchivesList", "selectUserArchivesCount", params, in.getPageNo(), in.getPageSize())); } @Override public Object addAwards(String uid,Integer status) { return updateAwards(uid,status); } @Override public Object updateAwards(String uid, Integer status) { UserArchives use = userArchivesMapper.queryByUid(uid); UserArchives userArchives = new UserArchives(); userArchives.setId(use.getId()); userArchives.setAwardsStatus(status); if (status==2)userArchives.setAwardsTime(new Date()); userArchivesMapper.update(userArchives); if (status==2){ userArchivesMapper.updateStatus(); } return 1; } private Object pushPage(Pagination page) { List list = (List) page.getList(); list.forEach(e ->{ List myUserDetailsBos = publicReleaseMapper.selectCountByUid(e.getId()); List collect = new ArrayList<>(myUserDetailsBos.stream() .collect(Collectors.toMap(MyUserDetailsBo::getAid, Function.identity(), (e1, e2) -> e1)) .values()); List collect1 = myUserDetailsBos.stream().map(item -> BigDecimal.valueOf(item.getDuration())).collect(Collectors.toList()); BigDecimal reduce = collect1.stream().reduce(BigDecimal.ZERO, BigDecimal::add); e.setPublicContent("人次"+collect.size()+",公出次数"+myUserDetailsBos.size()+",工时"+reduce+"小时"); }); return page; } }