|
@@ -0,0 +1,322 @@
|
|
|
+package com.zanxiang.game.module.manage.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import com.zanxiang.erp.base.ErpServer;
|
|
|
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
|
|
|
+import com.zanxiang.erp.security.util.SecurityUtil;
|
|
|
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
|
|
|
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordListParam;
|
|
|
+import com.zanxiang.game.module.manage.pojo.params.RoleAssignRecordAddParam;
|
|
|
+import com.zanxiang.game.module.manage.pojo.params.RoleInfoAndAgentParam;
|
|
|
+import com.zanxiang.game.module.manage.pojo.params.RoleSysUserAssignParam;
|
|
|
+import com.zanxiang.game.module.manage.pojo.vo.RoleAssignRecordListVO;
|
|
|
+import com.zanxiang.game.module.manage.service.*;
|
|
|
+import com.zanxiang.game.module.mybatis.entity.*;
|
|
|
+import com.zanxiang.game.module.mybatis.mapper.RoleAssignRecordMapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.zanxiang.module.util.exception.BaseException;
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 角色指派记录表 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author auto
|
|
|
+ * @since 2023-09-09
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class RoleAssignRecordServiceImpl extends ServiceImpl<RoleAssignRecordMapper, RoleAssignRecord> implements IRoleAssignRecordService {
|
|
|
+ @Autowired
|
|
|
+ private IAgentService agentService;
|
|
|
+ @Autowired
|
|
|
+ private IGameService gameService;
|
|
|
+ @Autowired
|
|
|
+ private IUserService userService;
|
|
|
+ @Autowired
|
|
|
+ private IGameServerService gameServerService;
|
|
|
+ @Autowired
|
|
|
+ private IGameUserRoleService gameUserRoleService;
|
|
|
+ @Autowired
|
|
|
+ private IRoleOperateService roleOperateService;
|
|
|
+ @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
|
|
|
+ private ISysUserRpc sysUserRpc;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean configSysUser(RoleSysUserAssignParam param) {
|
|
|
+ Long sysUserId = SecurityUtil.getUserId();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ List<RoleAssignRecord> lastAssignRecordList = new ArrayList<>();
|
|
|
+ List<RoleAssignRecord> insertAssignRecordList = new ArrayList<>();
|
|
|
+ param.getRoleInfoAndAgentParamList().forEach(item -> {
|
|
|
+ RoleAssignRecord lastAssignRecord = lastAssignRecord(item);
|
|
|
+ RoleAssignRecord insertRoleAssignRecord = RoleAssignRecord.builder()
|
|
|
+ .gameId(item.getGameId())
|
|
|
+ .serverId(item.getServerId())
|
|
|
+ .userId(item.getUserId())
|
|
|
+ .roleId(item.getRoleId())
|
|
|
+ .regAgentId(item.getRegAgentId())
|
|
|
+ .startTime(param.getStartTime())
|
|
|
+ .gsId(param.getGsId())
|
|
|
+ .customerServiceId(param.getCustomerServiceId())
|
|
|
+ .operUserId(param.getOperUserId())
|
|
|
+ .remark(param.getRemark())
|
|
|
+ .createBy(sysUserId)
|
|
|
+ .createTime(now)
|
|
|
+ .updateBy(sysUserId)
|
|
|
+ .updateTime(now)
|
|
|
+ .build();
|
|
|
+ if (null == lastAssignRecord) {
|
|
|
+ insertAssignRecordList.add(insertRoleAssignRecord);
|
|
|
+ } else {
|
|
|
+ //存在记录,更新最后一条记录
|
|
|
+ int compare = param.getStartTime().compareTo(lastAssignRecord.getStartTime());
|
|
|
+ if (compare < 0) {
|
|
|
+ throw new BaseException("角色" + item.getRoleId() + "开始时间不能早于上条指派记录的开始时间!!!");
|
|
|
+ }
|
|
|
+ lastAssignRecord.setUpdateBy(sysUserId);
|
|
|
+ lastAssignRecord.setUpdateTime(now);
|
|
|
+ if (compare == 0) {
|
|
|
+ lastAssignRecord.setCustomerServiceId(param.getCustomerServiceId());
|
|
|
+ lastAssignRecord.setGsId(param.getGsId());
|
|
|
+ lastAssignRecord.setOperUserId(param.getOperUserId());
|
|
|
+ lastAssignRecord.setRemark(param.getRemark());
|
|
|
+ } else {
|
|
|
+ lastAssignRecord.setEndTime(param.getStartTime());
|
|
|
+ insertAssignRecordList.add(insertRoleAssignRecord);
|
|
|
+ }
|
|
|
+ lastAssignRecordList.add(lastAssignRecord);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (CollectionUtils.isNotEmpty(lastAssignRecordList)) {
|
|
|
+ updateBatchById(lastAssignRecordList);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(insertAssignRecordList)) {
|
|
|
+ saveBatch(insertAssignRecordList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //角色操作表更新
|
|
|
+ List<RoleOperate> roleOperateList = param.getRoleInfoAndAgentParamList().stream()
|
|
|
+ .map(this::getModifyRoleOperate).collect(Collectors.toList());
|
|
|
+ return roleOperateService.saveOrUpdateBatch(roleOperateList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean modify(RoleAssignRecordAddParam param) {
|
|
|
+ Long sysUserId = SecurityUtil.getUserId();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ RoleAssignRecord changeRecord = getById(param.getId());
|
|
|
+ RoleAssignRecord previousAssignRecord = previousAssignRecord(changeRecord, param.getStartTime());
|
|
|
+ changeRecord.setStartTime(param.getStartTime());
|
|
|
+ changeRecord.setOperUserId(param.getOperUserId());
|
|
|
+ changeRecord.setGsId(param.getGsId());
|
|
|
+ changeRecord.setCustomerServiceId(param.getCustomerServiceId());
|
|
|
+ changeRecord.setRemark(param.getRemark());
|
|
|
+ changeRecord.setUpdateBy(sysUserId);
|
|
|
+ changeRecord.setUpdateTime(now);
|
|
|
+ if (previousAssignRecord != null) {
|
|
|
+ if (previousAssignRecord.getStartTime().compareTo(changeRecord.getStartTime()) >= 0) {
|
|
|
+ throw new BaseException("开始时间必须大于下一条记录的开始时间!");
|
|
|
+ }
|
|
|
+ update(new LambdaUpdateWrapper<RoleAssignRecord>()
|
|
|
+ .set(RoleAssignRecord::getEndTime, changeRecord.getStartTime())
|
|
|
+ .eq(RoleAssignRecord::getId, previousAssignRecord.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+ updateById(changeRecord);
|
|
|
+ //角色操作表更新
|
|
|
+ RoleInfoAndAgentParam roleInfoAndAgentParam = RoleInfoAndAgentParam.builder()
|
|
|
+ .regAgentId(changeRecord.getRegAgentId())
|
|
|
+ .gameId(changeRecord.getGameId())
|
|
|
+ .serverId(changeRecord.getServerId())
|
|
|
+ .userId(changeRecord.getUserId())
|
|
|
+ .roleId(changeRecord.getRoleId())
|
|
|
+ .build();
|
|
|
+ RoleOperate modifyRoleOperate = getModifyRoleOperate(roleInfoAndAgentParam);
|
|
|
+ return roleOperateService.saveOrUpdate(modifyRoleOperate);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public IPage<RoleAssignRecordListVO> listOfPage(RoleAssignRecordListParam param) {
|
|
|
+ Agent agent = agentService.getById(param.getRegAgentId());
|
|
|
+ GameDTO game = gameService.getById(param.getGameId());
|
|
|
+ GameServer gameServer = gameServerService.getOne(new LambdaQueryWrapper<GameServer>()
|
|
|
+ .eq(GameServer::getGameId, param.getGameId())
|
|
|
+ .eq(GameServer::getServerId, param.getServerId()));
|
|
|
+ GameUserRole role = gameUserRoleService.getOne(new LambdaQueryWrapper<GameUserRole>()
|
|
|
+ .eq(GameUserRole::getGameId, param.getGameId())
|
|
|
+ .eq(GameUserRole::getServerId, param.getServerId())
|
|
|
+ .eq(GameUserRole::getUserId, param.getUserId())
|
|
|
+ .eq(GameUserRole::getRoleId, param.getRoleId()));
|
|
|
+
|
|
|
+ return page(param.toPage(), new LambdaQueryWrapper<RoleAssignRecord>()
|
|
|
+ .eq(RoleAssignRecord::getRegAgentId, param.getRegAgentId())
|
|
|
+ .eq(RoleAssignRecord::getGameId, param.getGameId())
|
|
|
+ .eq(RoleAssignRecord::getServerId, param.getServerId())
|
|
|
+ .eq(RoleAssignRecord::getUserId, param.getUserId())
|
|
|
+ .eq(RoleAssignRecord::getRoleId, param.getRoleId())
|
|
|
+ .like(StringUtils.isNotBlank(param.getRemark()), RoleAssignRecord::getRemark, param.getRemark())
|
|
|
+ .eq(null != param.getGsId(), RoleAssignRecord::getGsId, param.getGsId())
|
|
|
+ .eq(null != param.getOperUserId(), RoleAssignRecord::getOperUserId, param.getOperUserId())
|
|
|
+ .eq(null != param.getCustomerServiceId(), RoleAssignRecord::getCustomerServiceId, param.getCustomerServiceId())
|
|
|
+ .eq(RoleAssignRecord::getIsDelete, 0)
|
|
|
+ .orderByDesc(RoleAssignRecord::getCreateTime))
|
|
|
+ .convert(item -> RoleAssignRecordListVO.builder()
|
|
|
+ .id(item.getId())
|
|
|
+ .gameId(item.getGameId())
|
|
|
+ .gameName(null == game ? null : game.getName())
|
|
|
+ .serverId(item.getServerId())
|
|
|
+ .serverName(null == gameServer ? null : gameServer.getServerName())
|
|
|
+ .userId(item.getUserId())
|
|
|
+ .roleId(item.getRoleId())
|
|
|
+ .roleName(null == role ? null : role.getRoleName())
|
|
|
+ .regAgentId(null == agent ? null : agent.getAgentName())
|
|
|
+ .startTime(item.getStartTime())
|
|
|
+ .endTime(item.getEndTime())
|
|
|
+ .gsId(item.getGsId())
|
|
|
+ .gsName(getNickname(item.getGsId()))
|
|
|
+ .operUserId(item.getOperUserId())
|
|
|
+ .operUserName(getNickname(item.getOperUserId()))
|
|
|
+ .customerServiceId(item.getCustomerServiceId())
|
|
|
+ .customerServiceName(getNickname(item.getCustomerServiceId()))
|
|
|
+ .remark(item.getRemark())
|
|
|
+ .createBy(item.getCreateBy())
|
|
|
+ .createName(getNickname(item.getCreateBy()))
|
|
|
+ .createTime(item.getCreateTime())
|
|
|
+ .updateBy(item.getUpdateBy())
|
|
|
+ .updateName(getNickname(item.getUpdateBy()))
|
|
|
+ .updateTime(item.getUpdateTime())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean deleteByIds(List<Long> ids) {
|
|
|
+ Long sysUserId = SecurityUtil.getUserId();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ update(new LambdaUpdateWrapper<RoleAssignRecord>()
|
|
|
+ .set(RoleAssignRecord::getIsDelete, 1)
|
|
|
+ .set(RoleAssignRecord::getUpdateBy, sysUserId)
|
|
|
+ .set(RoleAssignRecord::getUpdateTime, now)
|
|
|
+ .in(RoleAssignRecord::getId, ids));
|
|
|
+ List<RoleAssignRecord> roleAssignRecordList = listByIds(ids);
|
|
|
+ if (CollectionUtils.isNotEmpty(roleAssignRecordList)) {
|
|
|
+ RoleAssignRecord roleAssignRecord = roleAssignRecordList.get(0);
|
|
|
+ RoleInfoAndAgentParam roleInfoAndAgentParam = RoleInfoAndAgentParam.builder()
|
|
|
+ .regAgentId(roleAssignRecord.getRegAgentId())
|
|
|
+ .gameId(roleAssignRecord.getGameId())
|
|
|
+ .serverId(roleAssignRecord.getServerId())
|
|
|
+ .userId(roleAssignRecord.getUserId())
|
|
|
+ .roleId(roleAssignRecord.getRoleId())
|
|
|
+ .build();
|
|
|
+ RoleOperate modifyRoleOperate = getModifyRoleOperate(roleInfoAndAgentParam);
|
|
|
+ return roleOperateService.saveOrUpdate(modifyRoleOperate);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 最后记录
|
|
|
+ *
|
|
|
+ * @param item
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RoleAssignRecord lastAssignRecord(RoleInfoAndAgentParam item) {
|
|
|
+ return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
|
|
|
+ .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
|
|
|
+ .eq(RoleAssignRecord::getGameId, item.getGameId())
|
|
|
+ .eq(RoleAssignRecord::getServerId, item.getServerId())
|
|
|
+ .eq(RoleAssignRecord::getUserId, item.getUserId())
|
|
|
+ .eq(RoleAssignRecord::getRoleId, item.getRoleId())
|
|
|
+ .orderByDesc(RoleAssignRecord::getStartTime)
|
|
|
+ .eq(RoleAssignRecord::getIsDelete, 0)
|
|
|
+ .last("limit 1"));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上一条记录
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RoleAssignRecord previousAssignRecord(RoleAssignRecord item, LocalDate startTime) {
|
|
|
+ return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
|
|
|
+ .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
|
|
|
+ .eq(RoleAssignRecord::getGameId, item.getGameId())
|
|
|
+ .eq(RoleAssignRecord::getServerId, item.getServerId())
|
|
|
+ .eq(RoleAssignRecord::getUserId, item.getUserId())
|
|
|
+ .eq(RoleAssignRecord::getRoleId, item.getRoleId())
|
|
|
+ .le(RoleAssignRecord::getStartTime, startTime)
|
|
|
+ .orderByDesc(RoleAssignRecord::getStartTime)
|
|
|
+ .eq(RoleAssignRecord::getIsDelete, 0)
|
|
|
+ .last("limit 1"));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下一条记录
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RoleAssignRecord getNextRecord(RoleAssignRecord item, LocalDate startTime) {
|
|
|
+ return getOne(new LambdaQueryWrapper<RoleAssignRecord>()
|
|
|
+ .eq(RoleAssignRecord::getRegAgentId, item.getRegAgentId())
|
|
|
+ .eq(RoleAssignRecord::getGameId, item.getGameId())
|
|
|
+ .eq(RoleAssignRecord::getServerId, item.getServerId())
|
|
|
+ .eq(RoleAssignRecord::getUserId, item.getUserId())
|
|
|
+ .eq(RoleAssignRecord::getRoleId, item.getRoleId())
|
|
|
+ .ge(RoleAssignRecord::getStartTime, startTime)
|
|
|
+ .orderByAsc(RoleAssignRecord::getStartTime)
|
|
|
+ .eq(RoleAssignRecord::getIsDelete, 0)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getNickname(Long sysUserId) {
|
|
|
+ return sysUserRpc.getById(sysUserId).getData().getNickname();
|
|
|
+ }
|
|
|
+
|
|
|
+ private RoleOperate getModifyRoleOperate(RoleInfoAndAgentParam roleInfoAndAgentParam) {
|
|
|
+ RoleAssignRecord lastAssignRecord = lastAssignRecord(roleInfoAndAgentParam);
|
|
|
+ Long sysUserId = SecurityUtil.getUserId();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ RoleOperate roleOperate = RoleOperate.builder().build();
|
|
|
+ RoleOperate queryOne = roleOperateService.getOne(new LambdaQueryWrapper<RoleOperate>()
|
|
|
+ .eq(RoleOperate::getGameId, lastAssignRecord.getGameId())
|
|
|
+ .eq(RoleOperate::getServerId, lastAssignRecord.getServerId())
|
|
|
+ .eq(RoleOperate::getUserId, lastAssignRecord.getUserId())
|
|
|
+ .eq(RoleOperate::getRoleId, lastAssignRecord.getRoleId())
|
|
|
+ .eq(RoleOperate::getIsDelete, 0));
|
|
|
+ if (null == queryOne) {
|
|
|
+ roleOperate.setGameId(lastAssignRecord.getGameId());
|
|
|
+ roleOperate.setServerId(lastAssignRecord.getServerId());
|
|
|
+ roleOperate.setUserId(lastAssignRecord.getUserId());
|
|
|
+ roleOperate.setRoleId(lastAssignRecord.getRoleId());
|
|
|
+ roleOperate.setCreateBy(sysUserId);
|
|
|
+ roleOperate.setCreateTime(now);
|
|
|
+ } else {
|
|
|
+ roleOperate = queryOne;
|
|
|
+ }
|
|
|
+ roleOperate.setGsId(lastAssignRecord.getGsId());
|
|
|
+ roleOperate.setCustomerServiceId(lastAssignRecord.getCustomerServiceId());
|
|
|
+ roleOperate.setOperUserId(lastAssignRecord.getOperUserId());
|
|
|
+ roleOperate.setRemark(lastAssignRecord.getRemark());
|
|
|
+ roleOperate.setUpdateBy(sysUserId);
|
|
|
+ roleOperate.setUpdateTime(now);
|
|
|
+ return roleOperate;
|
|
|
+ }
|
|
|
+}
|