package com.cloudroam.service.impl;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloudroam.bo.supplierContact.SupplierContactInfoBO;
import com.cloudroam.common.LocalUser;
import com.cloudroam.common.enumeration.DeletedEnum;
import com.cloudroam.common.enumeration.SysDictTypeEnum;
import com.cloudroam.dto.supplierContact.CreateOrUpdateSupplierContactDTO;
import com.cloudroam.dto.supplierContact.QuerySupplierContactDTO;
import com.cloudroam.mapper.SupplierContactInfoMapperCustom;
import com.cloudroam.model.*;
import com.cloudroam.mapper.SupplierContactInfoMapper;
import com.cloudroam.service.SupplierContactInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloudroam.service.SupplierContactProjectReService;
import com.cloudroam.service.SysDictItemReService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author generator@TaoJie
* @since 2024-07-16
*/
@Service
public class SupplierContactInfoServiceImpl extends ServiceImpl implements SupplierContactInfoService {
@Autowired
private SupplierContactInfoMapperCustom supplierContactInfoMapperCustom;
@Autowired
private SupplierContactProjectReService supplierContactProjectReService;
@Autowired
private SysDictItemReService sysDictItemReService;
@Override
@Transactional
public boolean CreateSupplierContactInfo(CreateOrUpdateSupplierContactDTO validator) {
UserDO user = LocalUser.getLocalUser();
SupplierContactInfoDO supplierContactInfoDO=new SupplierContactInfoDO();
BeanUtils.copyProperties(validator,supplierContactInfoDO);
supplierContactInfoDO.setId(IdUtil.simpleUUID());
supplierContactInfoDO.setCreateTime(new Date());
supplierContactInfoDO.setCreateUserId(String.valueOf(user.getId()));
supplierContactInfoDO.setCreateUserName(user.getNickname());
supplierContactInfoDO.setUpdateTime(new Date());
supplierContactInfoDO.setUpdateUserId(String.valueOf(user.getId()));
supplierContactInfoDO.setUpdateUserName(user.getNickname());
supplierContactInfoDO.setIsDeleted(DeletedEnum.DELETED_NO.getCode());
// 保存项目信息
final List supplierContactProjectReDOS = validator.getProjectList().stream().map(projectId -> {
SupplierContactProjectReDO supplierContactProjectReDO = new SupplierContactProjectReDO();
supplierContactProjectReDO.setId(IdUtil.simpleUUID());
supplierContactProjectReDO.setProjectId(projectId);
supplierContactProjectReDO.setSupplierContactId(supplierContactInfoDO.getId());
return supplierContactProjectReDO;
}).collect(Collectors.toList());
supplierContactProjectReService.saveBatch(supplierContactProjectReDOS);
// 保存字典项的字典信息
final List sysDictReList = validator.getSkillList().stream().map(sysDictValue -> {
SysDictItemReDO sysDictItemReDO = new SysDictItemReDO();
sysDictItemReDO.setId(IdUtil.simpleUUID());
sysDictItemReDO.setTargetId(supplierContactInfoDO.getId());
sysDictItemReDO.setSysDictType(SysDictTypeEnum.SKILL_TYPE.getCode());
sysDictItemReDO.setSysDictValue(sysDictValue);
return sysDictItemReDO;
}).collect(Collectors.toList());
sysDictItemReService.saveBatch(sysDictReList);
return baseMapper.insert(supplierContactInfoDO)>0;
}
@Override
@Transactional
public boolean updateSupplierContactInfo(CreateOrUpdateSupplierContactDTO validator) {
UserDO user = LocalUser.getLocalUser();
SupplierContactInfoDO supplierContactInfoDO=new SupplierContactInfoDO();
BeanUtils.copyProperties(validator,supplierContactInfoDO);
supplierContactInfoDO.setUpdateTime(new Date());
supplierContactInfoDO.setUpdateUserId(String.valueOf(user.getId()));
supplierContactInfoDO.setUpdateUserName(user.getNickname());
supplierContactInfoDO.setIsDeleted(DeletedEnum.DELETED_NO.getCode());
return baseMapper.updateById(supplierContactInfoDO)>0;
}
@Override
@Transactional
public boolean removeByIdLogic(String id) {
UserDO user = LocalUser.getLocalUser();
SupplierContactInfoDO supplierContactInfoDO=new SupplierContactInfoDO();
supplierContactInfoDO.setId(id);
supplierContactInfoDO.setIsDeleted(DeletedEnum.DELETED_YES.getCode());
supplierContactInfoDO.setDeleteTime(new Date());
supplierContactInfoDO.setDeleteUserId(String.valueOf(user.getId()));
supplierContactInfoDO.setDeleteUserName(user.getNickname());
return baseMapper.updateById(supplierContactInfoDO)>0;
}
@Override
public IPage getSupplierContactInfoPage(QuerySupplierContactDTO dto) {
Page page=new Page(dto.getPage(),dto.getCount());
return supplierContactInfoMapperCustom.getSupplierContactInfoPage(page,dto);
}
@Override
public List getSupplierContactInfoList(QuerySupplierContactDTO dto) {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("is_deleted", DeletedEnum.DELETED_NO.getCode());
if(StrUtil.isNotBlank(dto.getCompanyId())){
wrapper.eq("company_id",dto.getCompanyId());
}
if(StrUtil.isNotBlank(dto.getName())){
wrapper.like("name",dto.getName());
}
if(StrUtil.isNotBlank(dto.getPhone())){
wrapper.like("phone",dto.getPhone());
}
if(StrUtil.isNotBlank(dto.getTitle())){
wrapper.like("title",dto.getTitle());
}
return this.baseMapper.selectList(wrapper);
}
@Override
public SupplierContactInfoBO getSupplierContactInfoById(String id) {
SupplierContactInfoBO supplierContactInfoBO=new SupplierContactInfoBO();
final SupplierContactInfoDO supplierContactInfoDO = baseMapper.selectById(id);
BeanUtils.copyProperties(supplierContactInfoDO,supplierContactInfoBO);
// 根据 供应商id获取关联的项目信息
List projectList=supplierContactInfoMapperCustom.getProjectListByContactId(id);
// 根据供应商id获取关联的技能信息
List skillList=supplierContactInfoMapperCustom.getSkillListByContactId(id);
final List projectIdList = projectList.stream().map(project -> project.getId()).collect(Collectors.toList());
final List skillValueList = skillList.stream().map(sysDictItemDO -> sysDictItemDO.getValue()).collect(Collectors.toList());
supplierContactInfoBO.setProjectList(projectIdList);
supplierContactInfoBO.setSkillList(skillValueList);
return supplierContactInfoBO;
}
}