提交 7260db1e authored 作者: hzh's avatar hzh

分组逻辑功能实现

上级 f5493e7d
...@@ -12,6 +12,7 @@ import org.dromara.common.mybatis.core.page.OrderBy; ...@@ -12,6 +12,7 @@ import org.dromara.common.mybatis.core.page.OrderBy;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import java.lang.reflect.Field;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
...@@ -81,7 +82,29 @@ public abstract class AbstractBaseService<V, B, T> implements IBaseService<V, B, ...@@ -81,7 +82,29 @@ public abstract class AbstractBaseService<V, B, T> implements IBaseService<V, B,
Class<T> clazz = (Class<T>) GenericsUtils.getSuperClassGenricType(this.getClass(), 2); Class<T> clazz = (Class<T>) GenericsUtils.getSuperClassGenricType(this.getClass(), 2);
T add = MapstructUtils.convert(bo, clazz); T add = MapstructUtils.convert(bo, clazz);
validEntityBeforeSave(add); validEntityBeforeSave(add);
return mapper().insert(add) > 0; boolean result = mapper().insert(add) > 0;
setIdParams(bo, clazz, add);
return result;
}
private void setIdParams(B bo, Class<T> clazz, T add) {
// 检查 add 对象是否有 id 字段
try {
Field idField = clazz.getDeclaredField("id");
// 设置 id 字段可访问,因为它可能是 private 的
idField.setAccessible(true);
// 获取 id 字段的值
Object idValue = idField.get(add);
if (idValue != null) {
// 使用反射将 id 值设置到 bo 对象中
Field boIdField = bo.getClass().getDeclaredField("id");
boIdField.setAccessible(true);
boIdField.set(bo, idValue);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
// 处理异常,可以打印日志或者抛出异常
e.printStackTrace();
}
} }
@Override @Override
......
...@@ -119,6 +119,7 @@ public class GroupController extends BaseController { ...@@ -119,6 +119,7 @@ public class GroupController extends BaseController {
*/ */
@SaCheckPermission("server:group:bindPersonList") @SaCheckPermission("server:group:bindPersonList")
@Log(title = "差旅分组-绑定人员", businessType = BusinessType.UPDATE) @Log(title = "差旅分组-绑定人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/bindPersonList") @PostMapping("/bindPersonList")
public R<Boolean> bindPersonList(@Validated @RequestBody GroupPersonBindVo vo) { public R<Boolean> bindPersonList(@Validated @RequestBody GroupPersonBindVo vo) {
return R.ok(groupService.bindUserList(vo.getGroupId(), vo.getUserIds())); return R.ok(groupService.bindUserList(vo.getGroupId(), vo.getUserIds()));
...@@ -132,6 +133,7 @@ public class GroupController extends BaseController { ...@@ -132,6 +133,7 @@ public class GroupController extends BaseController {
*/ */
@SaCheckPermission("server:group:updateConfig") @SaCheckPermission("server:group:updateConfig")
@Log(title = "差旅分组-编辑差旅设置", businessType = BusinessType.UPDATE) @Log(title = "差旅分组-编辑差旅设置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/updateConfig") @PostMapping("/updateConfig")
public R<Boolean> bindPersonList(@Validated(EditGroup.class) @RequestBody ConfigGroupBo bo) { public R<Boolean> bindPersonList(@Validated(EditGroup.class) @RequestBody ConfigGroupBo bo) {
return R.ok(configGroupService.updateByBo(bo)); return R.ok(configGroupService.updateByBo(bo));
...@@ -144,7 +146,7 @@ public class GroupController extends BaseController { ...@@ -144,7 +146,7 @@ public class GroupController extends BaseController {
* @return 是否成功 * @return 是否成功
*/ */
@SaCheckPermission("server:group:updateConfig") @SaCheckPermission("server:group:updateConfig")
@PostMapping("/config") @GetMapping("/config")
public R<ConfigGroupVo> config(@RequestParam Long groupId) { public R<ConfigGroupVo> config(@RequestParam Long groupId) {
List<ConfigGroupVo> list = configGroupService.queryList(new ConfigGroupBo() List<ConfigGroupVo> list = configGroupService.queryList(new ConfigGroupBo()
.setGroupId(groupId)); .setGroupId(groupId));
......
...@@ -3,9 +3,7 @@ package org.dromara.server.domain; ...@@ -3,9 +3,7 @@ package org.dromara.server.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial; import java.io.Serial;
...@@ -17,9 +15,8 @@ import java.io.Serial; ...@@ -17,9 +15,8 @@ import java.io.Serial;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("travel_group_person") @TableName("travel_group_person")
public class GroupPerson extends TenantEntity { public class GroupPerson {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
...@@ -4,10 +4,12 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; ...@@ -4,10 +4,12 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.server.domain.Group; import org.dromara.server.domain.Group;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
...@@ -42,5 +44,29 @@ public class GroupVo implements Serializable { ...@@ -42,5 +44,29 @@ public class GroupVo implements Serializable {
@ExcelProperty(value = "备注") @ExcelProperty(value = "备注")
private String remark; private String remark;
/**
* 用户列表
*/
private List<User> userList;
@Data
@Accessors(chain = true)
public static class User {
/**
* 用户id
*/
private Long userId;
/**
* 用户名称
*/
private String userName;
/**
* 手机号
*/
private String phone;
}
} }
package org.dromara.server.service.impl; package org.dromara.server.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService; import org.dromara.common.mybatis.service.AbstractBaseService;
...@@ -20,6 +22,7 @@ import org.dromara.server.mapper.GroupPersonMapper; ...@@ -20,6 +22,7 @@ import org.dromara.server.mapper.GroupPersonMapper;
import org.dromara.server.mapper.TravelConfigMapper; import org.dromara.server.mapper.TravelConfigMapper;
import org.dromara.server.service.IGroupService; import org.dromara.server.service.IGroupService;
import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -48,6 +51,38 @@ public class GroupServiceImpl extends AbstractBaseService<GroupVo, GroupBo, Grou ...@@ -48,6 +51,38 @@ public class GroupServiceImpl extends AbstractBaseService<GroupVo, GroupBo, Grou
return baseMapper; return baseMapper;
} }
@Override
public void processData(List<GroupVo> list) {
super.processData(list);
List<Long> groupIds = StreamUtils.toList(list, GroupVo::getId);
if (CollUtil.isNotEmpty(groupIds)) {
List<GroupPerson> gpList = groupPersonMapper.selectList(new LambdaQueryWrapper<GroupPerson>().in(GroupPerson::getGroupId, groupIds));
List<Long> userIds = StreamUtils.toList(gpList, GroupPerson::getUserId);
List<RemoteUserVo> userList = remoteUserService.selectUserVoListByUserIds(userIds);
for (GroupVo group : list) {
List<Long> userIdList = gpList.stream().filter(gp -> Objects.equals(group.getId(), gp.getGroupId()))
.map(GroupPerson::getUserId).collect(Collectors.toList());
group.setUserList(
userIdList
.stream()
.map(userId -> {
GroupVo.User user = new GroupVo.User();
user.setUserId(userId);
userList.stream().filter(u -> Objects.equals(u.getUserId(), userId))
.findFirst()
.ifPresent(u -> {
user.setUserName(u.getNickName());
user.setPhone(u.getPhonenumber());
});
return user;
}
)
.collect(Collectors.toList())
);
}
}
}
@Override @Override
public LambdaQueryWrapper<Group> buildQueryWrapper(GroupBo bo) { public LambdaQueryWrapper<Group> buildQueryWrapper(GroupBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
...@@ -132,7 +167,7 @@ public class GroupServiceImpl extends AbstractBaseService<GroupVo, GroupBo, Grou ...@@ -132,7 +167,7 @@ public class GroupServiceImpl extends AbstractBaseService<GroupVo, GroupBo, Grou
TravelConfig tc = travelConfigMapper.selectOne(Wrappers.lambdaQuery()); TravelConfig tc = travelConfigMapper.selectOne(Wrappers.lambdaQuery());
Optional.ofNullable(tc) Optional.ofNullable(tc)
.ifPresent(config -> { .ifPresent(config -> {
ConfigGroup cg = BeanUtil.copyProperties(config, ConfigGroup.class); ConfigGroup cg = BeanUtil.copyProperties(config, ConfigGroup.class, "id");
cg.setGroupId(bo.getId()); cg.setGroupId(bo.getId());
configGroupMapper.insert(cg); configGroupMapper.insert(cg);
}); });
......
...@@ -12,16 +12,10 @@ import org.dromara.common.satoken.utils.LoginHelper; ...@@ -12,16 +12,10 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.order.api.enums.OrderType; import org.dromara.order.api.enums.OrderType;
import org.dromara.server.constant.travel.*; import org.dromara.server.constant.travel.*;
import org.dromara.server.domain.Apply; import org.dromara.server.domain.*;
import org.dromara.server.domain.ApplyPerson;
import org.dromara.server.domain.TravelConfig;
import org.dromara.server.domain.TravelConfigPerson;
import org.dromara.server.domain.bo.TravelConfigBo; import org.dromara.server.domain.bo.TravelConfigBo;
import org.dromara.server.domain.vo.*; import org.dromara.server.domain.vo.*;
import org.dromara.server.mapper.ApplyMapper; import org.dromara.server.mapper.*;
import org.dromara.server.mapper.ApplyPersonMapper;
import org.dromara.server.mapper.TravelConfigMapper;
import org.dromara.server.mapper.TravelConfigPersonMapper;
import org.dromara.server.service.ITravelConfigService; import org.dromara.server.service.ITravelConfigService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -41,6 +35,9 @@ public class TravelConfigServiceImpl extends AbstractBaseService<TravelConfigVo, ...@@ -41,6 +35,9 @@ public class TravelConfigServiceImpl extends AbstractBaseService<TravelConfigVo,
private final ApplyMapper applyMapper; private final ApplyMapper applyMapper;
private final ApplyPersonMapper applyPersonMapper; private final ApplyPersonMapper applyPersonMapper;
private final TravelConfigPersonMapper travelConfigPersonMapper; private final TravelConfigPersonMapper travelConfigPersonMapper;
private final GroupPersonMapper groupPersonMapper;
private final ConfigGroupMapper configGroupMapper;
@Override @Override
public BaseMapperPlus<TravelConfig, TravelConfigVo> mapper() { public BaseMapperPlus<TravelConfig, TravelConfigVo> mapper() {
...@@ -150,10 +147,27 @@ public class TravelConfigServiceImpl extends AbstractBaseService<TravelConfigVo, ...@@ -150,10 +147,27 @@ public class TravelConfigServiceImpl extends AbstractBaseService<TravelConfigVo,
@Override @Override
public TravelConfigVo getTravelConfig() { public TravelConfigVo getTravelConfig() {
Long userId = LoginHelper.getUserId();
//获取个人配置 //获取个人配置
TravelConfigPerson travelConfigPerson = travelConfigPersonMapper.selectOne(new LambdaQueryWrapper<TravelConfigPerson>() TravelConfigPerson travelConfigPerson = travelConfigPersonMapper.selectOne(
.eq(TravelConfigPerson::getUserId, LoginHelper.getUserId())); new LambdaQueryWrapper<TravelConfigPerson>()
return Optional.ofNullable(travelConfigPerson) .eq(TravelConfigPerson::getUserId, userId)
.map(person -> BeanUtil.copyProperties(person, TravelConfigVo.class)).orElseGet(() -> mapper().selectVoOne(new LambdaQueryWrapper<>())); );
if (Objects.nonNull(travelConfigPerson)) {
return BeanUtil.copyProperties(travelConfigPerson, TravelConfigVo.class);
}
//获取分组配置
GroupPerson gp = groupPersonMapper.selectOne(
new LambdaQueryWrapper<GroupPerson>()
.eq(GroupPerson::getUserId, userId)
);
if (Objects.nonNull(gp)) {
ConfigGroup configGroup = configGroupMapper.selectOne(
new LambdaQueryWrapper<ConfigGroup>()
.eq(ConfigGroup::getGroupId, gp.getGroupId())
);
return BeanUtil.copyProperties(configGroup, TravelConfigVo.class);
}
return mapper().selectVoOne(new LambdaQueryWrapper<>());
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论