UserWeixinWeixinMessageTemplateServiceImpl.java 3.37 KB
package com.topdraw.weixin.service.impl;


import com.topdraw.utils.QueryHelp;
import com.topdraw.weixin.domain.UserWeixinWeixinMessageTemplate;
import com.topdraw.weixin.domain.WeixinMessageTemplate;
import com.topdraw.weixin.repository.UserWeixinWeixinMessageTemplateRepository;
import com.topdraw.weixin.repository.WeixinMessageTemplateRepository;
import com.topdraw.weixin.service.UserWeixinWeixinMessageTemplateService;
import com.topdraw.weixin.service.dto.UpdateUserWeixinWeixinMessageTemplateQueryCriteria;
import com.topdraw.weixin.service.dto.UserWeixinWeixinMessageTemplateQueryCriteria;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;

/**
 * @author pengmengqing
 * @date 2021-01-28
 */
@Service
@Slf4j
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class UserWeixinWeixinMessageTemplateServiceImpl implements UserWeixinWeixinMessageTemplateService {

    @Autowired
    private UserWeixinWeixinMessageTemplateRepository userWeixinWeixinMessageTemplateRepository;

    @Autowired
    private WeixinMessageTemplateRepository weixinMessageTemplateRepository;

    @Override
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
    public void createOrUpdate(UpdateUserWeixinWeixinMessageTemplateQueryCriteria criteria) {
        for (UserWeixinWeixinMessageTemplateQueryCriteria queryCriteria : criteria.getTemplateList()) {
            queryCriteria.setMemberId(criteria.getMemberId());
            Integer status = queryCriteria.getStatus();
            queryCriteria.setStatus(null);
            String templateId = queryCriteria.getTemplateId();
            Optional<WeixinMessageTemplate> templateOptional = weixinMessageTemplateRepository.findFirstByTemplateId(templateId);
            if (!templateOptional.isPresent()) {
                log.info("template " + templateId + " not exist");
                continue;
            }
            Long id = templateOptional.get().getId();
            queryCriteria.setWeixinMessageTemplateId(id);
            Optional<UserWeixinWeixinMessageTemplate> optional = userWeixinWeixinMessageTemplateRepository.findOne(((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, queryCriteria, criteriaBuilder)));
            if (!optional.isPresent()) {
                UserWeixinWeixinMessageTemplate userWeixinWeixinMessageTemplate = new UserWeixinWeixinMessageTemplate();
                userWeixinWeixinMessageTemplate.setUserWeixinId(queryCriteria.getMemberId())
                        .setWeixinMessageTemplateId(queryCriteria.getWeixinMessageTemplateId())
                        .setStatus(status);
                userWeixinWeixinMessageTemplateRepository.save(userWeixinWeixinMessageTemplate);
            } else {
                UserWeixinWeixinMessageTemplate UserWeixinWeixinMessageTemplate = optional.get();
                if (!status.equals(UserWeixinWeixinMessageTemplate.getStatus())) {
                    UserWeixinWeixinMessageTemplate.setStatus(status);
                    userWeixinWeixinMessageTemplateRepository.save(UserWeixinWeixinMessageTemplate);
                }
            }
        }
    }
}