package com.xjrsoft.module.system.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xjrsoft.common.constant.GlobalConstant;
import com.xjrsoft.common.model.result.R;
import com.xjrsoft.common.model.result.RT;
import com.xjrsoft.common.page.ConventPage;
import com.xjrsoft.common.page.PageOutput;
import com.xjrsoft.common.utils.VoToColumnUtil;
import com.xjrsoft.module.student.service.IBaseStudentService;
import com.xjrsoft.module.system.dto.AddDictionaryDetailDto;
import com.xjrsoft.module.system.dto.DictionaryDetailChangeStatusDto;
import com.xjrsoft.module.system.dto.DictionaryDetailListDto;
import com.xjrsoft.module.system.dto.DictionaryDetailPageDto;
import com.xjrsoft.module.system.dto.UpdateDictionaryDetailDto;
import com.xjrsoft.module.system.entity.DictionaryDetail;
import com.xjrsoft.module.system.entity.DictionaryItem;
import com.xjrsoft.module.system.service.IDictionarydetailService;
import com.xjrsoft.module.system.service.IDictionaryitemService;
import com.xjrsoft.module.system.vo.DictionaryDetailListVo;
import com.xjrsoft.module.system.vo.DictionaryDetailPageVo;
import com.xjrsoft.module.system.vo.DictionaryDetailVo;
import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
*
* 数据字典详情 前端控制器
*
*
* @author tzx
* @since 2022-03-17
*/
@RestController
@RequestMapping(GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-detail")
@Api(value = GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-detail", tags = "数据字典详情")
@AllArgsConstructor
public class DictionarydetailController {
private IDictionarydetailService dictionarydetailService;
private IDictionaryitemService dictionaryitemService;
private ITeacherbaseManagerService teacherbaseManagerService;
private IBaseStudentService baseStudentService;
@GetMapping
@ApiOperation(value = "获取当前数据字典详情(不分页)")
public R list(DictionaryDetailListDto dto) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrUtil.isNotEmpty(dto.getName()), DictionaryDetail::getName, dto.getName());
queryWrapper.eq(StrUtil.isNotEmpty(dto.getCode()), DictionaryDetail::getCode, dto.getCode());
if (StrUtil.isNotEmpty(dto.getPCode())) {
DictionaryDetail dictionaryDetail = dictionarydetailService.getOne(Wrappers.lambdaQuery(DictionaryDetail.class).eq(DictionaryDetail::getCode, dto.getPCode()));
if (dictionaryDetail != null) {
queryWrapper.eq(DictionaryDetail::getPId, dictionaryDetail.getId());
}
}
queryWrapper.eq(ObjectUtil.isNotEmpty(dto.getItemId()) && dto.getItemId() != 0, DictionaryDetail::getItemId, dto.getItemId());
queryWrapper.select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryDetailListVo.class).contains(x.getProperty()));
queryWrapper.orderByAsc(DictionaryDetail::getSortCode);
List list = dictionarydetailService.list(queryWrapper);
return R.ok(BeanUtil.copyToList(list, DictionaryDetailListVo.class));
}
@GetMapping("/page")
@ApiOperation(value = "获取当前数据字典详情(分页)")
public R page(DictionaryDetailPageDto dto) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrUtil.isNotEmpty(dto.getName()), DictionaryDetail::getName, dto.getName())
.eq(StrUtil.isNotEmpty(dto.getCode()), DictionaryDetail::getCode, dto.getCode())
.and(StrUtil.isNotEmpty(dto.getKeyword()), wrapper -> wrapper.like(DictionaryDetail::getName, dto.getKeyword()).or().like(DictionaryDetail::getCode, dto.getKeyword()))
.eq(ObjectUtil.isNotEmpty(dto.getItemId()) && dto.getItemId() != 0, DictionaryDetail::getItemId, dto.getItemId())
.select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryDetailPageVo.class).contains(x.getProperty()))
.orderByAsc(DictionaryDetail::getSortCode);
IPage page = dictionarydetailService.page(ConventPage.getPage(dto), queryWrapper);
PageOutput pageOutput = ConventPage.getPageOutput(page, DictionaryDetailPageVo.class);
return R.ok(pageOutput);
}
@GetMapping("/info")
@ApiOperation(value = "获取当前数据字典详情的详情")
public R info(@RequestParam Long id) {
DictionaryDetail dictionaryDetail = dictionarydetailService.getById(id);
if (dictionaryDetail == null) {
R.error("找不到此字典详情!");
}
return R.ok(BeanUtil.toBean(dictionaryDetail, DictionaryDetailVo.class));
}
@PostMapping
@ApiOperation(value = "新增数据字典详情")
public R add(@Valid @RequestBody AddDictionaryDetailDto dto) {
// long count = dictionarydetailService.count(Wrappers.query().lambda()
// .eq(DictionaryDetail::getItemId, dto.getItemId())
// .and(wrapper -> wrapper.eq(DictionaryDetail::getName, dto.getName())
// .or().eq(DictionaryDetail::getValue, dto.getValue())
// .or().eq(DictionaryDetail::getCode, dto.getCode()))
// );
long count = dictionarydetailService.count(Wrappers.query().lambda()
.and(differentWrapper -> differentWrapper
.eq(DictionaryDetail::getItemId, dto.getItemId())
.and(differentInWrapper -> differentInWrapper
.eq(DictionaryDetail::getName, dto.getName())
.or().eq(DictionaryDetail::getValue, dto.getValue())
.or().eq(DictionaryDetail::getCode, dto.getCode())))
.or(sameWrapper -> sameWrapper
.ne(DictionaryDetail::getItemId, dto.getItemId())
.eq(DictionaryDetail::getCode, dto.getCode()))
);
if (count > 0) {
return R.error("字典名称或者编码已经存在!");
}
DictionaryDetail dictionaryDetail = BeanUtil.toBean(dto, DictionaryDetail.class);
boolean isSuccess = dictionarydetailService.save(dictionaryDetail);
if (isSuccess) dictionarydetailService.loadCaches();
return R.ok(isSuccess);
}
@PutMapping
@ApiOperation(value = "修改数据字典详情")
public R update(@Valid @RequestBody UpdateDictionaryDetailDto dto) {
// long count = dictionarydetailService.count(Wrappers.query().lambda()
// .eq(DictionaryDetail::getItemId, dto.getItemId())
// .ne(DictionaryDetail::getId,dto.getId())
// .and(wrapper -> wrapper.eq(DictionaryDetail::getName, dto.getName())
// .or().eq(DictionaryDetail::getValue, dto.getValue())
// .or().eq(DictionaryDetail::getCode, dto.getCode()))
// );
long count = dictionarydetailService.count(Wrappers.query().lambda()
.and(differentWrapper -> differentWrapper
.eq(DictionaryDetail::getItemId, dto.getItemId())
.ne(DictionaryDetail::getId, dto.getId())
.and(differentInWrapper -> differentInWrapper
.eq(DictionaryDetail::getName, dto.getName())
.or().eq(DictionaryDetail::getValue, dto.getValue())
.or().eq(DictionaryDetail::getCode, dto.getCode())))
.or(sameWrapper -> sameWrapper
.ne(DictionaryDetail::getItemId, dto.getItemId())
.ne(DictionaryDetail::getId, dto.getId())
.eq(DictionaryDetail::getCode, dto.getCode()))
);
if (count > 0) {
return R.error("字典名称、编码或值已经存在!");
}
DictionaryDetail dictionaryDetail = BeanUtil.toBean(dto, DictionaryDetail.class);
DictionaryItem dictionaryItem= dictionaryitemService.getById(dictionaryDetail.getItemId());
if(dictionaryItem!=null) {
if ("job_state".equals(dictionaryItem.getCode())) {
Integer isNormal = 1;
if (dictionaryDetail.getExtendField1().equals("0")) {
isNormal = 0;
}
teacherbaseManagerService.changeIsNormal(dictionaryDetail.getCode(), isNormal);
}
if("archives_status".equals(dictionaryItem.getCode())){
Integer isNormal = 1;
if (dictionaryDetail.getExtendField1().equals("0")) {
isNormal = 0;
}
baseStudentService.changeIsNormal(dictionaryDetail.getCode(), isNormal);
}
}
boolean isSuccess = dictionarydetailService.updateById(dictionaryDetail);
if (isSuccess) dictionarydetailService.loadCaches();
return R.ok(isSuccess);
}
@DeleteMapping
@ApiOperation(value = "删除数据字典详情")
public R delete(@RequestBody List ids) {
return R.ok(dictionarydetailService.removeBatchByIds(ids));
}
@PostMapping(value = "/change-status")
@ApiOperation(value="修改状态")
public RT changeStatus(@Valid @RequestBody DictionaryDetailChangeStatusDto dto) throws Exception {
DictionaryDetail dictionaryDetail= dictionarydetailService.getById(dto.getId());
if(dictionaryDetail!=null){
dictionaryDetail.setEnabledMark(dto.getStatus());
dictionarydetailService.updateById(dictionaryDetail);
}
return RT.ok(true);
}
}