Sfoglia il codice sorgente

ai报表修改系统表

zhouyy 1 mese fa
parent
commit
d033a4f06c
21 ha cambiato i file con 1179 aggiunte e 59 eliminazioni
  1. 8 4
      fhKeeper/formulahousekeeper/management-crm/pom.xml
  2. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java
  3. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ClueService.java
  4. 3 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContactsService.java
  5. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContractService.java
  6. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/CustomService.java
  7. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ProductService.java
  8. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java
  9. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/TaskService.java
  10. 211 46
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/AIQuestionServiceImpl.java
  11. 140 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java
  12. 109 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java
  13. 81 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsServiceImpl.java
  14. 83 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java
  15. 81 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CustomServiceImpl.java
  16. 19 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ExcelExportServiceImpl.java
  17. 94 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java
  18. 125 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java
  19. 208 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  20. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/DepartmentMapper.xml
  21. 1 1
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/UserMapper.xml

+ 8 - 4
fhKeeper/formulahousekeeper/management-crm/pom.xml

@@ -71,10 +71,9 @@
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
+
+
+
 
         <!-- fastjson -->
         <dependency>
@@ -123,6 +122,11 @@
             <artifactId>aspectjweaver</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
         <!-- logback -->
         <!--<dependency>
             <groupId>net.logstash.logback</groupId>

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java

@@ -74,4 +74,6 @@ public interface BusinessOpportunityService extends IService<BusinessOpportunity
     HttpRespMsg pinBusinessOpportunity(BusinessOpportunity bo, HttpServletRequest request);
 
     HttpRespMsg undoPin(BusinessOpportunity bo, HttpServletRequest request);
+
+    HttpRespMsg exportDataAI(BusinessOpportunity bo, HttpServletRequest request)  throws Exception ;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ClueService.java

@@ -21,6 +21,8 @@ import java.util.List;
  */
 public interface ClueService extends IService<Clue> {
 
+    HttpRespMsg exportDataAI(Clue clue,HttpServletRequest request) throws Exception;
+
     void insert(Clue clue);
     void update(Clue clue);
 

+ 3 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContactsService.java

@@ -9,6 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -57,4 +58,6 @@ public interface ContactsService extends IService<Contacts> {
     HttpRespMsg pageContactsByPin(Integer pageIndex, Integer pageSize, Integer customId, String name, String email, String creatorId, String phone, String ownerId, HttpServletRequest request);
 
     HttpRespMsg undoPin(Contacts contacts, HttpServletRequest request);
+
+    HttpRespMsg exportDataAI(Map<String, Object> map, HttpServletRequest request) throws Exception;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContractService.java

@@ -48,4 +48,6 @@ public interface ContractService extends IService<Contract> {
     HttpRespMsg getContractDetail(HttpServletRequest request, Integer id);
 
     HttpRespMsg importContractNew(HttpServletRequest request, MultipartFile file);
+
+    HttpRespMsg exportDataAI(String startDate, String endDate, HttpServletRequest request) throws Exception;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/CustomService.java

@@ -70,4 +70,6 @@ public interface CustomService extends IService<Custom> {
     HttpRespMsg getPrivilegedCustom(HttpServletRequest request);
 
     HttpRespMsg delete(Custom custom);
+
+    HttpRespMsg exportDataAI(Custom custom, HttpServletRequest request) throws Exception;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ProductService.java

@@ -38,4 +38,6 @@ public interface ProductService extends IService<Product> {
     HttpRespMsg orderWithProduct(Integer id);
 
     HttpRespMsg businessListWithProduct(Integer id);
+
+    HttpRespMsg exportDataAI(String startDate, String endDate, HttpServletRequest request) throws Exception;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java

@@ -43,4 +43,6 @@ public interface SalesOrderService extends IService<SalesOrder> {
     HttpRespMsg undoPin(SalesOrder order, HttpServletRequest request);
 
     HttpRespMsg paymentCollectionList(Integer orderId, User user);
+
+    HttpRespMsg exportDataAI(String startTime, String endTime, HttpServletRequest request) throws Exception;
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/TaskService.java

@@ -44,4 +44,6 @@ public interface TaskService extends IService<Task> {
     HttpRespMsg getTaskDetail(Integer id, HttpServletRequest request);
 
     HttpRespMsg getTaskListByStartAndEnd(String startDate, String endDate, HttpServletRequest request);
+
+    HttpRespMsg exportDataAI(TaskDto task, HttpServletRequest request) throws Exception;
 }

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

@@ -6,10 +6,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.*;
 import com.management.platform.entity.bo.FormStorePageBO;
 import com.management.platform.entity.bo.QuestionBO;
+import com.management.platform.entity.dto.TaskDto;
 import com.management.platform.mapper.*;
-import com.management.platform.service.AIQuestionService;
-import com.management.platform.service.CusTableColumnService;
-import com.management.platform.service.ExcelExportService;
+import com.management.platform.service.*;
 import com.management.platform.util.ExcelConverter;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.commons.collections.CollectionUtils;
@@ -38,14 +37,17 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.sql.*;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
-import java.util.stream.Collectors;
 
 @Service
 public class AIQuestionServiceImpl extends ServiceImpl<AIQuestionMapper, AIQuestion>  implements AIQuestionService {
@@ -71,6 +73,30 @@ public class AIQuestionServiceImpl extends ServiceImpl<AIQuestionMapper, AIQuest
     @Resource
     private CusTableColumnMapper cusTableColumnMapper;
 
+    @Resource
+    private ClueService clueService;
+
+    @Resource
+    private BusinessOpportunityService businessOpportunityService;
+
+    @Resource
+    private TaskService taskService;
+
+    @Resource
+    private CustomService customService;
+
+    @Resource
+    private ContactsService contactsService;
+
+    @Resource
+    private ProductService productService;
+
+    @Resource
+    private SalesOrderService salesOrderService;
+
+    @Resource
+    private ContractService contractService;
+
     @Resource
     private ExcelExportService excelExportService;
 
@@ -208,56 +234,195 @@ public class AIQuestionServiceImpl extends ServiceImpl<AIQuestionMapper, AIQuest
 
             String tableName = questionBO.getSourceContent();
 
-            //排除relation表中的关联字段
-            List<BusObjRelation> busObjRelations = busObjRelationMapper.selectList(new LambdaQueryWrapper<BusObjRelation>()
-                    .eq(BusObjRelation::getFromTbl, tableName)
-            );
-            List<CusTableColumn> checkColumns = cusTableColumnMapper.getStructByTableName(tableName,busObjRelations);
-            //映射字段和comment
-            Map<String, String> columnCommentMap = checkColumns.stream().collect(Collectors.toMap(CusTableColumn::getColumnName, CusTableColumn::getColumnComment));
-
-            StringBuilder stringBuilder = new StringBuilder();
-            stringBuilder.append(" select ");
-            for (String key : columnCommentMap.keySet()) {
-                stringBuilder.append(" ").append(key).append(",");
+            HttpRespMsg dataMsg = new HttpRespMsg();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            switch (tableName){
+                case "business_opportunity" :
+                    BusinessOpportunity bo = new BusinessOpportunity();
+                    if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+                        bo.setStartTime(sdf.format(questionBO.getStartDate())) ;
+                        bo.setEndTime(sdf.format(questionBO.getEndDate())) ;
+                    }
+                    try {
+                        dataMsg = businessOpportunityService.exportDataAI(bo,request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "clue" :
+                    Clue clue = new Clue();
+                    if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+                        clue.setStartTime(sdf.format(questionBO.getStartDate())) ;
+                        clue.setEndTime(sdf.format(questionBO.getEndDate())) ;
+                    }
+                    try {
+                        dataMsg = clueService.exportDataAI(clue,request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "custom" :
+                    Custom custom = new Custom();
+                    if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+                        custom.setStartTime(sdf.format(questionBO.getStartDate())) ;
+                        custom.setEndTime(sdf.format(questionBO.getEndDate())) ;
+                    }
+                    try {
+                        dataMsg = customService.exportDataAI(custom,request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "contacts" :
+                    Map<String,Object> map = new HashMap<>();
+                    map.put("isDelete", 0);
+                    map.put("companyId",user.getCompanyId());
+//                    if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+//                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//
+//                    }
+                    try {
+                        dataMsg = contactsService.exportDataAI(map,request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "task" :
+                    TaskDto task = new TaskDto();
+                    if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+                        task.setStartDate(LocalDateTime.parse(sdf.format(questionBO.getStartDate()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); ;
+                        task.setEndDate(LocalDateTime.parse(sdf.format(questionBO.getEndDate()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) ;
+                    }
+                    try {
+                        dataMsg = taskService.exportDataAI(task,request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "product" :
+                    try {
+                        dataMsg = productService.exportDataAI(sdf.format(questionBO.getStartDate()),sdf.format(questionBO.getEndDate()),request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "sales_order" :
+                    try {
+                        dataMsg = salesOrderService.exportDataAI(sdf.format(questionBO.getStartDate()),sdf.format(questionBO.getEndDate()),request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
+                case "contract" :
+                    try {
+                        dataMsg = contractService.exportDataAI(sdf.format(questionBO.getStartDate()),sdf.format(questionBO.getEndDate()),request);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        dataMsg.setError("系统表生成数据有误,请联系管理员");
+                    }
+                    break;
             }
-            stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length());
-            stringBuilder.append(" from ")
-                    .append(tableName)
-                    .append(" where company_id =")
-                    .append(user.getCompanyId());
-            if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-                stringBuilder.append(" and date_format(create_time,'%Y-%m-%d') between ")
-                        .append("'").append(sdf.format(questionBO.getStartDate())).append("'")
-                        .append(" and ")
-                        .append("'").append(sdf.format(questionBO.getEndDate())).append("'");
+
+            if(dataMsg.getCode().equals("error")){
+                return dataMsg;
             }
 
-            List<Map<String,Object>> columnList = new ArrayList<>();
-            try (Connection connection = dataSource.getConnection()) {
-                PreparedStatement preparedStatement = connection.prepareStatement(stringBuilder.toString());
-                ResultSet resultSet = preparedStatement.executeQuery();
-                columnList = this.convertListWithComment(resultSet,columnCommentMap);
-            }catch (SQLException e) {
+            String filePath = dataMsg.getMsg();
+
+            RestTemplate restTemplate = new RestTemplate();
+            //转换为MultipartFile 准备表单数据
+            MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
+            body.add("question", questionBO.getContent());
+            ByteArrayResource byteArrayResource = null;
+            File f = new File(path,filePath);
+            try {
+                MultipartFile multipartFileFromPath = getMultipartFileFromPath(f.getAbsolutePath());
+                byteArrayResource = new ByteArrayResource(multipartFileFromPath.getBytes()) {
+                    @Override
+                    public String getFilename() {
+                        return multipartFileFromPath.getOriginalFilename();
+                    }
+                };
+            }catch (IOException e){
                 e.printStackTrace();
-                httpRespMsg.setError("查询系统表有误,请联系管理员");
-                return httpRespMsg;
             }
+            body.add("file",byteArrayResource);
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
 
-            if(CollectionUtils.isNotEmpty(columnList)){
-                ResponseEntity<String> responseEntity = getResponseEntityWithFileAI(columnList, questionBO.getContent());
-                if(responseEntity.getStatusCode().is2xxSuccessful()){
-                    JSONObject jsonObject = JSONObject.parseObject(responseEntity.getBody());
-                    System.out.println("jsonObject=== "+jsonObject);
-                    queryRes = jsonObject.getString("data");
-                }else{
-                    queryRes = "AI分析有误,稍后再试";
-                }
+            HttpEntity<MultiValueMap<String, Object>> requestEntity =
+                    new HttpEntity<>(body, headers);
+            ResponseEntity<String> response = restTemplate.exchange(
+                    aiFileAskUrl,
+                    HttpMethod.POST,
+                    requestEntity,
+                    String.class);
+            if(response.getStatusCode().is2xxSuccessful()){
+                JSONObject jsonObject = JSONObject.parseObject(response.getBody());
+                System.out.println("jsonObject=== "+jsonObject);
+                queryRes = jsonObject.getString("data");
             }else{
-                queryRes = "无数据";
+                queryRes = "AI分析有误,稍后再试";
             }
 
+
+            //排除relation表中的关联字段
+//            List<BusObjRelation> busObjRelations = busObjRelationMapper.selectList(new LambdaQueryWrapper<BusObjRelation>()
+//                    .eq(BusObjRelation::getFromTbl, tableName)
+//            );
+//            List<CusTableColumn> checkColumns = cusTableColumnMapper.getStructByTableName(tableName,busObjRelations);
+//            //映射字段和comment
+//            Map<String, String> columnCommentMap = checkColumns.stream().collect(Collectors.toMap(CusTableColumn::getColumnName, CusTableColumn::getColumnComment));
+//
+//            StringBuilder stringBuilder = new StringBuilder();
+//            stringBuilder.append(" select ");
+//            for (String key : columnCommentMap.keySet()) {
+//                stringBuilder.append(" ").append(key).append(",");
+//            }
+//            stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length());
+//            stringBuilder.append(" from ")
+//                    .append(tableName)
+//                    .append(" where company_id =")
+//                    .append(user.getCompanyId());
+//            if(null != questionBO.getStartDate() && null != questionBO.getEndDate()){
+//                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+//                stringBuilder.append(" and date_format(create_time,'%Y-%m-%d') between ")
+//                        .append("'").append(sdf.format(questionBO.getStartDate())).append("'")
+//                        .append(" and ")
+//                        .append("'").append(sdf.format(questionBO.getEndDate())).append("'");
+//            }
+//
+//            List<Map<String,Object>> columnList = new ArrayList<>();
+//            try (Connection connection = dataSource.getConnection()) {
+//                PreparedStatement preparedStatement = connection.prepareStatement(stringBuilder.toString());
+//                ResultSet resultSet = preparedStatement.executeQuery();
+//                columnList = this.convertListWithComment(resultSet,columnCommentMap);
+//            }catch (SQLException e) {
+//                e.printStackTrace();
+//                httpRespMsg.setError("查询系统表有误,请联系管理员");
+//                return httpRespMsg;
+//            }
+//
+//            if(CollectionUtils.isNotEmpty(columnList)){
+//                ResponseEntity<String> responseEntity = getResponseEntityWithFileAI(columnList, questionBO.getContent());
+//                if(responseEntity.getStatusCode().is2xxSuccessful()){
+//                    JSONObject jsonObject = JSONObject.parseObject(responseEntity.getBody());
+//                    System.out.println("jsonObject=== "+jsonObject);
+//                    queryRes = jsonObject.getString("data");
+//                }else{
+//                    queryRes = "AI分析有误,稍后再试";
+//                }
+//            }else{
+//                queryRes = "无数据";
+//            }
+
         } else if (2 == questionBO.getQuestionDataSource()) {
             /**
              * 自定义报表

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

@@ -39,6 +39,7 @@ import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -821,6 +822,145 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
         return respMsg;
     }
 
+    @Override
+    public HttpRespMsg exportDataAI(BusinessOpportunity bo, HttpServletRequest request)  throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "business").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        Company company = companyMapper.selectById(user.getCompanyId());
+        String str = company.getIsExistBusiness() == 1 ? "商机" : "项目";
+
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        List<String> modelList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            String type = item.getString("type");
+            if (type.equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(j);
+                    JSONArray listJsonArray = columnsJSONObject.getJSONArray("list");
+                    for (int k = 0; k < listJsonArray.size(); k++) {
+                        JSONObject listJsonArrayJSONObject = listJsonArray.getJSONObject(k);
+                        titleList.add(listJsonArrayJSONObject.getString("label"));
+                        modelList.add(listJsonArrayJSONObject.getString("model"));
+                    }
+                }
+            }
+            else {
+                titleList.add(item.getString("label"));
+                modelList.add(item.getString("model"));
+            }
+        }
+        dataList.add(titleList);
+        for (int i = 0; i < titleList.size(); i++) {
+            String s = titleList.get(i);
+            if (s.contains("商机")) {
+                s = s.replaceAll("商机", str);
+                titleList.set(i, s);
+            }
+        }
+
+        HttpRespMsg respMsg = listAI(bo,request);
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<BusinessOpportunity> list = (List<BusinessOpportunity>) msgData.get("data");
+
+        for (BusinessOpportunity data : list) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < modelList.size(); i++) {
+
+                String model = modelList.get(i);
+                String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                Class<? extends BusinessOpportunity> aClass = data.getClass();
+                String value = "";
+
+                if(model.equals("inchargerId")){
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        if(null == aClass.getMethod("getInchargerName").invoke(data)){
+                            value = "";
+                        }else{
+                            value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(data))+"$";
+                        }
+//                        value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(data))+"$";
+                    }else {
+                        value = String.valueOf(aClass.getMethod("getInchargerName").invoke(data)).equals("null") ? "" :String.valueOf(aClass.getMethod("getInchargerName").invoke(data));
+                    }
+                }else {
+                    value= String.valueOf(aClass.getMethod("get" + targetName).invoke(data)==null?"":aClass.getMethod("get" + targetName).invoke(data));
+                }
+
+                if(model.equals("contactsId")){
+                    value = String.valueOf(aClass.getMethod("getContactsName").invoke(data)).equals("null")?"":String.valueOf(aClass.getMethod("getContactsName").invoke(data));
+                }
+                if(model.equals("customerId")){
+                    value = String.valueOf(null == aClass.getMethod("getCustomerName").invoke(data)?"":aClass.getMethod("getCustomerName").invoke(data));
+                }
+                if(model.equals("expectedTransactionDate")){
+                    LocalDate date = (LocalDate) aClass.getMethod("getExpectedTransactionDate").invoke(data);
+                    // 如果日期不为空,格式化日期
+                    if (date != null) {
+                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+                        value = date.format(formatter);
+                    } else {
+                        value = "";
+                    }                }
+                if(model.equals("stageId")){
+                    value = String.valueOf(null == aClass.getMethod("getStageValue").invoke(data)?"":aClass.getMethod("getStageValue").invoke(data));
+                }
+                if(model.equals("creatorId")){
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        if(null == aClass.getMethod("getCreatorName").invoke(data)){
+                            value = "";
+                        }else{
+                            value = "$userName="+String.valueOf(aClass.getMethod("getCreatorName").invoke(data))+"$";
+                        }
+                    }else {
+                        value = String.valueOf(aClass.getMethod("getCreatorName").invoke(data)).equals("null") ? "" :String.valueOf(aClass.getMethod("getCreatorName").invoke(data));
+                    }
+//                    value = String.valueOf(null == aClass.getMethod("getCreatorName").invoke(data)?"":aClass.getMethod("getCreatorName").invoke(data));
+                }
+
+                item.add(value);
+            }
+            dataList.add(item);
+        }
+        String fileName=str+"表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
+
+    private HttpRespMsg listAI(BusinessOpportunity bo, HttpServletRequest request) {
+        HashMap<Object, Object> r = new HashMap<>();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        bo.setIsDelete(0);
+        bo.setCompanyId(user.getCompanyId());
+        bo.setUserId(user.getId());
+        bo.setEndTime(bo.getEndTime() + " 23:59:59");
+        bo.setPageIndex((bo.getPageIndex()-1) * bo.getPageFrom());
+        List<BusinessOpportunity> list = new ArrayList<>();
+        boolean isAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部商机");
+        boolean isNotAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看负责部门商机");
+        int i = 0;
+        if (isAll) {
+            list = getAll(bo);
+            i = getTotal(bo);
+        } else if (isNotAll) {
+            list = getAll1(bo, user);
+            i = getTotal1(bo, user);
+        } else {
+            list = getAll2(bo, user);
+            i = getTotal2(bo, user);
+        }
+        r.put("data", list);
+        r.put("total",i);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(r);
+        return msg;
+    }
+
 
     private BusinessOpportunity setNull(BusinessOpportunity bo) {
         if (bo.getPlate1() == "") {

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

@@ -82,6 +82,115 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     @Autowired
     private ApplicationContext applicationContext;
 
+    private HttpRespMsg listAI(Clue clue,HttpServletRequest request){
+        User user = userMapper.selectById(request.getHeader("Token"));
+        clue.setCompanyId(user.getCompanyId());
+        clue.setIsDelete(0);
+        clue.setEndTime(clue.getEndTime() + " 23:59:59");
+        clue.setPageIndex((clue.getPageIndex() - 1) * clue.getPageFrom());
+        boolean isAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部线索");
+        boolean isNotAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看负责部门线索");
+        List<Clue> list = new ArrayList<>();
+        int i = 0;
+        if (isAll) {
+            //查看全部线索
+            list = getList(clue);
+            i = getTotal(clue);
+        } else if (isNotAll) {
+            //查看负责部门线索 找出所处部门下所有的负责人
+            list = getList1(clue, user);
+            i = getTotal1(clue, user);
+        } else {
+            // 查看负责人为 自己 和 null的数据
+            list = getList2(clue, user);
+            i = getTotal2(clue, user);
+        }
+        HashMap<Object, Object> map = new HashMap<>();
+        map.put("data", list);
+        map.put("total", i);
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(map);
+        return msg;
+    }
+
+
+    @Override
+    public HttpRespMsg exportDataAI(Clue clue,HttpServletRequest request) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Thread").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        List<String> modelList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            String type = item.getString("type");
+            if (type.equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(j);
+                    JSONArray listJsonArray = columnsJSONObject.getJSONArray("list");
+                    for (int k = 0; k < listJsonArray.size(); k++) {
+                        JSONObject listJsonArrayJSONObject = listJsonArray.getJSONObject(k);
+                        titleList.add(listJsonArrayJSONObject.getString("label"));
+                        modelList.add(listJsonArrayJSONObject.getString("model"));
+                    }
+                }
+            }
+            else {
+                titleList.add(item.getString("label"));
+                modelList.add(item.getString("model"));
+            }
+        }
+        dataList.add(titleList);
+
+        HttpRespMsg respMsg = this.listAI(clue,request);
+
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<Clue> list = (List<Clue>) msgData.get("data");
+
+        for (Clue data : list) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < modelList.size(); i++) {
+
+                String model = modelList.get(i);
+                String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                Class<? extends Clue> aClass = data.getClass();
+                String value = "";
+
+                if(model.equals("inchargerId")){
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        if(null == aClass.getMethod("getInchargerName").invoke(data)){
+                            value = "";
+                        }else{
+                            value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(data))+"$";
+                        }
+                    }else {
+                        value = String.valueOf(aClass.getMethod("getInchargerName").invoke(data)).equals("null") ? "" :String.valueOf(aClass.getMethod("getInchargerName").invoke(data));
+                    }
+                }else {
+                    value= String.valueOf(aClass.getMethod("get" + targetName).invoke(data)==null?"":aClass.getMethod("get" + targetName).invoke(data));
+                }
+
+                if(model.equals("clueSourceId")){
+                    value = String.valueOf(null == aClass.getMethod("getClueSourceValue").invoke(data)?"":aClass.getMethod("getClueSourceValue").invoke(data));
+                }
+                if(model.equals("customerLevelId")){
+                    value = String.valueOf(null == aClass.getMethod("getCustomerLevelValue").invoke(data)?"":aClass.getMethod("getCustomerLevelValue").invoke(data));
+                }
+                if(model.equals("customerIndustryId")){
+                    value = String.valueOf(null == aClass.getMethod("getCustomerIndustryValue").invoke(data)?"":aClass.getMethod("getCustomerIndustryValue").invoke(data));
+                }
+                item.add(value);
+            }
+            dataList.add(item);
+        }
+        String fileName="线索表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

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

@@ -975,5 +975,86 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
         return msg;
     }
 
+    @Override
+    public HttpRespMsg exportDataAI(Map<String, Object> map, HttpServletRequest request) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Contacts").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        List<String> modelList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            String type = item.getString("type");
+            if (type.equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(j);
+                    JSONArray listJsonArray = columnsJSONObject.getJSONArray("list");
+                    for (int k = 0; k < listJsonArray.size(); k++) {
+                        JSONObject listJsonArrayJSONObject = listJsonArray.getJSONObject(k);
+                        titleList.add(listJsonArrayJSONObject.getString("label"));
+                        modelList.add(listJsonArrayJSONObject.getString("model"));
+                    }
+                }
+            }
+            else {
+                titleList.add(item.getString("label"));
+                modelList.add(item.getString("model"));
+            }
+        }
+        dataList.add(titleList);
+
+        Page<ContactsVo> pageContacts = contactsMapper.pageContacts(new Page<>(-1,-1), map);
+        List<ContactsVo> records = pageContacts.getRecords();
+
+        for (ContactsVo contactsVo : records) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < modelList.size(); i++) {
+
+                String model = modelList.get(i);
+                String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                Class<? extends ContactsVo> aClass = contactsVo.getClass();
+                String value = "";
+
+                if(model.equals("customId")){
+                    value = String.valueOf(aClass.getMethod("getCustomName").invoke(contactsVo)).equals("null") ?"" :String.valueOf(aClass.getMethod("getCustomName").invoke(contactsVo));
+                }
+                else if(model.equals("sex")){
+                    value = String.valueOf(aClass.getMethod("getSex").invoke(contactsVo)).equals("null") ?"":String.valueOf(aClass.getMethod("getSex").invoke(contactsVo));
+                    if (StringUtils.isNotEmpty(value)){
+                        if (value.equals("0")){
+                            value="女";
+                        }else {
+                            value="男";
+                        }
+                    }
+
+                }
+                else if(model.equals("ownerId")){
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        if(null == aClass.getMethod("getOwnerName").invoke(contactsVo)){
+                            value = "";
+                        }else{
+                            value = "$userName="+String.valueOf(aClass.getMethod("getOwnerName").invoke(contactsVo))+"$";
+                        }
+//                        value = "$userName="+String.valueOf(aClass.getMethod("getOwnerName").invoke(contactsVo))+"$";
+                    }else {
+                        value = String.valueOf(aClass.getMethod("getOwnerName").invoke(contactsVo)).equals("null") ? "" :String.valueOf(aClass.getMethod("getOwnerName").invoke(contactsVo));
+                    }
+                }else
+                    value= String.valueOf(aClass.getMethod("get" + targetName).invoke(contactsVo)==null?"":aClass.getMethod("get" + targetName).invoke(contactsVo));
+
+                item.add(value);
+            }
+            dataList.add(item);
+        }
+        String fileName="联系人表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
+
 
 }

+ 83 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.management.platform.constant.Constant;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.ContractPageVO;
 import com.management.platform.entity.vo.ContractVo;
@@ -65,7 +64,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
     @Resource
     private LocaleInformationMapper localeInformationMapper;
     @Resource
-    private ExcelExportService excelExportService;
+    private ExcelExportServiceImpl excelExportService;
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
     @Resource
@@ -2182,4 +2181,86 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
         }
         return msg;
     }
+
+    @Override
+    public HttpRespMsg exportDataAI(String startDate, String endDate, HttpServletRequest request) throws Exception {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        List<SysRichFunction> functionContractList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "导出合同");
+        if(functionContractList.size() <= 0){
+            httpRespMsg.setError(MessageUtils.message("access.operationError"));
+            return httpRespMsg;
+        }
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        HttpRespMsg contractPage = getContractPage(request, null, null, null, null, null, null, startDate, endDate, null, null, null,null,null);
+        HashMap<String, Object> resultDate = (HashMap<String, Object>) contractPage.data;
+        List<ContractPageVO> data = (List<ContractPageVO>)resultDate.get("data");
+        List<String> headList = new ArrayList<String>();
+//        headList.add("合同编号");
+//        headList.add("合同名称");
+//        headList.add("合同开始时间");
+//        headList.add("合同结束时间");
+//        headList.add("合同创建者");
+//        headList.add("合同金额(¥)");
+//        headList.add("合同类型");
+//        headList.add("状态");
+//        headList.add("创建时间");
+//        headList.add("备注");
+        headList.add(MessageUtils.message("entry.contractNo"));
+        headList.add("部门");
+        headList.add(MessageUtils.message("contract.name"));
+        headList.add(MessageUtils.message("Contract.startDate"));
+        headList.add(MessageUtils.message("Contract.endDate"));
+        headList.add(MessageUtils.message("Contract.creatorName"));
+        headList.add(MessageUtils.message("entry.contract"));
+        headList.add(MessageUtils.message("contract.type"));
+        headList.add(MessageUtils.message("leave.status"));
+        headList.add(MessageUtils.message("excel.creatTime"));
+        headList.add(MessageUtils.message("leave.task"));
+        ArrayList<List<String>> allList = new ArrayList<>();
+        allList.add(headList);
+        for (ContractPageVO contract : data) {
+            ArrayList<String> item = new ArrayList<>();
+            item.add(contract.getNumber()==null?"":contract.getNumber());
+            item.add(StringUtils.isEmpty(contract.getDepartmentName())?"":contract.getDepartmentName());
+            item.add(null == contract.getName()?"":contract.getName());
+            item.add(contract.getStartDate()==null?"":contract.getStartDate()+"");
+            item.add(contract.getEndDate()==null?"":contract.getEndDate()+"");
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                contract.setCreatorName("$userName=" + contract.getCreatorWxCorpId() + "$");
+            }else {
+                contract.setCreatorName(contract.getCreatorName());
+            }
+            item.add(contract.getCreatorName());
+            BigDecimal bigDecimal = null;
+            if (contract.getAmounts() != null){
+                bigDecimal = new BigDecimal(contract.getAmounts().toString()).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }
+            item.add(contract.getAmounts()==null?"":bigDecimal + "");
+            item.add(null == contract.getTypeName()?"":contract.getTypeName());
+            switch (contract.getStatus()){
+                case 0 :
+                    item.add("审核通过");
+                    break;
+                case 1 :
+                    item.add("待审核");
+                    break;
+                case 2 :
+                    item.add("驳回");
+                    break;
+                default:
+                    item.add("_");
+            }
+            item.add(null == contract.getIndate()?"":contract.getIndate().toString());
+            item.add(contract.getRemarks()==null?"":contract.getRemarks());
+            allList.add(item);
+        }
+        String fileName = "合同AI_"+System.currentTimeMillis();
+        try {
+            return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,allList, path);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return httpRespMsg;
+    }
 }

+ 81 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/CustomServiceImpl.java

@@ -635,7 +635,7 @@ public class CustomServiceImpl extends ServiceImpl<CustomMapper, Custom> impleme
             //部门总数
             List<DepartmentVO> earlierCusCountList = departmentMapper.getEarlierCusCount(endDate,departmentId, companyId);
             Map<Integer, Integer> earlierMap = new HashMap<>();
-            if(CollectionUtils.isEmpty(earlierCusCountList)){
+            if(CollectionUtils.isNotEmpty(earlierCusCountList)){
                 earlierMap = earlierCusCountList.stream()
                         .collect(Collectors.toMap(DepartmentVO::getId, DepartmentVO::getEarlierCusTotal));
             }
@@ -1073,6 +1073,86 @@ public class CustomServiceImpl extends ServiceImpl<CustomMapper, Custom> impleme
         return msg;
     }
 
+    @Override
+    public HttpRespMsg exportDataAI(Custom custom, HttpServletRequest request) throws Exception {
+        System.out.println("========导出客户信息==========");
+        long startTimeSec = System.currentTimeMillis();
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Customer").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        List<String> modelList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            String type = item.getString("type");
+            if (type.equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(j);
+                    JSONArray listJsonArray = columnsJSONObject.getJSONArray("list");
+                    for (int k = 0; k < listJsonArray.size(); k++) {
+                        JSONObject listJsonArrayJSONObject = listJsonArray.getJSONObject(k);
+                        titleList.add(listJsonArrayJSONObject.getString("label"));
+                        modelList.add(listJsonArrayJSONObject.getString("model"));
+                    }
+                }
+            }
+            else {
+                titleList.add(item.getString("label"));
+                modelList.add(item.getString("model"));
+            }
+        }
+        dataList.add(titleList);
+
+        HttpRespMsg respMsg = getList(custom,request);
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<Custom> list = (List<Custom>) msgData.get("data");
+
+        for (Custom data : list) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < modelList.size(); i++) {
+
+                String model = modelList.get(i);
+                String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                Class<? extends Custom> aClass = data.getClass();
+                String value = "";
+
+                if(model.equals("inchargerId")){
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(data))+"$";
+                    }else {
+                        value = String.valueOf(aClass.getMethod("getInchargerName").invoke(data)).equals("null") ? "" :String.valueOf(aClass.getMethod("getInchargerName").invoke(data));
+                    }
+                }else {
+                    value= String.valueOf(aClass.getMethod("get" + targetName).invoke(data)==null?"":aClass.getMethod("get" + targetName).invoke(data));
+                }
+
+                if(model.equals("clueSourceId")){
+                    value = String.valueOf(null == aClass.getMethod("getClueSourceValue").invoke(data)?"":aClass.getMethod("getClueSourceValue").invoke(data));
+                }
+                if(model.equals("customerLevelId")){
+                    value = String.valueOf(null == aClass.getMethod("getCustomerLevelValue").invoke(data)?"":aClass.getMethod("getCustomerLevelValue").invoke(data));
+                }
+                if(model.equals("customerIndustryId")){
+                    value = String.valueOf(null == aClass.getMethod("getCustomerIndustryValue").invoke(data)?"":aClass.getMethod("getCustomerIndustryValue").invoke(data));
+                }
+                item.add(value);
+            }
+            dataList.add(item);
+        }
+        String fileName="客户表AI_"+ System.currentTimeMillis();
+        long endTimeSec = System.currentTimeMillis();
+        System.out.println("========客户信息导出数据准备结束==========耗时"+(endTimeSec-startTimeSec)+"毫秒");
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
+
+    @Value(value = "${upload.path}")
+    private String path;
+
 
     private Custom setNull(Custom clue) {
         if (clue.getPlate1() == "") {

+ 19 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ExcelExportServiceImpl.java

@@ -1,7 +1,5 @@
 package com.management.platform.service.impl;
 
-import com.management.platform.controller.TaskController;
-import com.management.platform.controller.UserController;
 import com.management.platform.entity.CorpwxJobResult;
 import com.management.platform.entity.WxCorpInfo;
 import com.management.platform.mapper.CorpwxJobResultMapper;
@@ -72,6 +70,25 @@ public class ExcelExportServiceImpl implements ExcelExportService {
         }
     }
 
+    public HttpRespMsg exportGeneralExcelByTitleAndListAI(String title, List<List<String>> list, String downloadPath) throws Exception {
+        long startTimeSec = System.currentTimeMillis();
+        System.out.println("excel导出数据开始");
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        if (title.contains("/")) {
+            //文件名不能含有路径,得替换掉
+            title = title.replace("/", "@");
+        }
+        if (title.contains("\\")) {
+            //文件名不能含有路径,得替换掉
+            title = title.replace("\\", "@");
+        }
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(title, list, downloadPath);
+        httpRespMsg.data = resp;
+        long endTimeSec = System.currentTimeMillis();
+        System.out.println("========excel导出数据结束==========耗时"+(endTimeSec-startTimeSec)+"毫秒");
+        return httpRespMsg;
+    }
+
     public HttpRespMsg exportGeneralExcelByTitleAndList(WxCorpInfo wxCorpInfo, String title, List<List<String>> list, String downloadPath) throws Exception {
         long startTimeSec = System.currentTimeMillis();
         System.out.println("excel导出数据开始");

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

@@ -912,4 +912,98 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         msg.setData(opportunityList);
         return msg;
     }
+
+    @Override
+    public HttpRespMsg exportDataAI(String startDate, String endDate, HttpServletRequest request) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Product").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            titleList.add(item.getString("label"));
+        }
+        dataList.add(titleList);
+        HttpRespMsg respMsg = getList(user.getCompanyId(), null, null, null,null,null,startDate,endDate, null, null);
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<Product> productList = (List<Product>) msgData.get("record");
+        for (Product product : productList) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < configObJSONArray.size(); i++) {
+                JSONObject target = configObJSONArray.getJSONObject(i);
+                if(target.getString("type").equals("grid")){
+                    JSONArray columns = target.getJSONArray("columns");
+                    for (int i1 = 0; i1 < columns.size(); i1++) {
+                        JSONObject columnsJSONObject = columns.getJSONObject(i1);
+                        JSONArray list = columnsJSONObject.getJSONArray("list");
+                        for (int i2 = 0; i2 < list.size(); i2++) {
+                            JSONObject object = list.getJSONObject(i2);
+                            String model = object.getString("model");
+                            String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                            Class<? extends Product> aClass = product.getClass();
+                            String value = String.valueOf(aClass.getMethod("get" + targetName).invoke(product)==null?"":aClass.getMethod("get" + targetName).invoke(product));
+                            if(model.equals("inchargerId")){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    if(null != aClass.getMethod("getInchargerName").invoke(product)){
+                                        value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(product))+"$";
+                                    }
+//                                    value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(product))+"$";
+                                }else {
+                                    value = String.valueOf(null == aClass.getMethod("getInchargerName").invoke(product)?"":aClass.getMethod("getInchargerName").invoke(product));
+                                }
+                            }
+                            if(model.equals("unit")){
+                                value = String.valueOf(null == aClass.getMethod("getUnitName").invoke(product)?"":aClass.getMethod("getUnitName").invoke(product));
+                            }
+                            if(model.equals("type")){
+                                value = String.valueOf(null == aClass.getMethod("getTypeName").invoke(product)?"":aClass.getMethod("getTypeName").invoke(product));
+                            }
+                            if(model.equals("status")){
+                                if(null != aClass.getMethod("getStatus").invoke(product)){
+                                    value = Integer.valueOf(String.valueOf(aClass.getMethod("getStatus").invoke(product)))==0?"下架":"上架";
+                                }
+//                                value = Integer.valueOf(String.valueOf(aClass.getMethod("getStatus").invoke(product)))==0?"下架":"上架";
+                            }
+                            item.add(value);
+                        }
+                    }
+                }else {
+                    String model = target.getString("model");
+                    String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                    Class<? extends Product> aClass = product.getClass();
+                    String value = String.valueOf(aClass.getMethod("get" + targetName).invoke(product)==null?"":aClass.getMethod("get" + targetName).invoke(product));
+                    if(model.equals("inchargerId")){
+                        if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                            if(null != aClass.getMethod("getInchargerName").invoke(product)){
+                                value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(product))+"$";
+                            }
+//                            value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(product))+"$";
+                        }else {
+                            value = String.valueOf(null == aClass.getMethod("getInchargerName").invoke(product)?"":aClass.getMethod("getInchargerName").invoke(product));
+                        }
+                    }
+                    if(model.equals("unit")){
+                        value = String.valueOf(null == aClass.getMethod("getUnitName").invoke(product)?"":aClass.getMethod("getUnitName").invoke(product));
+                    }
+                    if(model.equals("type")){
+                        value = String.valueOf(null == aClass.getMethod("getTypeName").invoke(product)?"":aClass.getMethod("getTypeName").invoke(product));
+                    }
+                    if(model.equals("status")){
+                        if(null != aClass.getMethod("getStatus").invoke(product)){
+                            value = Integer.valueOf(String.valueOf(aClass.getMethod("getStatus").invoke(product)))==0?"下架":"上架";
+                        }
+//                        value = Integer.valueOf(String.valueOf(aClass.getMethod("getStatus").invoke(product)))==0?"下架":"上架";
+                    }
+                    item.add(value);
+                }
+            }
+            dataList.add(item);
+        }
+        String fileName="产品表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
 }

+ 125 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -68,7 +68,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     @Resource
     private SysDictMapper sysDictMapper;
     @Resource
-    private ExcelExportService excelExportService;
+    private ExcelExportServiceImpl excelExportService;
     @Resource
     private SysFormMapper sysFormMapper;
     @Resource
@@ -568,6 +568,130 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         return msg;
     }
 
+    @Override
+    public HttpRespMsg exportDataAI(String startTime, String endTime, HttpServletRequest request) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Order").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        String config = sysForm.getConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            if(item.getString("type").equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int i1 = 0; i1 < columns.size(); i1++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(i1);
+                    JSONArray list = columnsJSONObject.getJSONArray("list");
+                    for (int i2 = 0; i2 < list.size(); i2++) {
+                        JSONObject object = list.getJSONObject(i2);
+                        titleList.add(object.getString("label"));
+                    }
+                }
+            }else {
+                titleList.add(item.getString("label"));
+            }
+        }
+        dataList.add(titleList);
+        HttpRespMsg respMsg = getList( null,null, null,null,null,null,null,startTime,endTime,null, null,null,0);
+        Map<String, Object> msgData = (Map<String, Object>) respMsg.getData();
+        List<SalesOrder> salesOrderList = (List<SalesOrder>) msgData.get("record");
+        for (SalesOrder salesOrder : salesOrderList) {
+            List<String> item=new ArrayList<>();
+            for (int i = 0; i < configObJSONArray.size(); i++) {
+                JSONObject target = configObJSONArray.getJSONObject(i);
+                if(target.getString("type").equals("grid")){
+                    JSONArray columns = target.getJSONArray("columns");
+                    for (int i1 = 0; i1 < columns.size(); i1++) {
+                        JSONObject columnsJSONObject = columns.getJSONObject(i1);
+                        JSONArray list = columnsJSONObject.getJSONArray("list");
+                        for (int i2 = 0; i2 < list.size(); i2++) {
+                            JSONObject object = list.getJSONObject(i2);
+                            String model = object.getString("model");
+                            String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                            Class<? extends SalesOrder> aClass = salesOrder.getClass();
+                            String value = String.valueOf(aClass.getMethod("get" + targetName).invoke(salesOrder)==null?"":aClass.getMethod("get" + targetName).invoke(salesOrder));
+                            if(model.equals("inchargerId")){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    if(null != aClass.getMethod("getInchargerName").invoke(salesOrder)){
+                                        value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(salesOrder))+"$";
+                                    }
+//                                    value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(salesOrder))+"$";
+                                }else {
+                                    value = String.valueOf(null == aClass.getMethod("getInchargerName").invoke(salesOrder)?"":aClass.getMethod("getInchargerName").invoke(salesOrder));
+                                }
+                            }
+                            if(model.equals("customId")){
+                                value = String.valueOf(null == aClass.getMethod("getCustomName").invoke(salesOrder)?"":aClass.getMethod("getCustomName").invoke(salesOrder));
+                            }
+                            if(model.equals("businessOpportunityId")){
+                                value = String.valueOf(null == aClass.getMethod("getBusinessOpportunityName").invoke(salesOrder)?"":aClass.getMethod("getBusinessOpportunityName").invoke(salesOrder));
+                            }
+                            if(model.equals("customSigner")){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    String tmpStr = String.valueOf(aClass.getMethod("getCustomSignerName").invoke(salesOrder) == null ? "" : aClass.getMethod("getCustomSignerName").invoke(salesOrder));
+                                    value = org.apache.commons.lang3.StringUtils.isNotBlank(tmpStr)?"$userName="+tmpStr+"$":"";
+                                }else {
+                                    value = String.valueOf(aClass.getMethod("getCustomSignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCustomSignerName").invoke(salesOrder));
+                                }
+//                                value = String.valueOf(aClass.getMethod("getCustomSignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCustomSignerName").invoke(salesOrder));
+                            }
+                            if(model.equals("companySigner")){
+                                if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                                    String tmpStr = String.valueOf(aClass.getMethod("getCompanySignerName").invoke(salesOrder) == null ? "" : aClass.getMethod("getCompanySignerName").invoke(salesOrder));
+                                    value = org.apache.commons.lang3.StringUtils.isNotBlank(tmpStr)?"$userName="+tmpStr+"$":"";
+                                }else {
+                                    value = String.valueOf(aClass.getMethod("getCompanySignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCompanySignerName").invoke(salesOrder));
+                                }
+//                                value = String.valueOf(aClass.getMethod("getCompanySignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCompanySignerName").invoke(salesOrder));
+                            }
+                            if(model.equals("type")){
+                                value = String.valueOf(null == aClass.getMethod("getTypeName").invoke(salesOrder)?"":aClass.getMethod("getTypeName").invoke(salesOrder));
+                            }
+                            item.add(value);
+                        }
+                    }
+                }else {
+                    String model = target.getString("model");
+                    String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                    Class<? extends SalesOrder> aClass = salesOrder.getClass();
+                    String value = String.valueOf(aClass.getMethod("get" + targetName).invoke(salesOrder)==null?"":aClass.getMethod("get" + targetName).invoke(salesOrder));
+                    if(model.equals("inchargerId")){
+                        if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                            if(null != aClass.getMethod("getInchargerName").invoke(salesOrder)){
+                                value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(salesOrder))+"$";
+                            }
+//                            value = "$userName="+String.valueOf(aClass.getMethod("getInchargerName").invoke(salesOrder))+"$";
+                        }else {
+                            value = String.valueOf(null == aClass.getMethod("getInchargerName").invoke(salesOrder)?"":aClass.getMethod("getInchargerName").invoke(salesOrder));
+                        }
+                    }
+                    if(model.equals("customId")){
+                        value = String.valueOf(null == aClass.getMethod("getCustomName").invoke(salesOrder)?"":aClass.getMethod("getCustomName").invoke(salesOrder));
+                    }
+                    if(model.equals("businessOpportunityId")){
+                        value = String.valueOf(null == aClass.getMethod("getBusinessOpportunityName").invoke(salesOrder)?"":aClass.getMethod("getBusinessOpportunityName").invoke(salesOrder));
+                    }
+                    if(model.equals("customSigner")){
+                        value = String.valueOf(aClass.getMethod("getCustomSignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCustomSignerName").invoke(salesOrder));
+                    }
+                    if(model.equals("companySigner")){
+                        value = String.valueOf(aClass.getMethod("getCompanySignerName").invoke(salesOrder)==null?"":aClass.getMethod("getCompanySignerName").invoke(salesOrder));
+                    }
+                    if(model.equals("type")){
+                        value = String.valueOf(null == aClass.getMethod("getTypeName").invoke(salesOrder)?"":aClass.getMethod("getTypeName").invoke(salesOrder));
+                    }
+                    item.add(value);
+                }
+            }
+            dataList.add(item);
+        }
+        String fileName="销售表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
+
     @Override
     @Transactional
     public HttpRespMsg importData(MultipartFile multipartFile) {

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

@@ -2683,6 +2683,214 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
 
     }
 
+    @Override
+    public HttpRespMsg exportDataAI(TaskDto taskDto, HttpServletRequest request) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+//        SysForm sysForm = sysFormMapper.selectOne(new LambdaQueryWrapper<SysForm>().eq(SysForm::getCompanyId, user.getCompanyId()).eq(SysForm::getCode, "Task").eq(SysForm::getIsCurrent, 1));
+        WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
+        List<TaskExecutor> taskExecutorList = taskExecutorMapper.selectList(new LambdaQueryWrapper<TaskExecutor>().eq(TaskExecutor::getCompanyId,user.getCompanyId()));
+        List<TaskLog> taskLogList = taskLogMapper.selectList(new LambdaQueryWrapper<TaskLog>().eq(TaskLog::getCompanyId,user.getCompanyId()));
+        Company company = companyMapper.selectById(user.getCompanyId());
+        String config = getTaskSysFromConfig();
+        JSONObject configOb = JSON.parseObject(config);
+        JSONArray configObJSONArray = configOb.getJSONArray("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        List<String> modelList=new ArrayList<>();
+        for (int i = 0; i < configObJSONArray.size(); i++) {
+            JSONObject item = configObJSONArray.getJSONObject(i);
+            String type = item.getString("type");
+            if (type.equals("grid")){
+                JSONArray columns = item.getJSONArray("columns");
+                for (int j = 0; j < columns.size(); j++) {
+                    JSONObject columnsJSONObject = columns.getJSONObject(j);
+                    JSONArray listJsonArray = columnsJSONObject.getJSONArray("list");
+                    for (int k = 0; k < listJsonArray.size(); k++) {
+                        JSONObject listJsonArrayJSONObject = listJsonArray.getJSONObject(k);
+                        titleList.add(listJsonArrayJSONObject.getString("label"));
+                        modelList.add(listJsonArrayJSONObject.getString("model"));
+                    }
+                }
+            }
+            else {
+                titleList.add(item.getString("label"));
+                modelList.add(item.getString("model"));
+            }
+        }
+        dataList.add(titleList);//设置表头
+
+        taskDto.setCompanyId(user.getCompanyId());
+        taskDto.setPageIndex(null).setPageSize(null);
+        List<TasKVo> taskVoList =taskMapper.getPageListTask(taskDto);
+        if (!taskVoList.isEmpty()){
+            for (TasKVo tasKVo : taskVoList) {
+                if (!taskExecutorList.isEmpty()){
+                    List<TaskExecutor> collect = taskExecutorList.stream().
+                            filter(taskExecutor -> taskExecutor.getTaskId().equals(tasKVo.getId())).
+                            filter(taskExecutor -> taskExecutor.getCompanyId().equals(user.getCompanyId()))
+                            .collect(Collectors.toList());
+                    if (!collect.isEmpty()){
+                        List<String> collect1 = collect.stream().map(TaskExecutor::getExecutorName).collect(Collectors.toList());
+                        tasKVo.setTaskExecutors(collect1);
+                    }
+                }
+            }
+        }
+
+        if(company.getIsSimple()==0) {
+            for (TasKVo tasKVo : taskVoList) {
+                List<String> item = new ArrayList<>();
+                for (int i = 0; i < modelList.size(); i++) {
+
+                    String model = modelList.get(i);
+                    String targetName = model.substring(0, 1).toUpperCase() + model.substring(1);
+                    Class<? extends TasKVo> aClass = tasKVo.getClass();
+                    String value = "";
+
+                    if (model.equals("taskName")) {
+                        value = String.valueOf(aClass.getMethod("getTaskName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getTaskName").invoke(tasKVo));
+                    } else if (model.equals("priority")) {
+//                    0-低 1-中 2-高
+                        Integer priority = tasKVo.getPriority();
+                        switch (priority) {
+                            case 0:
+                                value = "低";
+                                break;
+                            case 1:
+                                value = "中";
+                                break;
+                            case 2:
+                                value = "高";
+                                break;
+                            default:
+                                value = "";
+
+                        }
+                    } else if (model.equals("executorId")) {
+                        List<String> taskExecutors = tasKVo.getTaskExecutors();
+                        if (taskExecutors != null && !taskExecutors.isEmpty()) {
+                            String executorString = taskExecutors.stream()
+                                    .map(
+                                            t -> {
+                                                if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact() == 1) {
+                                                    return "$userName=" + t + "$";
+                                                } else {
+                                                    return t;
+                                                }
+                                            }
+                                    ).collect(Collectors.joining(","));
+                            value = executorString.isEmpty() ? "" : executorString;
+                        } else {
+                            value = "";
+                        }
+                    } else if (model.equals("startDate")) {
+                        if (tasKVo.getStartDate() != null) {
+                            LocalDateTime startDate = tasKVo.getStartDate();
+                            // 定义日期时间格式
+                            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+                            // 格式化为字符串
+                            value = startDate.format(formatter);
+                        }
+                    } else if (model.equals("endDate")) {
+                        if (tasKVo.getEndDate() != null) {
+                            LocalDateTime endDate = tasKVo.getEndDate();
+                            // 定义日期时间格式
+                            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+                            // 格式化为字符串
+                            value = endDate.format(formatter);
+                        }
+                    } else if (model.equals("customId")) {
+                        value = String.valueOf(aClass.getMethod("getCustomName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getCustomName").invoke(tasKVo));
+                    } else if (model.equals("businessOpportunityId")) {
+                        value = String.valueOf(aClass.getMethod("getBusinessName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getBusinessName").invoke(tasKVo));
+                    } else if (model.equals("orderId")) {
+                        value = String.valueOf(aClass.getMethod("getOrderName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getOrderName").invoke(tasKVo));
+                    } else if (model.equals("clueId")) {
+                        value = String.valueOf(aClass.getMethod("getClueName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getClueName").invoke(tasKVo));
+                    } else if (model.equals("contactsId")) {
+                        value = String.valueOf(aClass.getMethod("getContactsName").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getContactsName").invoke(tasKVo));
+                    } else if (model.equals("phone")) {
+                        value = String.valueOf(aClass.getMethod("getContactsPhone").invoke(tasKVo)).equals("null") ? "" : String.valueOf(aClass.getMethod("getContactsPhone").invoke(tasKVo));
+                    } else
+                        value = String.valueOf(aClass.getMethod("get" + targetName).invoke(tasKVo) == null ? "" : aClass.getMethod("get" + targetName).invoke(tasKVo));
+                    item.add(value);
+                }
+                dataList.add(item);
+            }
+        }else {
+            dataList.clear();
+            List<String> heads = new ArrayList<>();
+            Collections.addAll(heads, "任务名称", "执行人", "开始时间", "截止时间", "客户名称","客户类型", "预约工作内容", "预约金额", "实际工作内容", "实际金额","付款状态","用户反馈");
+            dataList.add(heads);
+            for (TasKVo tasKVo : taskVoList){
+                List<String> item = new ArrayList<>();
+                item.add(tasKVo.getTaskName());
+                if (tasKVo.getTaskExecutors()!=null&&!tasKVo.getTaskExecutors().isEmpty()){
+                    List<String> taskExecutors = tasKVo.getTaskExecutors();
+                    StringJoiner stringJoiner = new StringJoiner(",");
+                    for (String taskExecutor : taskExecutors) {
+                        stringJoiner.add(taskExecutor);
+                    }
+                    item.add(stringJoiner.toString());
+                }else item.add("");
+
+                if (tasKVo.getStartDate() != null) {
+                    LocalDateTime startDate = tasKVo.getStartDate();
+                    // 定义日期时间格式
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+                    // 格式化为字符串
+                    item.add(startDate.format(formatter));
+                }else item.add("");
+
+                if (tasKVo.getEndDate() != null) {
+                    LocalDateTime endDate = tasKVo.getEndDate();
+                    // 定义日期时间格式
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+                    // 格式化为字符串
+                    item.add(endDate.format(formatter));
+                }else item.add("");
+
+                item.add(StringUtils.isEmpty(tasKVo.getCustomName()) ? "" : tasKVo.getCustomName());
+                if (tasKVo.getCustomType()!=null){
+                    Integer customType = tasKVo.getCustomType();
+                    switch (customType) {
+                        case 0:
+                            item.add(customTypeName0);
+                            break;
+                        case 1:
+                            item.add(customTypeName1);
+                            break;
+                        case 2:
+                            item.add(customTypeName2);
+                            break;
+                        default:
+                            item.add("");
+                            break;
+                    }
+                }else item.add("");
+                item.add(StringUtils.isEmpty(tasKVo.getAppointContent()) ? "" : tasKVo.getAppointContent());
+                item.add(tasKVo.getAppointMoney()==null ? BigDecimal.ZERO.toString() : tasKVo.getAppointMoney().toString());
+                item.add(StringUtils.isEmpty(tasKVo.getReallyContent()) ? "" : tasKVo.getReallyContent());
+                item.add(tasKVo.getReallyMoney()==null ? BigDecimal.ZERO.toString() : tasKVo.getReallyMoney().toString());
+                if (tasKVo.getPayType()!=null){
+                    Integer payType = tasKVo.getPayType();
+                    if (payType==0){
+                        item.add("未付款");
+                    }else if(payType==1) {
+                        item.add("已付款");
+                    }else {
+                        item.add("");
+                    }
+                }else item.add("");
+                item.add(StringUtils.isEmpty(tasKVo.getUserBack()) ? "" : tasKVo.getUserBack());
+
+                dataList.add(item);
+            }
+        }
+        String fileName="任务表AI_"+ System.currentTimeMillis();
+        return excelExportService.exportGeneralExcelByTitleAndListAI(fileName,dataList,path);
+    }
+
     public void updateTaskRepeatConfigure(Task task){
         task.setRepeatType(null).setRepeatEndNever(null).setRepeatEndCount(null)
                 .setRepeatEndDate(null).setRepeatDesignDay(null).setRepeatDesignSameday(null)

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/DepartmentMapper.xml

@@ -145,7 +145,7 @@
                  left join user u on b.incharger_id=u.id
                  left join department d on d.department_id=u.department_id
         <where>
-            1=1 AND u.department_id IS NOT NULL and b.company_id=#{companyId}
+            1=1 and b.is_delete = 0 AND u.department_id IS NOT NULL and b.company_id=#{companyId}
 
             <if test="startDate !=null and startDate !='' and endDate !=null and endDate !=''">
                 AND  b.create_time BETWEEN #{startDate} AND #{endDate}
@@ -180,7 +180,7 @@
         left join user u on b.incharger_id=u.id
         left join department d on d.department_id=u.department_id
         <where>
-            1=1 AND u.department_id IS NOT NULL and b.company_id=#{companyId}
+            1=1 and b.is_delete = 0  AND u.department_id IS NOT NULL and b.company_id=#{companyId}
 
             <if test="endDate !=null and endDate !=''">
                 AND  b.create_time &lt; #{endDate}

+ 1 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/UserMapper.xml

@@ -305,7 +305,7 @@
         from business_opportunity b
         left join user u on b.incharger_id=u.id
         <where>
-            1=1 and b.incharger_id is not null and b.company_id=#{companyId}
+            1=1 and b.is_delete = 0 and b.incharger_id is not null and b.company_id=#{companyId}
 
             <if test="startDate !=null and startDate !='' and endDate !=null and endDate !=''">
                 AND  b.create_time BETWEEN #{startDate} AND #{endDate}