basic-server/src/main/java/com/ruoyi/basic/controller/CapacityScopeController.java
@@ -1,22 +1,18 @@ package com.ruoyi.basic.controller; import cn.hutool.core.util.ObjectUtil; import cn.hutool.poi.excel.ExcelUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.ProductDto; import com.ruoyi.basic.dto.StructureTestObjectDto; import com.ruoyi.basic.excel.ExcelMultiSheetImporter; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.basic.dto.PageTestObjectDto; import com.ruoyi.basic.dto.ProductDTO1; import com.ruoyi.basic.excel.StructureTestObjectData; import com.ruoyi.basic.excel.StructureTestObjectListener; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.StandardTemplate; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.basic.pojo.StructureTestObject; import com.ruoyi.basic.service.CapacityScopeService; @@ -27,18 +23,13 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** * æ£éªé¡¹ç®åæ°(StructureItemParameter)表æ§å¶å± @@ -152,235 +143,11 @@ return Result.success(capacityScopeService.getItemTree()); } @ApiOperation(value = "è£ å¤å¯¼å ¥æ£éªé¡¹ç®") @PostMapping("/importEquipData") @Transactional public Result importEquipData(@RequestParam("file") MultipartFile file) throws Exception { InputStream inputStream = file.getInputStream(); List<StructureItemParameter> lists = new ArrayList<>(); AtomicReference<String> sample = new AtomicReference<>(); ExcelUtil.readBySax(inputStream, -1, (i, l, list1) -> { if (l == 1) { sample.set(list1.get(1) + ""); } if (l >= 1) { StructureItemParameter str = new StructureItemParameter(); // æµè¯å¯¹è±¡ if (list1.get(1) == null) { str.setSample(null); } else { String brand = (String) list1.get(1); StringBuilder builder = new StringBuilder(); builder.append("["); // 产å if (ObjectUtil.isNotEmpty(list1.get(2))) { String production = (String) list1.get(2); if (!production.contains("ï¼")) { builder.append(String.format("[\"%s\",\"%s\"]", brand, production)); } else { Arrays.stream(production.split("ï¼")).forEach(item -> { builder.append(String.format("[\"%s\",\"%s\"],", brand, item)); }); builder.deleteCharAt(builder.length() - 1); } } else { builder.append("["); builder.append(String.format("\"%s\"", brand)); builder.append("]"); } builder.append("]"); str.setSample(builder.toString()); } // æ£éªé¡¹ str.setInspectionItem(list1.get(4).toString().trim()); // æ£éªé¡¹è±æ if (list1.get(5) != null) { str.setInspectionItemEn(list1.get(5).toString()); } // æ£éªå项 if (list1.get(6) == null) { str.setInspectionItemSubclass(null); } else { str.setInspectionItemSubclass(list1.get(6).toString().trim()); } // æ£éªåé¡¹è±æ if (list1.get(7) == null) { str.setInspectionItemSubclassEn(null); } else { str.setInspectionItemSubclassEn(String.valueOf(list1.get(7).toString())); } // æ£éªé¡¹åç±» if (list1.get(22) != null && list1.get(22) != "") { str.setInspectionItemClass(list1.get(22).toString().trim()); } else { str.setInspectionItemClass(null); } // æ£éªé¡¹åç±»è±æ if (list1.get(23) != null && list1.get(23) != "") { str.setInspectionItemClassEn(list1.get(23) + ""); } else { str.setInspectionItemClassEn(null); } LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class) .eq(StructureItemParameter::getInspectionItem, str.getInspectionItem()) .eq(StructureItemParameter::getSample, str.getSample()) .last("limit 1"); // 夿æ¯å¦ææ£éªé¡¹ç±»å if (ObjectUtils.isNotEmpty(str.getInspectionItemClass())) { wrapper.eq(StructureItemParameter::getInspectionItemClass, str.getInspectionItemClass()); } // 夿æ¯å¦ææ£éªå项 if (ObjectUtils.isNotEmpty(str.getInspectionItemSubclass())) { wrapper.eq(StructureItemParameter::getInspectionItemSubclass, str.getInspectionItemSubclass()); } StructureItemParameter db_str = structureItemParameterService.getOne(wrapper); if (ObjectUtils.isNotEmpty(db_str)) { str.setId(db_str.getId()); } // æ¹æ³åç§° if (list1.get(8) == null) { str.setMethod(null); } else { StringBuffer buffer = new StringBuffer(); String input = list1.get(8).toString(); buffer.append("["); String[] values = input.split("ï¼"); for (String value : values) { buffer.append("\"").append(value.trim()).append("\","); } buffer.deleteCharAt(buffer.length() - 1); buffer.append("]"); str.setMethod(buffer.toString()); } // è¯éªå®¤ if (list1.get(9) == null) { str.setSonLaboratory(null); } else { str.setSonLaboratory(list1.get(9).toString()); } // 计éåä½ if (list1.get(10) == null) { str.setUnit(null); } else { str.setUnit(list1.get(10).toString()); } // è¦æ±å¼ if (list1.get(11) == null) { str.setAskTell(null); } else { str.setAskTell(list1.get(11).toString()); } // è¦æ±æè¿° if (list1.get(12) == null) { str.setAsk(null); } else { str.setAsk(list1.get(12).toString()); } // åä»· if (list1.get(13) == null) { str.setPrice(null); } else { str.setPrice(list1.get(13) + ""); } // å·¥æ¶ç³»æ° if (list1.get(14) == null) { str.setManHour(null); } else { str.setManHour(Double.valueOf(list1.get(14).toString())); } // å·¥æ¶åç» if (list1.get(15) == null) { str.setManHourGroup(null); } else { str.setManHourGroup(list1.get(15).toString()); } // é¢è®¡å®ææ¶é´ if (list1.get(16) == null) { str.setManDay(null); } else { str.setManDay(Integer.valueOf(list1.get(16).toString())); } // æ°æ®ç±»å String jy; if (list1.get(17).toString().equals("éééç±»å")) { jy = "0"; } else { jy = "1"; } str.setInspectionItemType(jy); // æ£éªé¡¹ç±»å String validateValueType = list1.get(18).toString(); if (ObjectUtils.isNotEmpty(validateValueType)) { List<SysDictData> enums = dictTypeService.selectDictDataByName("æ£éªå¼ç±»å") .stream().filter(sysDictData -> sysDictData.getDictLabel().equals(validateValueType)).collect(Collectors.toList()); str.setInspectionValueType(enums.get(0).getDictValue()); } int bsm; //ç¹æ®æ è¯ if (list1.get(19).toString().equals("å¦")) { bsm = 0; } else { bsm = 1; } str.setBsm(bsm + ""); // æ°ååå ¸ if (list1.get(20) != null) { str.setDic(list1.get(20) + ""); } else { str.setDic(null); } // åå§è®°å½æ¨¡æ¿ StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(list1.get(21))); if (standTempIdByName != null) { str.setTemplateId(standTempIdByName.getId()); } else { str.setTemplateId(null); } try { if (list1.get(24) != null) { str.setLaboratory(list1.get(24) + ""); } } catch (Exception e) { } // æ¡ä»¶ if (list1.get(25) == null) { str.setRadiusList(null); } else { StringBuffer buffer = new StringBuffer(); String input = list1.get(25).toString(); buffer.append("["); String[] values = input.split("ï¼"); for (String value : values) { buffer.append("\"").append(value.trim()).append("\","); } buffer.deleteCharAt(buffer.length() - 1); buffer.append("]"); str.setRadiusList(buffer.toString()); } //æ¶è´¹æ å if (list1.get(26) == null) { str.setRates(null); } else { str.setRates(list1.get(26) + ""); } lists.add(str); } }); // structureItemParameterService.removeNoSample(sample.get()); // å¦ææ°æ®åºéé¢çæ°æ®åå¨é£ä¹å°±æ§è¡æ´æ°æ·è´æä½ try { structureItemParameterService.saveOrUpdateBatch(lists); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("æå¡ç«¯æ¥é"); } return Result.success(); public Result importData(@RequestParam("file") MultipartFile file) { // è°ç¨å¯¼å ¥å·¥å · String result = ExcelMultiSheetImporter.importExcel(file, structureItemParameterService, standardTemplateService, dictTypeService); return Result.success(result); } @ApiOperation(value = "å¯¼å ¥æ£éªå¯¹è±¡") basic-server/src/main/java/com/ruoyi/basic/excel/ExcelMultiSheetImporter.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.basic.excel; import com.alibaba.excel.EasyExcel; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.basic.service.StandardTemplateService; import com.ruoyi.basic.service.StructureItemParameterService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysDictTypeService; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; public class ExcelMultiSheetImporter { public static String importExcel(MultipartFile file, StructureItemParameterService service, StandardTemplateService standardTemplateService, ISysDictTypeService dictTypeService) { try { // è¯»åææSheetï¼éè¿çå¬å¨å¤çæ¯ä¸ªSheetï¼ EasyExcel.read(file.getInputStream()) .head(StructureItemParameter.class) // 注åçå¬å¨ï¼æ¯ä¸ªSheetå ±ç¨åä¸ä¸ªçå¬å¨ï¼ .registerReadListener(new MultiSheetImportListener(service, standardTemplateService, dictTypeService)) // èªå¨è¯å«ææSheetå¹¶éå读å .doReadAll(); return "å¯¼å ¥æå"; } catch (IOException e) { System.out.println(e.getMessage()); return "å¯¼å ¥å¤±è´¥ï¼" + StringUtils.substring(e.getMessage(), 0, 100); } } } basic-server/src/main/java/com/ruoyi/basic/excel/MultiSheetImportListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,224 @@ package com.ruoyi.basic.excel; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.exception.ExcelDataConvertException; import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.basic.pojo.StandardTemplate; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.basic.service.StandardTemplateService; import com.ruoyi.basic.service.StructureItemParameterService; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.system.service.ISysDictTypeService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j @AllArgsConstructor public class MultiSheetImportListener implements ReadListener<StructureItemParameter> { // æ¯æ¹å¤ç1000æ¡æ°æ® private static final int BATCH_COUNT = 1000; private List<StructureItemParameter> cachedList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); private final StructureItemParameterService parameterService; private String currentSheetName; private final ISysDictTypeService dictTypeService; private final StandardTemplateService standardTemplateService; public MultiSheetImportListener(StructureItemParameterService parameterService, StandardTemplateService standardTemplateService, ISysDictTypeService dictTypeService) { this.parameterService = parameterService; this.standardTemplateService = standardTemplateService; this.dictTypeService = dictTypeService; } @Override public void invoke(StructureItemParameter data, AnalysisContext context) { data.setId(null); // æµè¯å¯¹è±¡ if (data.getSample() == null) { data.setSample(null); } else { String brand = data.getSample(); StringBuilder builder = new StringBuilder(); builder.append("["); // 产å if (ObjectUtil.isNotEmpty(data.getProduct())) { String production = data.getProduct(); if (!production.contains("ï¼")) { builder.append(String.format("[\"%s\",\"%s\"]", brand, production)); } else { Arrays.stream(production.split("ï¼")).forEach(item -> { builder.append(String.format("[\"%s\",\"%s\"],", brand, item)); }); builder.deleteCharAt(builder.length() - 1); } } else { builder.append("["); builder.append(String.format("\"%s\"", brand)); builder.append("]"); } builder.append("]"); data.setSample(builder.toString()); } // æ¥è¯¢æ°æ®åºä¸æ¯å¦åå¨ç¸åè®°å½ LambdaQueryWrapper<StructureItemParameter> wrapper = Wrappers.lambdaQuery(StructureItemParameter.class) .eq(StructureItemParameter::getInspectionItem, data.getInspectionItem()) .eq(StructureItemParameter::getSample, data.getSample()) .last("limit 1"); // 夿æ¯å¦ææ£éªé¡¹ç±»å if (ObjectUtils.isNotEmpty(data.getInspectionItemClass())) { wrapper.eq(StructureItemParameter::getInspectionItemClass, data.getInspectionItemClass()); } // 夿æ¯å¦ææ£éªå项 if (ObjectUtils.isNotEmpty(data.getInspectionItemSubclass())) { wrapper.eq(StructureItemParameter::getInspectionItemSubclass, data.getInspectionItemSubclass()); } StructureItemParameter db_str = parameterService.getOne(wrapper); if (db_str != null) { // è¥éæ´æ°ï¼è®¾ç½® id data.setId(db_str.getId()); } // åå§è®°å½æ¨¡æ¿ StandardTemplate standTempIdByName = standardTemplateService.getStandTempIdByName(String.valueOf(data.getTemplateName())); if (standTempIdByName != null) { data.setTemplateId(standTempIdByName.getId()); } else { data.setTemplateId(null); } // æ°æ®ç±»å String jy; String inspectionType = data.getInspectionItemType() != null ? data.getInspectionItemType().toString() : ""; if ("éééç±»å".equals(inspectionType)) { jy = "0"; } else { jy = "1"; } data.setInspectionItemType(jy); // æ¹æ³åç§° if (data.getMethod() == null) { data.setMethod(null); } else { StringBuffer buffer = new StringBuffer(); String input = data.getMethod().toString(); buffer.append("["); String[] values = input.split("ï¼"); for (String value : values) { buffer.append("\"").append(value.trim()).append("\","); } buffer.deleteCharAt(buffer.length() - 1); buffer.append("]"); data.setMethod(buffer.toString()); } // ç¹æ®æ è¯ String bs; String bsmValue = data.getBsm() == null ? "" : data.getBsm().trim(); if ("å¦".equals(bsmValue)) { bs = "0"; } else { bs = "1"; } data.setBsm(bs); //æ£éªé¡¹ç±»å String validateValueType = data.getInspectionValueType().toString(); if (ObjectUtils.isNotEmpty(validateValueType)) { List<SysDictData> enums = dictTypeService.selectDictDataByName("æ£éªå¼ç±»å") .stream().filter(sysDictData -> sysDictData.getDictLabel().equals(validateValueType)).collect(Collectors.toList()); data.setInspectionValueType(enums.get(0).getDictValue()); } // æ¡ä»¶ if (data.getRadiusList() == null) { data.setRadiusList(null); } else { StringBuffer buffer = new StringBuffer(); String input = data.getRadiusList(); buffer.append("["); String[] values = input.split("ï¼"); for (String value : values) { buffer.append("\"").append(value.trim()).append("\","); } buffer.deleteCharAt(buffer.length() - 1); buffer.append("]"); data.setRadiusList(buffer.toString()); } if (data.getManDay() == null) { data.setManDay(null); } // 设置å½åSheetå为åç±»æ è¯ data.setInspectionItemClass(currentSheetName); // æ·»å å°ç¼åå表 cachedList.add(data); // è¾¾å°æ¹æ¬¡å¤çé弿¶å ¥åº if (cachedList.size() >= BATCH_COUNT) { saveData(); cachedList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { // æå䏿¹æ°æ®å¤ç if (!cachedList.isEmpty()) { saveData(); } log.info("Sheet [{}] å¯¼å ¥å®æ", currentSheetName); } @Override public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) { this.currentSheetName = context.readSheetHolder().getSheetName(); } private void saveData() { // æ¹éæå ¥ï¼ä½¿ç¨è¥ä¾Service屿¹æ³ï¼ parameterService.saveOrUpdateBatch(cachedList); } @Override public void onException(Exception exception, AnalysisContext context) { String sheetName = context.readSheetHolder().getSheetName(); int rowIndex = context.readRowHolder().getRowIndex() + 1; int columnIndex = -1; String errorMsg = exception.getMessage(); // é对 ExcelDataConvertException æååå· if (exception instanceof ExcelDataConvertException) { ExcelDataConvertException ex = (ExcelDataConvertException) exception; columnIndex = ex.getColumnIndex() + 1; errorMsg = String.format("å[%s]æ°æ®æ ¼å¼é误: %s", ex.getCellData().getStringValue(), errorMsg ); } // æå°å®æ´éè¯¯å æ ï¼è°è¯æ¶å¼å¯ï¼ log.error("Sheet[{}] 第{}è¡ç¬¬{}åè§£æå¤±è´¥: {}", sheetName, rowIndex, columnIndex, errorMsg); } } basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java
@@ -1,11 +1,11 @@ package com.ruoyi.basic.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.ProductDTO1; import com.ruoyi.basic.pojo.Product; import com.ruoyi.framework.mybatis_config.MyBaseMapper; import org.apache.ibatis.annotations.Param; /** @@ -14,7 +14,7 @@ * @createDate 2024-04-26 01:11:02 * @Entity com.ruoyi.basic.pojo.Product */ public interface ProductMapper extends BaseMapper<Product> { public interface ProductMapper extends MyBaseMapper<Product> { IPage<Product> selectProductListByObjectId(Page page, @Param("ew") QueryWrapper<ProductDTO1> ew, @Param("partNo") String partNo); } basic-server/src/main/java/com/ruoyi/basic/mapper/StructureTestObjectMapper.java
@@ -1,12 +1,14 @@ package com.ruoyi.basic.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.PageTestObjectDto; import com.ruoyi.basic.pojo.StructureTestObject; import com.ruoyi.framework.mybatis_config.MyBaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * æ£æµå¯¹è±¡(StructureTestObject)è¡¨æ°æ®åºè®¿é®å± @@ -14,7 +16,7 @@ * @author makejava * @since 2024-02-26 17:36:41 */ public interface StructureTestObjectMapper extends BaseMapper<StructureTestObject> { public interface StructureTestObjectMapper extends MyBaseMapper<StructureTestObject> { IPage<PageTestObjectDto> selectTestObjectList(Page page, @Param("ew") QueryWrapper<PageTestObjectDto> ew, @Param("specimenName") String specimenName); basic-server/src/main/java/com/ruoyi/basic/pojo/StructureItemParameter.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import java.io.Serializable; @@ -17,105 +18,232 @@ @TableName(value ="structure_item_parameter") @Data public class StructureItemParameter implements Serializable { /** * ä¸»é® */ @ApiModelProperty(value = "主é®") @TableId(type = IdType.AUTO) private Integer id; /** * æ£éªé¡¹ */ @ApiModelProperty(value = "æ£éªé¡¹") @ExcelProperty(value = "æ£æµåæ°åç§°",index = 4) private String inspectionItem; /** * æ£éªé¡¹EN */ @ApiModelProperty(value = "æ£éªé¡¹EN") @ExcelProperty(value = "æ£æµåæ°åç§°ï¼ENï¼",index = 5) private String inspectionItemEn; /** * æ£éªå项 */ @ApiModelProperty(value = "æ£éªå项") @ExcelProperty(value = "æ£æµå项",index = 6) private String inspectionItemSubclass; /** * æ£éªå项EN */ @ApiModelProperty(value = "æ£éªå项EN") @ExcelProperty(value = "æ£æµå项(EN)",index = 7) private String inspectionItemSubclassEn; /** * æ£éªå¯¹è±¡ */ @ApiModelProperty(value = "æ£éªå¯¹è±¡") @ExcelProperty(value = "æµè¯å¯¹è±¡",index = 1) private String sample; /** * åä»·(å ) */ @ApiModelProperty(value = "åä»·(å )") @ExcelProperty(value = "åä»·",index = 13) private String price; /** * åºæ */ @ApiModelProperty(value = "åºæ") @ExcelProperty(value = "åºæ",index = 24) private String laboratory; /** * è¯éªå®¤ */ @ApiModelProperty(value = "è¯éªå®¤") @ExcelProperty(value = "è¯éªå®¤",index = 9) private String sonLaboratory; /** * è¦æ±æè¿° */ @ApiModelProperty(value = "è¦æ±æè¿°") @ExcelProperty(value = "æ åæ¾ç¤º",index = 11) private String askTell; /** * è¦æ±å¼ */ @ApiModelProperty(value = "è¦æ±å¼") @ExcelProperty(value = "å¤æè¦æ±",index = 12) private String ask; /** * 计éåä½ */ @ApiModelProperty(value = "计éåä½") @ExcelProperty(value = "计éåä½",index = 10) private String unit; /** * è¯éªæ¹æ³ */ @ApiModelProperty(value = "è¯éªæ¹æ³") @ExcelProperty(value = "æ¹æ³åç§°",index = 8) private String method; /** * å·¥æ¶(H) */ @ApiModelProperty(value = "å·¥æ¶(H)") @ExcelProperty(value = "å·¥æ¶ç³»æ°",index = 14) private Double manHour; /** * é¢è®¡æ¶é´(H) */ @ApiModelProperty(value = "é¢è®¡æ¶é´(H)") @ExcelProperty(value = "é¢è®¡å®ææ¶é´",index = 16) private Integer manDay; /** * å·¥æ¶åç» */ @ApiModelProperty(value = "å·¥æ¶åç»") @ExcelProperty(value = "å·¥æ¶åç»",index = 15) private String manHourGroup; /** * æ£éªé¡¹ç±»å */ @ApiModelProperty(value = "æ£éªé¡¹ç±»å") @ExcelProperty(value = "æ°æ®ç±»å",index = 17) private String inspectionItemType; /** * æ£éªå¼ç±»å */ @ApiModelProperty(value = "æ£éªå¼ç±»å") @ExcelProperty(value = "æ£éªå¼ç±»å",index = 18) private String inspectionValueType; /** * æ£éªæ¬¡æ° */ @ApiModelProperty(value = "æ£éªæ¬¡æ°") private Integer checkoutNumber; /** * åºé´ */ @ApiModelProperty(value = "åºé´") private String section; /** * ç¹æ®æ è¯ */ @ApiModelProperty(value = "ç¹æ®æ è¯") @ExcelProperty(value = "ç¹æ®æ è¯",index = 19) private String bsm; /** * åå§è®°å½æ¨¡æ¿ */ @ApiModelProperty(value = "åå§è®°å½æ¨¡æ¿") private Integer templateId; @TableField(exist = false) @ExcelProperty(value = "åå§è®°å½æ¨¡æ¿",index = 21) private String templateName; /** * å建人id */ @ApiModelProperty(value = "å建人id") @TableField(fill = FieldFill.INSERT) private Integer createUser; /** * ä¿®æ¹äººid */ @ApiModelProperty(value = "ä¿®æ¹äººid") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; /** * å建æ¶é´ */ @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * ä¿®æ¹æ¶é´ */ @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** * åå ¸ç±»å */ @ApiModelProperty(value = "åå ¸ç±»å") @ExcelProperty(value = "æ°æ®åå ¸",index = 20) private String dic; /** * æ£éªé¡¹åç±» */ @ApiModelProperty(value = "æ£éªé¡¹åç±»") @ExcelProperty(value = "æ£éªé¡¹åç±»",index = 22) private String inspectionItemClass; /** * æ£éªé¡¹åç±»EN */ @ApiModelProperty(value = "æ£éªé¡¹åç±»EN") @ExcelProperty(value = "æ£éªé¡¹åç±»",index = 23) private String inspectionItemClassEn; /** * æ¡ä»¶ */ @ApiModelProperty(value = "æ¡ä»¶") @ExcelProperty(value = "è¯éªæ¡ä»¶",index = 25) private String radiusList; /** * æ¶è´¹æ å(å /次) */ @ApiModelProperty(value = "æ¶è´¹æ å(å /次)") @ExcelProperty(value = "æ¶è´¹æ å",index = 26) private String rates; } @TableField(exist = false) @ExcelProperty(value = "产å",index = 2) private String product; @ExcelProperty(value = "æ£æµåæ°ç¼å·",index = 3) @TableField(exist = false) private String parameterNumber; } basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -2,10 +2,8 @@ import cn.hutool.core.collection.CollUtil; 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.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -22,11 +20,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; /** * æ£éªé¡¹ç®åæ°(StructureItemParameter)表æå¡å®ç°ç±» @@ -196,128 +193,224 @@ @Transactional(rollbackFor = Exception.class) @Override public void importPartExcel(List<StructureTestObjectData> list) { // æ¹éæ¥è¯¢ StructureTestObject Map<String, StructureTestObject> structureTestObjectMap = getStructureTestObjectMap(list); // æ¹éæ¥è¯¢ WorkShop Map<String, WorkShop> workShopMap = getWorkShopMap(list); // é¶æ®µ1: æ°æ®é¢å¤ç // æ¶éææéè¦æ¥è¯¢çæ æ¬ä¿¡æ¯ Set<String> specimenKeys = list.stream() .map(i -> i.getSpecimenName() + "|" + i.getSpecimenNameEn()) .collect(Collectors.toSet()); List<StructureTestObject> insertStructureTestObjects = new ArrayList<>(); List<StructureTestObject> updateStructureTestObjects = new ArrayList<>(); List<Product> insertProducts = new ArrayList<>(); List<Product> updateProducts = new ArrayList<>(); // é¶æ®µ2: æ¹éæ¥è¯¢ç°æç»ææµè¯å¯¹è±¡ Map<String, StructureTestObject> existStructureTestObjects = structureTestObjectMapper.selectList( Wrappers.<StructureTestObject>lambdaQuery() .in(StructureTestObject::getSpecimenName, list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toSet())) .in(StructureTestObject::getSpecimenNameEn, list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toSet())) ).stream().collect(Collectors.toMap( obj -> obj.getSpecimenName() + "|" + obj.getSpecimenNameEn(), Function.identity(), (existing, replacement) -> existing // å¤çéå¤é® )); for (StructureTestObjectData data : list) { String key = data.getSpecimenName() + "_" + data.getSpecimenNameEn(); StructureTestObject structureTestObject = structureTestObjectMap.get(key); if (ObjectUtils.isEmpty(structureTestObject)) { structureTestObject = createStructureTestObject(data); insertStructureTestObjects.add(structureTestObject); } else { updateStructureTestObject(structureTestObject, data); updateStructureTestObjects.add(structureTestObject); } String productKey = data.getName() + "_" + data.getNameEn(); Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>() .eq(Product::getName, data.getName()) .eq(Product::getNameEn, data.getNameEn())); if (ObjectUtils.isEmpty(product)) { product = createProduct(data, structureTestObject.getId(), workShopMap); insertProducts.add(product); } else { updateProduct(product, data, structureTestObject.getId(), workShopMap); updateProducts.add(product); } } // æ¹éæå ¥åæ´æ° if (!insertStructureTestObjects.isEmpty()) { structureTestObjectService.saveOrUpdateBatch(insertStructureTestObjects); } if (!updateStructureTestObjects.isEmpty()) { structureTestObjectService.updateBatchById(updateStructureTestObjects); } if (!insertProducts.isEmpty()) { productService.saveOrUpdateBatch(insertProducts); } if (!updateProducts.isEmpty()) { productService.updateBatchById(updateProducts); } } private Map<String, StructureTestObject> getStructureTestObjectMap(List<StructureTestObjectData> list) { List<String> specimenNames = list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toList()); List<String> specimenNamesEn = list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toList()); List<StructureTestObject> structureTestObjects = structureTestObjectMapper.selectList(new LambdaQueryWrapper<StructureTestObject>() .in(StructureTestObject::getSpecimenName, specimenNames) .in(StructureTestObject::getSpecimenNameEn, specimenNamesEn)); Map<String, StructureTestObject> map = new HashMap<>(); for (StructureTestObject obj : structureTestObjects) { map.put(obj.getSpecimenName() + "_" + obj.getSpecimenNameEn(), obj); } return map; } private Map<String, WorkShop> getWorkShopMap(List<StructureTestObjectData> list) { List<String> workShopNames = list.stream() // é¶æ®µ3: é¢å¤ç车é´ä¿¡æ¯ Set<String> workShopNames = list.stream() .map(StructureTestObjectData::getWorkShopName) .filter(StringUtils::isNotEmpty) .distinct() .collect(Collectors.toList()); List<WorkShop> workShops = workShopMapper.selectList(new LambdaQueryWrapper<WorkShop>() .in(WorkShop::getName, workShopNames)); Map<String, WorkShop> map = new HashMap<>(); for (WorkShop workShop : workShops) { map.put(workShop.getName(), workShop); } return map; .collect(Collectors.toSet()); Map<String, WorkShop> workShopCache = workShopNames.isEmpty() ? Collections.emptyMap() : workShopMapper.selectList(Wrappers.<WorkShop>lambdaQuery() .in(WorkShop::getName, workShopNames)) .stream() .collect(Collectors.toMap(WorkShop::getName, Function.identity())); // é¶æ®µ4: å夿¹éæä½æ°æ® List<StructureTestObject> structureTestObjectsToInsert = new ArrayList<>(); List<StructureTestObject> structureTestObjectsToUpdate = new ArrayList<>(); List<Product> productsToInsert = new ArrayList<>(); List<Product> productsToUpdate = new ArrayList<>(); // é¶æ®µ5: 主å¤çé»è¾ï¼ä» å¤çç»ææµè¯å¯¹è±¡ï¼ List<StructureTestObjectData> pendingProducts = new ArrayList<>(); // æ°å¢ï¼æåå¾ å¤ççäº§åæ°æ® for (StructureTestObjectData i : list) { // å¤çç»ææµè¯å¯¹è±¡ï¼é»è¾ä¸åï¼ String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn(); StructureTestObject structureTestObject = existStructureTestObjects.get(specimenKey); if (structureTestObject == null) { StructureTestObject newObj = createNewStructureTestObject(i, workShopCache); // ä¿®æ¹ï¼ä¼ å ¥è½¦é´ç¼å structureTestObjectsToInsert.add(newObj); existStructureTestObjects.put(specimenKey, newObj); } else { updateExistingStructureTestObject(structureTestObject, i); structureTestObjectsToUpdate.add(structureTestObject); } private StructureTestObject createStructureTestObject(StructureTestObjectData data) { StructureTestObject structureTestObject = new StructureTestObject(); structureTestObject.setLaboratoryId(9); structureTestObject.setSpecimenName(data.getSpecimenName()); structureTestObject.setSpecimenNameEn(data.getSpecimenNameEn()); structureTestObject.setCode(data.getCode()); structureTestObject.setWorkShopName(""); return structureTestObject; // æå产åå¤çæ°æ®ï¼æ°å¢ï¼ pendingProducts.add(i); } private void updateStructureTestObject(StructureTestObject structureTestObject, StructureTestObjectData data) { structureTestObject.setCode(data.getCode()); structureTestObject.setLaboratoryId(9); // é¶æ®µ6: å å¤çç»ææµè¯å¯¹è±¡æ¹éæä½ executeStructureTestObjectBatch(structureTestObjectsToInsert, structureTestObjectsToUpdate); // é¶æ®µ7: æ´æ°ç¼åä¸çIDï¼å ³é®æ°å¢æ¥éª¤ï¼ refreshStructureTestObjectIds(existStructureTestObjects, structureTestObjectsToInsert); // é¶æ®µ8: å¤çäº§åæ°æ® processProducts(pendingProducts, existStructureTestObjects, workShopCache, productsToInsert, productsToUpdate); // é¶æ®µ9: æ§è¡äº§åæ¹éæä½ executeProductBatch(productsToInsert, productsToUpdate); } private Product createProduct(StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopMap) { Product product = new Product(); product.setName(data.getName()); product.setNameEn(data.getNameEn()); if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopMap.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("请å ç»´æ¤è½¦é´ä¿¡æ¯"); } product.setWorkShopId(workShop.getId()); } product.setWorkShopName(data.getWorkShopName()); product.setObjectId(objectId); return product; // æ´æ°ç°æç»ææµè¯å¯¹è±¡ private void updateExistingStructureTestObject(StructureTestObject obj, StructureTestObjectData data) { obj.setCode(data.getCode()); obj.setLaboratoryId(9); } private void updateProduct(Product product, StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopMap) { if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopMap.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("请å ç»´æ¤è½¦é´ä¿¡æ¯"); // å¤çäº§åæ°æ® private void processProductData(StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopCache, List<Product> insertList, List<Product> updateList) { // æå»ºäº§åå¯ä¸æ è¯ String productKey = data.getName() + "|" + data.getNameEn(); // æ£æ¥å å䏿¯å¦å·²å¤çè¿è¯¥äº§å Optional<Product> existingProduct = findProductInBatchLists(productKey, insertList, updateList); // 妿å åä¸ä¸åå¨ï¼æ¥è¯¢æ°æ®åº if (!existingProduct.isPresent()) { Product dbProduct = productMapper.selectOne(Wrappers.<Product>lambdaQuery() .eq(Product::getName, data.getName()) .eq(Product::getNameEn, data.getNameEn()) .last("limit 1")); existingProduct = Optional.ofNullable(dbProduct); } product.setWorkShopId(workShop.getId()); // åå»ºææ´æ°äº§å Product product = existingProduct.orElseGet(Product::new); boolean isNew = product.getId() == null; // 设置产å屿§ setupProduct(product, data, objectId, workShopCache); // å å ¥å¯¹åºå表 if (isNew) { insertList.add(product); } else { updateList.add(product); } product.setWorkShopName(data.getWorkShopName()); } // å¨äº§åæ¹éåè¡¨ä¸æ¥æ¾ private Optional<Product> findProductInBatchLists(String productKey, List<Product> insertList, List<Product> updateList) { return Stream.concat(insertList.stream(), updateList.stream()) .filter(p -> (p.getName() + "|" + p.getNameEn()).equals(productKey)) .findFirst(); } // 设置产åä¿¡æ¯ private void setupProduct(Product product, StructureTestObjectData data, Integer objectId, Map<String, WorkShop> workShopCache) { product.setName(data.getName()); product.setNameEn(data.getNameEn()); product.setObjectId(objectId); // å¤ç车é´ä¿¡æ¯ if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopCache.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("车é´ä¿¡æ¯æªç»´æ¤: " + data.getWorkShopName()); } product.setWorkShopId(workShop.getId()); product.setWorkShopName(data.getWorkShopName()); } } // åå»ºç»ææµè¯å¯¹è±¡ï¼ä½¿ç¨ç¼å车é´ä¿¡æ¯ï¼ private StructureTestObject createNewStructureTestObject(StructureTestObjectData data, Map<String, WorkShop> workShopCache) { StructureTestObject obj = new StructureTestObject(); obj.setLaboratoryId(9); obj.setSpecimenName(data.getSpecimenName()); obj.setSpecimenNameEn(data.getSpecimenNameEn()); obj.setCode(data.getCode()); obj.setObjectType(data.getObjectType()); // 使ç¨ç¼åè·å车é´ä¿¡æ¯ if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopCache.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("车é´ä¿¡æ¯æªç»´æ¤: " + data.getWorkShopName()); } obj.setWorkShopId(workShop.getId()); obj.setWorkShopName(data.getWorkShopName()); } else { obj.setWorkShopName(""); } return obj; } // å·æ°ç»ææµè¯å¯¹è±¡IDï¼å ³é®æ¹æ³ï¼ private void refreshStructureTestObjectIds( Map<String, StructureTestObject> existStructureTestObjects, List<StructureTestObject> insertedObjects) { insertedObjects.forEach(obj -> { String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn(); existStructureTestObjects.get(key).setId(obj.getId()); // æ´æ°ç¼åä¸çID }); } // å¤çäº§åæ°æ®ï¼ç¬ç«æ¹æ³ï¼ private void processProducts(List<StructureTestObjectData> pendingProducts, Map<String, StructureTestObject> structureTestObjectCache, Map<String, WorkShop> workShopCache, List<Product> insertList, List<Product> updateList) { // é¶æ®µ5åæäº§åå¤çé»è¾è¿ç§»è³æ¤ pendingProducts.forEach(i -> { String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn(); StructureTestObject sto = structureTestObjectCache.get(specimenKey); processProductData( i, sto.getId(), // æ¤æ¶IDå·²æ£ç¡®è®¾ç½® workShopCache, insertList, updateList ); }); } // åææ¹éæä½æ¹æ³ private void executeStructureTestObjectBatch(List<StructureTestObject> toInsert, List<StructureTestObject> toUpdate) { if (!toInsert.isEmpty()) { structureTestObjectMapper.insertBatchSomeColumn(toInsert); } if (!toUpdate.isEmpty()) { structureTestObjectService.updateBatchById(toUpdate); } } private void executeProductBatch(List<Product> toInsert, List<Product> toUpdate) { if (!toInsert.isEmpty()) { productMapper.insertBatchSomeColumn(toInsert); } if (!toUpdate.isEmpty()) { productService.updateBatchById(toUpdate); } } } basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
@@ -171,31 +171,49 @@ } public void addStructureTest(List<Object> structureTestObjectIdList, List<StandardMethod> standardMethodList) { // ç¨äºå卿°å¢ãæ´æ°åå é¤çæ°æ® List<StandardMethod> updateList = new ArrayList<>(); List<Integer> deleteListId = new ArrayList<>(); List<StandardMethod> addList = new ArrayList<>(); // å å° Excel æ°æ®æ key åç» // å å° Excel æ°æ®æ code åç»ï¼å¹¶åå¹¶ field Map<String, StandardMethod> excelDataMap = new HashMap<>(); for (StandardMethod excelMethod : standardMethodList) { String key = generateKey(excelMethod); if (excelDataMap.containsKey(key)) { // 妿已åå¨ç¸åç codeï¼ååå¹¶ field StandardMethod existingMethod = excelDataMap.get(key); String mergedField = mergeFields(existingMethod.getField(), excelMethod.getField()); existingMethod.setField(mergedField); } else { // å¦åç´æ¥æ·»å å° map ä¸ excelDataMap.put(key, excelMethod); } } // if (!structureTestObjectIdList.isEmpty()) { // 以 excel ä¸çç»åæ¥è¯¢æ°æ®åºä¸çåç» // æ¥è¯¢æ°æ®åºä¸çåç»æ°æ® List<StandardMethod> allDbMethods = new ArrayList<>(); for (Object j : structureTestObjectIdList) { List<StandardMethod> standardMethods = baseMapper.selectList(new LambdaQueryWrapper<StandardMethod>() .like(StandardMethod::getStructureTestObjectId, "\"" + j + "\"")); List<StandardMethod> standardMethods = baseMapper.selectList( new LambdaQueryWrapper<StandardMethod>() .apply("JSON_CONTAINS(structure_test_object_id, {0})", j) // MySQL JSON æ¥è¯¢ ); allDbMethods.addAll(standardMethods); } // å°æ°æ®åºæ°æ®æ key åç» // å°æ°æ®åºæ°æ®æ code åç»ï¼å¹¶åå¹¶ field Map<String, StandardMethod> dbDataMap = new HashMap<>(); for (StandardMethod dbMethod : allDbMethods) { String key = generateKey(dbMethod); if (dbDataMap.containsKey(key)) { // 妿已åå¨ç¸åç codeï¼ååå¹¶ field StandardMethod existingMethod = dbDataMap.get(key); String mergedField = mergeFields(existingMethod.getField(), dbMethod.getField()); existingMethod.setField(mergedField); } else { // å¦åç´æ¥æ·»å å° map ä¸ dbDataMap.put(key, dbMethod); } } // å¤çæ´æ°åæ°å¢ @@ -222,7 +240,7 @@ } } // æ§è¡æ¹éæä½ if (!addList.isEmpty()) { // æ°å¢ baseMapper.insertBatchSomeColumn(addList); @@ -241,8 +259,26 @@ } } private String mergeFields(String field1, String field2) { if (field1 == null || field1.isEmpty()) { return field2; } if (field2 == null || field2.isEmpty()) { return field1; } // ä½¿ç¨ Set å»é String[] fields1 = field1.split(","); String[] fields2 = field2.split(","); Set<String> uniqueFields = new HashSet<>(Arrays.asList(fields1)); uniqueFields.addAll(Arrays.asList(fields2)); // è¿åéå·æ¼æ¥çç»æ return String.join(",", uniqueFields); } private String generateKey(StandardMethod method) { return method.getStructureTestObjectId() + "-" + method.getCode() + "-" + method.getField(); return method.getCode(); } // æ ¼å¼åæ°æ® cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java
@@ -1,11 +1,11 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.device.dto.DeviceDto; import com.ruoyi.device.pojo.Device; import com.ruoyi.framework.mybatis_config.MyBaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -15,7 +15,7 @@ /** * 设å¤(Device)è¡¨æ°æ®åºè®¿é®å± */ public interface DeviceMapper extends BaseMapper<Device> { public interface DeviceMapper extends MyBaseMapper<Device> { IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew); List<Device> selectEquipmentOverview(Page page, QueryWrapper<Device> ew); cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -607,12 +607,12 @@ } } // æ¹éæå ¥ï¼ä½¿ç¨MyBatis-PlusçinsertBatchï¼é»è®¤batchSize=1000ï¼ // æ¹éæå ¥ if (CollUtil.isNotEmpty(toInsert)) { saveOrUpdateBatch(toInsert); baseMapper.insertBatchSomeColumn(toInsert); } // æ¹éæ´æ°ï¼ä½¿ç¨MyBatis-PlusçupdateBatchByIdï¼é»è®¤batchSize=1000ï¼ // æ¹éæ´æ° if (CollUtil.isNotEmpty(toUpdate)) { updateBatchById(toUpdate); } pom.xml
@@ -44,7 +44,7 @@ <minio.version>8.4.3</minio.version> <okhttp.version>4.9.0</okhttp.version> <hutool.version>5.8.18</hutool.version> <easyexcel.version>3.3.2</easyexcel.version> <easyexcel.version>3.3.3</easyexcel.version> <poi.tl.version>1.12.2</poi.tl.version> </properties> ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/PersonDto.java
@@ -17,4 +17,6 @@ private Integer roleId; private Integer deptId; } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/PersonnelHeaderApi.java
@@ -183,6 +183,7 @@ user.setIsCustom(0); user.setPassword(SecurityUtils.encryptPassword("zttZTT123!")); user.setCompany(BeanUtil.isNotEmpty(custom) ? (custom.getId() + "") : companyName); user.setDeptId(personDto.getDeptId()); userMapper.insert(user); } else { user.setName(person.getName()); @@ -190,6 +191,7 @@ user.setEmail(person.getCompanyEmail()); user.setIsCustom(0); user.setCompany(BeanUtil.isNotEmpty(custom) ? (custom.getId() + "") : companyName); user.setDeptId(personDto.getDeptId()); userMapper.updateById(user); } });