From aadb01d892e9f9943419add732c7ff0739674c1b Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Fri, 24 Jul 2026 11:12:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=A0=E5=AD=97=E6=AE=B5=E4=B9=9F?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/GridTableUserServiceImpl.java | 134 ++++++++++++++---- .../resources/mapper/pms/EamProjectMapper.xml | 19 ++- 2 files changed, 117 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/xujie/sys/modules/grid/service/impl/GridTableUserServiceImpl.java b/src/main/java/com/xujie/sys/modules/grid/service/impl/GridTableUserServiceImpl.java index 235c2efa..0e61d2e0 100644 --- a/src/main/java/com/xujie/sys/modules/grid/service/impl/GridTableUserServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/grid/service/impl/GridTableUserServiceImpl.java @@ -1,6 +1,5 @@ package com.xujie.sys.modules.grid.service.impl; -import com.xujie.sys.datasource.annotation.DataSource; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xujie.sys.modules.grid.dao.GridTableUserDao; import com.xujie.sys.modules.grid.entity.GridTableUser; @@ -10,7 +9,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Comparator; +import java.util.HashSet; +import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Service("gridTableUser") @@ -20,29 +24,21 @@ public class GridTableUserServiceImpl extends ServiceImpl gridTableUsers){ - if (gridTableUsers.size()>0) { - GridTableUser gridTableUser = gridTableUsers.get(0); - List gridTableUserList = lambdaQuery() - .eq(GridTableUser::getUserId,gridTableUser.getUserId()) - .eq(GridTableUser::getFunctionId, gridTableUser.getFunctionId()) - .eq(GridTableUser::getTableId,gridTableUser.getTableId()) - .orderByAsc(GridTableUser::getSortLv).list(); - if (gridTableUserList.size()>0){ // 修改 - for (GridTableUser tableUser : gridTableUsers) { - boolean update = lambdaUpdate().eq(GridTableUser::getUserId, tableUser.getUserId()) - .eq(GridTableUser::getFunctionId, tableUser.getFunctionId()) - .eq(GridTableUser::getTableId, tableUser.getTableId()) - .eq(GridTableUser::getColumnProp, tableUser.getColumnProp()) - .update(tableUser); - System.out.println(update); - } - - }else { // 保存 - this.saveBatch(gridTableUsers); - } - + if (gridTableUsers == null || gridTableUsers.isEmpty()) { + return; } + GridTableUser first = gridTableUsers.get(0); + // 用“整组替换”代替逐行 update,减少锁竞争和死锁概率 + lambdaUpdate() + .eq(GridTableUser::getUserId, first.getUserId()) + .eq(GridTableUser::getFunctionId, first.getFunctionId()) + .eq(GridTableUser::getTableId, first.getTableId()) + .remove(); + + gridTableUsers.sort(Comparator.comparing(GridTableUser::getSortLv, Comparator.nullsLast(Integer::compareTo))); + this.saveBatch(gridTableUsers); } @@ -78,21 +74,97 @@ public class GridTableUserServiceImpl extends ServiceImpl getTableUserListLanguage(GridTableUserQuery gridTableUserQuery) { - List result= gridTableUserDao.getTableUserListLanguage(gridTableUserQuery); + List result = gridTableUserDao.getTableUserListLanguage(gridTableUserQuery); + List defaultColumns = gridTableUserDao.getTableUserListLanguageDefault(gridTableUserQuery); if(result.size()==0){ - result=gridTableUserDao.getTableUserListLanguageDefault(gridTableUserQuery); - if(result.size()>0){ - saveGridTableUserList(result); + if(defaultColumns.size()>0){ + saveGridTableUserList(defaultColumns); } + return defaultColumns; + } + + if (defaultColumns.size() == 0) { + return result; } + + Set existingColumnProps = new HashSet<>(); + Integer maxSortLv = 0; + for (GridTableUser gridTableUser : result) { + existingColumnProps.add(gridTableUser.getColumnProp()); + if (gridTableUser.getSortLv() != null && gridTableUser.getSortLv() > maxSortLv) { + maxSortLv = gridTableUser.getSortLv(); + } + } + + int appendSortLv = maxSortLv; + List appendColumns = new ArrayList<>(); + for (GridTableUser defaultColumn : defaultColumns) { + if (existingColumnProps.contains(defaultColumn.getColumnProp())) { + continue; + } + GridTableUser appendColumn = new GridTableUser(); + appendColumn.setUserId(gridTableUserQuery.getUserId()); + appendColumn.setFunctionId(defaultColumn.getFunctionId()); + appendColumn.setTableId(defaultColumn.getTableId()); + appendColumn.setTableName(defaultColumn.getTableName()); + appendColumn.setColumnProp(defaultColumn.getColumnProp()); + appendColumn.setColumnLabel(defaultColumn.getColumnLabel()); + // 新增补丁列默认可被展示控制(不锁死为隐藏) + appendColumn.setColumnHidden(false); + appendColumn.setColumnImage(defaultColumn.getColumnImage()); + appendColumn.setColumnSortable(defaultColumn.getColumnSortable()); + appendColumn.setColumnWidth(defaultColumn.getColumnWidth()); + appendColumn.setFormat(defaultColumn.getFormat()); + appendSortLv++; + appendColumn.setSortLv(appendSortLv); + // 旧用户自动补齐的新列默认隐藏,避免直接打乱用户既有视图 + appendColumn.setStatus(false); + appendColumn.setFixed(defaultColumn.getFixed()); + appendColumn.setSerialNumber(defaultColumn.getSerialNumber()); + appendColumn.setColumnType(defaultColumn.getColumnType()); + appendColumn.setAlign(defaultColumn.getAlign()); + appendColumn.setHeaderAlign(defaultColumn.getHeaderAlign()); + result.add(appendColumn); + appendColumns.add(appendColumn); + existingColumnProps.add(defaultColumn.getColumnProp()); + } + + if (!appendColumns.isEmpty()) { + saveMissingGridTableColumns(appendColumns); + } + result.sort(Comparator.comparing(GridTableUser::getSortLv, Comparator.nullsLast(Integer::compareTo))); return result; } - // @Override - // public List getTableUserListLanguage(GridTableUserQuery gridTableUserQuery) { - // return gridTableUserDao.getTableUserListLanguage(gridTableUserQuery); - // } - + private void saveMissingGridTableColumns(List appendColumns) { + if (appendColumns == null || appendColumns.isEmpty()) { + return; + } + GridTableUser first = appendColumns.get(0); + List appendColumnProps = appendColumns.stream() + .map(GridTableUser::getColumnProp) + .collect(Collectors.toList()); + + List exists = lambdaQuery() + .eq(GridTableUser::getUserId, first.getUserId()) + .eq(GridTableUser::getFunctionId, first.getFunctionId()) + .eq(GridTableUser::getTableId, first.getTableId()) + .in(GridTableUser::getColumnProp, appendColumnProps) + .list(); + + Set existsColumnPropSet = exists.stream() + .map(GridTableUser::getColumnProp) + .collect(Collectors.toSet()); + + List toInsert = appendColumns.stream() + .filter(item -> !existsColumnPropSet.contains(item.getColumnProp())) + .collect(Collectors.toList()); + + if (!toInsert.isEmpty()) { + toInsert.sort(Comparator.comparing(GridTableUser::getSortLv, Comparator.nullsLast(Integer::compareTo))); + this.saveBatch(toInsert); + } + } @Override public void removerDefault(GridTableUserQuery gridTableUser) { diff --git a/src/main/resources/mapper/pms/EamProjectMapper.xml b/src/main/resources/mapper/pms/EamProjectMapper.xml index 05a43afc..d7ab2588 100644 --- a/src/main/resources/mapper/pms/EamProjectMapper.xml +++ b/src/main/resources/mapper/pms/EamProjectMapper.xml @@ -425,8 +425,11 @@ SELECT a.*, - isnull(a.sqeme_engineer, b.sqeme_engineer) as sqeme_engineer, - isnull(a.sqeee_engineer, b.sqeee_engineer) as sqeee_engineer, + isnull(a.qc_engineer, b.qc_engineer) as qcEngineer, + isnull(a.pe_engineer, b.pe_engineer) as peEngineer, + isnull(a.ee_engineer, b.ee_engineer) as eeEngineer, + isnull(a.sqeme_engineer, b.sqeme_engineer) as sqemeEngineer, + isnull(a.sqeee_engineer, b.sqeee_engineer) as sqeeeEngineer, a.id as projectPartId, b.project_no, b.project_desc, @@ -723,7 +729,10 @@ SET test_part_no = #{testPartNo},part_desc = #{partDesc},update_date = GETDATE(),update_by = #{updateBy}, build_date = #{buildDate}, priority = #{priority}, project_category = #{projectCategory}, need_date = #{needDate}, project_manager = #{projectManager}, project_owner = #{projectOwner}, engineer = #{engineer}, c_quality_engineer1 = #{cQualityEngineer1}, c_quality_engineer2 = #{cQualityEngineer2}, c_quality_engineer3 = #{cQualityEngineer3}, c_quality_engineer4 = #{cQualityEngineer4}, c_quality_engineer5 = #{cQualityEngineer5}, c_quality_engineer6 = #{cQualityEngineer6}, c_manufacture_engineer = #{cManufactureEngineer},doc_engineer = #{docEngineer},doc_engineer2 = #{docEngineer2},ipqc_hard_tag = #{ipqcHardTag}, - c_quality_engineer7 = #{cQualityEngineer7},qc_engineer = #{qcEngineer},pe_engineer = #{peEngineer},ee_engineer = #{eeEngineer}, + c_quality_engineer7 = #{cQualityEngineer7}, + qc_engineer = CASE WHEN #{qcEngineer} IS NOT NULL THEN #{qcEngineer} ELSE qc_engineer END, + pe_engineer = CASE WHEN #{peEngineer} IS NOT NULL THEN #{peEngineer} ELSE pe_engineer END, + ee_engineer = CASE WHEN #{eeEngineer} IS NOT NULL THEN #{eeEngineer} ELSE ee_engineer END, sqeme_engineer = CASE WHEN #{sqemeEngineer} IS NOT NULL THEN #{sqemeEngineer} ELSE sqeme_engineer END, sqeee_engineer = CASE WHEN #{sqeeeEngineer} IS NOT NULL THEN #{sqeeeEngineer} ELSE sqeee_engineer END,remark = #{remark}, status = CASE WHEN #{status} IS NOT NULL THEN #{status} ELSE status END,customer_no = #{customerNo},