package com.deloitte.system.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.common.core.constant.GlobalConst; import com.common.core.enums.ResultCodeEnum; import com.common.core.exception.BizException; import com.common.core.service.CryptoService; import com.common.core.utils.BeanHelper; import com.common.core.utils.DateUtils; import com.common.core.utils.DesensitiveUtils; import com.common.core.utils.IdUtils; import com.common.core.utils.StringUtils; import com.common.redis.util.RedisUtil; import com.deloitte.system.model.CacheList; import com.deloitte.system.model.CampaignUser; import com.deloitte.system.model.Contact; import com.deloitte.system.request.CampaignUserAllDto; import com.deloitte.system.request.CampaignUserDto; import com.deloitte.system.request.ContactDto; import com.deloitte.system.request.OperatorQueryDto; import com.opencsv.bean.CsvToBean; import com.opencsv.bean.CsvToBeanBuilder; import com.opencsv.bean.HeaderColumnNameMappingStrategy; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import static com.common.core.constant.GlobalConst.PIPL_UNCONFIRM_INSERT; import static com.common.core.constant.GlobalConst.PIPL_UNCONFIRM_UPDATE; @Slf4j @Service public class CampaignUserService { private String tableName="campaign_user"; @Autowired private CryptoService cryptoService; @Autowired private IdUtils idWorker; @Autowired private RedisUtil redisUtil; public CampaignUserDto queryForOne(String dataId) { CampaignUser campaignUser =CampaignUser.dao.findById(dataId); if (!ObjectUtil.isEmpty(campaignUser)){ CampaignUserDto dto = BeanHelper.copyAs(campaignUser, CampaignUserDto.class); return dto; } return null; } public List insertList(List campaignUserDtoList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); campaignUserDtoList.forEach(e -> { String dataId = idWorker.nextId(); CampaignUserDto cacheItem = BeanHelper.copyAs(e, CampaignUserDto.class); cacheItem.setDataId(dataId); dtoItemList.add(cacheItem); CampaignUserDto target = BeanHelper.copyAs(e, CampaignUserDto.class); target.setDataId(dataId); CampaignUserDto dto = cryptoService.encryptModelColumns(e); dto.setDataId(dataId); target.setNameEncrypt(dto.getName()); target.setPhoneEncrypt(dto.getPhone()); target.setEmailEncrypt(dto.getEmail()); DesensitiveUtils.format(target); respList.add(target); }); dtoCacheList.setData(dtoItemList); String insertJsonString = JSONArray.toJSONString(dtoCacheList); String insertKey = PIPL_UNCONFIRM_INSERT + txId; boolean redisFlag = redisUtil.set(insertKey, insertJsonString, GlobalConst.DATA_EXPIRE); if (!redisFlag){ throw new BizException("缓存写入失败"); } return respList; } public List updateList(List campaignUserDtoList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); campaignUserDtoList.forEach(e -> { CampaignUser campaignUser = CampaignUser.dao.findById(e.getDataId()); CampaignUserDto cacheItem = BeanHelper.copyAs(e, CampaignUserDto.class); dtoItemList.add(cacheItem); CampaignUserDto dto = BeanHelper.copyAs(BeanHelper.copy(cacheItem,campaignUser),CampaignUserDto.class); CampaignUserDto target = BeanHelper.copyAs(dto, CampaignUserDto.class); dto = cryptoService.encryptModelColumns(dto); target.setNameEncrypt(dto.getName()); target.setPhoneEncrypt(dto.getPhone()); target.setEmailEncrypt(dto.getEmail()); DesensitiveUtils.format(target); respList.add(target); }); dtoCacheList.setData(dtoItemList); String updateJsonString = JSONArray.toJSONString(dtoCacheList); String updateKey = PIPL_UNCONFIRM_UPDATE + txId; boolean redisFlag = redisUtil.set(updateKey, updateJsonString,GlobalConst.DATA_EXPIRE); if (!redisFlag){ throw new BizException("缓存写入失败"); } return respList; } public Boolean deleteOne(String dataId) { CampaignUser campaignUser = CampaignUser.dao.findById(dataId); campaignUser.setIsDelete(1); return campaignUser.saveOrUpdate(); } public Boolean undeleteOne(String dataId) { CampaignUser campaignUser = CampaignUser.dao.findById(dataId); campaignUser.setIsDelete(0); return campaignUser.saveOrUpdate(); } public List search(List idList){ if (CollUtil.isEmpty(idList)) { return null; } StringBuilder queryParam = new StringBuilder(); queryParam.append("and id in ").append(idList.stream().collect(Collectors.joining(", ", "(", ")"))); List quotesList = CampaignUser.dao.findList(queryParam.toString()); return quotesList.stream() .map(quotes -> BeanHelper.copyAs(quotes, CampaignUserDto.class)).collect(Collectors.toList()); } public List batchUpload(MultipartFile[] files,String txId) { List listAll= null; try { InputStreamReader in = null; in = new InputStreamReader(files[0].getInputStream(), FileService.getFilecharset(files[0].getInputStream())); HeaderColumnNameMappingStrategy strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(CampaignUserAllDto.class); CsvToBean csvToBean = new CsvToBeanBuilder(in) .withSeparator(',') .withQuoteChar('\'') .withMappingStrategy(strategy).build(); listAll= csvToBean.parse(); List userList=BeanHelper.copyAs(listAll,CampaignUserDto.class); List userList2 = this.insertList(userList,txId); for (int i = 0; i < listAll.size(); i++) { BeanHelper.copy(userList2.get(i),listAll.get(i)); } } catch (Exception e) { log.error("CampaignUser batchUpload failed:",e); throw new BizException(ResultCodeEnum.AWS_RT_ERROR); } //日期转换 /*if(null!=listAll && !listAll.isEmpty()){ listAll.forEach(e->{ Date date = DateUtils.convert(e.getDateTime(),DateUtils.DATE_TIME_MINUTE_FORMAT2); e.setDateTime(DateUtils.format(date,DateUtils.DATE_TIME_MINUTE_FORMAT1)); }); }*/ return listAll; } public List searchListByOperator(List queryDtos) { StringBuilder queryParam = new StringBuilder(); for (OperatorQueryDto queryDto: queryDtos) { String queryName = queryDto.getName(); //name驼峰转下划线 String name = BeanHelper.propertyToColumn(queryName); String operator = queryDto.getOperator(); Object value = queryDto.getValue(); if(StringUtils.isNotEmpty(operator)){ if("=".equals(operator)||"!=".equals(operator)){ queryParam.append(" and c."+name).append(" "+operator+" ").append("'"+value+"'"); }else if("like".equals(operator)||"not like".equals(operator)){ queryParam.append(" and c."+name).append(" "+operator+" ").append("\'%").append(value).append("%\'"); }else if("in".equals(operator)||"not in".equals(operator)){ List value1 = (ArrayList)value; queryParam.append(" and c."+name).append(" "+operator+" ").append(value1.stream().collect(Collectors.joining("','", "('", "')"))); }else { throw new BizException("无效的sql请求!"); } } } queryParam.append(" and c.sf_record_id is not null"); String sql = "select c.* from campaign_user c WHERE c.is_delete = '0' "+queryParam.toString(); List campaignUserList = CampaignUser.dao.findListBySql(sql); return campaignUserList.stream().map(e->BeanHelper.copyAs(e,CampaignUserDto.class)).collect(Collectors.toList()); } }