package com.deloitte.system.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.common.core.constant.GlobalConst; import com.common.core.exception.BizException; import com.common.core.service.CryptoService; import com.common.core.utils.BeanHelper; import com.common.core.utils.DesensitiveUtils; import com.common.core.utils.IdUtils; import com.common.redis.util.RedisUtil; import com.deloitte.system.model.CacheList; import com.deloitte.system.model.MailMerge; import com.deloitte.system.request.MailMergeDto; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; 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; @Service public class MailMergeService { private String tableName="mail_merge"; @Autowired private CryptoService cryptoService; @Autowired private IdUtils idWorker; @Autowired private RedisUtil redisUtil; public MailMergeDto queryForOne(String dataId) { MailMerge mailMerge =MailMerge.dao.findById(dataId); if (!ObjectUtil.isEmpty(mailMerge)){ MailMergeDto dto = BeanHelper.copyAs(mailMerge, MailMergeDto.class); return dto; } return null; } public List insertList(List mailMergeDtoList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); mailMergeDtoList.forEach(e -> { String dataId = idWorker.nextId(); MailMergeDto cacheItem = BeanHelper.copyAs(e, MailMergeDto.class); cacheItem.setDataId(dataId); dtoItemList.add(cacheItem); MailMergeDto target = BeanHelper.copyAs(e, MailMergeDto.class); target.setDataId(dataId); MailMergeDto dto = cryptoService.encryptModelColumns(e); dto.setDataId(dataId); target.setCcEncrypt(dto.getCc()); target.setBccEncrypt(dto.getBcc()); target.setAuthorEncrypt(dto.getAuthor()); target.setAllMemberEncrypt(dto.getAllMember()); target.setToNameEncrypt(dto.getToName()); target.setAllMemberNameEncrypt(dto.getAllMemberName()); target.setCcNameEncrypt(dto.getCcName()); target.setBccNameEncrypt(dto.getBccName()); target.setRecipientEncrypt(dto.getRecipient()); target.setPremaryRecipientEncrypt(dto.getPremaryRecipient()); target.setSendEncrypt(dto.getSend()); target.setFromEncrypt(dto.getFrom()); target.setMessageEncrypt(dto.getMessage()); 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 mailMergeDtoList, String txId) { List respList = new ArrayList<>(); CacheList dtoCacheList = new CacheList<>(); dtoCacheList.setTableName(tableName); List dtoItemList = new ArrayList<>(); mailMergeDtoList.forEach(e -> { MailMerge mailMerge = MailMerge.dao.findById(e.getDataId()); MailMergeDto cacheItem = BeanHelper.copyAs(e, MailMergeDto.class); dtoItemList.add(cacheItem); MailMergeDto dto = BeanHelper.copyAs(BeanHelper.copy(cacheItem,mailMerge),MailMergeDto.class); MailMergeDto target = BeanHelper.copyAs(dto, MailMergeDto.class); dto = cryptoService.encryptModelColumns(dto); target.setCcEncrypt(dto.getCc()); target.setBccEncrypt(dto.getBcc()); target.setAuthorEncrypt(dto.getAuthor()); target.setAllMemberEncrypt(dto.getAllMember()); target.setToNameEncrypt(dto.getToName()); target.setAllMemberNameEncrypt(dto.getAllMemberName()); target.setCcNameEncrypt(dto.getCcName()); target.setBccNameEncrypt(dto.getBccName()); target.setRecipientEncrypt(dto.getRecipient()); target.setPremaryRecipientEncrypt(dto.getPremaryRecipient()); target.setSendEncrypt(dto.getSend()); target.setFromEncrypt(dto.getFrom()); target.setMessageEncrypt(dto.getMessage()); 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) { MailMerge mailMerge = MailMerge.dao.findById(dataId); mailMerge.setIsDelete(1); return mailMerge.saveOrUpdate(); } public Boolean undeleteOne(String dataId) { MailMerge mailMerge = MailMerge.dao.findById(dataId); mailMerge.setIsDelete(0); return mailMerge.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 = MailMerge.dao.findList(queryParam.toString()); return quotesList.stream() .map(quotes -> BeanHelper.copyAs(quotes, MailMergeDto.class)).collect(Collectors.toList()); } }