|
|
|
@@ -1,16 +1,9 @@ |
|
|
|
package com.iformall.service.impl; |
|
|
|
|
|
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil; |
|
|
|
import cn.afterturn.easypoi.excel.entity.ImportParams; |
|
|
|
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; |
|
|
|
import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl; |
|
|
|
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.iformall.common.ErrorCode; |
|
|
|
import com.iformall.common.IdWorker; |
|
|
|
import com.iformall.common.ResultData; |
|
|
|
import com.iformall.domain.dto.WxCUserBasicInfoDto; |
|
|
|
import com.iformall.domain.po.WxCUser; |
|
|
|
import com.iformall.domain.po.WxCUserBasicInfo; |
|
|
|
@@ -39,9 +32,7 @@ import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate; |
|
|
|
import org.springframework.scheduling.annotation.Async; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
@@ -498,194 +489,126 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { |
|
|
|
return userBase; |
|
|
|
} |
|
|
|
|
|
|
|
private class UserExcelHandler extends ExcelDataHandlerDefaultImpl<CUserBaseInfoT> { |
|
|
|
@Override |
|
|
|
public Object importHandler(CUserBaseInfoT obj, String name, Object value) { |
|
|
|
if (value == null) { |
|
|
|
value = ""; |
|
|
|
} |
|
|
|
System.out.println(name + " + " + value.toString()); |
|
|
|
return super.importHandler(obj, name, value); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Async |
|
|
|
@Override |
|
|
|
public ResultData importTemplate(MultipartFile file, String tenantId, String importKey) { |
|
|
|
|
|
|
|
public void importOneMem(String tenantId, String importKey, List<WxTags> tagList, CUserBaseInfoT uBase) { |
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
|
|
|
|
ImportParams params = new ImportParams(); |
|
|
|
// 需要验证 |
|
|
|
params.setImportFields(new String[]{"姓名", "性别", "手机号", "微信昵称", "学历", "生日", "地址", "上次活跃时间", "注册时间", "标签", "成长值"}); |
|
|
|
IExcelDataHandler<CUserBaseInfoT> handler = new UserExcelHandler(); |
|
|
|
handler.setNeedHandlerFields(new String[] { "手机号" }); |
|
|
|
params.setNeedVerify(true); |
|
|
|
|
|
|
|
ExcelImportResult<CUserBaseInfoT> datalist = null; |
|
|
|
try { |
|
|
|
datalist = ExcelImportUtil.importExcelMore(file.getInputStream(), CUserBaseInfoT.class, params); |
|
|
|
} catch (Exception e) { |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "allCount", "1"); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "allSuccessCount", "0"); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "processCount", "0"); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "failCount", "1"); |
|
|
|
logger.error(e.getMessage()); |
|
|
|
return new ResultData(ErrorCode.MEM_IMPORT_ERR); |
|
|
|
if (StringUtils.isBlank(uBase.getPhone())) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error("手机号为空", uBase.toString()); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if(datalist == null) { |
|
|
|
logger.error("导入模板失败: 模板数据解析失败"); |
|
|
|
return new ResultData(ErrorCode.MEM_IMPORT_ERR); |
|
|
|
WxCUserBasicInfo userBase = InitUserBaseInfo(uBase, tenantId); |
|
|
|
if (userBase == null) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error("userBase为null", uBase.toString()); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
List<CUserBaseInfoT> successList = datalist.getList(); |
|
|
|
List<CUserBaseInfoT> failList = datalist.getFailList(); |
|
|
|
|
|
|
|
int total = successList.size() + failList.size(); |
|
|
|
int all_success = successList.size(); |
|
|
|
int all_fail = failList.size(); |
|
|
|
|
|
|
|
//添加到redis里 |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "allCount", "" + total); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "allSuccessCount", "" + all_success); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "processCount", "0"); |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "failCount", "" + all_fail); |
|
|
|
|
|
|
|
logger.info("验证通过的数量: " + successList.size()); |
|
|
|
logger.info("验证未通过的数量: " + failList.size()); |
|
|
|
|
|
|
|
WxTags wxTagsQ = new WxTags(); |
|
|
|
List<WxTags> tagList = wxTagsMapper.findList(wxTagsQ); |
|
|
|
|
|
|
|
try { |
|
|
|
successList.parallelStream().forEach(uBase -> { |
|
|
|
WxCUserBasicInfo oldUserBase = null; |
|
|
|
WxCUserBasicInfo userBaseQ = new WxCUserBasicInfo(); |
|
|
|
userBaseQ.setTenantId(tenantId); |
|
|
|
userBaseQ.setPhone(userBase.getPhone()); |
|
|
|
List<WxCUserBasicInfo> userBList = wxCUserBasicInfoMapper.select(userBaseQ); |
|
|
|
if (userBList.size() > 0) { |
|
|
|
oldUserBase = userBList.get(0); |
|
|
|
} |
|
|
|
|
|
|
|
if (StringUtils.isBlank(uBase.getPhone())) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error("手机号为空", uBase.toString()); |
|
|
|
return; |
|
|
|
} |
|
|
|
WxCUserBasicInfo userBase = InitUserBaseInfo(uBase, tenantId); |
|
|
|
if (userBase == null) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error("userBase为null", uBase.toString()); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (oldUserBase != null) { |
|
|
|
oldUserBase.setName(userBase.getName()); |
|
|
|
oldUserBase.setSex(userBase.getSex()); |
|
|
|
oldUserBase.setNickName(userBase.getNickName()); |
|
|
|
oldUserBase.setEducation(userBase.getEducation()); |
|
|
|
oldUserBase.setBirthdate(userBase.getBirthdate()); |
|
|
|
oldUserBase.setAddress(userBase.getAddress()); |
|
|
|
oldUserBase.setUpdateDate(new Date()); |
|
|
|
oldUserBase.setCreateDate(userBase.getCreateDate()); |
|
|
|
} else { |
|
|
|
userBase.setId(idWorker.nextId()); |
|
|
|
} |
|
|
|
|
|
|
|
WxCUserBasicInfo oldUserBase = null; |
|
|
|
WxCUserBasicInfo userBaseQ = new WxCUserBasicInfo(); |
|
|
|
userBaseQ.setTenantId(tenantId); |
|
|
|
userBaseQ.setPhone(userBase.getPhone()); |
|
|
|
List<WxCUserBasicInfo> userBList = wxCUserBasicInfoMapper.select(userBaseQ); |
|
|
|
if (userBList.size() > 0) { |
|
|
|
oldUserBase = userBList.get(0); |
|
|
|
} |
|
|
|
// update 昵称 |
|
|
|
{ |
|
|
|
// check c_user 是否存在 |
|
|
|
WxCUser cUserQ = new WxCUser(); |
|
|
|
cUserQ.setTenantId(tenantId); |
|
|
|
cUserQ.setPhone(userBase.getPhone()); |
|
|
|
List<WxCUser> userList = wxCUserMapper.select(cUserQ); |
|
|
|
if (userList.size() > 0) { |
|
|
|
WxCUser user = userList.get(0); |
|
|
|
if (user != null) { |
|
|
|
if (oldUserBase != null) { |
|
|
|
if(oldUserBase != null) { |
|
|
|
oldUserBase.setNickName(user.getNickName()); |
|
|
|
} |
|
|
|
userBase.setId(user.getId()); |
|
|
|
userBase.setNickName(user.getNickName()); |
|
|
|
} else { |
|
|
|
|
|
|
|
if (oldUserBase != null) { |
|
|
|
oldUserBase.setName(userBase.getName()); |
|
|
|
oldUserBase.setSex(userBase.getSex()); |
|
|
|
oldUserBase.setNickName(userBase.getNickName()); |
|
|
|
oldUserBase.setEducation(userBase.getEducation()); |
|
|
|
oldUserBase.setBirthdate(userBase.getBirthdate()); |
|
|
|
oldUserBase.setAddress(userBase.getAddress()); |
|
|
|
oldUserBase.setUpdateDate(new Date()); |
|
|
|
oldUserBase.setCreateDate(userBase.getCreateDate()); |
|
|
|
} else { |
|
|
|
userBase.setId(idWorker.nextId()); |
|
|
|
userBase.setNickName(user.getNickName()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// update 昵称 |
|
|
|
{ |
|
|
|
// check c_user 是否存在 |
|
|
|
WxCUser cUserQ = new WxCUser(); |
|
|
|
cUserQ.setTenantId(tenantId); |
|
|
|
cUserQ.setPhone(userBase.getPhone()); |
|
|
|
List<WxCUser> userList = wxCUserMapper.select(cUserQ); |
|
|
|
if (userList.size() > 0) { |
|
|
|
WxCUser user = userList.get(0); |
|
|
|
if (user != null) { |
|
|
|
if (oldUserBase != null) { |
|
|
|
if(oldUserBase != null) { |
|
|
|
oldUserBase.setNickName(user.getNickName()); |
|
|
|
} |
|
|
|
userBase.setId(user.getId()); |
|
|
|
userBase.setNickName(user.getNickName()); |
|
|
|
} else { |
|
|
|
|
|
|
|
userBase.setNickName(user.getNickName()); |
|
|
|
} |
|
|
|
if (oldUserBase != null) { |
|
|
|
logger.info("update user base: " + oldUserBase.getId()); |
|
|
|
wxCUserBasicInfoMapper.updateByPrimaryKeySelective(oldUserBase); |
|
|
|
} else { |
|
|
|
logger.info("insert user base: " + userBase.getId()); |
|
|
|
try { |
|
|
|
wxCUserBasicInfoMapper.insertSelective(userBase); |
|
|
|
} catch (Exception e) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error(e.getMessage()); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
// update tags |
|
|
|
try { |
|
|
|
if (StringUtils.isNotBlank(userBase.getTagNames())) { |
|
|
|
// get tag ids |
|
|
|
String tagNames = userBase.getTagNames(); |
|
|
|
List<Long> tagIdList = new ArrayList<>(); |
|
|
|
for (String tagName : tagNames.split("/")) { |
|
|
|
for(WxTags tag: tagList) { |
|
|
|
if(tagName.equals(tag.getName())) { |
|
|
|
tagIdList.add(Long.valueOf(tag.getId())); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (oldUserBase != null) { |
|
|
|
logger.info("update user base: " + oldUserBase.getId()); |
|
|
|
wxCUserBasicInfoMapper.updateByPrimaryKeySelective(oldUserBase); |
|
|
|
} else { |
|
|
|
logger.info("insert user base: " + userBase.getId()); |
|
|
|
try { |
|
|
|
wxCUserBasicInfoMapper.insertSelective(userBase); |
|
|
|
} catch (Exception e) { |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey, "processCount", 1); |
|
|
|
logger.error(e.getMessage()); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (oldUserBase != null){ |
|
|
|
wxCUserTagsService.assignTags(tagIdList,oldUserBase); |
|
|
|
}else{ |
|
|
|
wxCUserTagsService.assignTags(tagIdList,userBase); |
|
|
|
} |
|
|
|
// update tags |
|
|
|
try { |
|
|
|
if (StringUtils.isNotBlank(userBase.getTagNames())) { |
|
|
|
// get tag ids |
|
|
|
String tagNames = userBase.getTagNames(); |
|
|
|
List<Long> tagIdList = new ArrayList<>(); |
|
|
|
for (String tagName : tagNames.split("/")) { |
|
|
|
for(WxTags tag: tagList) { |
|
|
|
if(tagName.equals(tag.getName())) { |
|
|
|
tagIdList.add(Long.valueOf(tag.getId())); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (oldUserBase != null){ |
|
|
|
wxCUserTagsService.assignTags(tagIdList,oldUserBase); |
|
|
|
}else{ |
|
|
|
wxCUserTagsService.assignTags(tagIdList,userBase); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//触发自动打标签 |
|
|
|
if (oldUserBase != null) { |
|
|
|
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT,oldUserBase); |
|
|
|
} |
|
|
|
else{ |
|
|
|
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT,userBase); |
|
|
|
} |
|
|
|
//触发自动打标签 |
|
|
|
if (oldUserBase != null) { |
|
|
|
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT,oldUserBase); |
|
|
|
} |
|
|
|
else{ |
|
|
|
wxCUserTagsService.triggerAssignTags(EnumAssignTagsTrigger.ASSIGN_TAGS_TRIGGER_IMPORT,userBase); |
|
|
|
} |
|
|
|
|
|
|
|
// 成长值 |
|
|
|
if (StringUtils.isNotBlank(uBase.getPoins())) { |
|
|
|
if (oldUserBase != null) { |
|
|
|
wxScoreRulesService.addScore2(EnumScoreType.MEM_IMPORT, oldUserBase, uBase.getPoins()); |
|
|
|
} else { |
|
|
|
wxScoreRulesService.addScore2(EnumScoreType.MEM_IMPORT, userBase, uBase.getPoins()); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error(e.getMessage()); |
|
|
|
logger.error("打标签+成长值失败--继续导入"); |
|
|
|
// 成长值 |
|
|
|
if (StringUtils.isNotBlank(uBase.getPoins())) { |
|
|
|
if (oldUserBase != null) { |
|
|
|
wxScoreRulesService.addScore2(EnumScoreType.MEM_IMPORT, oldUserBase, uBase.getPoins()); |
|
|
|
} else { |
|
|
|
wxScoreRulesService.addScore2(EnumScoreType.MEM_IMPORT, userBase, uBase.getPoins()); |
|
|
|
} |
|
|
|
|
|
|
|
//记数 |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey,"processCount",1); |
|
|
|
}); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
stringRedisTemplate.opsForHash().put(importKey, "allCount", "" + all_fail); |
|
|
|
e.printStackTrace(); |
|
|
|
logger.error("导入模板失败:"+e.getMessage()); |
|
|
|
logger.error(e.getMessage()); |
|
|
|
logger.error("打标签+成长值失败--继续导入"); |
|
|
|
} |
|
|
|
|
|
|
|
return new ResultData(); |
|
|
|
//记数 |
|
|
|
stringRedisTemplate.opsForHash().increment(importKey,"processCount",1); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|