package org.jeecg.modules.eam.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; //import org.jeecg.modules.base.service.IUnitService; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.eam.entity.*; import org.jeecg.modules.eam.service.*; import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description: 精度参数模板 * @Author: cj * @Date: 2023-03-23 * @Version: V1.0 */ @Api(tags = "精度参数模板") @RestController @RequestMapping("/eam/precisionParametersTemplate") @Slf4j public class PrecisionParametersTemplateController extends JeecgController { @Autowired private IPrecisionParametersTemplateService precisionParametersTemplateService; @Autowired private IPrecisionParametersTemplateDetailService precisionParametersTemplateDetailService; @Autowired private IPrecisionParametersCategoryService precisionParametersCategoryService; @Autowired private IEamEquipmentService equipmentService; @Autowired private IPrecisionParametersService precisionParametersService; @Autowired private ISysBaseAPI sysBaseApi; /** * 分页列表查询 * * @param precisionParametersTemplate * @param pageNo * @param pageSize * @param req * @return */ @ApiOperation(value = "精度参数模板-分页列表查询", notes = "精度参数模板-分页列表查询") @GetMapping(value = "/list") public Result> queryPageList(PrecisionParametersTemplate precisionParametersTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(precisionParametersTemplate, req.getParameterMap()); Page page = new Page(pageNo, pageSize); IPage pageList = precisionParametersTemplateService.page(page, queryWrapper); List records = pageList.getRecords(); for (PrecisionParametersTemplate record : records) { List precisionParametersTemplateDetailList = precisionParametersTemplateDetailService.lambdaQuery().eq(PrecisionParametersTemplateDetail::getPrecisionParametersTemplateId, record.getId()).eq(PrecisionParametersTemplateDetail::getDelFlag, CommonConstant.DEL_FLAG_0).list(); for (PrecisionParametersTemplateDetail precisionParametersTemplateDetail : precisionParametersTemplateDetailList) { PrecisionParameters precisionParameters = precisionParametersService.getById(precisionParametersTemplateDetail.getPrecisionParametersId()); if(precisionParameters != null){ String num = precisionParameters.getNum(); String name =precisionParameters.getName(); if (num!=null){ precisionParametersTemplateDetail.setPrecisionParametersNum(num); } if (name!=null){ precisionParametersTemplateDetail.setPrecisionParametersName(name); } String id = precisionParameters.getPrecisionParametersCategoryId(); if (id!=null){ PrecisionParametersCategory precisionParametersCategory = precisionParametersCategoryService.getById(id); precisionParametersTemplateDetail.setPrecisionParametersCategory(precisionParametersCategory.getName()); } }else{ precisionParametersTemplateDetail.setPrecisionParametersCategory("/"); } if (precisionParameters!=null){ String unitName = sysBaseApi.getUnitNameById(precisionParameters.getUnitId()); precisionParametersTemplateDetail.setUnit(unitName); } } record.setPrecisionParametersTemplateDetailList(precisionParametersTemplateDetailList); } return Result.OK(pageList); } /** * 添加 * * @param jSONObject * @return */ @ApiOperation(value = "精度参数模板-添加", notes = "精度参数模板-添加") @PostMapping(value = "/add") public Result add(@RequestBody JSONObject jSONObject) { PrecisionParametersTemplate precisionParametersTemplate = jSONObject.toJavaObject(PrecisionParametersTemplate.class); JSONArray jSONArray = jSONObject.getJSONArray("PrecisionParametersTemplateDetailList"); List precisionParametersTemplateDetailList = jSONArray.toJavaList(PrecisionParametersTemplateDetail.class); precisionParametersTemplateService.save(precisionParametersTemplate); for (PrecisionParametersTemplateDetail precisionParametersTemplateDetail : precisionParametersTemplateDetailList) { precisionParametersTemplateDetail.setId(null); precisionParametersTemplateDetail.setPrecisionParametersTemplateId(precisionParametersTemplate.getId()); precisionParametersTemplateDetailService.save(precisionParametersTemplateDetail); } return Result.OK("添加成功!"); } /** * 编辑 * * @param jSONObject * @return */ @AutoLog(value = "精度参数模板-编辑") @ApiOperation(value = "精度参数模板-编辑", notes = "精度参数模板-编辑") @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result edit(@RequestBody JSONObject jSONObject) { PrecisionParametersTemplate precisionParametersTemplate = jSONObject.toJavaObject(PrecisionParametersTemplate.class); List precisionParametersTemplateDetailList = precisionParametersTemplateDetailService.lambdaQuery().eq(PrecisionParametersTemplateDetail::getPrecisionParametersTemplateId, precisionParametersTemplate.getId()).eq(PrecisionParametersTemplateDetail::getDelFlag, CommonConstant.DEL_FLAG_0).list(); precisionParametersTemplateService.updateById(precisionParametersTemplate); //循环删除原绑定数据 for (PrecisionParametersTemplateDetail precisionParametersTemplateDetail : precisionParametersTemplateDetailList) { precisionParametersTemplateDetailService.removeById(precisionParametersTemplateDetail.getId()); } //增加新绑定数据 JSONArray jSONArray = jSONObject.getJSONArray("PrecisionParametersTemplateDetailList"); List precisionParametersTemplateDetails = jSONArray.toJavaList(PrecisionParametersTemplateDetail.class); for (PrecisionParametersTemplateDetail precisionParametersTemplateDetail : precisionParametersTemplateDetails) { precisionParametersTemplateDetail.setId(null); precisionParametersTemplateDetail.setPrecisionParametersTemplateId(precisionParametersTemplate.getId()); precisionParametersTemplateDetailService.save(precisionParametersTemplateDetail); } return Result.OK("编辑成功!"); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "精度参数模板-通过id删除") @ApiOperation(value = "精度参数模板-通过id删除", notes = "精度参数模板-通过id删除") @DeleteMapping(value = "/delete") public Result delete(@RequestParam(name = "id", required = true) String id) { precisionParametersTemplateService.removeById(id); //删除关联明细信息 List precisionParametersTemplateDetailList = precisionParametersTemplateDetailService.lambdaQuery().eq(PrecisionParametersTemplateDetail::getPrecisionParametersTemplateId, id).eq(PrecisionParametersTemplateDetail::getDelFlag, CommonConstant.DEL_FLAG_0).list(); for (PrecisionParametersTemplateDetail precisionParametersTemplateDetail : precisionParametersTemplateDetailList) { precisionParametersTemplateDetailService.removeById(precisionParametersTemplateDetail.getId()); } return Result.OK("删除成功!"); } /** * 添加 * * @param precisionParametersTemplate * @return */ @ApiOperation(value = "精度参数模板-添加", notes = "精度参数模板-添加") @PostMapping(value = "/addNew") public Result addNew(@RequestBody PrecisionParametersTemplate precisionParametersTemplate) { precisionParametersTemplateService.save(precisionParametersTemplate); String id= precisionParametersTemplate.getId(); List details = precisionParametersTemplate.getPrecisionParametersTemplateDetailList(); for(PrecisionParametersTemplateDetail precisionParametersTemplateDetail:details){ precisionParametersTemplateDetail.setPrecisionParametersTemplateId(id); } precisionParametersTemplateDetailService.saveBatch(details); return Result.OK("添加成功"); } /** * 添加 * * @param precisionParametersTemplate * @return */ @ApiOperation(value = "精度参数模板-添加", notes = "精度参数模板-添加") @PutMapping(value = "/editNew") public Result editNew(@RequestBody PrecisionParametersTemplate precisionParametersTemplate) { precisionParametersTemplateService.saveOrUpdate(precisionParametersTemplate); String id= precisionParametersTemplate.getId(); precisionParametersTemplateDetailService.remove(new QueryWrapper().eq("precision_parameters_template_id",id)); List details = precisionParametersTemplate.getPrecisionParametersTemplateDetailList(); precisionParametersTemplateDetailService.saveBatch(details); return Result.OK("操作 成功"); } @GetMapping("/getNums") public Result getNums(@RequestParam(name = "searchText", defaultValue = "") String searchText){ List nums = equipmentService .list(new QueryWrapper() .like("num",searchText) ) .stream() .map(Equipment::getNum) .collect(Collectors.toList()); return Result.OK(nums); } /** * 导入 * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) @Transactional(rollbackFor = Exception.class) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; LoginUser user= (LoginUser) SecurityUtils.getSubject().getPrincipal(); Map fileMap = multipartRequest.getFileMap(); String exceptionInfo = ""; int exceptionNum = 0; for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue(); ImportParams params = new ImportParams(); params.setNeedSave(true); try { InputStream fis = file.getInputStream(); Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); Row row1 = sheet.getRow(1); Cell cell15 = row1.getCell(5); if(ObjectUtils.isNotNull(cell15)&&cell15.getCellType()==CellType.NUMERIC){ String num = (int)cell15.getNumericCellValue()+""; PrecisionParametersTemplate precisionParametersTemplate = precisionParametersTemplateService.getOne(new QueryWrapper().eq("num",num).eq("del_flag",0),false); if(ObjectUtils.isNull(precisionParametersTemplate)){ precisionParametersTemplate = new PrecisionParametersTemplate(); precisionParametersTemplate.setNum(num); precisionParametersTemplate.setName(num+"精度检验单"); precisionParametersTemplate.setDelFlag(0); precisionParametersTemplateService.save(precisionParametersTemplate); } precisionParametersTemplateDetailService.remove(new QueryWrapper().eq("precision_parameters_template_id",precisionParametersTemplate.getId())); for (Row row : sheet) { if(row.getRowNum()>3&&row.getRowNum()().eq("name",cellValue1).eq("precision_parameters_uda1",cellValue3).eq("del_flag",0)); if(ObjectUtils.isNull(precisionParameters)){ precisionParameters = new PrecisionParameters(); precisionParameters.setName(cellValue1); precisionParameters.setPrecisionParametersUda1(cellValue3); precisionParameters.setDelFlag(0); precisionParametersService.save(precisionParameters); } precisionParametersTemplateDetail.setPrecisionParametersTemplateId(precisionParametersTemplate.getId()); precisionParametersTemplateDetail.setPrecisionParametersId(precisionParameters.getId()); precisionParametersTemplateDetail.setPrecisionParametersUda1(cellValue3); precisionParametersTemplateDetail.setTolerance(cellValue4); String[] needs = cellValue4.split("/"); if(needs.length==2){ precisionParametersTemplateDetail.setDistance(Double.valueOf(needs[1])); } if(StringUtils.isNotBlank(needs[0])){ precisionParametersTemplateDetail.setBase(Double.valueOf(needs[0])); } precisionParametersTemplateDetail.setSort(row.getRowNum()-4); precisionParametersTemplateDetailService.save(precisionParametersTemplateDetail); } } Equipment equipment = equipmentService.getOne(new QueryWrapper().eq("num",num).eq("del_flag",0),false); if(ObjectUtils.isNotNull(equipment)&&StringUtils.isBlank(equipment.getPrecisionParametersTemplateId())){ equipment.setPrecisionParametersTemplateId(precisionParametersTemplate.getId()); equipmentService.updateById(equipment); } return Result.OK("导入成功"); } else { return Result.OK("导入失败,统一编码格式错误,请正确填写表头"); } } catch (IOException e) { e.printStackTrace(); } } return Result.error("文件导入失败!"); } /** * * 检查单元格是否在合并单元格范围内. * */ private boolean isMergedCell(Sheet sheet, Cell cell) { for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) { if (mergedRegion.isInRange(cell.getRowIndex(), cell.getColumnIndex())) { return true; } } return false; } /** * * 获取合并单元格的值. * */ private String getMergedCellValue(Sheet sheet, Cell cell) { for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) { if (mergedRegion.isInRange(cell.getRowIndex(), cell.getColumnIndex())) { Row firstRow = sheet.getRow(mergedRegion.getFirstRow()); Cell firstCell = firstRow.getCell(mergedRegion.getFirstColumn()); if (firstCell != null) { if (firstCell.getCellType() == CellType.STRING) { return firstCell.getStringCellValue(); } else if (firstCell.getCellType() == CellType.NUMERIC) { return String.valueOf(firstCell.getNumericCellValue()); } } } } return null; } }