Procházet zdrojové kódy

Merge branch 'master' into develop

# Conflicts:
#	mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/workorder/PgOrderWorkerEs.java
#	mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/workorder/OrderBaseLogic.java
#	mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseEsLogic.java
‘linchangsheng’ před 1 měsícem
rodič
revize
4537c5b1e8

+ 86 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/workorder/PgOrderWorkerDateEs.java

@@ -0,0 +1,86 @@
+package com.gree.mall.miniapp.bean.workorder;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.DateFormat;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/6/19 10:39 星期一
+ */
+@Data
+@Document(indexName = "pg_order_worker")
+public class PgOrderWorkerDateEs {
+
+    @Id
+    @Field(value = "id",  type = FieldType.Keyword)
+    private String id;
+
+    @ApiModelProperty(value = "工单号")
+    @Field(value = "order_base_id", type = FieldType.Keyword)
+    private String orderBaseId;
+
+    @ApiModelProperty(value = "网点id")
+    @Field(value = "websit_id", type = FieldType.Keyword)
+    private String websitId;
+
+    @ApiModelProperty(value = "网点名称")
+    @Field(value = "websit_name", type = FieldType.Keyword)
+    private String websitName;
+
+    @ApiModelProperty(value = "师傅id")
+    @Field(value = "worker_id", type = FieldType.Keyword)
+    private String workerId;
+
+    @ApiModelProperty(value = "师傅名称")
+    @Field(value = "worker_name", type = FieldType.Keyword)
+    private String workerName;
+
+    @ApiModelProperty(value = "师傅手机号")
+    @Field(value = "worker_mobile", type = FieldType.Keyword)
+    private String workerMobile;
+
+    @ApiModelProperty(value = "师傅编号")
+    @Field(value = "worker_number", type = FieldType.Keyword)
+    private String workerNumber;
+
+    @ApiModelProperty(value = "师傅身份证")
+    @Field(value = "worker_idcard", type = FieldType.Keyword)
+    private String workerIdcard;
+
+    @ApiModelProperty(value = "师傅查询条件")
+    @Field(value = "worker_query", type = FieldType.Keyword)
+    private String workerQuery;
+
+    @ApiModelProperty(value = "是否费用审批(维保工单用)")
+    @Field(value = "is_examine", type = FieldType.Boolean)
+    private Boolean isExamine;
+
+    @ApiModelProperty(value = "是否为大工或主要服务人员 1=是 0=否")
+    @Field(value = "is_master", type = FieldType.Boolean)
+    private Boolean isMaster;
+
+    @ApiModelProperty(value = "创建时间")
+    @Field(value = "create_time", type = FieldType.Date,format = DateFormat.custom, pattern ="yyyy-MM-dd HH:mm:ss")
+    private String createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    @Field(value = "update_time", type = FieldType.Date,format = DateFormat.custom, pattern ="yyyy-MM-dd HH:mm:ss")
+    private String updateTime;
+
+    @ApiModelProperty(value = "创建人")
+    @Field(value = "create_by", type = FieldType.Keyword)
+    private String createBy;
+
+    @ApiModelProperty(value = "修改人")
+    @Field(value = "update_by", type = FieldType.Keyword)
+    private String updateBy;
+
+}

+ 2 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/workorder/PgOrderWorkerEs.java

@@ -1,5 +1,6 @@
 package com.gree.mall.miniapp.bean.workorder;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.data.annotation.Id;
@@ -8,6 +9,7 @@ import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 import org.springframework.data.elasticsearch.annotations.FieldType;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**

+ 3 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/config/aop/ApiAspect.java

@@ -1,5 +1,6 @@
 package com.gree.mall.miniapp.config.aop;
 
+import cn.hutool.core.date.DateUtil;
 import com.gree.mall.miniapp.annotation.ApiNotAuth;
 import com.gree.mall.miniapp.constant.Constant;
 import com.gree.mall.miniapp.exception.RemoteServiceException;
@@ -24,6 +25,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
+import java.util.Date;
 
 @Aspect
 @Component
@@ -69,8 +71,8 @@ public class ApiAspect {
             }
         }
         String token = CommonUtils.getToken(request);
-//        log.info("用户token:{} 访问 {}", token, request.getRequestURI());
         String jwtUserId = CommonUtils.getUserId(request);
+      //  log.info("用户"+jwtUserId+"token:{} 访问 {}+", token, request.getRequestURI());
         if (StringUtils.isNotBlank(jwtUserId) && StringUtils.isNotBlank(token) && token.equals(jwtUserId)) {
             throw new RemoteServiceException(ResponseHelper.ResponseCode_TOKEN_ID_ERROR, "请求不合法, token");
         }

+ 2 - 2
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/user/UserController.java

@@ -109,11 +109,11 @@ public class UserController {
             @ApiParam(required = true, value = "授权openid登陆code") @RequestParam(required = true) String code,
             HttpServletRequest request
     ) throws RemoteServiceException, WxErrorException, InterruptedException {
-        log.info("请求数据"+serviceId,code);
+        log.info("请求数据"+code);
         UserWxBean userWxBean = userLogic.addUser(code,serviceId,request);
         userLogic.addVisit(request, userWxBean.getUserId());
 
-        log.info("输出返回数据"+userWxBean);
+        log.info("输出返回数据+"+userWxBean.getUserId()+"token"+userWxBean);
         return ResponseHelper.success(userWxBean);
     }
 

+ 243 - 21
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/workorder/OrderBaseLogic.java

@@ -28,6 +28,7 @@ import com.gree.mall.miniapp.plus.service.*;
 import com.gree.mall.miniapp.utils.DateUtils;
 import com.gree.mall.miniapp.utils.StringUtil;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.BoolQueryBuilder;
@@ -37,7 +38,9 @@ import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.Aggregations;
 import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
 import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
 import org.springframework.data.elasticsearch.core.SearchHits;
@@ -52,6 +55,7 @@ import java.util.stream.Collectors;
 
 @RequiredArgsConstructor
 @Service
+@Slf4j
 public class OrderBaseLogic {
 
     private final PgOrderBaseService pgOrderBaseService;
@@ -107,14 +111,17 @@ public class OrderBaseLogic {
         // 构建查询,最大只能查两万数据
         NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                 .withQuery(boolQuery)
-                .withPageable(PageRequest.of(1, 20000))
+                .withPageable(PageRequest.of(0, 10000))
                 .build();
 
         // 执行查询
-        List<PgOrderWorkerEs> pgOrderWorkerEs = elasticsearchRestTemplate.search(searchQuery, PgOrderWorkerEs.class).map(searchHit -> searchHit.getContent())
+        List<PgOrderWorkerDateEs> pgOrderWorkerEs = elasticsearchRestTemplate.search(searchQuery, PgOrderWorkerDateEs.class).map(searchHit -> searchHit.getContent())
                 .toList();
 
-        List<String> orderBaseIds = pgOrderWorkerEs.stream().map(PgOrderWorkerEs::getOrderBaseId).collect(Collectors.toList());
+        List<String> orderBaseIds = pgOrderWorkerEs.stream().map(PgOrderWorkerDateEs::getOrderBaseId).collect(Collectors.toList());
+
+        if (CollectionUtil.isEmpty(orderBaseIds))
+            return new CountOrderStatusBean();
 
         BoolQueryBuilder boolQueryOrder = QueryBuilders.boolQuery()
                 .mustNot(QueryBuilders.termsQuery("order_status", "YQX","FWQX","FL","FWZT","YCGB"))
@@ -123,19 +130,27 @@ public class OrderBaseLogic {
                 QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("id", orderBaseIds))
                         .should(QueryBuilders.termsQuery("order_status", OrderBaseStatusEnum.DQD.getKey()))
         );
+
+
+
+
+
         //待接单
+        // A 或 B 的条件
+        BoolQueryBuilder orConditionAB = QueryBuilders.boolQuery()
+                .must(QueryBuilders.matchQuery("is_import_excel", false))
+                .must(QueryBuilders.matchQuery("order_status",  OrderBaseStatusEnum.DJD.getKey()));
+
+        // C 或 D 的条件
+        BoolQueryBuilder orConditionCD = QueryBuilders.boolQuery()
+                .must(QueryBuilders.matchQuery("is_import_excel", true))
+                .must(QueryBuilders.matchQuery("is_meet", false));
+
         NativeSearchQuery searchQueryDJD = new NativeSearchQueryBuilder()
                 .withQuery(boolQueryOrder)
                 .withPageable(PageRequest.of(1, 1))
                 .addAggregation(this.getAggs(AggregationBuilders.filter("DJD", QueryBuilders.boolQuery()
-                        .must(
-                                QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("id", orderBaseIds))
-                                        .should(QueryBuilders.termsQuery("order_status", OrderBaseStatusEnum.DJD.getKey()))
-                        )
-                        .must(
-                                QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("id", orderBaseIds))
-                                        .should(QueryBuilders.termsQuery("order_status", OrderBaseStatusEnum.DJD.getKey()))
-                        )
+                        .should(orConditionAB).should(orConditionCD)
                         )))
                 .build();
         SearchHits response = elasticsearchRestTemplate.search(searchQueryDJD, OrderBaseEs.class);
@@ -194,7 +209,9 @@ public class OrderBaseLogic {
                 .withQuery(boolQueryOrder)
                 .withPageable(PageRequest.of(1, 1))
                 .addAggregation(this.getAggs(AggregationBuilders.filter("JRWG", QueryBuilders.boolQuery()
-                        .must(QueryBuilders.rangeQuery("over_time").from(DateUtil.beginOfDay(new Date())).to(DateUtil.endOfDay(new Date())))
+                        .must(QueryBuilders.rangeQuery("over_time")
+                                .gte(DateUtil.format(DateUtil.beginOfDay(new Date()),"yyyy-MM-dd HH:mm:ss"))
+                                .lte(DateUtil.format(DateUtil.endOfDay(new Date()),"yyyy-MM-dd HH:mm:ss")))
                 )))
                 .build();
         SearchHits responseJRWG = elasticsearchRestTemplate.search(searchQueryJRWG, OrderBaseEs.class);
@@ -206,7 +223,9 @@ public class OrderBaseLogic {
                 .withQuery(boolQueryOrder)
                 .withPageable(PageRequest.of(1, 1))
                 .addAggregation(this.getAggs(AggregationBuilders.filter("JBNWG", QueryBuilders.boolQuery()
-                        .must(QueryBuilders.rangeQuery("over_time").from(DateUtil.beginOfDay(DateUtil.offsetMonth(new Date(),-6))).to(DateUtil.endOfDay(new Date())))
+                        .must(QueryBuilders.rangeQuery("over_time")
+                                .gte(DateUtil.format(DateUtil.beginOfDay(DateUtil.offsetMonth(new Date(),-6)),"yyyy-MM-dd HH:mm:ss"))
+                                .lte(DateUtil.format(DateUtil.endOfDay(new Date()),"yyyy-MM-dd HH:mm:ss")))
                 )))
                 .build();
         SearchHits responseJBNWG = elasticsearchRestTemplate.search(searchQueryJBNWG, OrderBaseEs.class);
@@ -279,12 +298,28 @@ public class OrderBaseLogic {
         );
         mySchedule7Day.setDayList(dayList);
 
-        List<String> orderBaseIds = pgOrderWorkerService.lambdaQuery()
-                .and(item -> item.eq(PgOrderWorker::getWorkerId, currentCompanyWechat.getUserId())
-                        .or(!StringUtil.isEmpty(currentCompanyWechat.getUser().getWorkerNumber()))
-                        .eq(PgOrderWorker::getWorkerNumber,currentCompanyWechat.getUser().getWorkerNumber())
-                )
-                .list().stream().map(PgOrderWorker::getOrderBaseId).distinct().collect(Collectors.toList());
+        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
+
+        // 根据参数动态添加筛选条件
+        if (StringUtil.isEmpty(currentCompanyWechat.getUser().getWorkerNumber())) {
+            boolQuery.must(QueryBuilders.matchQuery("worker_idcard", currentCompanyWechat.getUser().getIdCard()));
+        }
+        else  {
+            boolQuery.must(QueryBuilders.matchQuery("worker_number", currentCompanyWechat.getUser().getWorkerNumber()));
+        }
+
+
+        // 构建查询,最大只能查两万数据
+        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
+                .withQuery(boolQuery)
+                .withPageable(PageRequest.of(0, 10000))
+                .build();
+
+        // 执行查询
+        List<PgOrderWorkerDateEs> pgOrderWorkerEs = elasticsearchRestTemplate.search(searchQuery, PgOrderWorkerDateEs.class).map(searchHit -> searchHit.getContent())
+                .toList();
+
+        List<String> orderBaseIds = pgOrderWorkerEs.stream().map(PgOrderWorkerDateEs::getOrderBaseId).collect(Collectors.toList());
         if(CollectionUtils.isEmpty(orderBaseIds)){
             return mySchedule7Day;
         }
@@ -356,13 +391,13 @@ public class OrderBaseLogic {
     }
 
     /**
-     * 工单列表
+     * 工单列表mysql
      * @param byDay 1=今天 2=明天 3=其他
      * @param startTime
      * @param endTime
      * @return
      */
-    public IPage<OrderBaseVO> list(String keyword,String pgIncreOrderId,Boolean isYb,Boolean isWb,OrderBaseStatusEnum orderBaseStatusEnum,
+    public IPage<OrderBaseVO> listMysql(String keyword,String pgIncreOrderId,Boolean isYb,Boolean isWb,OrderBaseStatusEnum orderBaseStatusEnum,
                                    Integer byDay,String startTime,String endTime,Integer pageNum,Integer pageSize){
         CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
         if(!StringUtils.equals(currentCompanyWechat.getUser().getType(),UserTypeEnum.WORKER.getKey())){
@@ -532,6 +567,193 @@ public class OrderBaseLogic {
     }
 
 
+
+    public IPage<OrderBaseVO> list(String keyword,String pgIncreOrderId,Boolean isYb,Boolean isWb,OrderBaseStatusEnum orderBaseStatusEnum,
+                                        Integer byDay,String startTime,String endTime,Integer pageNum,Integer pageSize){
+
+        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
+        if(!StringUtils.equals(currentCompanyWechat.getUser().getType(),UserTypeEnum.WORKER.getKey())){
+            return new Page<>(pageNum,pageSize);
+        }
+        //查询师傅拥有工单
+        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
+
+        // 根据参数动态添加筛选条件
+        if (StringUtil.isEmpty(currentCompanyWechat.getUser().getWorkerNumber())) {
+            boolQuery.must(QueryBuilders.matchQuery("worker_idcard", currentCompanyWechat.getUser().getIdCard()));
+        }
+        else  {
+            boolQuery.must(QueryBuilders.matchQuery("worker_number", currentCompanyWechat.getUser().getWorkerNumber()));
+        }
+
+        // 构建查询,最大只能查两万数据
+        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
+                .withQuery(boolQuery)
+                .withPageable(PageRequest.of(0, 10000))
+                .build();
+
+        // 执行查询
+        List<PgOrderWorkerDateEs> pgOrderWorkerEs = elasticsearchRestTemplate.search(searchQuery, PgOrderWorkerDateEs.class).map(searchHit -> searchHit.getContent())
+                .toList();
+
+        List<String> orderBaseIds = pgOrderWorkerEs.stream().map(PgOrderWorkerDateEs::getOrderBaseId).collect(Collectors.toList());
+
+
+        if(byDay != null){
+            if(byDay == 1) {
+                startTime = DateUtil.formatDateTime(DateUtil.beginOfDay(new Date()));
+                endTime = DateUtil.formatDateTime(DateUtil.endOfDay(new Date()));
+            }else if(byDay == 2){
+                startTime = DateUtil.formatDateTime(DateUtil.offsetDay(DateUtil.beginOfDay(new Date()),1));
+                endTime = DateUtil.formatDateTime(DateUtil.offsetDay(DateUtil.endOfDay(new Date()),1));
+            }else if(byDay == 3){
+                startTime = DateUtil.formatDateTime(DateUtil.beginOfDay(new Date()));
+                endTime = DateUtil.formatDateTime(DateUtil.offsetDay(DateUtil.endOfDay(new Date()),1));
+            }
+        }
+
+        // 创建 Bool 查询
+        BoolQueryBuilder boolQueryOrder = QueryBuilders.boolQuery()
+                .mustNot(QueryBuilders.termsQuery("order_status", "YQX","FWQX","FL","FWZT","YCGB"))
+                ;
+        boolQueryOrder.must(
+                QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("id", orderBaseIds))
+                        .should(QueryBuilders.termsQuery("order_status", OrderBaseStatusEnum.DQD.getKey()))
+        );
+
+        if (!StringUtil.isEmpty(startTime)) {
+            boolQueryOrder.must(QueryBuilders.rangeQuery("create_time")
+                    .gte(startTime)
+                    .lte(endTime)
+            );
+        }
+
+        String orderStatus = orderBaseStatusEnum != null ? orderBaseStatusEnum.getKey() : null;
+
+        if(StringUtils.isNotBlank(keyword)){
+            boolQueryOrder.must(
+                    QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("id","*"+keyword+"*"))
+                            .should(QueryBuilders.wildcardQuery("user_name","*"+keyword+"*"))
+                            .should(QueryBuilders.wildcardQuery("order_small_type_text","*"+keyword+"*"))
+                            .should(QueryBuilders.wildcardQuery("user_mobile","*"+keyword+"*"))
+                            .should(QueryBuilders.wildcardQuery("address","*"+keyword+"*"))
+            );
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.DJD.getKey())) {
+            // A 或 B 的条件
+            BoolQueryBuilder orConditionAB = QueryBuilders.boolQuery()
+                    .must(QueryBuilders.matchQuery("is_import_excel", false))
+                    .must(QueryBuilders.matchQuery("order_status",  OrderBaseStatusEnum.DJD.getKey()));
+
+            // C 或 D 的条件
+            BoolQueryBuilder orConditionCD = QueryBuilders.boolQuery()
+                    .must(QueryBuilders.matchQuery("is_import_excel", true))
+                    .must(QueryBuilders.matchQuery("is_meet", false));
+
+            boolQueryOrder
+                  .must( QueryBuilders.boolQuery()
+                          .should(orConditionAB).should(orConditionCD));
+
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.FWZ.getKey())) {
+            boolQueryOrder .must(QueryBuilders.termsQuery("order_status","FWZ","GCSZT","BFWG","DSM","YZP","XSBH","TJXSBH","ZBBH","FZXBH","WDBH"));
+
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.YCD.getKey())) {
+            boolQueryOrder.must(QueryBuilders.termsQuery("is_exception",true));
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.YWG.getKey())) {
+            boolQueryOrder.must(QueryBuilders.termsQuery("order_status","YWG","YJS","GCSZX","YWGO","WDWG"));
+
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.DQD.getKey())) {
+            boolQueryOrder.must(QueryBuilders.termsQuery("order_status","DQD"));
+
+        }
+
+        if(StringUtils.equals(orderStatus, OrderBaseStatusEnum.DCL.getKey())) {
+            boolQueryOrder.mustNot(QueryBuilders.termsQuery("order_status","YWG","YJS","GCSZX","YWGO","WDWG","DQD"));
+        }
+
+        if (pageSize == -1) {
+            pageSize = 10;
+        }
+
+        // 创建分页请求
+        Pageable pageable = PageRequest.of(pageNum-1, pageSize);
+
+        // 创建查询
+        Query searchQueryOrder = new NativeSearchQueryBuilder()
+                .withQuery(boolQueryOrder)
+                .withPageable(pageable)
+                .build();
+
+
+        SearchHits<OrderBaseEs> searchHits  = elasticsearchRestTemplate.search(searchQueryOrder, OrderBaseEs.class);
+
+
+        // 获取结果和总数
+        List<OrderBaseEs> content = searchHits.get().map(hit -> hit.getContent()).collect(Collectors.toList());
+        long totalHits = searchHits.getTotalHits();
+
+        List<OrderBaseVO> orderBaseVOS = BeanUtil.copyToList(content, OrderBaseVO.class);
+
+
+
+        //服务单标识
+        List<String> orderIds = orderBaseVOS
+                .stream()
+                .map(OrderBaseVO::getId)
+                .collect(Collectors.toList());
+        List<AdminWebsit> adminWebsits = new ArrayList<>();
+        Map<String, String> adminWebsitMap = new HashMap<>();
+
+        if (CollectionUtil.isNotEmpty(orderBaseVOS)) {
+            adminWebsits = adminWebsitService.lambdaQuery()
+                    .eq(AdminWebsit::getCompanyWechatId, currentCompanyWechat.getCompanyWechatId())
+                    .in(AdminWebsit::getWebsitId, orderBaseVOS.stream().map(OrderBaseVO::getWebsitId).collect(Collectors.toList()))
+                    .list();
+        }
+
+        if (CollectionUtil.isNotEmpty(adminWebsits)) {
+            adminWebsitMap = adminWebsits.stream().collect(Collectors.toMap(AdminWebsit::getWebsitId, AdminWebsit::getAttr));
+        }
+
+        Map<String, List<PgOrderFlag>> mapList = this.getOrderFlags(orderIds);
+        for (OrderBaseVO orderBaseVO : orderBaseVOS) {
+            orderBaseVO.setOrderFlags(mapList.get(orderBaseVO.getId()));
+            //明细
+            orderBaseVO.setPgOrderProducts(
+                    pgOrderProductService.lambdaQuery().eq(PgOrderProduct::getOrderBaseId,orderBaseVO.getId()).list()
+            );
+            //待抢单状态隐藏
+            if(StringUtils.equals(orderBaseVO.getOrderStatus(),OrderBaseStatusEnum.DQD.getKey())){
+                orderBaseVO.setUserMobile(orderBaseVO.getUserMobile().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
+                orderBaseVO.setAddress(orderBaseVO.getProvince()+orderBaseVO.getCity()+orderBaseVO.getArea()+orderBaseVO.getStreet()+"****");
+            }
+            final String attr = adminWebsitMap.get(orderBaseVO.getWebsitId());
+
+            orderBaseVO.setAttr(attr);
+            if (StringUtils.isNotBlank(attr)
+                    && attr.equals(WebsitAttrEnum.SELF.getKey())
+                    && "安装, 拆移机".contains(orderBaseVO.getOrderSmallTypeText())) {
+                orderBaseVO.setNeedSlave(true);
+            }
+        }
+        Page<OrderBaseVO> page = new Page<>();
+        page.setRecords(orderBaseVOS);
+        page.setCurrent(pageNum);
+        page.setTotal(totalHits);
+        page.setSize(pageSize);
+
+        return page;
+    }
+
     /**
      * 客户的工单列表
      * @param flag 1=待预约 2=服务中 3=待评价 4=已完成

+ 2 - 2
mall-miniapp-service/src/main/resources/bootstrap-prd.properties

@@ -21,9 +21,9 @@ spring.datasource.url=jdbc:mysql://rm-wz9yahzr80gze34ab35930.mysql.rds.aliyuncs.
 spring.datasource.username=gFgreeJsm_gd2024_system
 spring.datasource.password=Jsm_Gf_2024@)@$_)(*&
 spring.datasource.druid.connection-init-sqls=set names utf8mb4
-spring.datasource.druid.initial-size=5
+spring.datasource.druid.initial-size=20
 spring.datasource.druid.minIdle=5
-spring.datasource.druid.maxActive=20
+spring.datasource.druid.maxActive=50
 ### ���û�ȡ���ӵȴ���ʱ��ʱ�䣬��λ�Ǻ���
 spring.datasource.druid.maxWait=60000
 ### ���ü����òŽ���һ�μ�⣬�����Ҫ�رյĿ������ӣ���λ�Ǻ���

+ 3 - 10
mall-server-api/src/main/java/com/gree/mall/manager/controller/admin/AdminUserController.java

@@ -21,6 +21,7 @@ import com.gree.mall.manager.logic.admin.AdminCompanyWechatLogic;
 import com.gree.mall.manager.logic.admin.AdminUserLogic;
 import com.gree.mall.manager.plus.entity.AdminCompanyWechat;
 import com.gree.mall.manager.plus.entity.AdminUser;
+import com.gree.mall.manager.utils.JwtUtils;
 import com.gree.mall.manager.utils.RedisUtil;
 import com.gree.mall.manager.utils.excel.ExcelUtils;
 import io.swagger.annotations.Api;
@@ -283,16 +284,8 @@ public class AdminUserController {
     @PostMapping("/get/big/view/login")
     @ApiOperation(value = "大屏校验登录")
     public ResponseHelper getBigViewLogin() throws Exception {
-        Map<String, Object> reqMap = new HashMap<>();
-        reqMap.put("username", "zfire");
-        reqMap.put("password", "zfire2022@");
-        final String result = HttpUtil.post("https://pgxtadm.greeapps.com/java/big/data/login", reqMap);
-        final JSONObject parseObj = JSONUtil.parseObj(result);
-        final String data = parseObj.get("data", String.class);
-        if (StringUtils.isBlank(data)) {
-            throw new RemoteServiceException("数据异常");
-        }
+        final String jwt = JwtUtils.createJWT("zfire", "zfire2022@", 60 * 60 * 10000);
 
-        return ResponseHelper.success(data);
+        return ResponseHelper.success(jwt);
     }
 }

+ 24 - 5
mall-server-api/src/main/java/com/gree/mall/manager/controller/workerorder/ESOrderBaseController.java

@@ -81,26 +81,45 @@ public class ESOrderBaseController {
         ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
         //2.查询要导出的内容
         zfireParamBean.setPageNum(1);
-        zfireParamBean.setPageSize(20000);
+        zfireParamBean.setPageSize(10000);
         IPage<OrderBaseVO> orderBaseVOIPage = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
         List<OrderBaseVO> records = orderBaseVOIPage.getRecords();
-        if (records.size() == 20000){
+        if (records.size() == 10000){
             zfireParamBean.setPageNum(2);
-            zfireParamBean.setPageSize(20000);
+            zfireParamBean.setPageSize(10000);
             IPage<OrderBaseVO> orderBaseVOIPage2 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
 
             records.addAll(orderBaseVOIPage2.getRecords());
 
         }
 
-        if (records.size() == 40000){
+        if (records.size() == 20000){
             zfireParamBean.setPageNum(3);
-            zfireParamBean.setPageSize(20000);
+            zfireParamBean.setPageSize(10000);
+            IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
+
+            records.addAll(orderBaseVOIPage3.getRecords());
+
+        }
+
+        if (records.size() == 30000){
+            zfireParamBean.setPageNum(4);
+            zfireParamBean.setPageSize(10000);
             IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
 
             records.addAll(orderBaseVOIPage3.getRecords());
 
         }
+
+        if (records.size() == 40000){
+            zfireParamBean.setPageNum(5);
+            zfireParamBean.setPageSize(10000);
+            IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
+
+            records.addAll(orderBaseVOIPage3.getRecords());
+
+        }
+
         //3.导出
         FieldUtils.exportData(records, zfireParam.getExportFields(), request, response);
     }

+ 15 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/contract/WebsitContractSignLogic.java

@@ -726,10 +726,25 @@ public class WebsitContractSignLogic {
     }
 
     public WebsitContractSignRecordCount count() {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        String websitId = null;
+        if (adminUser.getType().equals(0) && adminUser.getAdminWebsitIds().size() == 1) {
+            final AdminWebsit websit = adminWebsitService.lambdaQuery()
+                    .eq(AdminWebsit::getCompanyWechatId, adminUser.getCompanyWechatId())
+                    .eq(AdminWebsit::getWebsitId, adminUser.getAdminWebsitIds().get(0))
+                    .one();
+            if (websit.getLevel() == 2) {
+                websitId = websit.getWebsitId();
+            }
+        }
         final Integer count = websitContractSignRecordService.lambdaQuery()
+                .eq(StringUtils.isNotBlank(websitId), WebsitContractSignRecord::getWebsitId, websitId)
+                .in(StringUtils.isBlank(websitId) && CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), WebsitContractSignRecord::getWebsitId, adminUser.getAdminWebsitIds())
                 .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT_SIGN.getKey())
                 .count();
         final Integer count1 = websitContractSignRecordService.lambdaQuery()
+                .eq(StringUtils.isNotBlank(websitId), WebsitContractSignRecord::getWebsitId, websitId)
+                .in(StringUtils.isBlank(websitId) && CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), WebsitContractSignRecord::getWebsitId, adminUser.getAdminWebsitIds())
                 .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT.getKey())
                 .count();
         WebsitContractSignRecordCount recordCount = new WebsitContractSignRecordCount();

+ 119 - 42
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseCountLogic.java

@@ -1,5 +1,6 @@
 package com.gree.mall.manager.logic.workorder;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import com.google.common.collect.Lists;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
@@ -54,32 +55,121 @@ public class OrderBaseCountLogic {
     public OrderBaseCountBean baseCountBean( String startTime,
                                              String endTime){
         AdminUserCom adminUser = commonLogic.getAdminUser();
-        OrderBaseCountBean orderBaseCountBean = orderBaseCMapper
-                .countOrderBaseIndex(adminUser.getCompanyWechatId(), adminUser.getAdminWebsitIds(),adminUser.getType()
-                ,startTime,endTime);
-
-/*
-        List<PgOrderBase> pgOrderBaseList = pgOrderBaseService.lambdaQuery()
-                .select(PgOrderBase::getOrderType, PgOrderBase::getOrderTypeText, PgOrderBase::getCreateTime, PgOrderBase::getId
-                        , PgOrderBase::getOrderStatus,PgOrderBase::getAppointmentTime)
-                .between(PgOrderBase::getCreateTime, DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -30)), new Date())
-                .in(CollectionUtils.isNotEmpty(adminUser.getCompanyWechatIds()),PgOrderBase::getCompanyWechatId,adminUser.getCompanyWechatId())
-                .and(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),
-                        v -> v.in(PgOrderBase::getWebsitId,adminUser.getAdminWebsitIds()).or()
-                                .in(PgOrderBase::getCreateWebsitId,adminUser.getAdminWebsitIds()))
-                .list();
-*/
-
-/*
-        List<PgOrderBase> pgOrderBaseListOver = pgOrderBaseService.lambdaQuery()
-                .select(PgOrderBase::getOrderType, PgOrderBase::getOrderTypeText, PgOrderBase::getCreateTime, PgOrderBase::getId
-                        , PgOrderBase::getOrderStatus,PgOrderBase::getAppointmentTime,PgOrderBase::getOverDate,PgOrderBase::getOverTime)
-                .between(PgOrderBase::getOverTime, DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -8)), new Date())
-                .in(CollectionUtils.isNotEmpty(adminUser.getCompanyWechatIds()),PgOrderBase::getCompanyWechatId,adminUser.getCompanyWechatId())
-                .and(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),
-                        v -> v.in(PgOrderBase::getWebsitId,adminUser.getAdminWebsitIds()).or().in(PgOrderBase::getCreateWebsitId,adminUser.getAdminWebsitIds()))
-                .list();
-*/
+        OrderBaseCountBean orderBaseCountBean = new OrderBaseCountBean();
+
+        BoolQueryBuilder queryBuilderCount = QueryBuilders.boolQuery();
+
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
+            queryBuilderCount.must(
+                    QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("create_websit_id", adminUser.getAdminWebsitIds()))
+                            .should(QueryBuilders.termsQuery("websit_id", adminUser.getAdminWebsitIds()))
+            );
+        }
+
+        if (startTime != null){
+            queryBuilderCount.must(QueryBuilders.rangeQuery("create_time")
+                    .gte(startTime)
+                    .lte(endTime)
+            );
+        }
+
+        //待派工
+        NativeSearchQuery searchQueryDPG = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("DPG", QueryBuilders.boolQuery()
+                        .must(QueryBuilders.termsQuery("order_status","DSHPG","CJ","YPD","DXSPD","DZBPG","DWDSPGP","DXSSPGP","DTJXSSPGP","DZBSPGP","DFZXPD","DFZXSPGP","DWDPG","DWDPD")
+                ))))
+                .build();
+        SearchHits responseDPG = elasticsearchRestTemplate.search(searchQueryDPG, OrderBaseEs.class);
+
+        orderBaseCountBean.setDpg(Convert.toInt(this.getWorkerOrderCountResult(responseDPG.getAggregations(),"DPG")));
+
+
+        //待接收
+        NativeSearchQuery searchQueryDJS = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("DJS", QueryBuilders.boolQuery()
+                        .must(QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("is_meet", false))
+                                .should(QueryBuilders.termsQuery("order_status", "DJD")))
+                        .mustNot(QueryBuilders.termsQuery("order_status", "YQX", "FWQX", "FL", "FWZT", "YCGB"))
+                )))
+                .build();
+        SearchHits responseDJS = elasticsearchRestTemplate.search(searchQueryDJS, OrderBaseEs.class);
+
+        orderBaseCountBean.setDjs(Convert.toInt(this.getWorkerOrderCountResult(responseDJS.getAggregations(),"DJS")));
+
+
+        //待抢单
+        NativeSearchQuery searchQueryDQD = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("DQD", QueryBuilders.boolQuery()
+                        .must(QueryBuilders.termsQuery("order_status","DQD")
+                        ))))
+                .build();
+        SearchHits responseDQD = elasticsearchRestTemplate.search(searchQueryDQD, OrderBaseEs.class);
+
+        orderBaseCountBean.setDqd(Convert.toInt(this.getWorkerOrderCountResult(responseDQD.getAggregations(),"DQD")));
+
+
+        //服务中
+        NativeSearchQuery searchQueryfwz = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("fwz", QueryBuilders.boolQuery()
+                        .must(QueryBuilders.termsQuery("order_status","FWZ","GCSZT","BFWG","DSM","YZP","WDBH","XSBH","TJXSBH","ZBBH","FZXBH")
+                        ))))
+                .build();
+        SearchHits responsefwz = elasticsearchRestTemplate.search(searchQueryfwz, OrderBaseEs.class);
+
+        orderBaseCountBean.setFwz(Convert.toInt(this.getWorkerOrderCountResult(responsefwz.getAggregations(),"fwz")));
+
+
+        //待预约
+        NativeSearchQuery searchQueryDYY = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("DYY", QueryBuilders.boolQuery()
+                        .mustNot(QueryBuilders.termsQuery("order_status","YWG","GCSZX","WDWG","YWGO","YQX","FWZT","YCGB",
+                                "FWQX","FL","YJS","LRCD","DSHPG","CJ","YPD","DXSPD","DZBPG","DWDSPGP","DXSSPGP","DTJXSSPGP","DZBSPGP")
+                        )
+                        .mustNot(QueryBuilders.existsQuery("appointment_time"))
+                )))
+                .build();
+        SearchHits responseDYY = elasticsearchRestTemplate.search(searchQueryDYY, OrderBaseEs.class);
+
+        orderBaseCountBean.setDyy(Convert.toInt(this.getWorkerOrderCountResult(responseDYY.getAggregations(),"DYY")));
+
+        //异常单处理
+        NativeSearchQuery searchQueryYCDCL = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("YCDCL", QueryBuilders.boolQuery()
+                        .mustNot(QueryBuilders.termsQuery("order_status","YWG","YWGO","YJS"))
+                        .must(QueryBuilders.termsQuery("is_exception",true))
+
+                )))
+                .build();
+        SearchHits responseYCDCL = elasticsearchRestTemplate.search(searchQueryYCDCL, OrderBaseEs.class);
+
+        orderBaseCountBean.setYcdcl(Convert.toInt(this.getWorkerOrderCountResult(responseYCDCL.getAggregations(),"YCDCL")));
+
+
+        //差评
+        NativeSearchQuery searchQueryCP = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilderCount)
+                .withPageable(PageRequest.of(1, 1))
+                .addAggregation(this.getAggs(AggregationBuilders.filter("CP", QueryBuilders.boolQuery()
+                        .must(QueryBuilders.termsQuery("appraise_status","C"))
+
+                )))
+                .build();
+        SearchHits responseCP = elasticsearchRestTemplate.search(searchQueryCP, OrderBaseEs.class);
+
+        orderBaseCountBean.setCp(Convert.toInt(this.getWorkerOrderCountResult(responseCP.getAggregations(),"CP")));
+
 
         Map<String,List<Long>> qtddqs = new HashMap<>();
 
@@ -107,10 +197,7 @@ public class OrderBaseCountLogic {
 
         for (int i = 6; i >= 0; i--) {
             Integer day = i*-1;
-       /*     Long xzgd = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
-                    item.getCreateTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
-            ).count();
-*/
+
             BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
 
             if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
@@ -120,10 +207,7 @@ public class OrderBaseCountLogic {
                 );
             }
 
-      /*      queryBuilder.must(QueryBuilders.rangeQuery("create_time")
-                    .gte(startTime)
-                    .lte(endTime)
-            );*/
+
             //新增工单
             NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                     .withQuery(queryBuilder)
@@ -138,9 +222,7 @@ public class OrderBaseCountLogic {
 
             xzgdList.add(this.getWorkerOrderCountResult(response.getAggregations(),"xzgd"));
 
-    /*        Long wgd = pgOrderBaseListOver.stream().filter(item -> item.getOverTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
-                            item.getOverTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
-                            && orderStatus.contains(item.getOrderStatus())      ).count();*/
+
 
 
             //完工单
@@ -159,11 +241,6 @@ public class OrderBaseCountLogic {
 
 
 
-/*            Long jxz = pgOrderBaseList.stream().filter(item -> item.getCreateTime().before(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), (day)))) &&
-                    item.getCreateTime().after(DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), (day))))
-                    && !orderStatus.contains(item.getOrderStatus())
-                    && !orderStatusQx.contains(item.getOrderStatus())
-            ).count();*/
 
 
             //待商户派工

+ 1 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseEsLogic.java

@@ -285,14 +285,13 @@ public class OrderBaseEsLogic {
 
     public void test() {
 
-   /*     boolean a = elasticsearchRestTemplate.indexOps(OrderBaseEsDate.class).delete();
+        boolean a = elasticsearchRestTemplate.indexOps(OrderBaseEsDate.class).delete();
         IndexOperations indexOperations1 = elasticsearchRestTemplate.indexOps(OrderBaseEsDate.class);
         if (!indexOperations1.exists()) {
             indexOperations1.create();
             Document document = indexOperations1.createMapping();
             indexOperations1.putMapping(document);
         }
-*/
 /*
         List<PgOrderBase> list = pgOrderBaseService.lambdaQuery().list();
 

+ 27 - 1
mall-server-api/src/main/java/com/gree/mall/manager/utils/JwtUtils.java

@@ -6,7 +6,6 @@ import org.bouncycastle.util.encoders.Base64;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
 import java.util.Date;
-import java.util.UUID;
 
 /**
  * jwt加密和解密的工具类
@@ -52,6 +51,33 @@ public class JwtUtils {
     }
 
     /**
+     * 大屏JWT创建秘钥
+     *
+     * @param id
+     * @param subject
+     * @param ttlMillis
+     * @return
+     */
+    public static String createJWT(String id, String subject, long ttlMillis) {
+        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+        SecretKey secretKey = generalKey();
+        JwtBuilder builder = Jwts.builder()
+                .setId(id)
+                .setSubject(subject)   // 主题
+                .setIssuer("Runwise")     // 签发者
+                .setIssuedAt(now)      // 签发时间
+                .signWith(signatureAlgorithm, secretKey); // 签名算法以及密匙
+        if (ttlMillis >= 0) {
+            long expMillis = nowMillis + ttlMillis;
+            Date expDate = new Date(expMillis);
+            builder.setExpiration(expDate); // 过期时间
+        }
+        return builder.compact();
+    }
+
+    /**
      * 验证JWT
      *
      * @param jwtStr