diff --git a/adc-da-sys/src/main/java/com/adc/da/eo/DictItemEntity.java b/adc-da-sys/src/main/java/com/adc/da/eo/DictItemEntity.java index f8cb85d..8a3a35c 100644 --- a/adc-da-sys/src/main/java/com/adc/da/eo/DictItemEntity.java +++ b/adc-da-sys/src/main/java/com/adc/da/eo/DictItemEntity.java @@ -10,6 +10,7 @@ import java.util.Date; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; /** * @@ -20,6 +21,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor +@Accessors(chain = true) public class DictItemEntity implements Serializable { /** * 主键id diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/controller/DictItemController.java b/adc-da-sys/src/main/java/com/adc/da/sys/controller/DictItemController.java index e832337..9b128d3 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/controller/DictItemController.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/controller/DictItemController.java @@ -1,13 +1,63 @@ package com.adc.da.sys.controller; +import com.adc.da.sys.service.iservice.IDictItemService; +import com.adc.da.sys.vo.DictItemQueryVo; +import com.adc.da.sys.vo.DictItemVo; +import com.adc.da.util.http.ResponseMessage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +/** + * @author CaiHaohan + */ @Slf4j @RestController @RequestMapping("/${restPath}/sys/dictItem") -@Api(tags = {"Sys-数据字典配置项设置"}) +@Api(tags = {"Sys-数据字典记录"}) public class DictItemController { + + @Resource + private IDictItemService dictItemService; + + /** + * 分页获取所有数据字典记录 + */ + @ApiOperation(value = "分页获取所有数据字典记录") + @GetMapping("/page") + public ResponseMessage pageById(@Valid DictItemQueryVo dictItemQueryVo) { + return dictItemService.pageById(dictItemQueryVo); + } + + /** + * 修改数据字典记录 + */ + @ApiOperation(value = "修改数据字典记录") + @PutMapping("/edit") + public ResponseMessage edit(@RequestBody DictItemVo dictItemVo) { + return dictItemService.edit(dictItemVo); + } + + /** + * 删除数据字典记录 + */ + @ApiOperation(value = "删除数据字典记录") + @DeleteMapping("/delete") + public ResponseMessage delete(@RequestParam List ids) { + return dictItemService.delete(ids); + } + + /** + * 新增数据字典记录 + */ + @ApiOperation(value = "新增数据字典记录") + @PostMapping("/add") + public ResponseMessage add(@RequestBody DictItemVo dictItemVo) { + return dictItemService.add(dictItemVo); + } } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/service/DictItemServiceImpl.java b/adc-da-sys/src/main/java/com/adc/da/sys/service/DictItemServiceImpl.java index ac21d60..50531de 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/service/DictItemServiceImpl.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/service/DictItemServiceImpl.java @@ -1,11 +1,30 @@ package com.adc.da.sys.service; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.adc.da.eo.DictEntity; import com.adc.da.eo.DictItemEntity; +import com.adc.da.sys.dao.mysql.DictDao; import com.adc.da.sys.service.iservice.IDictItemService; +import com.adc.da.sys.util.BeanCopyUtils; +import com.adc.da.sys.vo.DictItemQueryVo; +import com.adc.da.sys.vo.DictItemVo; +import com.adc.da.util.http.ResponseMessage; +import com.adc.da.util.http.Result; +import com.adc.da.util.utils.UUID; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.adc.da.sys.dao.mysql.DictItemDao; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; /** * @author ThinkBook @@ -13,9 +32,109 @@ import org.springframework.stereotype.Service; * @createDate 2023-05-05 10:28:25 */ @Service +@Slf4j public class DictItemServiceImpl extends ServiceImpl implements IDictItemService { + @Resource + private DictItemDao dictItemDao; + + @Resource + private DictDao dictDao; + + @Override + public ResponseMessage pageById(DictItemQueryVo dictItemQueryVo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictItemEntity::getDelFlag, 0); + wrapper.eq(DictItemEntity::getTypeId, dictItemQueryVo.getDicId()); + wrapper.orderByAsc(DictItemEntity::getItemOrder); + + IPage page = new Page<>(dictItemQueryVo.getPageNo(), dictItemQueryVo.getPageSize()); + page(page, wrapper); + + Page returnPage = BeanCopyUtils.copyBean(page, Page.class); + List dictItemVos = BeanCopyUtils.copyBeanList(page.getRecords(), DictItemVo.class); + + returnPage.setRecords(dictItemVos); + return Result.success(returnPage); + } + + @Override + public ResponseMessage edit(DictItemVo dictItemVo) { + try { + DictItemEntity dictItemEntity = new DictItemEntity(); + BeanUtil.copyProperties(dictItemVo, dictItemEntity); + dictItemDao.updateById(dictItemEntity); + log.info("编辑id为{}数据字典值成功", dictItemEntity.getId()); + return Result.success("编辑成功"); + } catch (Exception e) { + log.info("编辑数据字典值失败", e); + } + return Result.error("编辑失败"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseMessage delete(List ids) { + List dictEntities = new ArrayList<>(); + ids.forEach(id -> { + DictItemEntity dictEntity = new DictItemEntity(); + dictEntity.setId(id); + dictEntity.setUpdateTime(new Date()); + dictEntity.setDelFlag(1); + dictEntities.add(dictEntity); + }); + updateBatchById(dictEntities); + return Result.success("删除成功"); + } + + @Override + public ResponseMessage add(DictItemVo dictItemVo) { + //判断上级字典id是否存在 + if (StrUtil.isBlank(dictItemVo.getDicId())) { + return Result.error("上级字典id无效"); + } + //判断上级字典id是否有效 + DictEntity dictEntity = dictDao.selectById(dictItemVo.getDicId()); + if (dictEntity == null) { + return Result.error("上级字典id无效"); + } + + try { + DictItemEntity dictItemEntity = BeanCopyUtils.copyBean(dictItemVo, DictItemEntity.class); + dictItemEntity.setId(UUID.randomUUID10()) + .setTypeId(dictItemVo.getDicId()) + .setCreateTime(new Date()) + .setUpdateTime(new Date()) + .setDelFlag(0); + + //求已存在选项排序的最大值 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictItemEntity::getDelFlag, 0); + wrapper.eq(DictItemEntity::getTypeId, dictItemVo.getDicId()); + List dictItemEntities = dictItemDao.selectList(wrapper); + Double maxOrder = dictItemEntities.stream().map(DictItemEntity::getItemOrder) + .sorted(Comparator.reverseOrder()) + .collect(Collectors.toList()) + .stream().findFirst().orElse(null); + + //设置排序值 + if (dictItemVo.getItemOrder() == null) { + //如果目前没有最大值(没有选项) + if (maxOrder == null) { + dictItemEntity.setItemOrder(1.0); + } else { + //设置为最后一个 + dictItemEntity.setItemOrder(1.0 + Math.ceil(maxOrder)); + } + } + save(dictItemEntity); + return Result.success("新增成功"); + } catch (Exception e) { + log.info("新增选项失败", e); + } + return Result.error("新增失败"); + } } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/service/iservice/IDictItemService.java b/adc-da-sys/src/main/java/com/adc/da/sys/service/iservice/IDictItemService.java index feeed27..40327d6 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sys/service/iservice/IDictItemService.java +++ b/adc-da-sys/src/main/java/com/adc/da/sys/service/iservice/IDictItemService.java @@ -1,8 +1,13 @@ package com.adc.da.sys.service.iservice; import com.adc.da.eo.DictItemEntity; +import com.adc.da.sys.vo.DictItemQueryVo; +import com.adc.da.sys.vo.DictItemVo; +import com.adc.da.util.http.ResponseMessage; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * @author ThinkBook * @description 针对表【ts_dict_item】的数据库操作Service @@ -10,4 +15,31 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IDictItemService extends IService { + /** + * 获取所有字典值 + * @param dictItemQueryVo + * @return + */ + ResponseMessage pageById(DictItemQueryVo dictItemQueryVo); + + /** + * 修改一个字典值 + * @param dictItemVo + * @return + */ + ResponseMessage edit(DictItemVo dictItemVo); + + /** + * 删除一个字典值 + * @param ids + * @return + */ + ResponseMessage delete(List ids); + + /** + * 添加一个字典值 + * @param dictItemVo 字典值视图对象 + * @return + */ + ResponseMessage add(DictItemVo dictItemVo); } diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemQueryVo.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemQueryVo.java new file mode 100644 index 0000000..0aac2a5 --- /dev/null +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemQueryVo.java @@ -0,0 +1,46 @@ +package com.adc.da.sys.vo; + +import lombok.Data; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + + +/** + * @author CaiHaohan + */ +@Data +public class DictItemQueryVo { + + /** + * 上级主键id + */ + private String dicId; + + /** + * 页数 + */ + @Min(1) + private Integer pageNo; + + /** + * 每页数量 + */ + @NotNull + private Integer pageSize; + + /** + * 数据名称 + */ + private String itemName; + + /** + * 状态 + */ + private Integer itemStatus; + + /** + * 排序 + */ + private Double itemOrder; + +} diff --git a/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemVo.java b/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemVo.java new file mode 100644 index 0000000..542bbc1 --- /dev/null +++ b/adc-da-sys/src/main/java/com/adc/da/sys/vo/DictItemVo.java @@ -0,0 +1,45 @@ +package com.adc.da.sys.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author CaiHaohan + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DictItemVo { + + /** + * 主键id + */ + private String id; + + /** + * 上级字典主键id + */ + private String dicId; + + /** + * 数据名称 + */ + private String itemName; + + /** + * 数据值 + */ + private String itemValue; + + /** + * 描述 + */ + private String itemDescription; + + /** + * 排序 + */ + private Double itemOrder; + +}