package com.ruoyi.web.controller.api;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.dto.TechImportExcel;
import com.ruoyi.system.service.*;
import com.ruoyi.system.query.RegionQuery;
import io.swagger.annotations.ApiOperation;
import org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 职称系列 前端控制器
*
*
* @author luodangjia
* @since 2024-09-19
*/
@RestController
@RequestMapping("/t-technical-title")
public class TTechnicalTitleController {
@Resource
private TTechnicalTitleService tTechnicalTitleService;
@Resource
private TRegionService regionService;
@Resource
private TTitleMajorService majorService;
@Resource
private TLevelService levelService;
@Resource
private TUserChangeDetailService userChangeDetailService;
@Resource
private TConsultationService consultationService;
@Resource
private TDeclareNoticeService declareNoticeService;
@Resource
private TCommitteeTechnicalService committeeTechnicalService;
@Resource
private TCommitteeService committeeService;
@Resource
private TInformationService informationService;
@Resource
private TCourseService courseService;
//添加接口
@ApiOperation(value = "添加",tags = "后台-系统设置-职称系列")
@PostMapping(value = "/add")
public R add(@RequestBody TTechnicalTitle tTechnicalTitle){
tTechnicalTitleService.save(tTechnicalTitle);
return R.ok();
}
@ApiOperation(value = "职称分类",tags = "后台-下拉框")
@PostMapping(value = "/select")
public R> select(){
return R.ok(tTechnicalTitleService.list());
}
@ApiOperation(value = "树状图",tags = "web-下拉框")
@PostMapping(value = "/tree")
public R> tree(){
List tTitleMajorList = majorService.lambdaQuery().list();
List list = tTechnicalTitleService.list();
for (TTechnicalTitle tTechnicalTitle : list) {
tTechnicalTitle.setName(tTechnicalTitle.getTitileName());
List tTitleMajors = tTitleMajorList.stream().filter(e -> e.getTechnicalId().equals(tTechnicalTitle.getId())).collect(Collectors.toList());
for (TTitleMajor tTitleMajor : tTitleMajors) {
tTitleMajor.setName(tTitleMajor.getMajorName());
// tTitleMajor.setMajors(list2);
}
tTechnicalTitle.setMajors(tTitleMajors);
}
return R.ok(list);
}
//编辑接口
@ApiOperation(value = "编辑",tags = "后台-系统设置-职称系列")
@PostMapping(value = "/edit")
public R edit(@RequestBody TTechnicalTitle tTechnicalTitle){
tTechnicalTitleService.updateById(tTechnicalTitle);
// 修改专业的地区
majorService.lambdaUpdate().eq(TTitleMajor::getTechnicalId, tTechnicalTitle.getId()).set(TTitleMajor::getRegionIds, tTechnicalTitle.getRegionIds()).update();
return R.ok();
}
//批量删除接口
@ApiOperation(value = "删除",tags = "后台-系统设置-职称系列")
@PostMapping(value = "/deleteByIds")
public R deleteByIds(String ids){
List list = Arrays.asList(ids.split(","));
for (String s : list) {
//判断是否有关联数据
Long userChange = userChangeDetailService.lambdaQuery().eq(TUserChangeDetail::getTitleId, s).count();
if (userChange>0){
return R.fail("当前职称已有用户设为偏好,无法删除");
}
Long consultation = consultationService.lambdaQuery().eq(TConsultation::getTitleId, s).count();
if (consultation>0){
return R.fail("当前职称已设置咨询,无法删除");
}
Long declareNotice = declareNoticeService.lambdaQuery().eq(TDeclareNotice::getTechnicalId, s).count();
if (declareNotice>0){
return R.fail("当前职称已设置申报通知,无法删除");
}
Long committeeTechnical = committeeTechnicalService.lambdaQuery().eq(TCommitteeTechnical::getTechnicalId, s).count();
if (committeeTechnical>0){
return R.fail("当前职称已设置委员会可评审职称,无法删除");
}
Long committee = committeeService.lambdaQuery().eq(TCommittee::getTechnicalId, s).count();
if (committee>0){
return R.fail("当前职称已设置评审委员会,无法删除");
}
Long infomation = informationService.lambdaQuery().eq(TInformation::getTechnicalId, s).count();
if (infomation>0){
return R.fail("当前职称已设置资料,无法删除");
}
Long major = majorService.lambdaQuery().eq(TTitleMajor::getTechnicalId, s).count();
if (major>0){
return R.fail("当前职称已设置专业,无法删除");
}
Long course = courseService.lambdaQuery().eq(TCourse::getTechnicalId, s).count();
if (course>0){
return R.fail("当前职称已设置课程,无法删除");
}
}
tTechnicalTitleService.removeByIds(list);
return R.ok();
}
//分页查询
@ApiOperation(value = "查询",tags = "后台-系统设置-职称系列")
@PostMapping(value = "/pageList")
public R> pageList(@RequestBody RegionQuery regionQuery){
return R.ok(tTechnicalTitleService.pageList(regionQuery));
}
@ApiOperation(value = "导入",tags = "后台-系统设置-职称系列")
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
@PostMapping("/export")
public R export (@RequestParam("file") MultipartFile file) {
List tTechnicalTitles = new ArrayList<>();
ImportParams params = new ImportParams();
// params.setTitleRows(1);//标题行数
params.setHeadRows(1); //表头行数
String msg = null;
InputStream inputStream = null;
List failMsg = new ArrayList<>();
try {
inputStream = file.getInputStream();
List techImportExcels = ExcelImportUtil.importExcel(inputStream, TechImportExcel.class, params);
List list = regionService.lambdaQuery().list();
for (TechImportExcel techImportExcel : techImportExcels) {
List regionIds;
if (techImportExcel.getAddress() == null || StringUtils.isEmpty(techImportExcel.getAddress())) {
msg = "第" + techImportExcels.indexOf(techImportExcel) + "行,地区不能为空";
failMsg.add(msg);
continue;
} else {
if("全部".equals(techImportExcel.getAddress())){
regionIds = list.stream().map(TRegion::getId).collect(Collectors.toList());
}else {
String[] split = techImportExcel.getAddress().split(";");
regionIds = new ArrayList<>();
for (String s : split) {
TRegion region = list.stream().filter(e -> e.getName().contains(s)).findFirst().orElse(null);
// TRegion region = regionService.lambdaQuery().like(TRegion::getName, s).one();
if (region == null) {
msg = "第" + techImportExcels.indexOf(techImportExcel) + "行,地区不存在";
failMsg.add(msg);
} else {
regionIds.add(region.getId());
}
}
if (regionIds.size() != split.length) {
continue;
}
}
}
TTechnicalTitle tTechnicalTitle = new TTechnicalTitle();
tTechnicalTitle.setTitileName(techImportExcel.getTitileName());
tTechnicalTitle.setRegionIds(StringUtils.join(regionIds, ","));
tTechnicalTitles.add(tTechnicalTitle);
}
if (failMsg.size()==0){
tTechnicalTitleService.saveBatch(tTechnicalTitles);
}else {
return R.fail(failMsg);
}
} catch (Exception e) {
e.printStackTrace();
// logger.error("批量购入导入失败:{}",e.getMessage());
// importRecordService.removeById(tImportRecord.getId());
return R.fail("批量导入失败!");
}finally {
try {
inputStream.close();
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
}
return R.ok();
}
}