package com.nova.sankuai.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nova.sankuai.domain.dto.LoanMarketConfigDto; import com.nova.sankuai.domain.dto.LoanSupermarketPageDto; import com.nova.sankuai.domain.dto.LoanSupermarketVisitDto; import com.nova.sankuai.domain.entity.ChannelInfo; import com.nova.sankuai.domain.entity.Customer; import com.nova.sankuai.domain.entity.CustomerUser; import com.nova.sankuai.domain.entity.LoanSupermarket; import com.nova.sankuai.domain.vo.LoanMarketHotLinkVo; import com.nova.sankuai.domain.vo.LoanSupermarketVo; import com.nova.sankuai.infra.config.CommonException; import com.nova.sankuai.infra.mapper.ChannelInfoMapper; import com.nova.sankuai.infra.mapper.CustomerMapper; import com.nova.sankuai.infra.mapper.CustomerUserMapper; import com.nova.sankuai.infra.mapper.LoanSupermarketMapper; import com.nova.sankuai.infra.utils.PageRequest; import com.nova.sankuai.infra.utils.PageUtil; import com.nova.sankuai.security.UserDetail; import com.nova.sankuai.service.*; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * @author weikangdi */ @Service @AllArgsConstructor public class LoanSupermarketServiceImpl extends ServiceImpl implements ILoanSupermarketService { private final LoanSupermarketMapper supermarketMapper; private final PageUtil pageUtil; private final IChannelLogService channelLogService; private final IChannelSupermarketService channelSupermarketService; private final IH5ChannelLoanMarketService h5ChannelLoanMarketService; private final ChannelInfoMapper channelInfoMapper; private final CustomerMapper customerMapper; private final CustomerUserMapper customerUserMapper; private final IChannelInfoService channelInfoService; @Override public IPage pageModel(PageRequest pageRequest, LoanSupermarketPageDto pageDto) { IPage page = supermarketMapper.pageModel(pageUtil.getPage(pageRequest), pageDto); return page; } @Override public void addVisitRecord(LoanSupermarketVisitDto visitDto) { channelLogService.createSupermarketLog(visitDto.getId(), visitDto.getSource(), visitDto.getCustomerId()); } @Override public List getSupermarketList() { List result = supermarketMapper.getSupermarketList(); return result; } @Override @Transactional(rollbackFor = Exception.class) public void addLoanSupermarket(LoanSupermarket supermarket) { supermarket.setCreationDate(new Date()); save(supermarket); channelSupermarketService.saveBySupermarket(supermarket); h5ChannelLoanMarketService.saveBySupermarket(supermarket); } @Override public void edit(LoanSupermarket supermarket) { LoanSupermarket loanSupermarketDb = getById(supermarket.getId()); if (loanSupermarketDb == null) { throw new CommonException("该贷款超市不存在"); } loanSupermarketDb.setName(supermarket.getName()); loanSupermarketDb.setScopeStart(supermarket.getScopeStart()); loanSupermarketDb.setScopeEnd(supermarket.getScopeEnd()); loanSupermarketDb.setMonthlyInterestRate(supermarket.getMonthlyInterestRate()); loanSupermarketDb.setDateStart(supermarket.getDateStart()); loanSupermarketDb.setDateEnd(supermarket.getDateEnd()); loanSupermarketDb.setHotFlag(supermarket.getHotFlag()); loanSupermarketDb.setImageUrl(supermarket.getImageUrl()); loanSupermarketDb.setLinkUrl(supermarket.getLinkUrl()); loanSupermarketDb.setDescription(supermarket.getDescription()); loanSupermarketDb.setSerialNumber(supermarket.getSerialNumber()); updateById(loanSupermarketDb); } @Override public void editChannelConfig(LoanMarketConfigDto configDto) { LoanSupermarket loanSupermarketDb = getById(configDto.getId()); if (loanSupermarketDb == null) { throw new CommonException("该贷款超市不存在"); } BeanUtils.copyProperties(configDto, loanSupermarketDb); updateById(loanSupermarketDb); channelSupermarketService.editByLoanMarket(loanSupermarketDb); h5ChannelLoanMarketService.editByLoanMarket(loanSupermarketDb); } @Override public List getLoanMarketHotLinkList() { List result = supermarketMapper.getLoanMarketHotLinkList(); return result; } @Override public boolean checkLoanMarketHotLinkRely(Long loanMarketId) { LoanSupermarket supermarket = getById(loanMarketId); if (supermarket == null) { throw new CommonException("该贷款超市不存在"); } Integer count = channelInfoMapper.checkLoanMarketHotLinkRely(loanMarketId); if (count > 0) { return true; } return false; } @Override public void delete(Long id) { LoanSupermarket loanSupermarket = getById(id); if (loanSupermarket == null) { throw new CommonException("该贷款超市不存在"); } removeById(id); channelInfoMapper.update(null, Wrappers.lambdaUpdate() .set(ChannelInfo::getLoanMarketHotLinkSwitch, 0) .set(ChannelInfo::getLoanMarketHotLinkId, null) .eq(ChannelInfo::getLoanMarketHotLinkId, loanSupermarket.getId())); } @Override public List getSecondSupermarket() { List loanSupermarketList = list(new LambdaQueryWrapper() .eq(LoanSupermarket::getDeleteFlag, 0) .eq(LoanSupermarket::getEnableFlag, 1) .orderByAsc(LoanSupermarket::getSerialNumber)); List loanSupermarkets = new ArrayList<>(); if (loanSupermarketList != null && !loanSupermarketList.isEmpty()) { if (loanSupermarketList.size() > 2) { loanSupermarkets.add(loanSupermarketList.get(1)); } else { loanSupermarkets.add(loanSupermarketList.get(0)); } } else { loanSupermarkets.add(new LoanSupermarket()); } return loanSupermarkets; } @Override public List getVipMode() { return list(new LambdaQueryWrapper() .eq(LoanSupermarket::getDeleteFlag, 0) .eq(LoanSupermarket::getEnableFlag, 1) .eq(LoanSupermarket::getIsOpenVipMode, 1) .orderByAsc(LoanSupermarket::getSerialNumber)); } @Override public List getMyMoney(UserDetail userDetail) { Customer customer = customerMapper.getLatestCustomerRecord(userDetail.getPhone()); CustomerUser user = customerUserMapper.selectOne(Wrappers.lambdaQuery(CustomerUser.class).eq(CustomerUser::getPhone, userDetail.getPhone())); ChannelInfo channelInfo = channelInfoService.lambdaQuery().eq(ChannelInfo::getCode, user.getSourceChannel()).eq(ChannelInfo::getType, ChannelInfo.TYPE_IMPORT).one(); return baseMapper.findMyMoney(channelInfo.getId()); } @Override public LoanSupermarketVo getWaitApproval(UserDetail userDetail) { LoanSupermarket supermarket = lambdaQuery().eq(LoanSupermarket::getWaitApproval, 1).orderByDesc(LoanSupermarket::getSerialNumber).last("LIMIT 1").one(); if (Objects.nonNull(supermarket)) { LoanSupermarketVo vo = new LoanSupermarketVo(); BeanUtils.copyProperties(supermarket, vo); return vo; } return null; } }