package fcb.project.manager.base.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import fcb.project.manager.base.dao.TmHouseDao;
import fcb.project.manager.base.entity.ContextTokenBean;
import fcb.project.manager.base.entity.TmHouse;
import fcb.project.manager.base.enums.DeleteStatus;
import fcb.project.manager.base.enums.HouseStatus;
import fcb.project.manager.base.enums.SysUserRoleEnums;
import fcb.project.manager.base.enums.UuidPreEnum;
import fcb.project.manager.base.service.ITmHouseService;
import fcb.project.manager.base.service.custom.PanoService;
import fcb.project.manager.core.feignInterfaces.UserFeign;
import fdage.back.sdk.base.uuid.SnowFlakeUUidUtils;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.*;
/**
*
* 服务实现类
*
*
* @author abner
* @since 2021-01-07
*/
@Service
@Log4j2
public class TmHouseServiceImpl extends ServiceImpl implements ITmHouseService {
@Autowired
private UserFeign userFeign;
@Autowired
private PanoService panoService;
@Autowired
private TmAuditServiceImpl tmAuditService;
@Value("${inner.vr.scene.host}")
private String innerSceneVrHost;
@Value("${outer.vr.scene.host}")
private String outerSceneVrHost;
public IPage getListByNameOrBelong(String houseTitle,
Integer status, Integer type,
String estateId, ContextTokenBean contextTokenBean,
String token,
Long pageNum, Long pageSize) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TmHouse::getEstateId, estateId);
lambdaQueryWrapper.eq(TmHouse::getIsShow, 1);
if (StringUtils.isNotBlank(houseTitle)) {
lambdaQueryWrapper.like(TmHouse::getHouseTitle, houseTitle);
}
if (null != contextTokenBean) {
if (StringUtils.equals(contextTokenBean.getRoleKey(), SysUserRoleEnums.ADMIN.getRoleKey())
|| StringUtils.equals(contextTokenBean.getRoleKey(), SysUserRoleEnums.GROUP.getRoleKey())) {
//超级管理员和集团管理员可以看到所有数据
} else {
//非超级管理员,只能看到自己部门的
Map map = new HashMap<>();
map.put("id" , contextTokenBean.getDepartmentId());
Object userResult = userFeign.getAllChildDeptList(map);
log.info("用户模块返回的数据为:{}" , userResult);
lambdaQueryWrapper.eq(TmHouse::getBelongCompanyId , contextTokenBean.getDepartmentId());
}
}
if (null != status) {
lambdaQueryWrapper.eq(TmHouse::getStatus, status);
}
if (null != type) {
lambdaQueryWrapper.eq(TmHouse::getType, type);
}
lambdaQueryWrapper.orderByDesc(TmHouse::getCreateTime);
IPage page = new Page<>(pageNum, pageSize, true);
IPage resultPage = getBaseMapper().selectPage(page, lambdaQueryWrapper);
if(null != resultPage && resultPage.getTotal() > 0){
List getAllHouseIds = new ArrayList<>();
for (int i = 0; i < resultPage.getRecords().size(); i++) {
getAllHouseIds.add(resultPage.getRecords().get(i).getId());
}
//从720获取最新的预览路径,重新封装给前端展示
TreeMap treeMap = panoService.getHouseVrlinks(getAllHouseIds , token);
for (int i = 0; i < resultPage.getRecords().size(); i++) {
String vrId = resultPage.getRecords().get(i).getId();
//获取当前房源的审核记录数,用于前端判决是否展示审核历史图标
resultPage.getRecords().get(i).setCountNum(tmAuditService.countAuditNum(vrId));
if(!CollectionUtils.isEmpty(treeMap)){
String path = (String) treeMap.get(vrId);
String outerHost = outerSceneVrHost.substring(0 , outerSceneVrHost.length() - 1);
String innerHost = innerSceneVrHost.substring(0 , innerSceneVrHost.length() - 1);
resultPage.getRecords().get(i).setInnerVrLink(innerHost + path);
resultPage.getRecords().get(i).setInnerVrLink(outerHost + path);
}
}
}
return resultPage;
}
public IPage checkEstateCanDelete(String estateId) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TmHouse::getEstateId, estateId);
lambdaQueryWrapper.in(TmHouse::getStatus, HouseStatus.AUDITED.getCode() , HouseStatus.WAITING_AUDIT.getCode());
IPage page = new Page<>(1, 10, true);
return getBaseMapper().selectPage(page, lambdaQueryWrapper);
}
public IPage getAuditHouseList(String houseTitle, Integer status, Integer type,
String belongCompany, String estateName, String token,
Long pageNum, Long pageSize) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TmHouse::getIsShow, 1);
if (StringUtils.isNotBlank(houseTitle)) {
lambdaQueryWrapper.like(TmHouse::getHouseTitle, houseTitle);
}
lambdaQueryWrapper.orderByDesc(TmHouse::getSubmitAuditTime);
if (null != status) {
if (HouseStatus.ALL.getCode().compareTo(status) != 0) {
lambdaQueryWrapper.eq(TmHouse::getStatus, status);
} else {
lambdaQueryWrapper.ne(TmHouse::getStatus, HouseStatus.DRAFT.getCode());
}
//捞取所有状态,默认不设置status的过滤条件
} else {
lambdaQueryWrapper.eq(TmHouse::getStatus, HouseStatus.WAITING_AUDIT.getCode());
}
if (StringUtils.isNotBlank(estateName)) {
lambdaQueryWrapper.like(TmHouse::getEstateName, estateName);
}
if (StringUtils.isNotBlank(belongCompany)) {
lambdaQueryWrapper.eq(TmHouse::getBelongCompanyId, belongCompany);
}
if (null != type) {
lambdaQueryWrapper.eq(TmHouse::getType, type);
}
IPage page = new Page<>(pageNum, pageSize, true);
IPage resultPage = getBaseMapper().selectPage(page, lambdaQueryWrapper);
if(null != resultPage && resultPage.getTotal() > 0){
List getAllHouseIds = new ArrayList<>();
for (int i = 0; i < resultPage.getRecords().size(); i++) {
getAllHouseIds.add(resultPage.getRecords().get(i).getId());
}
//从720获取最新的预览路径,重新封装给前端展示
TreeMap treeMap = panoService.getHouseVrlinks(getAllHouseIds , token);
for (int i = 0; i < resultPage.getRecords().size(); i++) {
String vrId = resultPage.getRecords().get(i).getId();
resultPage.getRecords().get(i).setCountNum(tmAuditService.countAuditNum(vrId));
if(!CollectionUtils.isEmpty(treeMap)){
String path = (String) treeMap.get(vrId);
String outerHost = outerSceneVrHost.substring(0 , outerSceneVrHost.length() - 1);
String innerHost = innerSceneVrHost.substring(0 , innerSceneVrHost.length() - 1);
resultPage.getRecords().get(i).setInnerVrLink(innerHost + path);
resultPage.getRecords().get(i).setInnerVrLink(outerHost + path);
}
}
}
return resultPage;
}
public int deleteHouseById(String houseId) {
if (StringUtils.isBlank(houseId)) {
return -1;
}
return getBaseMapper().deleteById(houseId);
}
public TmHouse getOneByNameAndEstate(String houseTitle, String estateId, int type) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(houseTitle)) {
lambdaQueryWrapper.eq(TmHouse::getHouseTitle, houseTitle);
}
if (StringUtils.isNotBlank(estateId)) {
lambdaQueryWrapper.eq(TmHouse::getEstateId, estateId);
}
lambdaQueryWrapper.eq(TmHouse::getType, type);
lambdaQueryWrapper.eq(TmHouse::getIsDelete, DeleteStatus.NOT_DELETE.getCode());
lambdaQueryWrapper.last("limit 1");
return getBaseMapper().selectOne(lambdaQueryWrapper);
}
@Transactional(rollbackFor = Exception.class)
public boolean updateHouse(TmHouse tmHouse) {
if (null == tmHouse) {
return false;
}
if (null == tmHouse.getId()) {
log.info("主键ID为空,无法更房源信息");
return false;
}
tmHouse.setUpdateTime(LocalDateTime.now());
return 1 == getBaseMapper().updateById(tmHouse);
}
public TmHouse selectForUpdate(String id) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TmHouse::getId, id);
lambdaQueryWrapper.last("for update");
return getBaseMapper().selectOne(lambdaQueryWrapper);
}
public boolean insertNew(TmHouse tmHouse) {
if (StringUtils.isBlank(tmHouse.getId())) {
tmHouse.setId(SnowFlakeUUidUtils.generaUUid(null, null, UuidPreEnum.HOUSE_ID_PRE.getPre()));
}
tmHouse.setCreateTime(LocalDateTime.now());
tmHouse.setUpdateTime(LocalDateTime.now());
tmHouse.setIsDelete(DeleteStatus.NOT_DELETE.getCode());
return 1 == getBaseMapper().insert(tmHouse);
}
public TmHouse insertNewWithRsp(TmHouse tmHouse) {
if (StringUtils.isBlank(tmHouse.getId())) {
tmHouse.setId(SnowFlakeUUidUtils.generaUUid(null, null, UuidPreEnum.HOUSE_ID_PRE.getPre()));
}
tmHouse.setCreateTime(LocalDateTime.now());
tmHouse.setUpdateTime(LocalDateTime.now());
tmHouse.setIsDelete(DeleteStatus.NOT_DELETE.getCode());
getBaseMapper().insert(tmHouse);
return tmHouse;
}
public TmHouse getBySceneNumAndHouseId(String sceneNum, String projectId, String houseId) {
if (!StringUtils.isNoneBlank(sceneNum, projectId, houseId)) {
return null;
}
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TmHouse::getSceneNum, sceneNum);
lambdaQueryWrapper.eq(TmHouse::getEstateId, projectId);
lambdaQueryWrapper.eq(TmHouse::getFcbHouseId, houseId);
return getBaseMapper().selectOne(lambdaQueryWrapper);
}
}