qin 1 tahun lalu
induk
melakukan
749eec3aab

+ 84 - 0
src/main/java/com/poteviohealth/cgp/statistics/controller/OrderController.java

@@ -0,0 +1,84 @@
+package com.poteviohealth.cgp.statistics.controller;
+
+
+import com.google.common.collect.Maps;
+import com.poteviohealth.cgp.common.controller.BaseWebController;
+import com.poteviohealth.cgp.common.exception.BusinessException;
+import com.poteviohealth.cgp.common.facade.cache.CacheService;
+import com.poteviohealth.cgp.common.facade.constrain.OrgConstrainService;
+import com.poteviohealth.cgp.common.facade.lock.DistributedLock;
+import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.filter.repeatSubmit.RepeatSubmit;
+import com.poteviohealth.cgp.common.utils.ExcelUtils;
+import com.poteviohealth.cgp.statistics.model.indto.OrderServiceWebInDTO;
+import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
+import com.poteviohealth.cgp.statistics.service.IOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 服务工单  前端控制器
+ * @author Qin
+ */
+@Controller
+@RequestMapping("/statistics/web/order")
+@Api(tags={"WEB端-工单相关接口"})
+@Log4j2
+public class OrderController extends BaseWebController {
+
+    @Resource
+    private OrgConstrainService orgConstrainService;
+    @Resource
+    private CacheService cacheService;
+    @Resource
+    private IOrderService orderService;
+
+    @PostMapping(value = "/orderServiceExport")
+    @ApiOperation(httpMethod = "POST", value = "工单Excel导出")
+    @RepeatSubmit
+    @MethodTime
+    public void orderServiceExport(HttpServletResponse resp, @RequestBody OrderServiceWebInDTO orderServiceWebInDTO){
+        String key ="orderServiceExport";
+           String error =  this.checkExcelExport(key);
+        if ("".equals(error)) {
+            orgConstrainService.fillOrgParams(orderServiceWebInDTO);
+
+            List<OrderExcelDTO> list = orderService.orderExcel(orderServiceWebInDTO);
+            ExcelUtils.easyDownload("classpath:excel/order_service.xlsx", Maps.newHashMap(), list,  "", resp);
+            if(cacheService.exists(key)){
+                if(cacheService.get(key).equals(TokenContext.cureWebUser().getUserId().toString())){
+                    cacheService.del(key);
+                }
+            }
+        }else{
+            throw new BusinessException(error);
+        }
+
+    }
+
+    @DistributedLock(fairLock =true)
+    private String checkExcelExport(String key){
+        String returnVal = "";
+        String user = TokenContext.cureWebUser().getUserId().toString();
+        if (!cacheService.exists(key)) {
+            cacheService.setex(key,300,user);
+        } else {
+            String val = cacheService.get(key);
+            if(val.equals(user)){
+                returnVal = "正在导出数据,请耐心等待...";
+            }else{
+                returnVal = "其他用户正在导出数据,请稍后再试";
+            }
+        }
+        return returnVal;
+    }
+}

+ 14 - 1
src/main/java/com/poteviohealth/cgp/statistics/mapper/OrderMapper.java

@@ -20,7 +20,7 @@ import java.util.List;
  * @author Qin
  */
 @Mapper
-public interface OrderMapper extends BaseMapper<Order> {
+public interface OrderMapper extends BaseMapper<Order>{
 
     /**
      * 获取积分客户信息
@@ -167,5 +167,18 @@ public interface OrderMapper extends BaseMapper<Order> {
     List<Integer> getIntegralCardDetailOperatorIdList(@Param("dbName")String dbName);
 
 
+    /**
+     * excel
+     * @param wrapper
+     * @return
+     */
+    @SqlParser(filter=true)
+    List<OrderExcelDTO> orderExcel(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("dbName")String dbName,@Param("operatorId")Integer operatorId,@Param("start")Integer start,@Param("end")Integer end);
+
+    @SqlParser(filter = true)
+    int orderPageListSize(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("dbName")String dbName,@Param("operatorId")Integer operatorId);
+
+    @SqlParser(filter = true)
+    int orderPageListAllSize(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("dbName")String dbName,@Param("operatorId")Integer operatorId);
 
 }

+ 131 - 0
src/main/java/com/poteviohealth/cgp/statistics/model/indto/OrderServiceWebInDTO.java

@@ -0,0 +1,131 @@
+package com.poteviohealth.cgp.statistics.model.indto;
+
+import com.poteviohealth.cgp.common.model.OrgPageQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 工单列表查询入参
+ * @Author Qin
+ * @Date 2019/7/26 18:46
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="工单列表查询入参")
+public class OrderServiceWebInDTO extends OrgPageQuery {
+
+    @ApiModelProperty(value="搜索订单code",example = "10")
+    private String searchValueOrderCode;
+
+    @ApiModelProperty(value="用户名",example = "张三")
+    private String searchValueCustomerName;
+
+    @ApiModelProperty(value="身份证号")
+    private String searchValueIdNumber;
+
+    @ApiModelProperty(value="收货人",example = "张三")
+    private String searchValueName;
+
+    @ApiModelProperty(value="联系电话",example = "18888888883")
+    private String searchValuePhone;
+
+    @ApiModelProperty(value="支付状态",example = "支付状态:1.待支付;3.已支付")
+    private Integer payStatus;
+
+    @ApiModelProperty(value="支付方式",example = "支付类型:1.微信支付;2.农商行;")
+    private Integer payStyle;
+
+    @ApiModelProperty(value="订单状态",example = "工单状态:1.待付款;6.已完成;7.已取消;11.待派工;12.待服务;13.服务中;14.作废;15.待审核;16.待回访")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value="服务人员",example = "张三")
+    private String searchValueEmployeeName;
+
+    @ApiModelProperty(value="服务人员Id")
+    private Integer employeeId;
+
+    @ApiModelProperty(value = "作废时间")
+    private Date invalidTime;
+
+    @ApiModelProperty(value = "页面类型", example = "页目类型 11.派工单;12.待服务;13.服务中;14.作废;15.审核;16:返单;17:未回访;18:服务计划;19.坐席历史工单")
+    private Integer pageType;
+/*
+    @ApiModelProperty(value="支付账户",example = "支付账户:1.微信;2.农商行;3.pos机;4.积分;5.账户;6.失能补贴支付;7.养老券支付;")
+    private List<Integer> payAccount;*/
+
+    @ApiModelProperty(value = "起始时间")
+    private Date startDate;
+
+    @ApiModelProperty(value = "结束时间")
+    private Date endDate;
+
+    @ApiModelProperty(value = "服务计划Id")
+    private Long planId;
+
+    @ApiModelProperty(value = "起始时间")
+    private Date homeStartDate;
+
+    @ApiModelProperty(value = "结束时间")
+    private Date homeEndDate;
+
+    @ApiModelProperty(value = "完成起始时间")
+    private Date finishStartDate;
+
+    @ApiModelProperty(value = "完成结束时间")
+    private Date finishEndDate;
+
+    @ApiModelProperty(value="支付方式",example = "支付类型:1.补贴支付;2.自费支付;3.混合支付")
+    private Integer payWay;
+
+    @ApiModelProperty(value = "1:审核2:正常")
+    private Integer isReview;
+
+    @ApiModelProperty(value = "0.未回访;1.已回访")
+    private Integer isVisit;
+
+    @ApiModelProperty(value = "返单:1是2否")
+    private Integer isReturn;
+
+    @ApiModelProperty(value = "站点id")
+    private Integer stationId;
+
+    @ApiModelProperty(value = "站点来源:0.驿站;1.一级供应商;2.二级供应商")
+    private Integer source;
+
+    @ApiModelProperty(value = "运营商id")
+    private Integer supplierId;
+
+    @ApiModelProperty(value = "回访预约:0.是;1.否")
+    private Integer visitReserve;
+
+    @ApiModelProperty(value = "服务方id")
+    private List<Integer> serviceStationIds;
+
+    @ApiModelProperty(value = "服务项目id")
+    private Long productIds;
+
+    @ApiModelProperty("审核原因")
+    private String reviewReason;
+
+    @ApiModelProperty(value = "查询时间")
+    private String searchDateStr;
+
+    @ApiModelProperty(value = "查询起始时间")
+    private Date searchStartDate;
+
+    @ApiModelProperty(value = "查询结束时间")
+    private Date searchEndDate;
+
+    @ApiModelProperty(value="精确查找联系电话")
+    private String phone;
+
+}

+ 159 - 0
src/main/java/com/poteviohealth/cgp/statistics/model/outdto/OrderExcelDTO.java

@@ -0,0 +1,159 @@
+package com.poteviohealth.cgp.statistics.model.outdto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * excel导出DTO
+ * @author Qin
+ */
+@Data
+@ApiModel(value="excel导出DTO")
+public class OrderExcelDTO {
+    @ApiModelProperty(value = "区域运营商")
+    private String supplierName;
+
+    @ApiModelProperty(value = "工单Id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单号")
+    private String sn;
+
+    @ApiModelProperty(value = "客户姓名")
+    private String customerName;
+
+    @ApiModelProperty(value = "身份证号")
+    private String idNumber;
+
+    @ApiModelProperty(value = "收货姓名")
+    private String name;
+
+    @ApiModelProperty(value = "收货电话")
+    private String phone;
+
+    @ApiModelProperty(value = "收货地址")
+    private String address;
+
+    @ApiModelProperty(value = "商品相关信息")
+    private String productString;
+
+    @ApiModelProperty(value = "服务名称")
+    private String serviceName;
+
+    @ApiModelProperty(value = "服务规格名称")
+    private String serviceSkuName;
+
+    @ApiModelProperty(value = "购买数量")
+    private Integer serviceNum;
+
+    @ApiModelProperty(value = "订单总价格(分)")
+    private String sumOrderPrice;
+
+    @ApiModelProperty(value = "优惠券相关信息")
+    private String couponString;
+
+    @ApiModelProperty(value = "优惠总金额(分)")
+    private String sumCouponPrice;
+
+    @ApiModelProperty(value = "实付总价格(分)")
+    private String sumPrice;
+
+    @ApiModelProperty(value = "支付类型:1.微信支付;2.农商行;")
+    private String payStyle;
+
+    @ApiModelProperty(value = "预约时间")
+    private Date reservationTime;
+
+    @ApiModelProperty(value = "支付状态:1.待支付;2.支付中,3.已支付,4:支付失败,5:退款中,6:退款成功,7:退款失败")
+    private String payStatus;
+
+    @ApiModelProperty(value = "支付流水号")
+    private String transactionId;
+
+    @ApiModelProperty(value = "订单类型:1.零售;2.团购")
+    private String orderStyle;
+
+    @ApiModelProperty(value = "订单状态:1.待付款;2.待发货;3.备货中;4.待收货;5.待取货;6.已完成;7.已取消;8.售后中;9.待成团;10.退款中;11.待派工;12.待服务;13.服务中;14.作废;")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "下单时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "工单上门时间")
+    private Date homeTime;
+
+    @ApiModelProperty(value = "发货时间")
+    private Date sendTime;
+
+    @ApiModelProperty(value = "物流单号")
+    private String trackingCode;
+
+    @ApiModelProperty(value = "物流公司")
+    private String trackingCompany;
+
+    @ApiModelProperty(value = "客户取货时间")
+    private Date pickupTime;
+
+    @ApiModelProperty(value = "服务人员名称")
+    private String employeeName;
+
+    @ApiModelProperty(value = "工单开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "工单结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "结算金额")
+    private String settlementPriceSum;
+
+    @ApiModelProperty(value = "支付账户")
+    private String payAccount;
+
+    @ApiModelProperty(value="驿站/团长姓名",example = "张三")
+    private String stationOrGroupName;
+
+    @ApiModelProperty(value = "驿站名称")
+    private String serviceStationName;
+
+    @ApiModelProperty(value = "团长名称")
+    private String groupLeaderName;
+
+    @ApiModelProperty("回访预约日期")
+    private Date visitReserveDate;
+
+    @ApiModelProperty(value = "归属驿站名称")
+    private String stationName;
+
+    @ApiModelProperty(value = "归属:0.无;1.一级供应商;2.二级供应商;")
+    private Integer belong;
+
+    @ApiModelProperty(value = "一级供应商名称")
+    private String supplierOneName;
+
+    @ApiModelProperty(value = "合同编号")
+    private String contractNo;
+    @ApiModelProperty("采购总价(分)")
+    private String consignmentPriceSum;
+    @ApiModelProperty("卡名称字符串")
+    private String cardNameStr;
+    @ApiModelProperty("审核原因")
+    private String reviewReason;
+
+    @ApiModelProperty(value = "支付金额(分)")
+    private String payPrice;
+
+    @ApiModelProperty(value = "卡支付金额(分)")
+    private String cardPrice;
+
+    @ApiModelProperty(value = "补贴卡支付金额(分)")
+    private String subsidyPrice;
+
+    @ApiModelProperty(value = "资金积分支付个数")
+    private Long fundPrice;
+
+    @ApiModelProperty(value = "工时")
+    private String manHour;
+}

+ 13 - 2
src/main/java/com/poteviohealth/cgp/statistics/service/IOrderService.java

@@ -1,17 +1,28 @@
 package com.poteviohealth.cgp.statistics.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import com.poteviohealth.cgp.common.service.IBaseService;
 import com.poteviohealth.cgp.statistics.model.Order;
+import com.poteviohealth.cgp.statistics.model.indto.OrderServiceWebInDTO;
+import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
+
+import java.util.List;
 
 /**
  * 居家大屏
  * @author Qin
  */
-public interface IOrderService extends IService<Order>{
+public interface IOrderService extends IBaseService<Order> {
 
     /**
      * 居家统计
      * @param date
      */
     void statisticsOrder(String date);
+
+    /**
+     * excel
+     * @return
+     */
+    List<OrderExcelDTO> orderExcel(OrderServiceWebInDTO dto);
+
 }

+ 200 - 2
src/main/java/com/poteviohealth/cgp/statistics/service/impl/OrderServiceImpl.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.poteviohealth.cgp.common.filter.TokenContext;
@@ -21,10 +20,13 @@ import com.poteviohealth.cgp.common.integrated.order.model.OrderStatisticsData;
 import com.poteviohealth.cgp.common.integrated.partner.model.AreaDTO;
 import com.poteviohealth.cgp.common.integrated.partner.model.EmployeeStationFace;
 import com.poteviohealth.cgp.common.integrated.partner.model.EmployeeStationJsonFace;
+import com.poteviohealth.cgp.common.service.impl.BaseServiceImpl;
 import com.poteviohealth.cgp.statistics.mapper.OrderMapper;
 import com.poteviohealth.cgp.statistics.model.Order;
+import com.poteviohealth.cgp.statistics.model.indto.OrderServiceWebInDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.*;
 import com.poteviohealth.cgp.statistics.service.IOrderService;
+import com.poteviohealth.cgp.statistics.utils.OrderExcelTask;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -37,6 +39,10 @@ import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -45,7 +51,7 @@ import java.util.stream.Collectors;
  */
 @Service
 @Log4j2
-public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
+public class OrderServiceImpl extends BaseServiceImpl<OrderMapper, Order> implements IOrderService {
 
     @Value("${sync.dbName}")
     private String dbName;
@@ -169,6 +175,198 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     }
 
+    @Override
+    public List<OrderExcelDTO> orderExcel(OrderServiceWebInDTO dto) {
+        Integer operatorId = TokenContext.cureOperatorId();
+        QueryWrapper queryWrapper = orderServiceQuery(dto, "o.");
+        queryWrapper.eq("od.operator_id",operatorId);
+        int count;
+        if (null != dto.getProductIds()) {
+            queryWrapper.eq("od.product_id", dto.getProductIds());
+            count = baseMapper.orderPageListAllSize(queryWrapper,dbName,operatorId);
+        }else{
+            QueryWrapper<Order> queryWrapper2 = orderServiceQuery(dto, "o.");
+            count = baseMapper.orderPageListSize(queryWrapper2,dbName,operatorId);
+        }
+        List<OrderExcelDTO> list = Lists.newArrayList();
+        ForkJoinPool pool = new ForkJoinPool();
+        OrderExcelTask task = new OrderExcelTask(0,count, queryWrapper, operatorId, dbName,baseMapper);
+        Future<List<OrderExcelDTO>> future = pool.submit(task);
+        try {
+            do {
+                try {
+                    pool.awaitTermination(1, TimeUnit.SECONDS);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            } while (!future.isDone());
+            pool.shutdown();
+            list = future.get();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        } catch (ExecutionException e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    private QueryWrapper orderServiceQuery(OrderServiceWebInDTO orderServiceWebInDTO, String prefix) {
+        QueryWrapper<Order> orderQueryWrapper = new QueryWrapper<>();
+        orderQueryWrapper.eq(prefix+"operator_id",TokenContext.cureOperatorId());
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValueCustomerName())) {
+            orderQueryWrapper.eq(prefix + "customer_name", orderServiceWebInDTO.getSearchValueCustomerName());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValuePhone())) {
+            orderQueryWrapper.eq(prefix + "phone", orderServiceWebInDTO.getSearchValuePhone());
+        }else if (StringUtils.isNotBlank(orderServiceWebInDTO.getPhone())) {
+            orderQueryWrapper.eq(prefix + "phone", orderServiceWebInDTO.getPhone());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValueName())) {
+            orderQueryWrapper.eq(prefix + "name", orderServiceWebInDTO.getSearchValueName());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValueIdNumber())) {
+            orderQueryWrapper.eq(prefix + "id_number", orderServiceWebInDTO.getSearchValueIdNumber());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValueEmployeeName())) {
+            orderQueryWrapper.like(prefix + "employee_name", orderServiceWebInDTO.getSearchValueEmployeeName());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getSearchValueOrderCode())) {
+            orderQueryWrapper.eq(prefix + "sn", orderServiceWebInDTO.getSearchValueOrderCode());
+        }
+        if (null != orderServiceWebInDTO.getOrderStatus()) {
+            if(orderServiceWebInDTO.getOrderStatus().equals(17)){
+                //已回访
+                orderQueryWrapper.eq(prefix + "visit_status",1);
+            }else{
+                orderQueryWrapper.eq(prefix + "order_status", orderServiceWebInDTO.getOrderStatus());
+            }
+        }
+        if (null != orderServiceWebInDTO.getIsReturn()) {
+            if(orderServiceWebInDTO.getIsReturn().equals(1)){
+                orderQueryWrapper.ne(prefix + "return_num", 0);
+            }else{
+                orderQueryWrapper.eq(prefix + "return_num", 0);
+            }
+        }
+        if (null != orderServiceWebInDTO.getPayStatus()) {
+            orderQueryWrapper.eq(prefix + "pay_status", orderServiceWebInDTO.getPayStatus());
+        }
+        if (null != orderServiceWebInDTO.getPayStyle()) {
+            orderQueryWrapper.eq(prefix + "pay_style", orderServiceWebInDTO.getPayStyle());
+        }
+        if (null != orderServiceWebInDTO.getEmployeeId()) {
+            orderQueryWrapper.eq(prefix + "employee_id",orderServiceWebInDTO.getEmployeeId());
+        }
+        if (StringUtils.isNotBlank(orderServiceWebInDTO.getReviewReason())) {
+            orderQueryWrapper.likeRight(prefix + "review_reason",orderServiceWebInDTO.getReviewReason());
+        }
+        if(orderServiceWebInDTO.getStationId() != null && orderServiceWebInDTO.getSource() != null){
+            switch (orderServiceWebInDTO.getSource()){
+                case 0:
+                case 2:
+                    orderQueryWrapper.eq(prefix + "service_station_id",orderServiceWebInDTO.getStationId());
+                    break;
+                case 1:
+                    orderQueryWrapper.eq(prefix + "supplier_one_id",orderServiceWebInDTO.getStationId());
+                    break;
+            }
+        }
+        if(orderServiceWebInDTO.getServiceStationIds() != null && !orderServiceWebInDTO.getServiceStationIds().isEmpty()){
+            List<Integer> oneList = orderServiceWebInDTO.getServiceStationIds().stream().filter(s->s<0).collect(Collectors.toList());
+            List<Integer> supplierList = Lists.newArrayList();
+            for (Integer integer : oneList) {
+                supplierList.add(integer*-1);
+            }
+            List<Integer> twoList = orderServiceWebInDTO.getServiceStationIds().stream().filter(s->s>0).collect(Collectors.toList());
+
+            if(!supplierList.isEmpty() && !twoList.isEmpty()){
+                orderQueryWrapper.and(wr->wr.in(prefix + "supplier_one_id",supplierList).or().in(prefix + "service_station_id",twoList));
+            }else if(!supplierList.isEmpty()){
+                orderQueryWrapper.in(prefix + "supplier_one_id",supplierList);
+            }else if(!twoList.isEmpty()){
+                orderQueryWrapper.in(prefix + "service_station_id",twoList);
+            }
+        }
+        if (orderServiceWebInDTO.getPayWay() != null) {
+            orderQueryWrapper.eq(prefix + "pay_way", orderServiceWebInDTO.getPayWay());
+        }
+        if (null != orderServiceWebInDTO.getInvalidTime()) {
+            orderQueryWrapper.eq(prefix + "invalid_time", orderServiceWebInDTO.getInvalidTime());
+        }
+        if (orderServiceWebInDTO.getStartDate() != null) {
+            orderQueryWrapper.ge(prefix + "order_time", orderServiceWebInDTO.getStartDate());
+        }
+        if (orderServiceWebInDTO.getEndDate() != null) {
+            orderQueryWrapper.le(prefix + "order_time", orderServiceWebInDTO.getEndDate());
+        }
+        if (orderServiceWebInDTO.getHomeStartDate() != null) {
+            orderQueryWrapper.ge(prefix + "home_time", orderServiceWebInDTO.getHomeStartDate());
+        }
+        if (orderServiceWebInDTO.getHomeEndDate() != null) {
+            orderQueryWrapper.le(prefix + "home_time", orderServiceWebInDTO.getHomeEndDate());
+        }
+        if (orderServiceWebInDTO.getFinishStartDate() != null) {
+            orderQueryWrapper.ge(prefix + "finish_time", orderServiceWebInDTO.getFinishStartDate());
+        }
+        if (orderServiceWebInDTO.getFinishEndDate() != null) {
+            orderQueryWrapper.le(prefix + "finish_time", orderServiceWebInDTO.getFinishEndDate());
+        }
+        if (orderServiceWebInDTO.getSearchStartDate() != null && StringUtils.isNotEmpty(orderServiceWebInDTO.getSearchDateStr())) {
+            orderQueryWrapper.ge(prefix + orderServiceWebInDTO.getSearchDateStr(), orderServiceWebInDTO.getSearchStartDate());
+        }
+        if (orderServiceWebInDTO.getSearchEndDate() != null && StringUtils.isNotEmpty(orderServiceWebInDTO.getSearchDateStr())) {
+            orderQueryWrapper.le(prefix + orderServiceWebInDTO.getSearchDateStr(), orderServiceWebInDTO.getSearchEndDate());
+        }
+        if (orderServiceWebInDTO.getVisitReserve() != null) {
+            switch (orderServiceWebInDTO.getVisitReserve()){
+                case 0:
+                    orderQueryWrapper.isNotNull(prefix + "visit_reserve_date");
+                    break;
+                case 1:
+                    orderQueryWrapper.isNull(prefix + "visit_reserve_date");
+                    break;
+            }
+        }
+        if (null != orderServiceWebInDTO.getPageType()) {
+            if(orderServiceWebInDTO.getPageType().equals(15)){
+                orderQueryWrapper.eq(prefix + "order_status", 15);
+            }else if(orderServiceWebInDTO.getPageType().equals(16)){
+                orderQueryWrapper.gt(prefix + "return_num", 0);
+            }else if(orderServiceWebInDTO.getPageType().equals(17)){
+                orderQueryWrapper.eq(prefix + "order_status",16);
+            }else if(orderServiceWebInDTO.getPageType().equals(19)){
+                orderQueryWrapper.eq(prefix + "visit_status", 1);
+            }else if (orderServiceWebInDTO.getPageType().equals(11)) {
+                orderQueryWrapper.in(prefix + "order_status", Lists.newArrayList(11,12));
+            } else {
+                orderQueryWrapper.eq(prefix + "order_status", orderServiceWebInDTO.getPageType());
+            }
+        }
+
+        orderQueryWrapper.eq(orderServiceWebInDTO.getPlanId() != null,prefix + "plan_id", orderServiceWebInDTO.getPlanId());
+
+        String station = prefix+"station_id";
+        if(TokenContext.cureWebUser().getType()!= null &&
+                (TokenContext.cureWebUser().getType().equals(2)||TokenContext.cureWebUser().getType().equals(12))){
+            station = prefix+"service_station_id";
+        }
+        orderQueryWrapper.in(!orderServiceWebInDTO.getStationIds().isEmpty(),station,orderServiceWebInDTO.getStationIds());
+
+        Integer supplierId = TokenContext.curSupplierId();
+        Integer belong =  TokenContext.wbBelong();
+        if(belong.equals(1)){
+            //一级供应商
+            if (supplierId != null && !supplierId.equals(-1)) {
+                orderQueryWrapper.eq(prefix + "supplier_one_id", supplierId);
+            }
+        }else{
+            orderQueryWrapper.in(!orderServiceWebInDTO.getSupplierIds().isEmpty(),prefix + "supplier_id",orderServiceWebInDTO.getSupplierIds());
+        }
+
+        orderQueryWrapper.eq(prefix + "order_type", 2);
+        return orderQueryWrapper;
+    }
+
     private List<ListParams> getSubsidyCustomerMealList(DateParams dateParams,List<Integer> operatorIds){
         List<ListParams> returnList = Lists.newArrayList();
         QueryWrapper queryWrapper = new QueryWrapper<>();

+ 72 - 0
src/main/java/com/poteviohealth/cgp/statistics/utils/OrderExcelTask.java

@@ -0,0 +1,72 @@
+package com.poteviohealth.cgp.statistics.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import com.poteviohealth.cgp.statistics.mapper.OrderMapper;
+import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.RecursiveTask;
+
+/**
+ * @author Qin
+ */
+@Data
+public class OrderExcelTask extends RecursiveTask<List<OrderExcelDTO>> {
+
+    private static final int MAX = 1000;
+    private int start;
+    private int end;
+    private QueryWrapper queryWrapper;
+    private Integer operatorId;
+    private String dbName;
+    private OrderMapper orderMapper;
+    public OrderExcelTask(int start, int end, QueryWrapper queryWrapper,Integer operatorId,String dbName,OrderMapper orderMapper){
+        super();
+        this.end = end;
+        this.start =start;
+        this.queryWrapper = queryWrapper;
+        this.operatorId = operatorId;
+        this.dbName = dbName;
+        this.orderMapper = orderMapper;
+    }
+
+     @Override
+    protected List<OrderExcelDTO> compute() {
+        // 当end-start的值小于MAX时候,开始打印
+         List<OrderExcelDTO> list = Lists.newArrayList();
+
+        if ((end - start) < MAX) {
+            // 小于最大值 直接执行
+            list = orderMapper.orderExcel(queryWrapper,dbName,operatorId,start,end);
+            return list;
+        } else {
+            // 将任务分解
+            List<OrderExcelTask> tasks = new ArrayList<>();
+            int max = (int) Math.ceil((double)end/MAX);
+            for (int i = 0; i <= max; i++) {
+                OrderExcelTask task = new OrderExcelTask(start,MAX, queryWrapper,operatorId,dbName,orderMapper);
+                tasks.add(task);
+                start+=MAX;
+                if(start>end){
+                    start = end;
+                }
+            }
+            // 并行执行
+            invokeAll(tasks);
+            addResultFromTasks(list, tasks);
+            return list;
+        }
+    }
+
+    // 等待所有的任务运行结束
+    private void addResultFromTasks(List<OrderExcelDTO> list, List<OrderExcelTask> tasks) {
+        for (OrderExcelTask item : tasks) {
+            if (item.join() != null) {
+                list.addAll(item.join());
+            }
+        }
+    }
+}

TEMPAT SAMPAH
src/main/resources/excel/order_service.xlsx


+ 75 - 0
src/main/resources/mapper/statistics/OrderMapper.xml

@@ -203,4 +203,79 @@
     <select id="getIntegralCardDetailOperatorIdList" resultType="java.lang.Integer">
         select operator_id from ${dbName}_finance.c_card_acc_detail where yn = 0 and type = 2 and enable = 1 group by operator_id
     </select>
+    <select id="orderExcel" resultType="com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO">
+        SELECT
+            o.supplier_name as supplierName,
+            o.order_id as orderId,
+            o.sn as sn,
+            o.customer_name as customerName,
+            o.id_number as idNumber,
+            o.name as name,
+            o.phone as phone,
+            o.address as address,
+            o.product_string as productString,
+            o.service_name as serviceName,
+            o.service_sku_name as serviceSkuName,
+            o.service_num as serviceNum,
+            TRUNCATE(IFNULL(o.sum_order_price,0)/100.0,2) as sumOrderPrice,
+            TRUNCATE(IFNULL(o.sum_coupon_price,0)/100.0,2) as sumCouponPrice,
+            TRUNCATE(IFNULL(o.sum_price,0)/100.0,2) as sumPrice,
+            o.pay_style as payStyle,
+            o.reservation_time as reservationTime,
+            o.pay_status as payStatus,
+            o.order_style as orderStyle,
+            o.order_status as orderStatus,
+            DATE_FORMAT(o.order_time, '%Y-%m-%d %H:%i') as orderTime,
+            o.home_time as homeTime,
+            o.send_time as sendTime,
+            o.pickup_time as pickupTime,
+            o.employee_name as employeeName,
+            DATE_FORMAT(o.start_time, '%Y-%m-%d %H:%i') as startTime,
+            DATE_FORMAT(o.end_time, '%Y-%m-%d %H:%i') as endTime,
+            TRUNCATE(IFNULL(o.settlement_price_sum,0)/100.0,2) as settlementPriceSum,
+            o.pay_account as payAccount,
+            o.service_station_name as serviceStationName,
+            o.group_leader_name as groupLeaderName,
+            o.visit_reserve_date as visitReserveDate,
+            o.station_name as stationName,
+            o.belong as belong,
+            o.supplier_one_name as supplierOneName,
+            o.contract_no as contractNo,
+            TRUNCATE(IFNULL(o.consignment_price_sum,0)/100.0,2) as consignmentPriceSum,
+            o.review_reason as reviewReason,
+            TRUNCATE(IFNULL(o.pay_price,0)/100.0,2) as payPrice,
+            TRUNCATE(IFNULL(o.card_price,0)/100.0,2) as cardPrice,
+            TRUNCATE(IFNULL(o.subsidy_price,0)/100.0,2) as subsidyPrice,
+            o.fund_price as fundPrice,
+            od.tracking_code,
+            od.tracking_company,
+            od.coupon_string,
+            od.man_hour,
+            o.card_names as cardNameStr
+        FROM
+            ${dbName}_o_order_${operatorId} o
+            left join ${dbName}_o_order_detail_${operatorId} od on o.order_id = od.order_id and od.yn=0
+        WHERE
+            o.yn=0
+          and ${ew.sqlSegment}
+            order by o.order_id
+        limit #{start},#{end}
+    </select>
+
+    <select id="orderPageListSize" resultType="java.lang.Integer">
+        SELECT count(*)
+        FROM
+            ${dbName}_order.o_order_${operatorId} o
+        WHERE o.yn = 0
+          and ${ew.sqlSegment}
+    </select>
+    <select id="orderPageListAllSize" resultType="java.lang.Integer">
+        SELECT count(*)
+        FROM
+            ${dbName}_order.o_order_${operatorId} o
+                left join ${dbName}_order.o_order_detail_${operatorId} od on o.order_id = od.order_id
+        WHERE o.yn = 0
+          AND od.yn = 0
+          and ${ew.sqlSegment}
+    </select>
 </mapper>