浏览代码

Merge remote-tracking branch 'origin/develop' into develop

FengChaoYu 5 月之前
父节点
当前提交
ba1d00a457

+ 150 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/es/CommonListES.java

@@ -0,0 +1,150 @@
+package com.gree.mall.miniapp.bean.es;
+
+/*
+ * 通用列表
+ * */
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+/**
+ *  FieldIndex.not_analyzed:不会分词,只能根据原词索引Field;
+ *  FieldIndex.analyzed:根据分词器分词,可以根据原词和分词后的词条索引Field;
+ *  FieldIndex.no:该字段不会被索引,查不到;
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@ApiModel
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Document(indexName = "common_list_v2", type = "_doc", replicas = 1, shards = 1, createIndex = true)
+public class CommonListES {
+
+    @Id
+    @Field(index = false, store = true, type = FieldType.Keyword)//index:设置通过这个字段是否可以进行搜索
+    private String id;
+    /**
+     * 1=标题,2=内容
+     */
+    @ApiModelProperty("1=标题,2=内容")
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String type;
+    //外键id
+    @Field(index = false, store = true, type = FieldType.Integer)
+    private String comListId;
+    @ApiModelProperty("网点编号")
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String websitNumber;
+    @ApiModelProperty("师傅编号")
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String workerNumber;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field1;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field2;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field3;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field4;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field5;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field6;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field7;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field8;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field9;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field10;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field11;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field12;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field13;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field14;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field15;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field16;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field17;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field18;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field19;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field20;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field21;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field22;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field23;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field24;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field25;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field26;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field27;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field28;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field29;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field30;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field31;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field32;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field33;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field34;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field35;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field36;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field37;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field38;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field39;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field40;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field41;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field42;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field43;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field44;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field45;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field46;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field47;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field48;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field49;
+    @Field(index = false, store = true, type = FieldType.Keyword)
+    private String field50;
+
+}

+ 60 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/comlist/WorkerComListController.java

@@ -0,0 +1,60 @@
+package com.gree.mall.miniapp.controller.comlist;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.miniapp.bean.es.CommonListES;
+import com.gree.mall.miniapp.helper.ResponseHelper;
+import com.gree.mall.miniapp.logic.common.WorkerComListLogic;
+import com.gree.mall.miniapp.plus.entity.WorkerComList;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+
+@Slf4j
+@RestController
+@Api(value = "师傅-文件下发", tags ={"师傅-文件下发"} )
+@RequestMapping(value = "/worker/comlist", produces = "application/json; charset=utf-8")
+public class WorkerComListController {
+
+    @Autowired
+    WorkerComListLogic workerComListLogic;
+
+    @GetMapping("/list")
+    @ApiOperation(value = "万能通用附件列表")
+    public ResponseHelper<IPage<WorkerComList>> list(
+            @ApiParam(required = false, value = "师傅编号") @RequestParam(required = false) String workerNumber,
+            @ApiParam(required = false, value = "标题") @RequestParam(required = false) String title,
+            @ApiParam(required = false, value = "备注") @RequestParam(required = false) String remark,
+            @ApiParam(required = false, value = "状态 true=显示 false=隐藏") @RequestParam(required = false) Boolean status,
+            @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNum,
+            @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize
+
+    ){
+        IPage<WorkerComList> list = workerComListLogic.list(workerNumber,title, status, remark, pageNum, pageSize);
+        return ResponseHelper.success(list);
+    }
+
+
+
+
+    @GetMapping("/record")
+    @ApiOperation(value = "通用列表-明细")
+    public ResponseHelper<List<CommonListES>> record(
+            @ApiParam(required = true, value = "列表id") @RequestParam(required = true) String comListId,
+            @ApiParam(required = true, value = "师傅编号") @RequestParam(required = true) String workerNumber
+    ) throws Exception {
+        List<CommonListES> record = workerComListLogic.record(comListId, workerNumber);
+        return ResponseHelper.success(record);
+    }
+
+
+
+}

+ 96 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/WorkerComListLogic.java

@@ -0,0 +1,96 @@
+package com.gree.mall.miniapp.logic.common;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+
+import com.gree.mall.miniapp.bean.es.CommonListES;
+import com.gree.mall.miniapp.bean.user.CurrentCompanyWechat;
+import com.gree.mall.miniapp.logic.es.EsLogic;
+import com.gree.mall.miniapp.plus.entity.WorkerComList;
+import com.gree.mall.miniapp.plus.entity.WorkerComListWebsit;
+import com.gree.mall.miniapp.plus.entity.WorkerComListWorker;
+import com.gree.mall.miniapp.plus.service.AdminWebsitService;
+import com.gree.mall.miniapp.plus.service.WorkerComListService;
+import com.gree.mall.miniapp.plus.service.WorkerComListWebsitService;
+import com.gree.mall.miniapp.plus.service.WorkerComListWorkerService;
+import com.gree.mall.miniapp.utils.oss.OSSUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class WorkerComListLogic {
+
+    @Autowired
+    CommonLogic commonLogic;
+    @Autowired
+    OSSUtil ossUtil;
+    @Autowired
+    EsLogic esLogic;
+    @Autowired
+    WorkerComListService workerComListService;
+    @Autowired
+    WorkerComListWorkerService workerComListWorkerService;
+    @Autowired
+    WorkerComListWebsitService workerComListWebsitService;
+    @Autowired
+    AdminWebsitService adminWebsitService;
+
+
+    /**
+     * 列表
+     */
+    public IPage<WorkerComList> list(String workerNumber, String title, Boolean status, String remark, Integer pageNum, Integer pageSize) {
+        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
+        List<String> comListIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(workerNumber)) {
+            //师傅编号不为空以师傅为准
+            List<WorkerComListWorker> worker = workerComListWorkerService.lambdaQuery()
+                    .eq(WorkerComListWorker::getWorkerComListWorkerNumber, workerNumber).list();
+            if (CollectionUtils.isEmpty(worker)) {
+                return new Page<>(pageNum, pageSize);
+            }
+            comListIds = worker.stream().map(WorkerComListWorker::getWorkerComListId).distinct().collect(Collectors.toList());
+        }
+        IPage<WorkerComList> page = workerComListService.lambdaQuery()
+                .like(StringUtils.isNotEmpty(title), WorkerComList::getTitle, title)
+                .eq(status != null, WorkerComList::getStatus, status)
+                .like(StringUtils.isNotEmpty(remark), WorkerComList::getRemark, remark)
+                .in(!CollectionUtils.isEmpty(comListIds), WorkerComList::getId, comListIds)
+                .orderByDesc(WorkerComList::getCreateTime)
+                .page(new Page<>(pageNum, pageSize));
+        return page;
+    }
+
+
+
+    /**
+     * 通用列表明细
+     *
+     * @param comListId
+     * @param workerNumber
+     */
+    public List<CommonListES> record(String comListId, String workerNumber) {
+        List<CommonListES> list = esLogic.list(Arrays.asList(workerNumber), workerNumber, comListId);
+        return list;
+    }
+
+
+
+}

+ 73 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/es/EsLogic.java

@@ -0,0 +1,73 @@
+package com.gree.mall.miniapp.logic.es;
+
+import com.aliyuncs.utils.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.gree.mall.miniapp.bean.es.CommonListES;
+import com.gree.mall.miniapp.utils.CommonUtils;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+import org.springframework.data.elasticsearch.core.SearchHit;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 操作es
+ */
+
+@Service
+public class EsLogic {
+
+    @Autowired
+    private ElasticsearchRestTemplate elasticsearchRestTemplate;
+
+    public boolean createIndexAndMapping(Class<?> classType) {
+        if(elasticsearchRestTemplate.indexOps(classType).exists()){
+            return true;
+        }
+        boolean b = elasticsearchRestTemplate.indexOps(classType).create();
+        return b;
+    }
+
+
+
+
+    public  List<CommonListES>  list(List<String> websitNumbers,String workerNumber,String comId){
+        //标题
+        BoolQueryBuilder titleQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("type", "1"));
+        if(StringUtils.isNotEmpty(comId)){
+            titleQueryBuilder.must(QueryBuilders.termQuery("comListId", comId));
+        }
+        //内容
+        BoolQueryBuilder must = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("type", "2"));
+        if(StringUtils.isNotEmpty(comId)){
+            must.must(QueryBuilders.termQuery("comListId", comId));
+        }
+        if(StringUtils.isNotEmpty(workerNumber)){
+            must.must(QueryBuilders.termQuery("workerNumber", workerNumber));
+        }
+        if(CollectionUtils.isNotEmpty(websitNumbers)){
+            must.must(QueryBuilders.termsQuery("websitNumber",websitNumbers));
+        }
+        NativeSearchQuery titleBuild = new NativeSearchQueryBuilder().withQuery(titleQueryBuilder).build();
+        NativeSearchQuery dataBuild = new NativeSearchQueryBuilder().withQuery(must).build();
+
+        List<SearchHit<CommonListES>> searchHits1 = elasticsearchRestTemplate.search(titleBuild, CommonListES.class).getSearchHits();
+        List<SearchHit<CommonListES>> searchHits2 = elasticsearchRestTemplate.search(dataBuild, CommonListES.class).getSearchHits();
+        List<CommonListES> titles = searchHits1.stream().map(SearchHit<CommonListES>::getContent).collect(Collectors.toList());
+        List<CommonListES> datas = searchHits2.stream().map(SearchHit<CommonListES>::getContent).collect(Collectors.toList());
+        titles.addAll(datas);
+
+        return titles;
+    }
+
+
+
+}

+ 7 - 0
mall-server-api/pom.xml

@@ -43,6 +43,13 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <version>1.21</version>
+        </dependency>
+
+
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
             <scope>runtime</scope>

+ 66 - 2
mall-server-api/src/main/java/com/gree/mall/manager/controller/comlist/ComListAllController.java

@@ -18,11 +18,75 @@ import javax.servlet.http.HttpServletResponse;
 
 @Slf4j
 @RestController
-@Api(value = "通用万能列表API", tags = {"中心文件下发API"})
-@RequestMapping(value = "/com/list", produces = "application/json; charset=utf-8")
+@Api(value = "文件下发api", tags = {"文件下发api"})
+@RequestMapping(value = "/comAll/list", produces = "application/json; charset=utf-8")
 public class ComListAllController {
 
     @Autowired
     ComListAllLogic comListAllLogic;
 
+
+    @GetMapping("/list")
+    @ApiOperation(value = "万能通用附件列表")
+    public ResponseHelper<ComList> list(
+            @ApiParam(required = false, value = "标题") @RequestParam(required = false) String title,
+            @ApiParam(required = false, value = "备注") @RequestParam(required = false) String remark,
+            @ApiParam(required = false, value = "是否强制提醒 true/false") @RequestParam(required = false) Boolean isNotice,
+            @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNo,
+            @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize,
+            HttpServletRequest request
+    ) {
+        IPage<ComList> list = comListAllLogic.list(title, remark, isNotice, pageNo, pageSize, request);
+        return ResponseHelper.success(list);
+    }
+
+
+    @PostMapping("/delete")
+    @ApiOperation(value = "删除万能通用附件")
+    public ResponseHelper list(
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
+            HttpServletRequest request
+    ) {
+        comListAllLogic.delete(id, request);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/yonge")
+    @ApiOperation(value = "上传万能通用列表附件")
+    public ResponseHelper yonge(
+            @ApiParam(required = true, value = "标题") @RequestParam(required = true) String title,
+            @ApiParam(required = false, value = "备注") @RequestParam(required = false) String remark,
+            @ApiParam(required = true, value = "file") @RequestParam(required = true) String file,
+            @ApiParam(required = false, value = "是否强制通知 true=是 false=否") @RequestParam(required = false) Boolean isNotice,
+            @ApiParam(required = false, value = "下载密码") @RequestParam(required = false) String downloadPwd,
+            HttpServletRequest request
+    ) throws Exception {
+        comListAllLogic.yonge(title, remark, file, isNotice, downloadPwd, request);
+        return ResponseHelper.success();
+    }
+
+    @GetMapping("/download")
+    @ApiOperation(value = "下载万能通用列表附件")
+    public void down(
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
+            @ApiParam(required = false, value = "下载密码") @RequestParam(required = false) String downloadPwd,
+            HttpServletRequest request, HttpServletResponse response
+    ) throws Exception {
+        comListAllLogic.download(id, downloadPwd, request, response);
+        //return ResponseHelper.success(download);
+    }
+    @GetMapping("/download/log")
+    @ApiOperation(value = "下载记录")
+    public ResponseHelper<IPage<ComDetailLog>> downlog(
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
+            @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNo,
+            @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize,
+            HttpServletRequest request
+    ) throws Exception {
+        IPage<ComDetailLog> comDetailLogIPage = comListAllLogic.logList(id, pageNo, pageSize, request);
+        return ResponseHelper.success(comDetailLogIPage);
+    }
+
+
+
 }

+ 3 - 3
mall-server-api/src/main/java/com/gree/mall/manager/controller/comlist/ComListController.java

@@ -42,7 +42,7 @@ public class ComListController {
     @PostMapping("/delete")
     @ApiOperation(value = "删除万能通用附件")
     public ResponseHelper list(
-            @ApiParam(required = true, value = "id") @RequestParam(required = true) Integer id,
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
             HttpServletRequest request
     ) {
         comListLogic.delete(id, request);
@@ -66,7 +66,7 @@ public class ComListController {
     @GetMapping("/download")
     @ApiOperation(value = "下载万能通用列表附件")
     public void down(
-            @ApiParam(required = true, value = "id") @RequestParam(required = true) Integer id,
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
             @ApiParam(required = false, value = "下载密码") @RequestParam(required = false) String downloadPwd,
             HttpServletRequest request, HttpServletResponse response
     ) throws Exception {
@@ -97,7 +97,7 @@ public class ComListController {
     @GetMapping("/download/log")
     @ApiOperation(value = "下载记录")
     public ResponseHelper<IPage<ComDetailLog>> downlog(
-            @ApiParam(required = true, value = "id") @RequestParam(required = true) Integer id,
+            @ApiParam(required = true, value = "id") @RequestParam(required = true) String id,
             @ApiParam(required = true, value = "页号") @RequestParam(required = true) Integer pageNo,
             @ApiParam(required = true, value = "页大小") @RequestParam(required = true) Integer pageSize,
             HttpServletRequest request

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/controller/comlist/WorkerComListController.java

@@ -85,7 +85,7 @@ public class WorkerComListController {
     @GetMapping("/download")
     @ApiOperation(value = "下载万能通用列表附件")
     public void down(
-            @ApiParam(required = true, value = "comListId") @RequestParam(required = true) Integer comListId,
+            @ApiParam(required = true, value = "comListId") @RequestParam(required = true) String comListId,
             @ApiParam(required = false, value = "websitNumber") @RequestParam(required = false) String websitNumber,
             HttpServletRequest request, HttpServletResponse response
     ) throws Exception {

+ 388 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/comlist/ComListAllLogic.java

@@ -1,10 +1,398 @@
 package com.gree.mall.manager.logic.comlist;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileWriter;
+import cn.hutool.core.util.ZipUtil;
+import com.alibaba.nacos.client.config.utils.IOUtils;
+import com.alibaba.nacos.common.util.UuidUtils;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.enums.admin.AdminWebsitTypeEnum;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.*;
+import com.gree.mall.manager.plus.service.AdminWebsitService;
+import com.gree.mall.manager.plus.service.ComDetailLogService;
+import com.gree.mall.manager.plus.service.ComDetailService;
+import com.gree.mall.manager.plus.service.ComListService;
+import com.gree.mall.manager.utils.CommonUtils;
+import com.gree.mall.manager.utils.DateUtils;
+import com.gree.mall.manager.utils.excel.ExcelUtils;
+import com.gree.mall.manager.utils.oss.OSSUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
 
 @Slf4j
 @Service
 public class ComListAllLogic {
 
+    @Autowired
+    CommonLogic commonLogic;
+    @Autowired
+    OSSUtil ossUtil;
+
+    @Autowired
+    ComDetailService comDetailService;
+    @Autowired
+    ComListService comListService;
+    @Autowired
+    ComDetailLogService comDetailLogService;
+    @Autowired
+    CommonMapper commonMapper;
+    @Autowired
+    AdminWebsitService adminWebsitService;
+
+
+    public IPage<ComList> list(String title, String remark, Boolean isNotice, Integer pageNo, Integer pageSize, HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+
+        List<ComDetail> comDetails = comDetailService.lambdaQuery()
+                .select(ComDetail::getComListId)
+                .in(CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), ComDetail::getWebsitId, adminUser.getAdminWebsitIds())
+                .list();
+        List<String> comListIds = comDetails.stream().map(ComDetail::getComListId).collect(Collectors.toList());
+        if (comListIds.size() == 0) {
+            return new Page<>(pageNo, pageSize);
+        }
+
+        IPage<ComList> page = comListService.lambdaQuery()
+                //.eq(StringUtils.isNotEmpty(admin.getBelongCompany()),ComList::getBelongCompany,admin.getBelongCompany())
+                .in(ComList::getId, comListIds)
+                .eq(isNotice != null, ComList::getIsNotice, isNotice)
+                .like(StringUtils.isNotEmpty(title), ComList::getTitle, title)
+                .like(StringUtils.isNotEmpty(remark), ComList::getRemark, remark)
+                .orderByDesc(ComList::getCreateTime)
+                .page(new Page<>(pageNo, pageSize));
+        //不返回密码
+        page.getRecords().forEach(v -> v.setDownloadPwd(""));
+        return page;
+    }
+
+    public void delete(String id, HttpServletRequest request) {
+
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        if (adminUser.getType() == 0) {
+            throw new RemoteServiceException("暂无权限");
+        }
+        comListService.removeById(id);
+        comDetailService.lambdaUpdate().eq(ComDetail::getComListId, id).remove();
+    }
+
+    public void yonge(String title, String remark, String file, Boolean isNotice, String downloadPwd, HttpServletRequest request) throws Exception {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+
+        Map<String, String> map = new HashMap<>();
+        ComList comList = new ComList();
+        comList.setCompanyWechatId(adminUser.getCompanyWechatId());
+        comList.setCompanyName(adminUser.getCompanyName());
+        comList.setTitle(title);
+        comList.setRemark(remark);
+        comList.setFileName(title);
+        comList.setIsNotice(isNotice);
+        comList.setDownloadPwd(downloadPwd);
+        comList.setIsPwd(StringUtils.isNotBlank(downloadPwd));
+        comList.setOperatorUserName(adminUser.getUserName());
+        comList.setOperatorNickName(adminUser.getNickName());
+        comList.setCreateTime(new Date());
+        comList.insert();
+
+        //新增拆分的附件明细表
+        ComDetail bean = new ComDetail();
+        bean.setCompanyWechatId(adminUser.getCompanyWechatId());
+        bean.setCompanyName(adminUser.getCompanyName());
+        bean.setTitle(title);
+        bean.setComListId(comList.getId());
+        bean.setFileName(title);
+        bean.setWebsitId(adminUser.getAdminWebsitIds().get(0));
+        bean.setFileUrl(file);
+        bean.setIsDownload(false);
+        bean.setCreateTime(new Date());
+        bean.insert();
+
+        map.put(comList.getCompanyName(), comList.getId());
+
+        //上传主文件到oss,并记录
+
+
+       // String url = ossUtil.getUrl(file);
+
+        List<Map<String, Object>>  fileUrls = this.urlToMultipartFile(file,"test.zip");
+
+        List<ComDetail> comDetails = new ArrayList<>();
+        for (Map<String, Object> fileUrl : fileUrls) {
+            String websitNumber = (String) fileUrl.get("websitNumber");
+            String filePath = (String) fileUrl.get("filePath");
+            //新增拆分的附件明细表
+            //for(Belongcompany belongcompany : list) {
+            ComDetail comDetail = new ComDetail();
+            comDetail.setCompanyWechatId(adminUser.getCompanyWechatId());
+            comDetail.setCompanyName(adminUser.getCompanyName());
+            comDetail.setTitle(title);
+            comDetail.setComListId(map.get(comDetail.getCompanyName()));
+            comDetail.setFileName(title);
+            comDetail.setWebsitId(websitNumber);
+            comDetail.setFileUrl(filePath);
+            comDetail.setIsDownload(false);
+            comDetail.setCreateTime(new Date());
+            //comDetail.insert();
+            comDetails.add(comDetail);
+            //}
+        }
+        comDetailService.saveBatch(comDetails);
+    }
+
+
+
+/*
+
+
+    private List<Map<String, Object>> create(MultipartFile zip) {
+        try {
+
+            // 获取上传的zip文件流
+            InputStream inputStream = zip.getInputStream();
+            // 创建ZipArchiveInputStream对象
+            ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(inputStream);
+            // 创建解压后的文件目录
+            File destDir = new File("/Users/dest/");
+            if (!destDir.exists()) {
+                destDir.mkdir();
+            }
+            // 循环遍历压缩文件中的所有文件
+            ArchiveEntry archiveEntry;
+            while ((archiveEntry = zipInputStream.getNextEntry()) != null) {
+                String entryName = archiveEntry.getName();
+                String[] entryNameParts = entryName.split("/");
+                String fileName = entryNameParts[entryNameParts.length - 1];
+                File entryFile = new File(destDir + "/" + fileName);
+                // 如果是文件夹,就创建文件夹
+                if (entryName.endsWith("/")) {
+                    entryFile.mkdir();
+                } else {
+                    // 创建文件输出流
+                    OutputStream outputStream = new FileOutputStream(entryFile);
+                    // 将压缩文件解压到指定文件
+                    byte[] buffer = new byte[1024];
+                    int len;
+                    while ((len = zipInputStream.read(buffer)) > 0) {
+                        outputStream.write(buffer, 0, len);
+                    }
+                    // 关闭文件输出流
+                    outputStream.close();
+                }
+            }
+            // 关闭ZipInputStream
+            zipInputStream.close();
+
+
+            Map<String, List<List<Object>>> map = new HashMap<>();
+            log.info("【中心下发文件1】" + DateUtils.formatDate(new Date()));
+            for (int i = 1; i < datas.size(); i++) {
+                List<Object> row = (List<Object>) datas.get(i);
+                CommonUtils.initList2(row, row.size() + 1);
+                //网点编号
+                String websitNumber = (String) row.get(1);
+
+                List<List<Object>> objects = map.get(websitNumber);
+                if (objects == null) {
+                    objects = new ArrayList<>();
+                }
+                //row.remove(0);
+                objects.add(row);
+
+                if (!map.containsKey(websitNumber)) {
+                    map.put(websitNumber, objects);
+                }
+            }
+            log.info("【中心下发文件2】" + DateUtils.formatDate(new Date()));
+            List<Map<String, Object>> fileUrls = new ArrayList<>();
+            for (String websitNumber : map.keySet()) {
+                //String filePath = "B:/"+email+"-"+file.getName()+".xlsx";
+                long currentTime = System.currentTimeMillis();
+                String filePath = OSSUtil.OSS_TYPE_PIC + websitNumber + currentTime + ".csv";
+                //executorService.submit( ()->{
+//                    try {
+//                ExcelData excelData = new ExcelData();
+//                excelData.setTitles(tableHeaders);
+//                excelData.setRows(map.get(websitNumber));
+
+                this.write(filePath, tableHeaders, map.get(websitNumber));
+//                    } catch (IOException e) {
+//                        log.error("上传文件失败",e);
+//                    }
+                //});
+                Map<String, Object> mp = new HashMap<>();
+                mp.put("websitNumber", websitNumber);
+                mp.put("filePath", filePath);
+                fileUrls.add(mp);
+            }
+            log.info("【中心下发文件3】" + DateUtils.formatDate(new Date()));
+            return fileUrls;
+        } catch (Exception e) {
+            log.error("【创建excel失败】", e);
+        }
+        return null;
+    }
+*/
+
+    public List<Map<String, Object>>  urlToMultipartFile(String fulUrl, String name) throws Exception {
+
+        InputStream inputStream = commonLogic.getFileInputStreamByUrl(fulUrl);
+
+
+        ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(inputStream);
+        ZipEntry entry;
+
+
+        List<Map<String, Object>> fileUrls = new ArrayList<>();
+
+        while ((entry = zipInputStream.getNextZipEntry())!= null){
+            System.out.println("name"+entry.getName());
+
+            File fileZip = FileUtil.touch("testZip/"+entry.getName());
+
+            FileOutputStream fileOutputStreamV = new FileOutputStream(fileZip.getPath());
+
+            byte[] bufferv = new byte[1024];
+            int byteRead;
+            while((byteRead = zipInputStream.read(bufferv)) != -1){
+                fileOutputStreamV.write(bufferv,0,byteRead);
+            }
+
+            ossUtil.uploadFile(fileZip.getName(),fileZip);
+
+            String[] s = fileZip.getName().split("_");
+
+
+            List<AdminWebsit> adminWebsits = adminWebsitService.lambdaQuery().in(AdminWebsit::getName, s[2]).list();
+
+            if (CollectionUtils.isEmpty(adminWebsits)){
+                throw new RemoteServiceException(s[2]+"找不到对应网点");
+            }
+
+            AdminWebsit adminWebsit = adminWebsits.get(0);
+
+            String ossUrl = ossUtil.getAccessUrl() + fileZip.getName();
+
+            Map<String, Object> mp = new HashMap<>();
+            mp.put("websitNumber", adminWebsit.getWebsitNumber());
+            mp.put("filePath", ossUrl);
+            fileUrls.add(mp);
+
+
+            fileZip.delete();
+            fileOutputStreamV.close();
+
+        }
+
+        inputStream.close();
+        zipInputStream.close();
+
+
+        return fileUrls;
+    }
+
+    public void download(String id, String downloadPwd, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        //最多下载10个
+        IPage<ComList> comListIPage = commonMapper.queryComList(new Page(1, 10), adminUser.getAdminWebsitIds(), adminUser.getUserName());
+        if (CollectionUtils.isEmpty(comListIPage.getRecords())) {
+            return;
+        }
+        List<String> comListIds = comListIPage.getRecords().stream().map(ComList::getId).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(comListIds))
+            return;
+        List<ComDetail> comDetails = comDetailService.lambdaQuery()
+                .in(ComDetail::getComListId, comListIds)
+                .in(ComDetail::getWebsitId, adminUser.getAdminWebsitIds()).list();
+        if (CollectionUtils.isEmpty(comDetails)) {
+            return;
+        }
+        List<String> comDetailIds = comDetails.stream().map(ComDetail::getId).collect(Collectors.toList());
+        comDetailService.lambdaUpdate().set(ComDetail::getIsDownload, true).in(ComDetail::getId, comDetailIds).update();
+        this.download(comDetails, adminUser, response);
+    }
+
+
+    private void download(List<ComDetail> comDetails, AdminUserCom admin, HttpServletResponse response) throws IOException {
+        String title = comDetails.get(0).getTitle();
+
+        final List<AdminWebsit> websitList = adminWebsitService.lambdaQuery()
+                .eq(AdminWebsit::getCompanyWechatId, admin.getCompanyWechatId())
+                .eq(AdminWebsit::getType, AdminWebsitTypeEnum.C.getKey())
+                .in(AdminWebsit::getWebsitId, admin.getAdminWebsitIds())
+                .list();
+
+        final Map<String, String> websitMap = websitList.stream().collect(Collectors.toMap(AdminWebsit::getWebsitId, AdminWebsit::getName));
+
+        for (ComDetail comDetail : comDetails) {
+            ComDetailLog comDetailLog = new ComDetailLog();
+            comDetailLog.setCompanyWechatId(admin.getCompanyWechatId());
+            comDetailLog.setCompanyName(admin.getCompanyName());
+            comDetailLog.setCreateTime(new Date());
+            comDetailLog.setComListId(comDetail.getComListId());
+            comDetailLog.setTitle(comDetail.getTitle());
+            comDetailLog.setUserName(admin.getUserName());
+            comDetailLog.setWebsitId(comDetail.getWebsitId());
+            comDetailLog.setWebsitName(websitMap.get(comDetail.getWebsitId()));
+            comDetailLog.insert();
+        }
+        List<Map<String, Object>> files = new ArrayList<>();
+        //String fileUrl = comDetail.getFileUrl();
+        for (ComDetail comDetail : comDetails) {
+            if (StringUtils.isEmpty(comDetail.getWebsitId())) {
+                continue;
+            }
+            String fileUrl = ossUtil.getUrlWw(comDetail.getFileUrl());
+            Map<String, Object> map = new HashMap<>();
+            map.put("fileUrl", fileUrl);
+            map.put("fileName", comDetail.getWebsitId() + "-(" + comDetail.getTitle() + ").xlsx");
+            files.add(map);
+        }
+        if (files.size() > 1) {
+            CommonUtils.writeZip(response, files);
+        } else {
+            CommonUtils.downloadFile(files.get(0).get("fileUrl").toString(), websitMap.get(admin.getAdminWebsitIds().get(0)) + "-" + title + ".xlsx", response);
+        }
+        //CommonUtils.downloadFile(imgFile,admin.getWebsitNumber()+"-"+comDetail.getTitle()+".csv",response);
+        //return imgFile;
+    }
+
+
+    public IPage<ComDetailLog> logList(String id, Integer pageNo, Integer pageSize, HttpServletRequest request) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+
+        IPage<ComDetailLog> page = comDetailLogService.lambdaQuery()
+                .in(CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), ComDetailLog::getWebsitId, adminUser.getAdminWebsitIds())
+                .eq(Objects.nonNull(adminUser.getAdminCompanyWechat()), ComDetailLog::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .eq(ComDetailLog::getComListId, id)
+                .orderByDesc(ComDetailLog::getCreateTime)
+                .page(new Page<>(pageNo, pageSize));
+        return page;
+    }
 }

+ 5 - 4
mall-server-api/src/main/java/com/gree/mall/manager/logic/comlist/ComListLogic.java

@@ -88,6 +88,7 @@ public class ComListLogic {
                 .eq(isNotice != null, ComList::getIsNotice, isNotice)
                 .like(StringUtils.isNotEmpty(title), ComList::getTitle, title)
                 .like(StringUtils.isNotEmpty(remark), ComList::getRemark, remark)
+                .like(StringUtils.isNotEmpty(remark), ComList::getRemark, remark)
                 .orderByDesc(ComList::getCreateTime)
                 .page(new Page<>(pageNo, pageSize));
         //不返回密码
@@ -96,7 +97,7 @@ public class ComListLogic {
     }
 
 
-    public void delete(Integer id, HttpServletRequest request) {
+    public void delete(String id, HttpServletRequest request) {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
         if (adminUser.getType() == 0) {
             throw new RemoteServiceException("暂无权限");
@@ -173,7 +174,7 @@ public class ComListLogic {
         comDetailService.saveBatch(comDetails);
     }
 
-    public void download(Integer id, String downloadPwd, HttpServletRequest request, HttpServletResponse response) throws IOException {
+    public void download(String id, String downloadPwd, HttpServletRequest request, HttpServletResponse response) throws IOException {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
         ComList comList = comListService.getById(id);
         if (comList.getIsPwd() && !StringUtils.equals(comList.getDownloadPwd(), downloadPwd)) {
@@ -182,7 +183,7 @@ public class ComListLogic {
         log.info("【中心文件下发下载】:{}", JSONObject.toJSONString(adminUser));
         List<ComDetail> comDetails = comDetailService.lambdaQuery()
                 .eq(ComDetail::getComListId, id)
-                .eq(ComDetail::getWebsitId, adminUser.getAdminWebsitIds())
+                .in(ComDetail::getWebsitId, adminUser.getAdminWebsitIds())
                 .list();
 
         if (CollectionUtils.isEmpty(comDetails)) {
@@ -236,7 +237,7 @@ public class ComListLogic {
     }
 
 
-    public IPage<ComDetailLog> logList(Integer id, Integer pageNo, Integer pageSize, HttpServletRequest request) {
+    public IPage<ComDetailLog> logList(String id, Integer pageNo, Integer pageSize, HttpServletRequest request) {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
 
         IPage<ComDetailLog> page = comDetailLogService.lambdaQuery()

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/comlist/WorkerComListLogic.java

@@ -183,7 +183,7 @@ public class WorkerComListLogic {
     }
 
 
-    public void download(Integer id, String websitNumber, HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public void download(String id, String websitNumber, HttpServletRequest request, HttpServletResponse response) throws Exception {
         AdminUserCom adminUser = commonLogic.getAdminUser();
         if (StringUtils.isNotEmpty(websitNumber)) {
             adminUser.setAdminWebsitIds(new ArrayList<String>() {{ this.add(websitNumber); }});