package com.panzhihua.service_community.service.impl;
|
|
import static java.util.Objects.isNull;
|
import static java.util.Objects.nonNull;
|
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.panzhihua.service_community.dao.McsConfigDAO;
|
import com.panzhihua.service_community.dao.McsGameDAO;
|
import com.panzhihua.service_community.entity.McsConfig;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.panzhihua.common.exceptions.ServiceException;
|
import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.DisableOrEnableMcsMerchantDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO;
|
import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsMerchantDTO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.community.microCommercialStreet.McsMerchantVO;
|
import com.panzhihua.common.service.user.UserService;
|
import com.panzhihua.common.utlis.DateUtils;
|
import com.panzhihua.service_community.dao.McsMerchantDAO;
|
import com.panzhihua.service_community.entity.McsMerchant;
|
import com.panzhihua.service_community.service.McsMerchantService;
|
|
/**
|
* (McsMerchant)表服务实现类
|
*
|
* @author makejava
|
* @since 2021-12-28 14:37:11
|
*/
|
@Service("mcsMerchantService")
|
public class McsMerchantServiceImpl extends ServiceImpl<McsMerchantDAO, McsMerchant> implements McsMerchantService {
|
|
private static final String MERCHANT_PUBLISH_LIMIT_KEY = "MERCHANT_PUBLISH_LIMIT";
|
private static final int DEFAULT_PUBLISH_LIMIT = 2;
|
|
@Resource
|
private UserService userService;
|
@Resource
|
private McsConfigDAO mcsConfigDAO;
|
@Resource
|
private McsGameDAO mcsGameDAO;
|
|
/**
|
* 新增数字商业街商家
|
* @param mcsMerchantDTO
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R addMcsMerchant(McsMerchantDTO mcsMerchantDTO) {
|
McsMerchant mcsMerchant = new McsMerchant();
|
BeanUtils.copyProperties(mcsMerchantDTO, mcsMerchant);
|
if (mcsMerchantDTO.getLevel().equals(1)) {
|
Integer litDays = mcsMerchantDTO.getLitDays();
|
if (isNull(litDays)) {
|
return R.fail("临时商家未设置点亮天数");
|
}
|
mcsMerchant.setExpireAt(DateUtils.addDay(new Date(), litDays));
|
mcsMerchant.setFirstLitAt(new Date());
|
}
|
McsConfig publishLimitConfig = mcsConfigDAO.selectOne(new QueryWrapper<McsConfig>().lambda().eq(McsConfig::getKey, MERCHANT_PUBLISH_LIMIT_KEY));
|
mcsMerchant.setPublishLimit(nonNull(publishLimitConfig) ? Integer.parseInt(publishLimitConfig.getValue()) : DEFAULT_PUBLISH_LIMIT);
|
mcsMerchant.setUserId(0L);
|
int insertResult = this.baseMapper.insert(mcsMerchant);
|
if (insertResult > 0) {
|
//添加user
|
R addUserResult = userService.addMcsMerchantUser(mcsMerchantDTO);
|
if (R.isOk(addUserResult)) {
|
Long merchantUserId = ((Integer) addUserResult.getData()).longValue();
|
mcsMerchant.setUserId(merchantUserId);
|
this.baseMapper.updateById(mcsMerchant);
|
} else {
|
throw new ServiceException("406", addUserResult.getMsg());
|
}
|
return R.ok();
|
}
|
return R.fail("添加失败");
|
}
|
|
/**
|
* 编辑数字商业街商家
|
* @param mcsMerchantDTO
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R putMcsMerchant(McsMerchantDTO mcsMerchantDTO) {
|
McsMerchant mcsMerchant = this.baseMapper.selectById(mcsMerchantDTO.getId());
|
Long userId = mcsMerchant.getUserId();
|
if (isNull(mcsMerchant)) {
|
return R.fail("商家不存在");
|
}
|
if (mcsMerchantDTO.getLevel().equals(1)) {
|
Integer litDays = mcsMerchantDTO.getLitDays();
|
if (nonNull(litDays)) {
|
mcsMerchant.setExpireAt(DateUtils.addDay(new Date(), litDays));
|
}
|
}
|
BeanUtils.copyProperties(mcsMerchantDTO, mcsMerchant);
|
int result = this.baseMapper.updateById(mcsMerchant);
|
if (result > 0) {
|
//修改商家绑定账户号
|
mcsMerchantDTO.setUserId(userId);
|
R putResult = userService.putMcsMerchantUser(mcsMerchantDTO);
|
if (!R.isOk(putResult)) {
|
throw new ServiceException("406", putResult.getMsg());
|
}
|
return R.ok();
|
}
|
return R.fail("修改失败,请重新尝试");
|
}
|
|
/**
|
* 查询数字商业街商家详情
|
* @param merchantId
|
* @return
|
*/
|
@Override
|
public R getMcsMerchant(Long merchantId) {
|
McsMerchantVO merchantVO = this.baseMapper.getMcsMerchantById(merchantId);
|
if (nonNull(merchantVO)) {
|
Integer publishLimit = merchantVO.getPublishLimit();
|
Integer publishCount = mcsGameDAO.selectPublishCount(merchantVO.getId());
|
Integer idleTotal = publishLimit - publishCount;
|
merchantVO.setIdleTotal(idleTotal > 0 ? idleTotal : 0);
|
if (nonNull(merchantVO.getExpireAt())) {
|
int surplusLitDays = DateUtils.differentDays(new Date(), merchantVO.getExpireAt());
|
merchantVO.setSurplusLitDays(surplusLitDays > 0 ? surplusLitDays : 0);
|
}
|
}
|
return R.ok(merchantVO);
|
}
|
|
/**
|
* 删除数字商业街商家
|
* @param merchantId
|
* @param userId
|
* @return
|
*/
|
@Override
|
public R deleteMcsMerchant(Long merchantId, Long userId) {
|
McsMerchant mcsMerchant = this.baseMapper.selectById(merchantId);
|
if (isNull(mcsMerchant)) {
|
return R.fail("商家不存在");
|
}
|
mcsMerchant.setIsDel(true);
|
this.baseMapper.updateById(mcsMerchant);
|
return R.ok();
|
}
|
|
/**
|
* 分页查询数字商业街商家
|
* @param pageMcsMerchantDTO
|
* @return
|
*/
|
@Override
|
public R pageMcsMerchant(PageMcsMerchantDTO pageMcsMerchantDTO) {
|
Page page = new Page<>();
|
page.setSize(pageMcsMerchantDTO.getPageSize());
|
page.setCurrent(pageMcsMerchantDTO.getPageNum());
|
IPage<McsMerchantVO> mcsMerchants = this.baseMapper.pageMcsMerchant(page, pageMcsMerchantDTO);
|
List<McsMerchantVO> records = mcsMerchants.getRecords();
|
if (nonNull(records) && !records.isEmpty()) {
|
Date nowDate = new Date();
|
records.forEach(e -> {
|
if (nonNull(e.getExpireAt())) {
|
int surplusLitDays = DateUtils.differentDays(nowDate, e.getExpireAt());
|
e.setSurplusLitDays(surplusLitDays > 0 ? surplusLitDays : 0);
|
}
|
});
|
}
|
return R.ok(mcsMerchants);
|
}
|
|
/**
|
* 禁用/启用数字商业街商家
|
* @param disableOrEnableMcsMerchantDTO
|
* @return
|
*/
|
@Override
|
public R disableOrEnableMcsMerchant(DisableOrEnableMcsMerchantDTO disableOrEnableMcsMerchantDTO) {
|
McsMerchant mcsMerchant = this.baseMapper.selectById(disableOrEnableMcsMerchantDTO.getMerchantId());
|
if (isNull(mcsMerchant)) {
|
return R.fail("商家不存在");
|
}
|
Integer type = disableOrEnableMcsMerchantDTO.getType();
|
if (type.equals(1) || type.equals(2)) {
|
//启用 or 禁用
|
DisableOrEnableConvenientMerchantDTO dto = new DisableOrEnableConvenientMerchantDTO();
|
dto.setType(type);
|
dto.setUserIds(Arrays.asList(mcsMerchant.getUserId()));
|
R r = userService.disableOrEnableMerchantUsers(dto);
|
return r;
|
} else {
|
return R.fail("未知错误");
|
}
|
}
|
}
|