package com.gkhy.safePlatform.account.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.entity.user.PositionInfo; import com.gkhy.safePlatform.account.entity.user.PositionInfoDO; import com.gkhy.safePlatform.account.enums.PositionStatusEnum; import com.gkhy.safePlatform.account.model.dto.req.PositionAddReqDTO; import com.gkhy.safePlatform.account.model.dto.req.PositionModReqDTO; import com.gkhy.safePlatform.account.model.dto.resp.PositionDetailRespDTO; import com.gkhy.safePlatform.account.model.dto.resp.PositionRespDTO; import com.gkhy.safePlatform.account.model.query.PositionPageQuery; import com.gkhy.safePlatform.account.model.query.PositionQuery; import com.gkhy.safePlatform.account.model.query.db.PositionDBQuery; import com.gkhy.safePlatform.account.model.query.db.PositionPageDBQuery; import com.gkhy.safePlatform.account.service.PositionService; import com.gkhy.safePlatform.account.service.baseService.PositionInfoService; import com.gkhy.safePlatform.account.service.baseService.UserInfoService; import com.gkhy.safePlatform.commons.co.ContextCacheUser; import com.gkhy.safePlatform.commons.enums.E; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.AusinessException; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.text.Position; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service("positionService") public class PositionServiceImpl implements PositionService { @Autowired private PositionInfoService positionInfoService; @Autowired private UserInfoService userInfoService; @Override public List listPositionInfo(ContextCacheUser currentUser, PositionQuery query) { ; PositionDBQuery dbQuery = new PositionDBQuery(); dbQuery.setPositionCode(query.getPositionCode()); dbQuery.setPositionName(query.getPositionName()); List dos = positionInfoService.listPositionInfo(dbQuery); List respDTOList = new ArrayList<>(dos.size()); PositionRespDTO respDTO; for (PositionInfoDO positionInfoDO : dos) { respDTO = new PositionRespDTO(); respDTO.setPositionId(positionInfoDO.getId()); respDTO.setPositionCode(positionInfoDO.getCode()); respDTO.setPositionName(positionInfoDO.getName()); respDTO.setStatus(positionInfoDO.getStatus()); PositionStatusEnum positionStatusEnum = PositionStatusEnum.parse(positionInfoDO.getStatus()); if (positionStatusEnum != null) { respDTO.setStatusDesc(positionStatusEnum.getValue()); } respDTOList.add(respDTO); } return respDTOList; } @Override public SearchResultVO> listPositionInfoByPage(ContextCacheUser currentUser, PageQuery pageQuery) { ; Page page = new Page<>(pageQuery.getPageIndex(), pageQuery.getPageSize()); PositionPageDBQuery dbQuery = new PositionPageDBQuery(); if (pageQuery.getSearchParams() != null) { dbQuery.setPositionCode(pageQuery.getSearchParams().getPositionCode()); dbQuery.setPositionName(pageQuery.getSearchParams().getPositionName()); } List dos = positionInfoService.listPositionInfoByPage(page, dbQuery); List respDTOList = new ArrayList<>(dos.size()); if (dos.size() > 0) { PositionDetailRespDTO respDTO; for (PositionInfo positionInfo : dos) { respDTO = new PositionDetailRespDTO(); respDTO.setPositionId(positionInfo.getId()); respDTO.setPositionCode(positionInfo.getCode()); respDTO.setPositionName(positionInfo.getName()); respDTO.setGmtCreate(positionInfo.getGmtCreate()); respDTO.setCreateBy(positionInfo.getCreateBy()); respDTO.setGmtModified(positionInfo.getGmtModified()); respDTO.setEditBy(positionInfo.getEditBy()); respDTO.setStatus(positionInfo.getStatus()); PositionStatusEnum positionStatusEnum = PositionStatusEnum.parse(positionInfo.getStatus()); if (positionStatusEnum != null) { respDTO.setStatusDesc(positionStatusEnum.getValue()); } respDTOList.add(respDTO); } } return new SearchResultVO<>( true, page.getCurrent(), page.getSize(), page.getPages(), page.getTotal(), respDTOList, ResultCodes.OK); } @Override public void addPositionInfo(ContextCacheUser currentUser, PositionAddReqDTO positionAddReqDTO) { ; if (StringUtils.isBlank(positionAddReqDTO.getPositionCode())) { throw new AusinessException(E.DATA_PARAM_NULL, "岗位编码为空"); } if (StringUtils.isBlank(positionAddReqDTO.getPositionName())) { throw new AusinessException(E.DATA_PARAM_NULL, "岗位名称为空"); } String code = positionAddReqDTO.getPositionCode().trim(); String name = positionAddReqDTO.getPositionName().trim(); // code 判重 PositionInfo positionInfo; positionInfo = positionInfoService.getPositionInfoByCode(code); if (positionInfo != null) { throw new AusinessException(E.DATA_DATABASE_EXIST, "岗位编码已存在"); } // name 判重 positionInfo = positionInfoService.getPositionInfoByName(name); if (positionInfo != null) { throw new AusinessException(E.DATA_DATABASE_EXIST, "岗位名称已存在"); } // 1.新增 positionInfo = new PositionInfo(); positionInfo.setCode(code); positionInfo.setName(name); positionInfo.setCreateBy(currentUser.getRealName()); positionInfo.setCreateUid(currentUser.getUid()); positionInfo.setGmtCreate(new Date()); positionInfo.setStatus(PositionStatusEnum.ENABLED.getCode()); positionInfoService.savePositionInfo(positionInfo); } @Override public void modPositionInfo(ContextCacheUser currentUser, PositionModReqDTO positionModReqDTO) { ; // 数据判空 if (positionModReqDTO.getPositionId() == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } if (StringUtils.isBlank(positionModReqDTO.getPositionCode())) { throw new AusinessException(E.DATA_PARAM_NULL, "岗位编码为空"); } if (StringUtils.isBlank(positionModReqDTO.getPositionName())) { throw new AusinessException(E.DATA_PARAM_NULL, "岗位名称为空"); } String code = positionModReqDTO.getPositionCode().trim(); String name = positionModReqDTO.getPositionName().trim(); // 数据存在校验 PositionInfoDO positionInfoDO = positionInfoService.getPositionInfoById(positionModReqDTO.getPositionId()); if (positionInfoDO == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "岗位记录不存在"); } if (!positionInfoDO.getStatus().equals(PositionStatusEnum.ENABLED.getCode())) { throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "岗位记录不存在"); } PositionInfo positionInfo; // 岗位编码判重 positionInfo = positionInfoService.getPositionInfoByCode(code); if (positionInfo != null && !positionInfo.getId().equals(positionInfoDO.getId())) { throw new AusinessException(E.DATA_DATABASE_EXIST, "岗位编码已存在"); } // 岗位名称判重 positionInfo = positionInfoService.getPositionInfoByName(name); if (positionInfo != null && !positionInfo.getId().equals(positionInfoDO.getId())) { throw new AusinessException(E.DATA_DATABASE_EXIST, "岗位名称已存在"); } // 1.更新 positionInfo = new PositionInfo(); positionInfo.setId(positionInfoDO.getId()); positionInfo.setCode(positionModReqDTO.getPositionCode()); positionInfo.setName(positionModReqDTO.getPositionName()); positionInfo.setGmtModified(new Date()); positionInfo.setEditUid(currentUser.getUid()); positionInfo.setEditBy(currentUser.getRealName()); positionInfoService.updatePositionInfo(positionInfo); } @Override public void delPositionInfo(ContextCacheUser currentUser, Long positionId) { ; if (positionId == null) { throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL); } // 数据存在校验 PositionInfoDO positionInfoDO = positionInfoService.getPositionInfoById(positionId); if (positionInfoDO == null) { throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "岗位记录不存在"); } if (!positionInfoDO.getStatus().equals(PositionStatusEnum.ENABLED.getCode())) { throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "岗位记录不存在"); } // 判断是否有人员占用岗位,占用不可删除 long count = userInfoService.countByPositionId(positionId); if (count > 0) { throw new AusinessException(E.NOT_DELETE, "岗位下存在人员"); } // 删除岗位 positionInfoService.deletePositionInfoById(positionId); } }