zhouyy 1 месяц назад
Родитель
Сommit
526c937dc6
13 измененных файлов с 416 добавлено и 86 удалено
  1. 9 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/AIQuestionController.java
  2. 39 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/AIQuestion.java
  3. 63 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/AIQuestionDetail.java
  4. 36 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/ColumnFixTrans.java
  5. 13 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/vo/ColumnAliasVO.java
  6. 7 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/AIQuestionDetailMapper.java
  7. 7 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/AIQuestionMapper.java
  8. 7 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ColumnFixTransMapper.java
  9. 2 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/CusTableColumnMapper.java
  10. 15 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/provider/CusTableColumnProvider.java
  11. 7 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/AIQuestionService.java
  12. 11 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/AIQuestionServiceImpl.java
  13. 200 84
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CusTableColumnServiceImpl.java

+ 9 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/AIQuestionController.java

@@ -0,0 +1,9 @@
+package com.management.platform.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/aiQuestion")
+public class AIQuestionController {
+}

+ 39 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/AIQuestion.java

@@ -0,0 +1,39 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class AIQuestion extends Model<AIQuestion> {
+    private static final long serialVersionUID=1L;
+
+    @TableId("id")
+    private Integer id;
+
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    @TableField("creator_id")
+    private String creatorId;
+}

+ 63 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/AIQuestionDetail.java

@@ -0,0 +1,63 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class AIQuestionDetail extends Model<AIQuestionDetail> {
+    private static final long serialVersionUID=1L;
+
+    @TableId("detail_id")
+    private Integer detailId;
+
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField("q_id")
+    private Integer qId;
+
+    /**对话类型 0ai 1客户*/
+    @TableField("type")
+    private Integer type;
+
+    /**对话内容*/
+    @TableField("content")
+    private String content;
+
+    /**排序*/
+    @TableField("seq")
+    private Integer seq;
+
+    /**上传文件名*/
+    @TableField("document_name")
+    private String documentName;
+
+    /**文件路径*/
+    @TableField("url")
+    private String url;
+
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 创建人
+     */
+    @TableField("creator_id")
+    private String creatorId;
+}

+ 36 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/ColumnFixTrans.java

@@ -0,0 +1,36 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ColumnFixTrans extends Model<ColumnFixTrans> {
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**表名*/
+    @TableField("tbl_name")
+    private String tblName;
+
+    /**字段名*/
+    @TableField("col_name")
+    private String colName;
+
+    /**值*/
+    @TableField("col_val")
+    private String colVal;
+
+    /**值对应含义*/
+    @TableField("val_mean")
+    private String valMean;
+
+}

+ 13 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/vo/ColumnAliasVO.java

@@ -0,0 +1,13 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class ColumnAliasVO {
+    /**字段 中文别名*/
+    private String columnCHN;
+    /**字段 表名.字段名*/
+    private String columnTblName;
+    /**字段 别名.字段名*/
+    private String columnAliasName;
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/AIQuestionDetailMapper.java

@@ -0,0 +1,7 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.AIQuestionDetail;
+
+public interface AIQuestionDetailMapper extends BaseMapper<AIQuestionDetail> {
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/AIQuestionMapper.java

@@ -0,0 +1,7 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.AIQuestion;
+
+public interface AIQuestionMapper extends BaseMapper<AIQuestion> {
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/ColumnFixTransMapper.java

@@ -0,0 +1,7 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.ColumnFixTrans;
+
+public interface ColumnFixTransMapper extends BaseMapper<ColumnFixTrans> {
+}

+ 2 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/CusTableColumnMapper.java

@@ -1,6 +1,7 @@
 package com.management.platform.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.BusObjRelation;
 import com.management.platform.entity.CusTableColumn;
 import com.management.platform.provider.CusTableColumnProvider;
 import org.apache.ibatis.annotations.Mapper;
@@ -12,7 +13,7 @@ import java.util.List;
 public interface CusTableColumnMapper extends BaseMapper<CusTableColumn> {
 
     @SelectProvider(type = CusTableColumnProvider.class,method = "getStructByTableName")
-    List<CusTableColumn> getStructByTableName(String tableName);
+    List<CusTableColumn> getStructByTableName(String tableName,List<BusObjRelation> busObjRelations);
 
     @SelectProvider(type = CusTableColumnProvider.class,method = "getTableAliasByTableName")
     String getTableAliasByTableName(String tableName);

+ 15 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/provider/CusTableColumnProvider.java

@@ -1,7 +1,12 @@
 package com.management.platform.provider;
 
+import com.management.platform.entity.BusObjRelation;
+import org.apache.commons.collections.CollectionUtils;
+
+import java.util.List;
+
 public class CusTableColumnProvider {
-    public String getStructByTableName(String tableName){
+    public String getStructByTableName(String tableName, List<BusObjRelation> busObjRelations){
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder
                 .append("SELECT * FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA=(SELECT DATABASE()) AND TABLE_NAME = ")
@@ -10,6 +15,15 @@ public class CusTableColumnProvider {
                 .append(" AND COLUMN_NAME not like '%_id%' AND COLUMN_NAME not like '%id%' ")
                 .append(" AND COLUMN_NAME not like '%seq%'")
         ;
+
+        if(CollectionUtils.isNotEmpty(busObjRelations)){
+            stringBuilder.append(" AND COLUMN_NAME not in (");
+            for (BusObjRelation busObjRelation : busObjRelations) {
+                stringBuilder.append("'").append(busObjRelation.getFromCol()).append("',");
+            }
+            stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length());
+            stringBuilder.append(")");
+        }
         return stringBuilder.toString();
     }
 

+ 7 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/AIQuestionService.java

@@ -0,0 +1,7 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.AIQuestion;
+
+public interface AIQuestionService extends IService<AIQuestion> {
+}

+ 11 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/AIQuestionServiceImpl.java

@@ -0,0 +1,11 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.AIQuestion;
+import com.management.platform.mapper.AIQuestionMapper;
+import com.management.platform.service.AIQuestionService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AIQuestionServiceImpl extends ServiceImpl<AIQuestionMapper, AIQuestion>  implements AIQuestionService {
+}

+ 200 - 84
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CusTableColumnServiceImpl.java

@@ -10,16 +10,12 @@ import com.management.platform.entity.bo.FormStorePageBO;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.service.CusTableColumnService;
+import com.management.platform.service.ExcelExportService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -28,8 +24,6 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.sql.DataSource;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.sql.*;
 import java.util.Date;
 import java.util.*;
@@ -79,6 +73,12 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
 
+    @Resource
+    private ExcelExportService excelExportService;
+
+    @Resource
+    private ColumnFixTransMapper columnFixTransMapper;
+
     @Autowired
     private DataSource dataSource;
 
@@ -102,6 +102,10 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
 
     public static final Pattern INSERT_SIGN_PATTERN = Pattern.compile(REGEX_INSERT_SIGN);
 
+    public static final String REGEX_COMMENT_SIGN = "shortName\\((.*?)\\)";
+
+    public static final Pattern COMMENT_SIGN_PATTERN = Pattern.compile(REGEX_COMMENT_SIGN);
+
     @Value(value = "${upload.path}")
     private String path;
 
@@ -129,7 +133,29 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
 
         Map<String,Object> resMap = new HashMap<>();
         resMap.put("busObject",busObject);
-        List<CusTableColumn> columnList = cusTableColumnMapper.getStructByTableName(tableName);
+
+        //排除relation表中的关联字段
+        List<BusObjRelation> busObjRelations = busObjRelationMapper.selectList(new LambdaQueryWrapper<BusObjRelation>()
+                .eq(BusObjRelation::getFromTbl, tableName)
+        );
+        List<CusTableColumn> columnList = cusTableColumnMapper.getStructByTableName(tableName,busObjRelations);
+
+        //超过10个字段长度取shortName
+        for (CusTableColumn cusTableColumn : columnList) {
+            String columnComment = cusTableColumn.getColumnComment();
+            if(cusTableColumn.getColumnComment().length()>10){
+                Matcher matcher = COMMENT_SIGN_PATTERN.matcher(columnComment);
+                if(matcher.find()){
+                    cusTableColumn.setColumnComment(matcher.group(1));
+                }
+            }else{
+                int i = columnComment.indexOf("shortName");
+                if(-1 != i){
+                    String trim = columnComment.substring(0, i).trim();
+                    cusTableColumn.setColumnComment(trim);
+                }
+            }
+        }
 
         //字段转义提示
         if(1 == user.getUserNameNeedTranslate()){ //TODO user.getUserNameNeedTranslate()
@@ -777,13 +803,15 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
 
         List<FormFieldHead> formFieldHeads = JSONArray.parseArray(cusReportForm.getFormFieldHead(), FormFieldHead.class);
 
-        List<Map<String,String>> tableNameAliasList = new ArrayList<>();
+//        List<Map<String,String>> tableNameAliasList = new ArrayList<>();
+        Map<String,String> tableNameAliasMap = new HashMap<>();
         Matcher mainMatcher = MAIN_TABLE_PATTERN.matcher(tableColumnSql);
         if (mainMatcher.find()) {
-            Map<String,String> tableNameMap = new HashMap<>();
-            tableNameMap.put("tableName",mainMatcher.group(1));
-            tableNameMap.put("tableAlias",mainMatcher.group(2));
-            tableNameAliasList.add(tableNameMap);
+//            Map<String,String> tableNameMap = new HashMap<>();
+//            tableNameMap.put("tableName",mainMatcher.group(1));
+//            tableNameMap.put("tableAlias",mainMatcher.group(2));
+//            tableNameAliasList.add(tableNameMap);
+            tableNameAliasMap.put(mainMatcher.group(1),mainMatcher.group(2));
         } else {
             msg.setError("主业务表无法识别,请联系管理员");
             return msg;
@@ -791,19 +819,23 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
 
         Matcher joinMatcher = JOIN_TABLE_PATTERN.matcher(tableColumnSql);
         while (joinMatcher.find()){
-            Map<String,String> tableNameMap = new HashMap<>();
-            tableNameMap.put("tableName",joinMatcher.group(1));
-            tableNameMap.put("tableAlias",joinMatcher.group(2));
-            tableNameAliasList.add(tableNameMap);
+//            Map<String,String> tableNameMap = new HashMap<>();
+//            tableNameAliasMap.put("tableName",joinMatcher.group(1));
+//            tableNameAliasMap.put("tableAlias",joinMatcher.group(2));
+//            tableNameAliasList.add(tableNameMap);
+            tableNameAliasMap.put(joinMatcher.group(1),joinMatcher.group(2));
         }
 
 
         Map<String,List<String>> indexMap = new HashMap<>(2);
         indexMap.put("userName",new ArrayList<>());
         indexMap.put("deptName",new ArrayList<>());
-        for (Map<String, String> tableNameMap : tableNameAliasList) {
-            List<FormTransColumn> tmpColList = tblColumnMap.get(tableNameMap.get("tableName"));
-            String tableAlias = tableNameMap.get("tableAlias");
+//        for (Map<String, String> tableNameMap : tableNameAliasList) {
+        for (String tableName : tableNameAliasMap.keySet()) {
+            List<FormTransColumn> tmpColList = tblColumnMap.get(tableName);
+            String tableAlias = tableNameAliasMap.get(tableName);
+//            List<FormTransColumn> tmpColList = tblColumnMap.get(tableNameMap.get("tableName"));
+//            String tableAlias = tableNameMap.get("tableAlias");
             if(CollectionUtils.isNotEmpty(tmpColList)){
                 for (FormTransColumn formTransColumn : tmpColList) {
                     String col = tableAlias+"."+formTransColumn.getColName();
@@ -811,23 +843,35 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
                         if(1 == formTransColumn.getTransType()){
                             //当前位置的是人名,需要转义
                             for (int i = 0; i < formFieldHeads.size(); i++) {
-                                if(formFieldHeads.get(i).getTableName().equals(tableNameMap.get("tableName"))
-                                &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
+                                if(formFieldHeads.get(i).getTableName().equals(tableName)
+                                        &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
                                 ){
                                     List<String> tmpList = indexMap.get("userName");
                                     tmpList.add(formFieldHeads.get(i).getColumnVal());
                                 }
+//                                if(formFieldHeads.get(i).getTableName().equals(tableNameMap.get("tableName"))
+//                                &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
+//                                ){
+//                                    List<String> tmpList = indexMap.get("userName");
+//                                    tmpList.add(formFieldHeads.get(i).getColumnVal());
+//                                }
                             }
                         }
                         else if (2 == formTransColumn.getTransType()) {
                             //当前位置是部门,需要转义
                             for (int i = 0; i < formFieldHeads.size(); i++) {
-                                if(formFieldHeads.get(i).getTableName().equals(tableNameMap.get("tableName"))
+                                if(formFieldHeads.get(i).getTableName().equals(tableName)
                                         &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
                                 ){
                                     List<String> tmpList = indexMap.get("deptName");
                                     tmpList.add(formFieldHeads.get(i).getColumnVal());
                                 }
+//                                if(formFieldHeads.get(i).getTableName().equals(tableNameMap.get("tableName"))
+//                                        &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
+//                                ){
+//                                    List<String> tmpList = indexMap.get("deptName");
+//                                    tmpList.add(formFieldHeads.get(i).getColumnVal());
+//                                }
                             }
                         }
                     }
@@ -837,6 +881,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
             }
         }
 
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
         try (Connection connection = dataSource.getConnection()) {
             PreparedStatement preparedStatement = connection.prepareStatement(tableColumnSql);
             ResultSet resultSet = preparedStatement.executeQuery();
@@ -847,94 +892,165 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
             return msg;
         }
 
+        //转换固定值
+        List<ColumnFixTrans> columnFixTrans = columnFixTransMapper.selectList(null);
+        Map<String, List<ColumnFixTrans>> tableColumnFixTransMap = columnFixTrans.stream()
+                .collect(Collectors.groupingBy(ColumnFixTrans::getTblName));// key tblName
+
+        //根据表头获取 'xxx' --> 别名.字段名 --> 表名.字段名
+        Map<String, FormFieldHead> columnAliasMap = new HashMap<>();
+        for (FormFieldHead formFieldHead : formFieldHeads) {
+            columnAliasMap.put(formFieldHead.getColumnVal(),formFieldHead);
+//            ColumnAliasVO tmpVO = new ColumnAliasVO();
+//            String key = formFieldHead.getColumnVal();
+//            tmpVO.setColumnCHN(key);
+//            tmpVO.setColumnTblName(formFieldHead.getTableName()+"."+formFieldHead.getColumnName());
+//            tmpVO.setColumnAliasName(tableNameAliasMap.get(formFieldHead.getTableName())+"."+formFieldHead.getColumnName());
+//            columnAliasMap.put(key,tmpVO);
+        }
+
         if(CollectionUtils.isNotEmpty(dataList)){
+            List<List<String>> resList=new ArrayList<>();
             // 创建工作簿和工作表
-            Workbook workbook = new XSSFWorkbook();
-            Sheet sheet = workbook.createSheet("Sheet01");
+//            Workbook workbook = new XSSFWorkbook();
+//            Sheet sheet = workbook.createSheet("Sheet01");
 
             // 创建表头
-            Row headerRow = sheet.createRow(0);
-            int colNum = 0;
-            for (String key : dataList.get(0).keySet()) {
-                Cell cell = headerRow.createCell(colNum++);
-                cell.setCellValue(key);
+//            Row headerRow = sheet.createRow(0);
+//            int colNum = 0;
+//            for (String key : dataList.get(0).keySet()) {
+//                Cell cell = headerRow.createCell(colNum++);
+//                cell.setCellValue(key);
+//            }
+
+            List<String> titleList=new ArrayList<>();
+            for (String s : dataList.get(0).keySet()) {
+                titleList.add(s);
             }
+            resList.add(titleList);
+
+            List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
 
             // 填充数据
-            int rowNum = 1;
+//            int rowNum = 1;
             for (Map<String, Object> data : dataList) {
-                Row row = sheet.createRow(rowNum++);
-                colNum = 0;
+                String valRes = "";
+//                Row row = sheet.createRow(rowNum++);
+//                colNum = 0;
+                List<String> item=new ArrayList<>();
+
                 for (String key : dataList.get(0).keySet()) {
-                    List<String> userNameIndexes = indexMap.get("userName");
-                    List<String> deptNameIndexes = indexMap.get("deptName");
-                    if(1 == user.getUserNameNeedTranslate()){
-                        Cell cell = row.createCell(colNum++);
+
+                    //固定值转换
+                    FormFieldHead formFieldHead = columnAliasMap.get(key);//字段对应别名和表
+                    List<ColumnFixTrans> transColList = tableColumnFixTransMap.get(formFieldHead.getTableName());//固定值字段集合
+                    List<ColumnFixTrans> currentFixValList = transColList.stream()
+                            .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
+                            .collect(Collectors.toList());//当前字段固定值对照值
+                    if(CollectionUtils.isNotEmpty(currentFixValList)){
+                        Map<String, String> valMeanMap = currentFixValList.stream()
+                                .collect(Collectors.toMap(ColumnFixTrans::getColVal, ColumnFixTrans::getValMean));
                         Object value = data.get(key);
-                        if (value == null) {
-                            cell.setCellValue(""); // 将null值替换为空格
-                        } else {
-                            String val = value.toString();
-                            if(CollectionUtils.isNotEmpty(userNameIndexes)){
-                                if(userNameIndexes.contains(key)){
-                                    List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
-                                            .eq(User::getName, val).last(" limit 1 ")
-                                    );
-                                    if(CollectionUtils.isNotEmpty(users)){
-                                        val = "$username="+users.get(0).getCorpwxUserid()+"$";
+                        String mean = valMeanMap.get(value.toString());
+                        valRes = mean;
+                    }else{
+                        //转义
+                        List<String> userNameIndexes = indexMap.get("userName");
+                        List<String> deptNameIndexes = indexMap.get("deptName");
+                        if(1 == user.getUserNameNeedTranslate()){
+//                        Cell cell = row.createCell(colNum++);
+                            Object value = data.get(key);
+                            if (value == null) {
+//                            cell.setCellValue(""); // 将null值替换为空格
+                            } else {
+                                String val = value.toString();
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    if(CollectionUtils.isNotEmpty(userNameIndexes) && userNameIndexes.contains(key)){
+//                                    List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
+//                                            .eq(User::getName, val).last(" limit 1 ")
+//                                    );
+//                                    if(CollectionUtils.isNotEmpty(users)){
+//                                        val = "$username="+users.get(0).getCorpwxUserid()+"$";
+//                                    }
+                                        String name = val;
+                                        Optional<User> first = userList.stream().filter(u -> u.getName().equals(name)).findFirst();
+                                        if(first.isPresent()){
+                                            val = "$userName="+first.get().getCorpwxUserid()+"$";
+                                        }else {
+                                            val = "";
+                                        }
                                     }
 
                                 }
-                            }
 
-                            if(CollectionUtils.isNotEmpty(deptNameIndexes)){
-                                if(deptNameIndexes.contains(key)){
-                                    List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
-                                            .eq(User::getName, val).last(" limit 1 ")
-                                    );
-                                    if(CollectionUtils.isNotEmpty(users)){
-                                        val = "$departmentName="+users.get(0).getCorpwxDeptid()+"$";
+
+                                if(CollectionUtils.isNotEmpty(deptNameIndexes) && deptNameIndexes.contains(key)){
+//                                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
+//                                        .eq(User::getName, val).last(" limit 1 ")
+//                                );
+//                                if(CollectionUtils.isNotEmpty(users)){
+//                                    val = "$departmentName="+users.get(0).getCorpwxDeptid()+"$";
+//                                }
+                                    String name = val;
+                                    Optional<User> first = userList.stream().filter(u -> u.getName().equals(name)).findFirst();
+                                    if(first.isPresent()){
+                                        val = "$departmentName="+first.get().getCorpwxDeptid()+"$";
+                                    }else {
+                                        val = "";
                                     }
                                 }
+//                            cell.setCellValue(val);
+                                valRes = val;
                             }
-                            cell.setCellValue(val);
-                        }
 
-                    }else{
-                        Cell cell = row.createCell(colNum++);
-                        Object value = data.get(key);
-                        if (value == null) {
-                            cell.setCellValue(""); // 将null值替换为空格
-                        } else {
-                            cell.setCellValue(value.toString());
+                        }else{
+//                        Cell cell = row.createCell(colNum++);
+                            Object value = data.get(key);
+                            if (value == null) {
+//                            cell.setCellValue(""); // 将null值替换为空格
+                                valRes = "";
+                            } else {
+//                            cell.setCellValue(value.toString());
+                                valRes = value.toString();
+                            }
                         }
                     }
+
+                    item.add(valRes);
                 }
+                resList.add(item);
             }
 
             // 自动调整列宽
-            for (int i = 0; i < dataList.get(0).size(); i++) {
-                sheet.autoSizeColumn(i);
-            }
+//            for (int i = 0; i < dataList.get(0).size(); i++) {
+//                sheet.autoSizeColumn(i);
+//            }
 
             //生成Excel文件
-            String fileUrlSuffix = cusReportForm.getReportFormName()+System.currentTimeMillis() + ".xlsx";
-            try (FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix)){
-                workbook.write(fos);
-                msg.data = "/upload/" + fileUrlSuffix;
-            } catch (NullPointerException e) {
-                msg.setError(MessageUtils.message("access.verErrorOrDataLack"));
-                return msg;
-            } catch (IOException e) {
-                msg.setError(MessageUtils.message("file.generateError"));
-                return msg;
-            } finally {
-                try {
-                    workbook.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
+            String fileUrlSuffix = cusReportForm.getReportFormName()+System.currentTimeMillis();
+//            try (FileOutputStream fos = new FileOutputStream(path + fileUrlSuffix)){
+//                workbook.write(fos);
+//                msg.data = "/upload/" + fileUrlSuffix;
+//            } catch (NullPointerException e) {
+//                msg.setError(MessageUtils.message("access.verErrorOrDataLack"));
+//                return msg;
+//            } catch (IOException e) {
+//                msg.setError(MessageUtils.message("file.generateError"));
+//                return msg;
+//            } finally {
+//                try {
+//                    workbook.close();
+//                } catch (IOException e) {
+//                    e.printStackTrace();
+//                }
+//            }
+
+            try {
+                return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileUrlSuffix,resList,path);
+            } catch (Exception e) {
+                e.printStackTrace();
             }
+
         }
 
         return msg;