package com.gkhy.safePlatform.account.service.impl;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.gkhy.safePlatform.account.entity.schedule.*;
|
import com.gkhy.safePlatform.account.enums.UserStatusEnum;
|
import com.gkhy.safePlatform.account.enums.schedule.GroupStatusEnum;
|
import com.gkhy.safePlatform.account.enums.schedule.GroupStrategyCycleTypeEnum;
|
import com.gkhy.safePlatform.account.enums.schedule.GroupStrategyStatusEnum;
|
import com.gkhy.safePlatform.account.model.dto.req.GroupStrategyAddReqDTO;
|
import com.gkhy.safePlatform.account.model.dto.req.GroupStrategyModReqDTO;
|
import com.gkhy.safePlatform.account.model.dto.resp.GroupInfoRespDTO;
|
import com.gkhy.safePlatform.account.model.dto.resp.GroupStrategyInfoRespDTO;
|
import com.gkhy.safePlatform.account.model.dto.resp.GroupStrategyRespDTO;
|
import com.gkhy.safePlatform.account.model.query.GroupStrategyPageQuery;
|
import com.gkhy.safePlatform.account.model.query.GroupStrategyQuery;
|
import com.gkhy.safePlatform.account.model.query.db.GroupStrategyDBQuery;
|
import com.gkhy.safePlatform.account.model.query.db.GroupStrategyPageDBQuery;
|
import com.gkhy.safePlatform.account.service.GroupStrategyService;
|
import com.gkhy.safePlatform.account.service.baseService.*;
|
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 org.springframework.transaction.annotation.Transactional;
|
|
import java.time.LocalDate;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Service("groupStrategyService")
|
public class GroupStrategyServiceImpl implements GroupStrategyService {
|
|
|
@Autowired
|
private GroupInfoService groupInfoService;
|
@Autowired
|
private GroupStrategyInfoService groupStrategyInfoService;
|
@Autowired
|
private TimeStrategyInfoSerive timeStrategyInfoSerive;
|
@Autowired
|
private WorkTimeGroupInfoService workTimeGroupInfoService;
|
@Autowired
|
private WorkTimePeriodInfoService workTimePeriodInfoService;
|
|
@Override
|
@Transactional
|
public void addGroupStrategy(ContextCacheUser currentUser, GroupStrategyAddReqDTO groupStrategyAddReqDTO) {
|
;
|
if (groupStrategyAddReqDTO.getGroupIds() == null ||
|
groupStrategyAddReqDTO.getTimeStrategyId() == null ||
|
groupStrategyAddReqDTO.getGroupStrategyCycleType() == null) {
|
throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
|
}
|
if (StringUtils.isBlank(groupStrategyAddReqDTO.getGroupStrategyName())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "班组策略名称为空");
|
}
|
if (groupStrategyAddReqDTO.getGroupIds().size() == 0) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "班组数量为0");
|
}
|
if (groupStrategyAddReqDTO.getCycleStartTime() == null) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "开始时间为空");
|
}
|
if (!groupStrategyAddReqDTO.getCycleStartTime().isAfter(LocalDate.now())) {
|
throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "开始时间需要今日后");
|
}
|
GroupStrategyCycleTypeEnum cycle = GroupStrategyCycleTypeEnum.parse(groupStrategyAddReqDTO.getGroupStrategyCycleType());
|
if (cycle == null) {
|
throw new AusinessException(E.DATA_STATUS_NOT_EXIST, "循环类型不合法");
|
}
|
for (Long groupId : groupStrategyAddReqDTO.getGroupIds()) {
|
GroupInfoDO groupInfo = groupInfoService.getGroupInfoById(groupId);
|
if (groupInfo == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "班组不存在");
|
}
|
// 是否已绑定其他班组
|
GroupStrategyInfoDO groupStrategyInfoDO = groupInfoService.getGroupStrategyByGroupId(groupId);
|
if (groupStrategyInfoDO != null) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST,"班组已有时间策略");
|
}
|
}
|
|
TimeStrategyInfo timeStrategyById = timeStrategyInfoSerive.getTimeStrategyById(groupStrategyAddReqDTO.getTimeStrategyId());
|
if (timeStrategyById == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "时间策略不存在");
|
}
|
|
|
// 1.班组策略保存
|
GroupStrategyInfo groupStrategyInfo = new GroupStrategyInfo();
|
groupStrategyInfo.setName(groupStrategyAddReqDTO.getGroupStrategyName().trim());
|
groupStrategyInfo.setInfo(groupStrategyAddReqDTO.getGroupStrategyInfo());
|
groupStrategyInfo.setTimeStrategyId(groupStrategyAddReqDTO.getTimeStrategyId());
|
groupStrategyInfo.setCreateUid(currentUser.getUid());
|
groupStrategyInfo.setGmtCreate(new Date());
|
groupStrategyInfo.setCreateBy(currentUser.getRealName());
|
groupStrategyInfo.setStatus(GroupStrategyStatusEnum.ENABLED.getCode());
|
groupStrategyInfo.setCycle(cycle.getCode());
|
groupStrategyInfo.setCycleStartTime(groupStrategyAddReqDTO.getCycleStartTime());
|
groupStrategyInfoService.save(groupStrategyInfo);
|
// 2.多个班组
|
List<GroupInfo> groupStrategyMembers = new ArrayList<>();
|
GroupInfo groupInfo;
|
for (Long groupId :groupStrategyAddReqDTO.getGroupIds()) {
|
groupInfo = new GroupInfo();
|
groupInfo.setId(groupId);
|
groupInfo.setGroupStrategyId(groupStrategyInfo.getId());
|
groupStrategyMembers.add(groupInfo);
|
}
|
groupInfoService.updateBatchById(groupStrategyMembers);
|
// 同步消息触发班组任务生成
|
}
|
|
@Override
|
@Transactional
|
public void modGroupStrategy(ContextCacheUser currentUser, GroupStrategyModReqDTO groupStrategyModReqDTO) {
|
;
|
if (groupStrategyModReqDTO.getGroupStrategyId() == null ||
|
groupStrategyModReqDTO.getGroupIds() == null ||
|
groupStrategyModReqDTO.getTimeStrategyId() == null ||
|
groupStrategyModReqDTO.getGroupStrategyCycleType() == null) {
|
throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
|
}
|
if (StringUtils.isBlank(groupStrategyModReqDTO.getGroupStrategyName())) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "班组策略名称为空");
|
}
|
if (groupStrategyModReqDTO.getGroupIds().size() == 0) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "班组数量为0");
|
}
|
if (groupStrategyModReqDTO.getCycleStartTime() == null) {
|
throw new AusinessException(E.DATA_PARAM_NULL, "开始时间为空");
|
}
|
if (!groupStrategyModReqDTO.getCycleStartTime().isAfter(LocalDate.now())) {
|
throw new AusinessException(E.DATA_PARAM_CHECK_INVALID, "开始时间需要今日后");
|
}
|
GroupStrategyCycleTypeEnum cycle = GroupStrategyCycleTypeEnum.parse(groupStrategyModReqDTO.getGroupStrategyCycleType());
|
if (cycle == null) {
|
throw new AusinessException(E.DATA_STATUS_NOT_EXIST, "循环类型不合法");
|
}
|
|
TimeStrategyInfo timeStrategyInfo = timeStrategyInfoSerive.getTimeStrategyById(groupStrategyModReqDTO.getTimeStrategyId());
|
if (timeStrategyInfo == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "时间策略不存在");
|
}
|
if (!timeStrategyInfo.getStatus().equals(GroupStatusEnum.ENABLED.getCode())) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "时间策略不存在");
|
}
|
GroupStrategyInfoDO groupStrategyInfoDO = groupStrategyInfoService.getGroupStrategyInfoById(groupStrategyModReqDTO.getGroupStrategyId());
|
if (groupStrategyInfoDO == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "班组策略不存在");
|
}
|
if (!groupStrategyInfoDO.getStatus().equals(GroupStatusEnum.ENABLED.getCode())) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "班组策略不存在");
|
}
|
// 获取班组策略的所有班组id
|
List<Long> groupIdsOrigin = groupInfoService.listGroupIdsByGroupStrategyId(groupStrategyModReqDTO.getGroupStrategyId());
|
List<Long> groupIds = groupStrategyModReqDTO.getGroupIds();
|
//
|
for (Long groupId : groupIds) {
|
GroupInfoDO groupInfo = groupInfoService.getGroupInfoById(groupId);
|
if (groupInfo == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "班组不存在");
|
}
|
if (!groupInfo.getStatus().equals(GroupStatusEnum.ENABLED.getCode())) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "班组不存在");
|
}
|
// 是否已绑定其他班组
|
GroupStrategyInfoDO groupStrategyInfo = groupInfoService.getGroupStrategyByGroupId(groupId);
|
if (groupStrategyInfo != null && !groupStrategyInfo.getId().equals(groupStrategyModReqDTO.getGroupStrategyId())) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST,"班组已有时间策略");
|
}
|
}
|
// 1.更新班组策略
|
GroupStrategyInfo groupStrategyInfo = new GroupStrategyInfo();
|
groupStrategyInfo.setId(groupStrategyInfoDO.getId());
|
groupStrategyInfo.setName(groupStrategyModReqDTO.getGroupStrategyName().trim());
|
groupStrategyInfo.setInfo(groupStrategyModReqDTO.getGroupStrategyInfo());
|
groupStrategyInfo.setEditUid(currentUser.getUid());
|
groupStrategyInfo.setEditBy(currentUser.getRealName());
|
groupStrategyInfo.setGmtModified(new Date());
|
groupStrategyInfo.setTimeStrategyId(timeStrategyInfo.getId());
|
groupStrategyInfo.setCycle(cycle.getCode());
|
groupStrategyInfo.setCycleStartTime(groupStrategyModReqDTO.getCycleStartTime());
|
groupStrategyInfoService.updateById(groupStrategyInfo);
|
// 2.更新班组
|
List<Long> toDelGroupIds = groupIdsOrigin.stream().filter(item -> !groupIds.contains(item)).collect(Collectors.toList());
|
List<Long> toAddGroupIds = groupIds.stream().filter(item -> !groupIdsOrigin.contains(item)).collect(Collectors.toList());
|
List<GroupInfo> groupStrategyMemberInfos;
|
GroupInfo groupInfo;
|
if (toAddGroupIds.size() > 0) {
|
groupStrategyMemberInfos = new ArrayList<>();
|
for (Long groupId : toAddGroupIds) {
|
groupInfo = new GroupInfo();
|
groupInfo.setGroupStrategyId(groupStrategyInfoDO.getId());
|
groupInfo.setId(groupId);
|
groupStrategyMemberInfos.add(groupInfo);
|
}
|
groupInfoService.updateBatchById(groupStrategyMemberInfos);
|
}
|
// 删除
|
if (toDelGroupIds.size() > 0) {
|
groupInfoService.unbindBatchGroupStrategyByGroupIds(toDelGroupIds);
|
}
|
|
|
}
|
|
@Override
|
@Transactional
|
public void delGroupStrategy(ContextCacheUser currentUser, Long groupStrategyId) {
|
;
|
if (groupStrategyId == null) {
|
throw new BusinessException(ResultCodes.CLIENT_PARAM_NULL);
|
}
|
GroupStrategyInfoDO groupStrategyInfoDO = groupStrategyInfoService.getGroupStrategyInfoById(groupStrategyId);
|
if (groupStrategyInfoDO == null) {
|
throw new AusinessException(E.DATA_DATABASE_NO_EXISTENT, "班组策略不存在");
|
}
|
if (!groupStrategyInfoDO.getStatus().equals(GroupStatusEnum.ENABLED.getCode())) {
|
throw new AusinessException(E.DATA_DATABASE_EXIST_BUT_NOT_VALID, "班组策略不存在");
|
}
|
// 1.删除
|
GroupStrategyInfo groupStrategyInfo = new GroupStrategyInfo();
|
groupStrategyInfo.setId(groupStrategyInfoDO.getId());
|
groupStrategyInfo.setEditBy(currentUser.getRealName());
|
groupStrategyInfo.setEditUid(currentUser.getUid());
|
groupStrategyInfo.setGmtModified(new Date());
|
groupStrategyInfo.setStatus(GroupStrategyStatusEnum.ABANDONED.getCode());
|
groupStrategyInfoService.updateById(groupStrategyInfo);
|
// 2.解除组绑定策略
|
groupInfoService.unbindGroupStrategyByGroupStrategyId(groupStrategyId);
|
}
|
|
@Override
|
public SearchResultVO<List<GroupStrategyRespDTO>> listGroupStrategyByPage(ContextCacheUser currentUser, PageQuery<GroupStrategyPageQuery> pageQuery) {
|
;
|
Page<GroupStrategyInfo> page = new Page<>(pageQuery.getPageIndex(), pageQuery.getPageSize());
|
GroupStrategyPageDBQuery dbQuery = new GroupStrategyPageDBQuery();
|
if (pageQuery.getSearchParams() != null) {
|
dbQuery.setGroupStrategyName(pageQuery.getSearchParams().getGroupStrategyName());
|
}
|
// 分页查询
|
List<GroupStrategyInfo> dbData = groupStrategyInfoService.listGroupStrategyInfos(page, dbQuery);
|
// 返回data
|
List<GroupStrategyRespDTO> resultPageData = new ArrayList<>(dbData.size());
|
if (dbData.size() > 0) {
|
GroupStrategyRespDTO respDTO;
|
GroupStrategyStatusEnum statusEnum;
|
for (GroupStrategyInfo groupStrategyInfo : dbData) {
|
respDTO = new GroupStrategyRespDTO();
|
respDTO.setGroupStrategyId(groupStrategyInfo.getId());
|
respDTO.setGroupStrategyName(groupStrategyInfo.getName());
|
respDTO.setTimeStrategyId(groupStrategyInfo.getTimeStrategyId());
|
respDTO.setCycle(groupStrategyInfo.getCycle());
|
respDTO.setCycleStartTime(groupStrategyInfo.getCycleStartTime());
|
respDTO.setCreateBy(groupStrategyInfo.getCreateBy());
|
respDTO.setGmtCreate(groupStrategyInfo.getGmtCreate());
|
respDTO.setEditBy(groupStrategyInfo.getEditBy());
|
respDTO.setGmtModified(groupStrategyInfo.getGmtModified());
|
GroupStrategyCycleTypeEnum cycleTypeEnum = GroupStrategyCycleTypeEnum.parse(groupStrategyInfo.getCycle());
|
// 周期
|
if (cycleTypeEnum != null) {
|
respDTO.setCycleDesc(cycleTypeEnum.getValue());
|
}
|
// 状态
|
respDTO.setStatus(groupStrategyInfo.getStatus());
|
statusEnum = GroupStrategyStatusEnum.parse(groupStrategyInfo.getStatus());
|
if (statusEnum != null) {
|
respDTO.setStatusDesc(statusEnum.getValue());
|
}
|
|
// 是否包含组成员返回
|
List<GroupInfoRespDTO> groups = Collections.emptyList();
|
if (pageQuery.getSearchParams().isContainGroupEnable()) {
|
List<GroupInfoDO> groupInfoDOS = groupInfoService.listGroupInfoDOsByGroupStrategyId(groupStrategyInfo.getId());
|
groups = new ArrayList<>(groupInfoDOS.size());
|
GroupInfoRespDTO groupInfoRespDTO;
|
GroupStatusEnum groupStatusEnum;
|
for (GroupInfoDO groupInfoDO : groupInfoDOS) {
|
groupInfoRespDTO = new GroupInfoRespDTO();
|
groupInfoRespDTO.setGroupId(groupInfoDO.getId());
|
groupInfoRespDTO.setGroupName(groupInfoDO.getName());
|
groupInfoRespDTO.setGroupInfo(groupInfoDO.getInfo());
|
groupInfoRespDTO.setGroupStrategyId(groupInfoDO.getGroupStrategyId());
|
groupInfoRespDTO.setStatus(groupInfoDO.getStatus());
|
groupStatusEnum = GroupStatusEnum.parse(groupInfoDO.getStatus());
|
if (groupStatusEnum != null) {
|
groupInfoRespDTO.setStatusDesc(groupStatusEnum.getValue());
|
}
|
groups.add(groupInfoRespDTO);
|
}
|
}
|
respDTO.setGroups(groups);
|
resultPageData.add(respDTO);
|
|
}
|
}
|
return new SearchResultVO<>(
|
true,
|
page.getCurrent(),
|
page.getSize(),
|
page.getPages(),
|
page.getTotal(),
|
resultPageData,
|
ResultCodes.OK
|
);
|
}
|
|
@Override
|
public List<GroupStrategyInfoRespDTO> listGroupStrategy(ContextCacheUser currentUser, GroupStrategyQuery query) {
|
;
|
GroupStrategyDBQuery dbQuery = new GroupStrategyDBQuery();
|
dbQuery.setGroupStrategyName(query.getGroupStrategyName());
|
dbQuery.setTimeStrategyId(query.getTimeStrategyId());
|
|
List<GroupStrategyInfoDO> groupStrategyInfoDOs = groupStrategyInfoService.listGroupStrategyInfos(dbQuery);
|
List<GroupStrategyInfoRespDTO> respDTOS = new ArrayList<>(groupStrategyInfoDOs.size());
|
if (groupStrategyInfoDOs.size() > 0) {
|
GroupStrategyInfoRespDTO respDTO;
|
GroupStrategyCycleTypeEnum cycleTypeEnum;
|
GroupStrategyStatusEnum strategyStatusEnum;
|
for (GroupStrategyInfoDO groupStrategyInfoDO : groupStrategyInfoDOs) {
|
respDTO = new GroupStrategyInfoRespDTO();
|
respDTO.setGroupStrategyId(groupStrategyInfoDO.getId());
|
respDTO.setGroupStrategyName(groupStrategyInfoDO.getName());
|
respDTO.setGroupStrategyInfo(groupStrategyInfoDO.getInfo());
|
respDTO.setTimeStrategyId(groupStrategyInfoDO.getTimeStrategyId());
|
respDTO.setCycleStartTime(groupStrategyInfoDO.getCycleStartTime());
|
respDTO.setCycle(groupStrategyInfoDO.getCycle());
|
cycleTypeEnum = GroupStrategyCycleTypeEnum.parse(groupStrategyInfoDO.getCycle());
|
if (cycleTypeEnum != null) {
|
respDTO.setCycleDesc(cycleTypeEnum.getValue());
|
}
|
respDTO.setStatus(groupStrategyInfoDO.getStatus());
|
strategyStatusEnum = GroupStrategyStatusEnum.parse(groupStrategyInfoDO.getStatus());
|
if (strategyStatusEnum != null) {
|
respDTO.setStatusDesc(strategyStatusEnum.getValue());
|
}
|
// 是否包含班组
|
List<GroupInfoRespDTO> groups = Collections.emptyList();
|
if (query.isContainGroupEnable()) {
|
List<GroupInfoDO> groupInfoDOS = groupInfoService.listGroupInfoDOsByGroupStrategyId(groupStrategyInfoDO.getId());
|
groups = new ArrayList<>(groupInfoDOS.size());
|
GroupInfoRespDTO groupInfoRespDTO;
|
GroupStatusEnum groupStatusEnum;
|
for (GroupInfoDO groupInfoDO : groupInfoDOS) {
|
groupInfoRespDTO = new GroupInfoRespDTO();
|
groupInfoRespDTO.setGroupId(groupInfoDO.getId());
|
groupInfoRespDTO.setGroupName(groupInfoDO.getName());
|
groupInfoRespDTO.setGroupInfo(groupInfoDO.getInfo());
|
groupInfoRespDTO.setGroupStrategyId(groupInfoDO.getGroupStrategyId());
|
groupInfoRespDTO.setStatus(groupInfoDO.getStatus());
|
groupStatusEnum = GroupStatusEnum.parse(groupInfoDO.getStatus());
|
if (groupStatusEnum != null) {
|
groupInfoRespDTO.setStatusDesc(groupStatusEnum.getValue());
|
}
|
groups.add(groupInfoRespDTO);
|
}
|
}
|
|
respDTO.setGroups(groups);
|
respDTOS.add(respDTO);
|
|
}
|
|
|
}
|
|
|
|
return respDTOS;
|
}
|
}
|