123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package com.xy.service;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.core.toolkit.StringUtils;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.xy.annotate.Runners;
- import com.xy.collections.list.JArrayList;
- import com.xy.collections.list.JList;
- import com.xy.dto.SysDictDto;
- import com.xy.entity.SysDict;
- import com.xy.entity.SysDictRedis;
- import com.xy.mapper.SysDictMapper;
- import com.xy.utils.*;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import java.util.List;
- import static com.xy.utils.Beans.copy;
- import static com.xy.utils.PlusBeans.toIPage;
- import static com.xy.utils.PlusBeans.toPageBean;
- /**
- * <p>
- * 字典表 服务实现类
- * </p>
- *
- * @author lijin
- * @since 2022-12-09
- */
- @Slf4j
- @Service
- @AllArgsConstructor
- @Api(tags = "系统字典")
- public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements SysDictService {
- private RedisService<SysDictRedis> redisService;
- @ApiOperation("添加")
- @PostMapping("save")
- public R save(@RequestBody @Validated SysDictDto.Save save) {
- //添加字典
- long count = !Emptys.check(save.getPaterCode()) ? count(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCode, save.getCode()))
- : count(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCode, save.getCode()).eq(SysDict::getPaterCode, save.getPaterCode()));
- if (count > 0) {
- return R.fail("code已存在");
- }
- SysDict sysDict = copy(SysDict.class, save)
- .createUserTime(AuthorizeUtils.getLoginId(Long.class));
- save(sysDict);
- //刷新redis
- refuRedis(sysDict);
- return R.ok();
- }
- @ApiOperation("修改")
- @PostMapping("update")
- public R update(@RequestBody @Validated SysDictDto.Update update) {
- SysDict sysDict = getById(update.getId());
- if (!sysDict.getCode().equals(update.getCode())) {
- long count = !Emptys.check(update.getPaterCode()) ? count(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCode, update.getCode()))
- : count(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCode, update.getCode()).eq(SysDict::getPaterCode, update.getPaterCode()));
- if (count > 0) {
- return R.fail("code已存在");
- }
- }
- //修改字典
- SysDict obj = copy(SysDict.class, update)
- .update(AuthorizeUtils.getLoginId(Long.class));
- updateById(obj);
- //修改子字典
- update(new SysDict().setPaterCode(obj.getCode()), new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, sysDict.getCode()));
- //刷新redis
- refuRedis(obj);
- return R.ok();
- }
- @ApiOperation("删除")
- @PostMapping("del")
- @Transactional(rollbackFor = Exception.class)
- public R del(@RequestBody @Validated SysDictDto.Del del) {
- //删除字典
- List<Integer> ids = del.getId();
- List<SysDict> list = list(new LambdaQueryWrapper<SysDict>().in(SysDict::getId, ids));
- removeBatchByIds(ids);
- //删除子字典
- JList<SysDict> paters = new JArrayList<>(list).filter().isNull(SysDict::getPaterCode).list();
- JList<SysDict> paters2 = new JArrayList<>(list).filter().eq(SysDict::getPaterCode, "").list();
- if (Emptys.check(paters2)) {
- paters.addAll(paters2);
- }
- if (Emptys.check(paters)) {
- JList<String> codes = paters.getProperty(SysDict::getCode);
- remove(new LambdaQueryWrapper<SysDict>().in(SysDict::getPaterCode, codes));
- }
- //刷新redis
- list.forEach(sysDict -> refuRedis(sysDict));
- return R.ok();
- }
- @ApiOperation("分页查询")
- @PostMapping("page")
- public R<PageBean<SysDictDto.Vo>> page(@RequestBody SysDictDto.Page pageInfo) {
- PageBean<SysDict> page = pageInfo.getPage();
- LambdaQueryWrapper<SysDict> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(pageInfo, SysDict.class)
- .ge(SysDict::getCreateTime, pageInfo.getBeginCreateTime())
- .le(SysDict::getCreateTime, pageInfo.getEndCreateTime())
- .like(SysDict::getMsg)
- .like(SysDict::getValue)
- .build()
- .orderByAsc(!Emptys.check(page.getOrders()), SysDict::getOrders)
- .and(StringUtils.isEmpty(pageInfo.getPaterCode()), sysDictLambdaQueryWrapper -> sysDictLambdaQueryWrapper
- .isNull(SysDict::getPaterCode)
- .or()
- .eq(SysDict::getPaterCode, "")
- );
- IPage<SysDict> iPage = page(toIPage(page), lambdaQueryWrapper);
- return R.ok(toPageBean(SysDictDto.Vo.class, iPage));
- }
- @ApiOperation("集合查询")
- @PostMapping("list")
- public R<List<SysDictDto.Vo>> list(@RequestBody SysDictDto.SelectList selectList) {
- LambdaQueryWrapper<SysDict> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, SysDict.class)
- .in(SysDict::getId, selectList.getIds())
- .in(SysDict::getCode, selectList.getCodes())
- .in(SysDict::getPaterCode, selectList.getPaterCodes())
- .like(SysDict::getMsg)
- .like(SysDict::getValue)
- .build()
- .orderByAsc(SysDict::getOrders);
- List<SysDict> list = list(lambdaQueryWrapper);
- return R.ok(copy(SysDictDto.Vo.class, list));
- }
- /**
- * 刷新redis
- *
- * @param sysDict
- */
- public void refuRedis(SysDict sysDict) {
- List<SysDict> list;
- String key = sysDict.getPaterCode();
- if (!Emptys.check(sysDict.getPaterCode())) {
- //父字典
- list = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, sysDict.getCode()).eq(SysDict::getStatus, true));
- key = sysDict.getCode();
- } else {
- //子字典
- list = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getPaterCode, sysDict.getPaterCode()).eq(SysDict::getStatus, true));
- }
- redisService.removeMap(SysDictUtils.getKey(key));
- for (SysDict dict : list) {
- redisService.setMap(SysDictUtils.getKey(key), dict.getCode(), copy(SysDictRedis.class, dict));
- }
- log.info("字典刷新redis完成~");
- }
- /**
- * 全量加载字典到redis
- */
- @Runners
- public void loadRedis() {
- List<SysDict> sysDicts = list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getStatus, true));
- List<SysDictRedis> sysDictRedis = Beans.copy(SysDictRedis.class, sysDicts);
- JList<SysDictRedis> list = new JArrayList<>(sysDictRedis);
- //父字典
- JList<SysDictRedis> paters = list.filter().isNull(SysDictRedis::getPaterCode).list();
- JList<SysDictRedis> paters2 = list.filter().eq(SysDictRedis::getPaterCode, "").list();
- if (Emptys.check(paters2)) {
- paters.addAll(paters2);
- }
- redisService.removeLikeMap(SysDictUtils.SYS_DICT_REDIS_PREFIX);
- //[父code -> 子列表]数据结构写入redis
- paters.forEach(sysDict -> {
- JList<SysDictRedis> sysDictJList = list.filter().eq(SysDictRedis::getPaterCode, sysDict.getCode()).list();
- sysDictJList.forEach(sysDictRediss -> redisService.setMap(SysDictUtils.getKey(sysDict.getCode()), sysDictRediss.getCode(), sysDictRediss));
- });
- log.info("字典写入redis完成~");
- }
- @ApiOperation("集合查询")
- @Override
- public R<List<SysDictDto.Vo>> dictList(SysDictDto.SelectList selectList) {
- return this.list(selectList);
- }
- }
|