| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- package com.ylx.massage.service.impl;
- import java.util.ArrayList;
- import java.util.LinkedHashSet;
- import java.util.List;
- import java.util.Set;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.ylx.common.core.domain.model.LoginUser;
- import com.ylx.common.exception.ServiceException;
- import com.ylx.common.utils.DateUtils;
- import com.ylx.common.utils.StringUtils;
- import com.ylx.massage.domain.MaProject;
- import com.ylx.massage.domain.MaTeProject;
- import com.ylx.massage.domain.dto.MaTechnicianMerchantAddDTO;
- import com.ylx.massage.domain.dto.MaTechnicianMerchantQueryDTO;
- import com.ylx.massage.domain.dto.MassageMerchantRecommendDto;
- import com.ylx.massage.domain.vo.MaTechnicianAppAddVo;
- import com.ylx.massage.domain.vo.MaTechnicianMerchantListVO;
- import com.ylx.massage.domain.vo.MerchantVo;
- import com.ylx.massage.mapper.MaProjectMapper;
- import com.ylx.massage.mapper.MaTeProjectMapper;
- import com.ylx.project.domain.Project;
- import com.ylx.project.mapper.ProjectMapper;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.ylx.massage.mapper.MaTechnicianMapper;
- import com.ylx.massage.domain.MaTechnician;
- import com.ylx.massage.service.IMaTechnicianService;
- import org.springframework.transaction.annotation.Transactional;
- /**
- * 技师Service业务层处理
- *
- * @author ylx
- * @date 2024-03-22
- */
- @Service
- public class MaTechnicianServiceImpl implements IMaTechnicianService
- {
- private static final int SERVICE_STATE_AVAILABLE = 1;
- private static final int POST_STATE_OFFLINE = 0;
- private static final int ENABLED = 1;
- private static final int DEFAULT_AGE = 18;
- private static final int AUDIT_APPROVED = 2;
- private static final int NS_STATUS_NOT_ON_DUTY = -1;
- private static final int DEFAULT_STAT_VALUE = 0;
- private static final long NOT_DELETED = 0L;
- private static final String MERCHANT_STATUS_NORMAL = "0";
- @Autowired
- private MaTechnicianMapper maTechnicianMapper;
- @Autowired
- private MaTeProjectMapper maTeProjectMapper;
- @Autowired
- private ProjectMapper projectMapper;
- /**
- * 查询技师
- *
- * @param id 技师主键
- * @return 技师
- */
- @Override
- public MaTechnician selectMaTechnicianById(Long id)
- {
- return maTechnicianMapper.selectMaTechnicianById(id);
- }
- /**
- * 查询技师列表
- *
- * @param maTechnician 技师
- * @return 技师
- */
- @Override
- public List<MaTechnician> selectMaTechnicianList(MaTechnician maTechnician)
- {
- return maTechnicianMapper.selectMaTechnicianList(maTechnician);
- }
- /**
- * 新增技师
- *
- * @param maTechnicianAppAddVo 技师
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int insertMaTechnician(MaTechnicianAppAddVo maTechnicianAppAddVo)
- {
- MaTechnician maTechnician = new MaTechnician();
- BeanUtils.copyProperties(maTechnicianAppAddVo, maTechnician);
- int rows = maTechnicianMapper.insertMaTechnician(maTechnician);
- if (maTechnicianAppAddVo.getProjectIds() != null && !maTechnicianAppAddVo.getProjectIds().isEmpty()) {
- insertProjectRelations(maTechnician.getId(), new LinkedHashSet<>(maTechnicianAppAddVo.getProjectIds()));
- }
- return rows;
- }
- /**
- * 后台新增商户
- *
- * @param dto 新增商户参数
- * @param loginUser 当前登录用户
- * @return 结果
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int insertMerchant(MaTechnicianMerchantAddDTO dto, LoginUser loginUser) {
- Set<Long> projectIds = checkMerchantAddParam(dto);
- String userName = loginUser.getUser().getUserName();
- MaTechnician maTechnician = new MaTechnician();
- maTechnician.setTeName(dto.getTeName().trim());
- maTechnician.setTeNickName(dto.getTeNickName().trim());
- maTechnician.setTeSex(dto.getTeSex());
- maTechnician.setTePhone(dto.getTePhone().trim());
- maTechnician.setOpenService(dto.getOpenService());
- dto.getProjectIds().forEach(projectId -> {
- Project project = projectMapper.selectById(projectId);
- if (project != null) {
- maTechnician.setTeProject(project.getTitle() + ",");
- }
- });
- //移除末尾的逗号
- maTechnician.setTeProject(StrUtil.removeSuffix(maTechnician.getTeProject(), ","));
- maTechnician.setTechType(dto.getTechType());
- maTechnician.setIsRecommend(normalizeSwitchValue(dto.getIsRecommend(), "是否推荐"));
- maTechnician.setServiceState(SERVICE_STATE_AVAILABLE);
- maTechnician.setPostState(POST_STATE_OFFLINE);
- maTechnician.setTeIsEnable(ENABLED);
- //上岗状态:默认-1 未上岗
- maTechnician.setNStatus2(NS_STATUS_NOT_ON_DUTY);
- maTechnician.setMerchantStatus(MERCHANT_STATUS_NORMAL);
- //审核状态
- maTechnician.setAuditStatus(AUDIT_APPROVED);
- maTechnician.setTeAddress("");
- maTechnician.setNStar(DEFAULT_STAT_VALUE);
- maTechnician.setNNum(DEFAULT_STAT_VALUE);
- maTechnician.setCreateBy(userName);
- maTechnician.setUpdateBy(userName);
- maTechnician.setCreateTime(DateUtils.getNowDate());
- maTechnician.setUpdateTime(DateUtils.getNowDate());
- int rows = maTechnicianMapper.insert(maTechnician);
- if (rows <= 0) {
- throw new ServiceException("新增商户失败");
- }
- insertProjectRelations(maTechnician.getId(), projectIds);
- return rows;
- }
- /**
- * 后台查询商户列表
- *
- * @param page 分页参数
- * @param dto 查询条件
- * @return 商户分页列表
- */
- @Override
- public Page<MaTechnicianMerchantListVO> selectMerchantList(Page<MaTechnicianMerchantListVO> page,
- MaTechnicianMerchantQueryDTO dto) {
- Page<MaTechnicianMerchantListVO> pageParam = page == null ? new Page<>(1, 10) : page;
- return maTechnicianMapper.selectMerchantList(pageParam, dto);
- }
- /**
- * 修改技师
- *
- * @param maTechnicianAppAddVo
- * @return 结果
- */
- @Override
- public int updateMaTechnician(MaTechnicianAppAddVo maTechnicianAppAddVo)
- {
- MaTechnician maTechnician = new MaTechnician();
- BeanUtils.copyProperties(maTechnicianAppAddVo, maTechnician);
- return maTechnicianMapper.updateMaTechnician(maTechnician);
- }
- /**
- * 批量删除技师
- *
- * @param ids 需要删除的技师主键
- * @return 结果
- */
- @Override
- public int deleteMaTechnicianByIds(Long[] ids)
- {
- return maTechnicianMapper.deleteMaTechnicianByIds(ids);
- }
- /**
- * 删除技师信息
- *
- * @param id 技师主键
- * @return 结果
- */
- @Override
- public int deleteMaTechnicianById(Long id)
- {
- return maTechnicianMapper.deleteMaTechnicianById(id);
- }
- /**
- * 首页选中的城市是否有开通服务
- * @param areaCode
- * @return
- */
- @Override
- public Boolean isHasMerchantCity(String areaCode) {
- LambdaQueryWrapper<MaTechnician> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(MaTechnician::getTeAreaCode, areaCode);
- return maTechnicianMapper.selectCount(queryWrapper) > 0;
- }
- /**
- * 首页按摩推荐
- * @param dto
- * @return
- */
- @Override
- public List<MerchantVo> getMerchantRecommend(MassageMerchantRecommendDto dto) {
- return maTechnicianMapper.getMerchantRecommend(dto);
- }
- private Set<Long> checkMerchantAddParam(MaTechnicianMerchantAddDTO dto) {
- if (dto == null) {
- throw new ServiceException("商户参数不能为空");
- }
- checkRequiredText(dto.getTeName(), "姓名", 10);
- checkRequiredText(dto.getTeNickName(), "昵称", 10);
- checkRequiredText(dto.getTePhone(), "电话", 11);
- checkEnumValue(dto.getTeSex(), "性别", 0, 1);
- //checkEnumValue(dto.getOpenService(), "服务类目", 1, 2);
- //校验服务类名不能为空
- if (dto.getOpenService() == null) {
- throw new ServiceException("服务类目不能为空");
- }
- checkEnumValue(dto.getTechType(), "商户类型", 0, 1);
- if (dto.getIsRecommend() != null) {
- checkEnumValue(dto.getIsRecommend(), "是否推荐", 0, 1);
- }
- return checkProjectIds(dto.getProjectIds());
- }
- private void checkRequiredText(String value, String fieldName, int maxLength) {
- if (StringUtils.isBlank(value)) {
- throw new ServiceException(fieldName + "不能为空");
- }
- if (value.trim().length() > maxLength) {
- throw new ServiceException(fieldName + "长度不能超过" + maxLength + "个字符");
- }
- }
- private void checkEnumValue(Integer value, String fieldName, int... allowedValues) {
- if (value == null) {
- throw new ServiceException(fieldName + "不能为空");
- }
- for (int allowedValue : allowedValues) {
- if (value == allowedValue) {
- return;
- }
- }
- throw new ServiceException(fieldName + "值不正确");
- }
- private Integer normalizeSwitchValue(Integer value, String fieldName) {
- if (value == null) {
- return 0;
- }
- checkEnumValue(value, fieldName, 0, 1);
- return value;
- }
- /**
- * 校验服务项目ID集合
- * @param projectIds
- * @return 有效服务项目ID集合
- */
- private Set<Long> checkProjectIds(List<Long> projectIds) {
- if (projectIds == null || projectIds.isEmpty()) {
- throw new ServiceException("服务项目不能为空");
- }
- Set<Long> distinctProjectIds = new LinkedHashSet<>();
- for (Long projectId : projectIds) {
- if (projectId == null) {
- throw new ServiceException("服务项目ID不能为空");
- }
- distinctProjectIds.add(projectId);
- }
- /*int validCount = 0;
- for (Long projectId : distinctProjectIds) {
- MaProject project = maProjectMapper.selectMaProjectById(projectId);
- if (project != null && (project.getIsDelete() == null || project.getIsDelete() != 1)) {
- validCount++;
- }
- }
- if (validCount != distinctProjectIds.size()) {
- throw new ServiceException("服务项目不存在或已删除");
- }*/
- return distinctProjectIds;
- }
- /**
- * 新增商户与服务项目关联关系
- *
- * @param technicianId
- * @param projectIds
- */
- private void insertProjectRelations(Long technicianId, Set<Long> projectIds) {
- if (technicianId == null) {
- throw new ServiceException("商户ID不能为空");
- }
- List<MaTeProject> relations = new ArrayList<>();
- for (Long projectId : projectIds) {
- MaTeProject relation = new MaTeProject();
- relation.setTeId(technicianId);
- relation.setProjectId(projectId);
- relations.add(relation);
- }
- int rows = maTeProjectMapper.insertBatch(relations);
- if (rows != relations.size()) {
- throw new ServiceException("新增商户服务项目失败");
- }
- }
- }
|