Преглед изворни кода

Accept Merge Request #24: (dev-minio -> dev-lzl)

Merge Request: 合并

Created By: @刘子麟
Accepted By: @刘子麟
URL: https://chuanghaikeji.coding.net/p/moxuanyunshangwaimai/d/backend/git/merge/24
刘子麟 пре 1 година
родитељ
комит
080a94e363
31 измењених фајлова са 664 додато и 326 уклоњено
  1. 0 38
      db/insert_241011.sql
  2. 0 5
      db/insert_241014.sql
  3. 0 4
      db/update_241014.sql
  4. 26 0
      db/update_241015.sql
  5. 5 0
      src/main/java/com/sqx/common/constant/RedisKey.java
  6. 2 0
      src/main/java/com/sqx/modules/app/dao/UserMoneyDetailsDao.java
  7. 8 0
      src/main/java/com/sqx/modules/app/service/UserMoneyDetailsService.java
  8. 45 7
      src/main/java/com/sqx/modules/app/service/impl/UserMoneyDetailsServiceImpl.java
  9. 3 0
      src/main/java/com/sqx/modules/datacentre/dao/DataCentreDao.java
  10. 38 0
      src/main/java/com/sqx/modules/datacentre/query/RankListQuery.java
  11. 3 0
      src/main/java/com/sqx/modules/datacentre/service/DataCentreService.java
  12. 26 1
      src/main/java/com/sqx/modules/datacentre/service/impl/DataCentreServiceImpl.java
  13. 2 4
      src/main/java/com/sqx/modules/errand/dto/SmsLogQueryDTO.java
  14. 1 2
      src/main/java/com/sqx/modules/errand/entity/TbIndent.java
  15. 3 0
      src/main/java/com/sqx/modules/errand/entity/TbIndentSmsSendLog.java
  16. 16 2
      src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java
  17. 89 64
      src/main/java/com/sqx/modules/exportExecl/controller/ExportExeclController.java
  18. 39 0
      src/main/java/com/sqx/modules/exportExecl/dto/AccountEntry.java
  19. 4 2
      src/main/java/com/sqx/modules/order/dao/AppOrderDao.java
  20. 1 1
      src/main/java/com/sqx/modules/order/service/AppOrderService.java
  21. 157 142
      src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java
  22. 8 8
      src/main/java/com/sqx/modules/pay/controller/query/CashOutQueryDTO.java
  23. 3 1
      src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java
  24. 7 7
      src/main/java/com/sqx/modules/utils/fieYun/FeiYunUtils.java
  25. 2 2
      src/main/java/com/sqx/scheduler/config/ScheduledConfig.java
  26. 39 15
      src/main/java/com/sqx/scheduler/export/ExportScheduler.java
  27. 13 16
      src/main/java/com/sqx/scheduler/order/OrderScheduler.java
  28. 32 0
      src/main/resources/mapper/dataCentre/dataCenterMapper.xml
  29. 10 3
      src/main/resources/mapper/order/OrderMapper.xml
  30. 4 2
      src/main/resources/mapper/pay/CashDao.xml
  31. 78 0
      src/main/resources/mapper/userMoney/UserMoneyDetailsMapper.xml

+ 0 - 38
db/insert_241011.sql

@@ -1,41 +0,0 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : 外卖测试108
- Source Server Type    : MySQL
- Source Server Version : 50744
- Source Host           : 172.16.20.108:3306
- Source Schema         : tcwm2.5
-
- Target Server Type    : MySQL
- Target Server Version : 50744
- File Encoding         : 65001
-
- Date: 11/10/2024 11:13:33
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
-DROP TABLE IF EXISTS `print_info_detail`;
-CREATE TABLE `print_info_detail`  (
-  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '打印信息id',
-  `order_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单编号',
-  `order_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '打印时订单状态',
-  `is_append` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '打印状态是否补打',
-  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
-  `delete_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '删除标识;0未删除、1已删除',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
-SET FOREIGN_KEY_CHECKS = 1;
-
-
-ALTER TABLE `tcwm2.5`.`tb_order`
-ADD COLUMN `is_print` int(32) NULL COMMENT '打印状态  已打印:1 未打印:0' AFTER `order_sequence`;
-
-
-update tb_order set is_print = 0;

+ 0 - 5
db/insert_241014.sql

@@ -1,6 +0,0 @@
-CREATE TABLE rider_station
-(
-    id           INT AUTO_INCREMENT PRIMARY KEY,
-    station_name VARCHAR(100)
-);

+ 0 - 4
db/update_241014.sql

@@ -1,6 +0,0 @@
-
-ALTER TABLE tb_user ADD rider_station_id int;
-
-ALTER TABLE tb_order ADD INDEX order_number_index (order_number);

+ 26 - 0
db/update_241015.sql

@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS `print_info_detail`;
+CREATE TABLE `print_info_detail`  (
+    `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '打印信息id',
+    `order_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单编号',
+    `order_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '打印时订单状态',
+    `is_append` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '打印状态是否补打',
+    `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+    `delete_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '删除标识;0未删除、1已删除',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
+
+DROP TABLE IF EXISTS rider_station;
+CREATE TABLE rider_station
+(
+    id           INT AUTO_INCREMENT PRIMARY KEY,
+    station_name VARCHAR(100)
+);
+
+ALTER TABLE `tb_order` ADD COLUMN `is_print` int(32) NULL COMMENT '打印状态  已打印:1 未打印:0' AFTER `order_sequence`;
+update tb_order set is_print = 0;
+
+-- 用户表增加站点id字段
+ALTER TABLE tb_user ADD rider_station_id int;
+
+-- 给tb_order添加order_number索引
+ALTER TABLE tb_order ADD INDEX order_number_index (order_number);

+ 5 - 0
src/main/java/com/sqx/common/constant/RedisKey.java

@@ -34,6 +34,11 @@ public interface RedisKey {
     String PAY_ORDER_LOCK = "wm:lock:order:pay:%s";
 
     /**
+     * 订单序号锁 按店铺获取锁
+     */
+    String ORDER_SEQUENCE_LOCK = "wm:lock:order:sequence:%s";
+
+    /**
      * 提现锁
      */
     String CASH_OUT_LOCK = "wm:lock:cash:out:%s";

+ 2 - 0
src/main/java/com/sqx/modules/app/dao/UserMoneyDetailsDao.java

@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sqx.modules.app.entity.UserMoneyDetails;
+import com.sqx.modules.exportExecl.dto.AccountEntry;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.pay.controller.query.WalletDetailQuery;
 import com.sqx.modules.pay.vo.CashOutVO;
@@ -44,4 +45,5 @@ public interface UserMoneyDetailsDao extends BaseMapper<UserMoneyDetails> {
                                            @Param("userPhone") String userPhone, @Param("couponName") String couponName,
                                            @Param("orderNumber") String orderNumber, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
+    List<UserMoneyDetails> excelAccountEntry(@Param("query") AccountEntry query);
 }

+ 8 - 0
src/main/java/com/sqx/modules/app/service/UserMoneyDetailsService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.entity.UserMoneyDetails;
+import com.sqx.modules.exportExecl.dto.AccountEntry;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.pay.controller.query.WalletDetailQuery;
 import com.sqx.modules.utils.excel.ExcelData;
@@ -54,4 +55,11 @@ public interface UserMoneyDetailsService extends IService<UserMoneyDetails> {
      */
     PageUtils accountEntryManagementDetails(Integer page, Integer limit, String shopName, String shopPhone, String userPhone, String couponName, String orderNumber, String startTime, String endTime);
 
+    /**
+     * 入账管理导出
+     * @param query
+     * @return
+     */
+    ExcelData excelAccountEntry(AccountEntry query);
+
 }

+ 45 - 7
src/main/java/com/sqx/modules/app/service/impl/UserMoneyDetailsServiceImpl.java

@@ -11,13 +11,7 @@ import com.sqx.common.utils.Result;
 import com.sqx.modules.app.dao.UserMoneyDetailsDao;
 import com.sqx.modules.app.entity.UserMoneyDetails;
 import com.sqx.modules.app.service.UserMoneyDetailsService;
-import com.sqx.modules.common.dao.CommonInfoDao;
-import com.sqx.modules.common.entity.CommonInfo;
-import com.sqx.modules.common.service.CommonInfoService;
-import com.sqx.modules.errand.entity.TbIndent;
-import com.sqx.modules.errand.entity.TbIndentSmsSendLog;
-import com.sqx.modules.errand.service.TbIndentService;
-import com.sqx.modules.errand.service.TbIndentSmsSendLogService;
+import com.sqx.modules.exportExecl.dto.AccountEntry;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.pay.controller.query.WalletDetailQuery;
 import com.sqx.modules.pay.vo.CashOutVO;
@@ -205,4 +199,48 @@ public class UserMoneyDetailsServiceImpl extends ServiceImpl<UserMoneyDetailsDao
         System.out.println("list = " + list);
         return pageUtils;
     }
+
+    /**
+     * @param query
+     * @return
+     */
+    @Override
+    public ExcelData excelAccountEntry(AccountEntry query) {
+        List<UserMoneyDetails> userMoneyDetailsList = baseMapper.excelAccountEntry(query);
+        ExcelData data = new ExcelData();
+        data.setName("入账管理");
+        List<String> titleList=Arrays.asList(
+                "编号",
+                "店铺名称",
+                "店铺手机号",
+                "下单用户",
+                "用户手机号",
+                "标题",
+                "优惠活动标题",
+                "优惠活动金额",
+                "跑腿费",
+                "订单号",
+                "金额",
+                "创建时间");
+        data.setTitles(titleList);
+        List<List<Object>> rows = new ArrayList<>();
+        for (UserMoneyDetails userMoneyDetails:userMoneyDetailsList ){
+            List<Object> row = new ArrayList<>();
+            row.add(userMoneyDetails.getId());
+            row.add(userMoneyDetails.getShopName());
+            row.add(userMoneyDetails.getShopPhone());
+            row.add(userMoneyDetails.getUserName());
+            row.add(userMoneyDetails.getUserPhone());
+            row.add(userMoneyDetails.getTitle());
+            row.add(userMoneyDetails.getCouponName());
+            row.add(userMoneyDetails.getCouponMoney());
+            row.add(userMoneyDetails.getErrandMoney());
+            row.add(userMoneyDetails.getOrderNumber()+"");
+            row.add(userMoneyDetails.getMoney());
+            row.add(userMoneyDetails.getCreateTime());
+            rows.add(row);
+        }
+        data.setRows(rows);
+        return data;
+    }
 }

+ 3 - 0
src/main/java/com/sqx/modules/datacentre/dao/DataCentreDao.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.app.entity.UserMoneyDetails;
 import com.sqx.modules.datacentre.query.DataCenterQuery;
+import com.sqx.modules.datacentre.query.RankListQuery;
 import com.sqx.modules.datacentre.query.ShopCenterQuery;
 import com.sqx.modules.errand.entity.Feedback;
 import com.sqx.modules.errand.entity.TbIndent;
@@ -99,4 +100,6 @@ public interface DataCentreDao {
     BigDecimal cancelOrderMoney(@Param("query") DataCenterQuery query);
 
     List<TbOrder> excelShopCenter(@Param("query")ShopCenterQuery query);
+
+    List<TbIndent> excelRankList(@Param("query") RankListQuery query);
 }

+ 38 - 0
src/main/java/com/sqx/modules/datacentre/query/RankListQuery.java

@@ -0,0 +1,38 @@
+package com.sqx.modules.datacentre.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.util.StringUtils;
+
+import javax.validation.constraints.Pattern;
+
+@Data
+public class RankListQuery extends DataCenterQuery {
+
+    @ApiModelProperty(value = "地区")
+    private String address;
+
+    @ApiModelProperty(value = "骑手站点id")
+    private String riderStationId;
+
+    @ApiModelProperty(value = "登录人id")
+    private String userId;
+
+    public String toStrMessage() {
+        StringBuilder stringBuilder=new StringBuilder();
+        stringBuilder
+                .append(StringUtils.hasText(address)?"商铺类型编号:"+address+";":"")
+                .append(StringUtils.hasText(getDateType())?"日期类型:"+getDateType()+";":"")
+                .append(StringUtils.hasText(getDate())?"日期:"+getDate()+";":"");
+        return stringBuilder.toString();
+    }
+
+    public String toStrCode() {
+        return
+                ","+(address==null?"":address)
+                +","+(getDateType()==null?"":getDateType())
+                +","+(getDate()==null?"":getDate())
+                +","+(riderStationId==null?"":riderStationId)
+                +",";
+    }
+}

+ 3 - 0
src/main/java/com/sqx/modules/datacentre/service/DataCentreService.java

@@ -3,6 +3,7 @@ package com.sqx.modules.datacentre.service;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.datacentre.query.DataCenterQuery;
+import com.sqx.modules.datacentre.query.RankListQuery;
 import com.sqx.modules.datacentre.query.ShopCenterQuery;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.utils.excel.ExcelData;
@@ -33,6 +34,8 @@ public interface DataCentreService {
 
     ExcelData excelShopCenter(ShopCenterQuery queryDTO);
 
+    ExcelData excelRankingList(RankListQuery queryDTO);
+
     Result selectUserCenter(DataCenterQuery query);
 
     Result selectUserFeedback(String userEmail, Integer page, Integer limit);

+ 26 - 1
src/main/java/com/sqx/modules/datacentre/service/impl/DataCentreServiceImpl.java

@@ -17,6 +17,7 @@ import com.sqx.modules.coupon.dao.TbCouponUserDao;
 import com.sqx.modules.coupon.entity.TbCouponUser;
 import com.sqx.modules.datacentre.dao.DataCentreDao;
 import com.sqx.modules.datacentre.query.DataCenterQuery;
+import com.sqx.modules.datacentre.query.RankListQuery;
 import com.sqx.modules.datacentre.query.ShopCenterQuery;
 import com.sqx.modules.datacentre.service.DataCentreService;
 import com.sqx.modules.errand.entity.Feedback;
@@ -413,7 +414,31 @@ public class DataCentreServiceImpl implements DataCentreService {
         }
         return Result.success();
     }
-
+    @Override
+    public ExcelData excelRankingList(RankListQuery query) {
+        List<TbIndent> tbOrderList = dataCentreDao.excelRankList(query);
+        ExcelData data = new ExcelData();
+        data.setName("骑手排行");
+        List<String> titleList=Arrays.asList(
+                "排名",
+                "骑手昵称",
+                "地区 ",
+                "骑手所在站点",
+                "总收益");
+        data.setTitles(titleList);
+        List<List<Object>> rows = new ArrayList<>();
+        for (TbIndent tbOrder:tbOrderList ){
+            List<Object> row = new ArrayList<>();
+            row.add(tbOrder.getRankNum());
+            row.add(tbOrder.getNickName());
+            row.add(tbOrder.getUserProvince()+tbOrder.getUserCity()+tbOrder.getUserDistrict());
+            row.add(tbOrder.getStationName());
+            row.add(tbOrder.getMoneyOrder());
+            rows.add(row);
+        }
+        data.setRows(rows);
+        return data;
+    }
 
     @Override
     public Result updateCertification(UserEntity userEntity) {

+ 2 - 4
src/main/java/com/sqx/modules/errand/dto/SmsLogQueryDTO.java

@@ -6,8 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.util.Date;
-
 /**
  * 短信历史分页查询dto
  */
@@ -32,11 +30,11 @@ public class SmsLogQueryDTO extends PageQuery {
 
     @ApiModelProperty("查询开始时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date startTime;
+    private String startTime;
 
     @ApiModelProperty("查询结束时间")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date endTime;
+    private String endTime;
 
     @ApiModelProperty("发送来源:1骑手、2商家,默认为1")
     private String sourceType = "1";

+ 1 - 2
src/main/java/com/sqx/modules/errand/entity/TbIndent.java

@@ -263,8 +263,7 @@ public class TbIndent implements Serializable {
 
     @TableField(exist = false)
     private Integer evaluateMessage;
-
-    //	站点名称
+//    站点名称
     @TableField(exist = false)
     private String stationName;
 

+ 3 - 0
src/main/java/com/sqx/modules/errand/entity/TbIndentSmsSendLog.java

@@ -2,6 +2,8 @@ package com.sqx.modules.errand.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sqx.modules.chats.utils.DateUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -44,6 +46,7 @@ public class TbIndentSmsSendLog {
     private String sendTo;
 
     @ApiModelProperty("发送时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
     private Date sendTime;
 
     @ApiModelProperty("发送来源 1骑手、2商家")

+ 16 - 2
src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java

@@ -66,7 +66,10 @@ import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -124,6 +127,8 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
 
     @Resource
     private RedissonClient redissonClient;
+    @Resource
+    private PlatformTransactionManager transactionManager;
 
     @Override
     public TbIndent findIndentByPayOrdersNo(String ordersNo) {
@@ -1194,7 +1199,6 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
     }
 
     @Override
-    @Transactional
     public Result riderDelivery(Long userId, RiderDeliveryDTO deliveryDTO) {
         // 添加拍照发短信逻辑
         // 因为原有的确认送达方法代码比较凌乱,且不好重新封装,所以这里就在原有确认收货方法之前添加拍照发短信逻辑
@@ -1204,15 +1208,25 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
             throw new SqxException("无效的跑腿订单id");
         }
 
+        TransactionStatus status = null;
         RLock lock = redissonClient.getLock(String.format(RedisKey.UPDATE_INDENT_LOCK, indentNumber));
         lock.lock();
         try {
+            status = transactionManager.getTransaction(new DefaultTransactionDefinition());
             // 如果是外卖订单
             if (ObjectUtil.equal(indentOrder.getIndentType(), "5")) {
                 handTakeoutOrder(indentOrder, userId, deliveryDTO);
             }
 
-            return finshOrder(userId, indentNumber, deliveryDTO.getItemCode());
+            Result result = finshOrder(userId, indentNumber, deliveryDTO.getItemCode());
+
+            transactionManager.commit(status);
+            return result;
+        } catch (Exception e) {
+            if (ObjectUtil.isNotNull(status)) {
+                transactionManager.rollback(status);
+            }
+            throw e;
         } finally {
             lock.unlock();
         }

+ 89 - 64
src/main/java/com/sqx/modules/exportExecl/controller/ExportExeclController.java

@@ -8,13 +8,17 @@ import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.common.utils.SftpUtil;
 import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.datacentre.query.RankListQuery;
 import com.sqx.modules.datacentre.query.ShopCenterQuery;
+import com.sqx.modules.exportExecl.dto.AccountEntry;
 import com.sqx.modules.exportExecl.mapper.ExportJobMapper;
 import com.sqx.modules.exportExecl.model.ExportJob;
 import com.sqx.modules.exportExecl.service.ExportJobService;
 import com.sqx.modules.order.dao.AppOrderDao;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.pay.controller.query.WalletDetailQuery;
+import com.sqx.modules.riderStation.entity.RiderStation;
+import com.sqx.modules.riderStation.service.RiderStationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -44,22 +48,18 @@ import java.util.Date;
 public class ExportExeclController {
 
     private final AppOrderDao appOrderDao;
-
-    private final ExportJobMapper exportJobMapper;
-
     private final ExportJobService exportJobService;
-
     private final CommonInfoService commonInfoService;
-
+    private final RiderStationService riderStationService;
     private final SftpUtil sftpUtil;
 
     @GetMapping("excelOrder")
     @ApiOperation("导出订单列表")
     public Result excelOrder(Integer status, String phone, Long shopId, String userName,
                              String orderNumber, Integer orderType, String shopName, String riderPhone,
-                             String startTime, String endTime, String userId, String payStartTime, String payEndTime) throws Exception{
+                             String startTime, String endTime, String userId, String payStartTime, String payEndTime,Integer riderStationId) throws Exception{
         Integer size = appOrderDao.excelAllOrderAdminCount( status, phone, shopId, userName, orderNumber, orderType,
-                shopName, riderPhone,startTime,endTime,payStartTime,payEndTime);
+                shopName, riderPhone,startTime,endTime,payStartTime,payEndTime,riderStationId);
         //可导出最大数量
         String count=commonInfoService.findOne(431).getValue();
         if(size>Integer.parseInt(count)){
@@ -81,22 +81,27 @@ public class ExportExeclController {
         if(endTime!=null&&!endTime.trim().equals("")){stringBuffer.append("结束时间:"+endTime+";");}
         if(payStartTime!=null&&!payStartTime.trim().equals("")){stringBuffer.append("支付开始时间:"+payStartTime+";");}
         if(payEndTime!=null&&!payEndTime.trim().equals("")){stringBuffer.append("支付结束时间:"+payEndTime+";");}
-
+        if(riderStationId!=null){
+            RiderStation riderStation=riderStationService.getById(riderStationId);
+            if(riderStation!=null){
+                stringBuffer=stringBuffer.append("站点:"+riderStation.getStationName()+";");
+            }
+        }
         ExportJob exportJob =new ExportJob();
         exportJob.setFlag(0);
         exportJob.setFileType("order");
         exportJob.setConditionDetail(stringBuffer.toString());
         exportJob.setConditions(","+(status==null?"":status)+","+phone+","+(shopId==null?"":shopId)+","+userName+","+orderNumber+","
                 +(orderType==null?"":orderType)+","+shopName+","
-                +riderPhone+","+startTime+","+endTime+","+payStartTime+","+payEndTime);
+                +riderPhone+","+startTime+","+endTime+","+payStartTime+","+payEndTime+","+(riderStationId==null?"":riderStationId)+",");
         LocalDateTime localDateTime = LocalDateTime.now();
         String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         exportJob.setFileName((int) (Math.random() * 100) +time+"订单列表.xlsx");
         exportJob.setUserId(userId);
         exportJob.setCreateTime(new Date());
         exportJob.setUpdateTime(new Date());
-        int a=exportJobMapper.insert(exportJob);
-        if (a==1){
+        boolean a=exportJobService.save(exportJob);
+        if (a){
             return Result.success("新增导出计划成功");
         }else{
             return Result.error("新增导出计划失败");
@@ -108,23 +113,13 @@ public class ExportExeclController {
         if(!StringUtils.hasText(userId)){
             return Result.error("用户id不能为空");
         }
-        StringBuffer stringBuffer=new StringBuffer();
+        StringBuilder stringBuffer=new StringBuilder();
         if(rechargeOrder!=null&&rechargeOrder!=""){stringBuffer.append("充值订单号:"+rechargeOrder+";");}
         if(acount!=null&&acount!=""){stringBuffer.append("被充值账号:"+acount+";");}
 
-        ExportJob exportJob =new ExportJob();
-        exportJob.setFlag(0);
-        exportJob.setFileType("recharge");
-        exportJob.setConditionDetail(stringBuffer.toString());
-        exportJob.setConditions(","+rechargeOrder+","+acount);
-        LocalDateTime localDateTime = LocalDateTime.now();
-        String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
-        exportJob.setFileName(time+"充值记录.xlsx");
-        exportJob.setCreateTime(new Date());
-        exportJob.setUpdateTime(new Date());
-        exportJob.setUserId(userId);
-        int a=exportJobMapper.insert(exportJob);
-        if (a==1){
+        ExportJob exportJob =this.buildExportJob("充值记录.xlsx","recharge", userId,stringBuffer.toString(),","+rechargeOrder+","+acount);
+        boolean a=exportJobService.save(exportJob);
+        if (a){
             return Result.success("新增导出计划成功");
         }else{
             return Result.error("新增导出计划失败");
@@ -137,19 +132,16 @@ public class ExportExeclController {
         if(queryDTO.getUserId()==null){
             return Result.error("用户id不能为空");
         }
-        ExportJob exportJob =new ExportJob();
-        exportJob.setFlag(0);
-        exportJob.setFileType("payouts");
-        exportJob.setConditionDetail(queryDTO.toStrMessage());
-        exportJob.setConditions(queryDTO.toStrCode());
-        LocalDateTime localDateTime = LocalDateTime.now();
-        String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
-        exportJob.setFileName(time+"提现管理.xlsx");
-        exportJob.setCreateTime(new Date());
-        exportJob.setUpdateTime(new Date());
-        exportJob.setUserId(queryDTO.getUserId()+"");
-        int a=exportJobMapper.insert(exportJob);
-        if (a==1){
+        String strMessage=queryDTO.toStrMessage();
+        if(StringUtils.hasText(queryDTO.getRiderStationId())){
+            RiderStation riderStation=riderStationService.getById(queryDTO.getRiderStationId());
+            if(riderStation!=null){
+                strMessage=strMessage+"站点:"+riderStation.getStationName()+";";
+            }
+        }
+        ExportJob exportJob =this.buildExportJob("提现管理.xlsx","payouts", String.valueOf(queryDTO.getUserId()),strMessage,queryDTO.toStrCode());
+        boolean a=exportJobService.save(exportJob);
+        if (a){
             return Result.success("新增提现管理导出计划成功");
         }else{
             return Result.error("新增提现管理导出计划失败");
@@ -162,19 +154,9 @@ public class ExportExeclController {
         if(!StringUtils.hasText(queryDTO.getUserId())){
             return Result.error("用户id不能为空");
         }
-        ExportJob exportJob =new ExportJob();
-        exportJob.setFlag(0);
-        exportJob.setFileType("deposit");
-        exportJob.setConditionDetail(queryDTO.toStrMessage());
-        exportJob.setConditions(queryDTO.toStrCode());
-        LocalDateTime localDateTime = LocalDateTime.now();
-        String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
-        exportJob.setFileName(time+"保证金记录.xlsx");
-        exportJob.setCreateTime(new Date());
-        exportJob.setUpdateTime(new Date());
-        exportJob.setUserId(queryDTO.getUserId()+"");
-        int a=exportJobMapper.insert(exportJob);
-        if (a==1){
+        ExportJob exportJob =this.buildExportJob("保证金记录.xlsx","deposit",queryDTO.getUserId(),queryDTO.toStrMessage(),queryDTO.toStrCode());
+        boolean a=exportJobService.save(exportJob);
+        if (a){
             return Result.success("新增保证金记录导出计划成功");
         }else{
             return Result.error("新增保证金记录导出计划失败");
@@ -244,28 +226,71 @@ public class ExportExeclController {
         }
     }
 
+    //构建导出对象
+    private ExportJob buildExportJob(String fileName,String fileType,String userId,String condDetail,String condCode){
+        ExportJob exportJob=new ExportJob();
+        //设置为待导出
+        exportJob.setFlag(0);
+        exportJob.setFileType(fileType);
+        exportJob.setConditionDetail(condDetail);
+        exportJob.setConditions(condCode);
+        LocalDateTime localDateTime = LocalDateTime.now();
+        String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
+        exportJob.setFileName(time+fileName);
+        exportJob.setCreateTime(new Date());
+        exportJob.setUpdateTime(new Date());
+        exportJob.setUserId(userId);
+        return exportJob;
+    }
+
     @GetMapping("excelShopCenter")
     @ApiOperation("导出商户收益统计")
     public Result excelShopCenter(ShopCenterQuery queryDTO) throws Exception{
         if(!StringUtils.hasText(queryDTO.getUserId())){
             return Result.error("用户id不能为空");
         }
-        ExportJob exportJob =new ExportJob();
-        exportJob.setFlag(0);
-        exportJob.setFileType("shopCenter");
-        exportJob.setConditionDetail(queryDTO.toStrMessage());
-        exportJob.setConditions(queryDTO.toStrCode());
-        LocalDateTime localDateTime = LocalDateTime.now();
-        String time=localDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
-        exportJob.setFileName(time+"商铺收益排行.xlsx");
-        exportJob.setCreateTime(new Date());
-        exportJob.setUpdateTime(new Date());
-        exportJob.setUserId(queryDTO.getUserId()+"");
-        int a=exportJobMapper.insert(exportJob);
-        if (a==1){
+        ExportJob exportJob =this.buildExportJob("商铺收益排行.xlsx","shopCenter",queryDTO.getUserId(),queryDTO.toStrMessage(),queryDTO.toStrCode());
+        boolean a=exportJobService.save(exportJob);
+        if (a){
             return Result.success("新增商铺收益排行导出计划成功");
         }else{
             return Result.error("新增商铺收益排行导出计划失败");
         }
     }
+
+    @GetMapping("excelAccountEntry")
+    @ApiOperation("导出入账管理")
+    public Result excelAccountEntry(AccountEntry queryDTO) throws Exception{
+        if(!StringUtils.hasText(queryDTO.getUserId())){
+            return Result.error("用户id不能为空");
+        }
+        ExportJob exportJob =this.buildExportJob("入账管理.xlsx","accountEntry",queryDTO.getUserId(),queryDTO.toStrMessage(),queryDTO.toStrCode());
+        boolean a=exportJobService.save(exportJob);
+        if (a){
+            return Result.success("新增入账管理导出计划成功");
+        }else{
+            return Result.error("新增入账管理导出计划失败");
+        }
+    }
+    @GetMapping("excelRankList")
+    @ApiOperation("导出骑手排行")
+    public Result excelRankList(RankListQuery queryDTO) throws Exception{
+        if(!StringUtils.hasText(queryDTO.getUserId())){
+            return Result.error("用户id不能为空");
+        }
+        String strMessage=queryDTO.toStrMessage();
+        if(StringUtils.hasText(queryDTO.getRiderStationId())){
+            RiderStation riderStation=riderStationService.getById(queryDTO.getRiderStationId());
+            if(riderStation!=null){
+                strMessage=strMessage+"站点:"+riderStation.getStationName()+";";
+            }
+        }
+        ExportJob exportJob =this.buildExportJob("骑手排行.xlsx","rankList",queryDTO.getUserId(),strMessage,queryDTO.toStrCode());
+        boolean a=exportJobService.save(exportJob);
+        if (a){
+            return Result.success("新增骑手排行导出计划成功");
+        }else{
+            return Result.error("新增骑手排行导出计划失败");
+        }
+    }
 }

+ 39 - 0
src/main/java/com/sqx/modules/exportExecl/dto/AccountEntry.java

@@ -0,0 +1,39 @@
+package com.sqx.modules.exportExecl.dto;
+
+import lombok.Data;
+import org.springframework.util.StringUtils;
+
+@Data
+public class AccountEntry {
+
+    private String shopName;
+    private String shopPhone;
+    private String userPhone;
+    private String couponName;
+    private String orderNumber;
+    private String startTime;
+    private String endTime;
+    private String userId;
+
+    public String toStrMessage() {
+        return (StringUtils.hasText(shopName) ? "商铺名称:" + shopName + ";" : "") +
+                (StringUtils.hasText(shopPhone) ? "商铺手机号:" + shopPhone + ";" : "") +
+                (StringUtils.hasText(userPhone) ? "用户手机号:" + userPhone + ";" : "") +
+                (StringUtils.hasText(couponName) ? "优惠活动:" + couponName + ";" : "") +
+                (StringUtils.hasText(orderNumber) ? "订单号:" + orderNumber + ";" : "") +
+                (StringUtils.hasText(startTime) ? "开始时间:" + startTime + ";" : "") +
+                (StringUtils.hasText(endTime) ? "结束时间:" + endTime + ";" : "");
+    }
+
+    public String toStrCode() {
+        return
+                ","+(shopName==null?"":shopName)
+                +","+(shopPhone==null?"":shopPhone)
+                +","+(userPhone==null?"":userPhone)
+                +","+(couponName==null?"":couponName)
+                +","+(orderNumber==null?"":orderNumber)
+                +","+(startTime==null?"":startTime)
+                +","+(endTime==null?"":endTime)
+                +",";
+    }
+}

+ 4 - 2
src/main/java/com/sqx/modules/order/dao/AppOrderDao.java

@@ -35,13 +35,15 @@ public interface AppOrderDao extends BaseMapper<TbOrder> {
                                        @Param("userName") String userName, @Param("orderNumber") String orderNumber,
                                      @Param("orderType") Integer orderType,@Param("shopName")String shopName,
                                      @Param("riderPhone") String riderPhone,@Param("startTime") String startTime,
-                                     @Param("endTime") String endTime,@Param("payStartTime") String payStartTime,@Param("payEndTime") String payEndTime);
+                                     @Param("endTime") String endTime,@Param("payStartTime") String payStartTime,
+                                     @Param("payEndTime") String payEndTime,@Param("riderStationId")String riderStationId);
     @DataSource("dynamic")
     Integer excelAllOrderAdminCount(@Param("status") Integer status,@Param("phone") String phone, @Param("shopId") Long shopId,
                                      @Param("userName") String userName, @Param("orderNumber") String orderNumber,
                                      @Param("orderType") Integer orderType,@Param("shopName")String shopName,
                                      @Param("riderPhone") String riderPhone,@Param("startTime") String startTime,
-                                     @Param("endTime") String endTime,@Param("payStartTime") String payStartTime,@Param("payEndTime") String payEndTime);
+                                     @Param("endTime") String endTime,@Param("payStartTime") String payStartTime,
+                                    @Param("payEndTime") String payEndTime,@Param("riderStationId")Integer riderStationId);
 
 
     IPage<TbOrder> selectOrderByAdmin(Page<TbOrder> pages,@Param("status") Integer status,@Param("phone") String phone,

+ 1 - 1
src/main/java/com/sqx/modules/order/service/AppOrderService.java

@@ -36,7 +36,7 @@ public interface AppOrderService extends IService<TbOrder> {
 
     ExcelData excelAllOrderAdmin(Integer status, String phone, Long shopId,
                                  String userName, String orderNumber, Integer orderType, String shopName,
-                                 String riderPhone, String startTime, String endTime,String payStartTime, String payEndTime);
+                                 String riderPhone, String startTime, String endTime,String payStartTime, String payEndTime,String riderStationId);
 
     Result selectOrderByUserId(Long userId, String date, String dateType);
 

+ 157 - 142
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -471,6 +471,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             if (!Integer.valueOf(Constant.YES).equals(goodsShop.getReservationOpenFlag())) {
                 throw new SqxException("当前店铺未开启预约接单");
             }
+        } else {
+            // 判断店铺营业时间
+            if (!isShopBusinessTime(goodsShop.getShopId())) {
+                throw new SqxException("店铺已打烊!");
+            }
         }
 
         // 2 外卖订单
@@ -668,70 +673,77 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     @Override
     public void finishOrderByShop(OrderFinishByShopDTO orderFinishByShopDTO) {
         Long orderId = orderFinishByShopDTO.getOrderId();
-        TbOrder order = getById(orderId);
-
-        if (ObjectUtil.isNull(order)) {
-            throw new SqxException("无效的订单id");
-        }
-        if(order.getAutoSendOrder() != null && order.getAutoSendOrder() == 0){
-            throw new SqxException("当前订单为自动派单,不能手动完成!");
-        }
-
-        if (order.getStatus().equals(4)) {
-            return;
-        }
+        RLock lock = redissonClient.getLock(String.format(RedisKey.FINISH_ORDER_LOCK, orderId));
+        lock.lock();
+        try {
+            TbOrder order = getById(orderId);
 
-        Long shopId = order.getShopId();
-        SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
-        List<SysUserShop> sysUserShops = sysUserService.selectShopId(currentUser.getUserId());
-        if (CollUtil.isEmpty(sysUserShops) || !sysUserShops.stream().filter(e -> e.getShopId().longValue() == shopId.longValue()).findFirst().isPresent()) {
-            throw new SqxException("没有操作权限,只能操作完成自己店铺订单!");
-        }
+            if (ObjectUtil.isNull(order)) {
+                throw new SqxException("无效的订单id");
+            }
+            if(order.getAutoSendOrder() != null && order.getAutoSendOrder() == 0){
+                throw new SqxException("当前订单为自动派单,不能手动完成!");
+            }
 
-        if (Constant.YES.equals(orderFinishByShopDTO.getSendSmsFlag())) {
-            TbIndent indent = tbIndentService.getOne(new QueryWrapper<TbIndent>().eq("order_id", orderId));
-            if (ObjectUtil.isNull(indent)) {
+            if (order.getStatus().equals(4)) {
                 return;
             }
 
-            // 如果是外卖订单
-            if (ObjectUtil.equal(indent.getIndentType(), "5")) {
-                Long smsTemplateId = orderFinishByShopDTO.getSmsTemplateId();
-                if (ObjectUtil.isNull(smsTemplateId)) {
-                    throw new SqxException("短信模板id不能为空");
-                }
-
-                // 收货人手机
-                String userPhone = indent.getUserPhone();
+            Long shopId = order.getShopId();
+            SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
+            List<SysUserShop> sysUserShops = sysUserService.selectShopId(currentUser.getUserId());
+            if (CollUtil.isEmpty(sysUserShops) || !sysUserShops.stream().filter(e -> e.getShopId().longValue() == shopId.longValue()).findFirst().isPresent()) {
+                throw new SqxException("没有操作权限,只能操作完成自己店铺订单!");
+            }
 
-                if (StrUtil.isBlank(userPhone)) {
+            if (Constant.YES.equals(orderFinishByShopDTO.getSendSmsFlag())) {
+                TbIndent indent = tbIndentService.getOne(new QueryWrapper<TbIndent>().eq("order_id", orderId));
+                if (ObjectUtil.isNull(indent)) {
                     return;
                 }
 
-                // 店铺信息
-                GoodsShop goodsShop = goodsShopDao.selectById(shopId);
-                // 查询短信发送费用
-                CommonInfo commonInfo = commonInfoService.findOne(421);
-                // 店铺钱包
-                UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(goodsShop.getUserId());
-                if (userMoney.getMoney().compareTo(new BigDecimal(commonInfo.getValue())) < 0) {
-                    throw new SqxException("当前店铺余额不够,短信发送失败!");
-                }
+                // 如果是外卖订单
+                if (ObjectUtil.equal(indent.getIndentType(), "5")) {
+                    Long smsTemplateId = orderFinishByShopDTO.getSmsTemplateId();
+                    if (ObjectUtil.isNull(smsTemplateId)) {
+                        throw new SqxException("短信模板id不能为空");
+                    }
+
+                    // 收货人手机
+                    String userPhone = indent.getUserPhone();
 
-                // 发送短信并记录短信发送记录
-                SmsSendResult smsSendResult = smsTemplateService.sendSms(smsTemplateId, goodsShop.getPhone(), goodsShop.getShopName(), goodsShop.getShopId(), userPhone);
+                    if (StrUtil.isBlank(userPhone)) {
+                        return;
+                    }
 
-                // sourceType 1骑手、2商家
-                smsSendLogService.saveLog(indent.getIndentId(), "2", smsSendResult);
+                    // 店铺信息
+                    GoodsShop goodsShop = goodsShopDao.selectById(shopId);
+                    // 查询短信发送费用
+                    CommonInfo commonInfo = commonInfoService.findOne(421);
+                    // 店铺钱包
+                    UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(goodsShop.getUserId());
+                    if (userMoney.getMoney().compareTo(new BigDecimal(commonInfo.getValue())) < 0) {
+                        throw new SqxException("当前店铺余额不够,短信发送失败!");
+                    }
+
+                    // 发送短信并记录短信发送记录
+                    SmsSendResult smsSendResult = smsTemplateService.sendSms(smsTemplateId, goodsShop.getPhone(), goodsShop.getShopName(), goodsShop.getShopId(), userPhone);
+
+                    // sourceType 1骑手、2商家
+                    smsSendLogService.saveLog(indent.getIndentId(), "2", smsSendResult);
+                }
             }
-        }
 
-        if (StrUtil.isNotBlank(orderFinishByShopDTO.getImgs())) {
-            order.setDeliveryImgs(orderFinishByShopDTO.getImgs());
-            updateById(order);
-        }
+            if (StrUtil.isNotBlank(orderFinishByShopDTO.getImgs())) {
+                order.setDeliveryImgs(orderFinishByShopDTO.getImgs());
+                updateById(order);
+            }
 
-        accomplishOrder(orderId);
+            log.info("商户自配完成订单:{},订单状态:{}", orderId, order.getStatus());
+            accomplishOrder(orderId);
+        } finally {
+            lock.unlock();
+        }
     }
 
     @Override
@@ -1303,9 +1315,9 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     @Override
     public ExcelData excelAllOrderAdmin(Integer status, String phone, Long shopId,
                                         String userName, String orderNumber, Integer orderType, String shopName,
-                                        String riderPhone, String startTime, String endTime,String payStartTime, String payEndTime) {
+                                        String riderPhone, String startTime, String endTime,String payStartTime, String payEndTime,String riderStationId) {
         List<TbOrder> tbOrderIPage = appOrderDao.excelAllOrderAdmin( status, phone, shopId, userName, orderNumber, orderType,
-                shopName, riderPhone,startTime,endTime,payStartTime,payEndTime);
+                shopName, riderPhone,startTime,endTime,payStartTime,payEndTime,riderStationId);
 //        for (int i = 0; i < tbOrderIPage.size(); i++) {
 //            List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
 //                    .eq("order_id", tbOrderIPage.get(i).getOrderId()));
@@ -1322,7 +1334,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
         titles.add("活动优惠金额(元)");
         titles.add("打包费(元/个 具体按照数量计算)");titles.add("跑腿费(元)");titles.add("支付金额(元)");
         titles.add("跑腿费说明"); titles.add("订单备注");titles.add("支付时间");titles.add("支付方式");
-        titles.add("取餐号"); titles.add("状态");titles.add("是否转单");
+        titles.add("取餐号"); titles.add("状态");titles.add("是否转单");titles.add("骑手站点");
 
         data.setTitles(titles);
         List<List<Object>> rows = new ArrayList();
@@ -1420,6 +1432,7 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             }else{
                 row.add("");
             }
+            row.add(order.getStationName());
             rows.add(row);
         }
         data.setRows(rows);
@@ -1685,6 +1698,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             if (tbOrder.getStatus().equals(3)) {
                 return Result.success();
             }
+
+            if (!tbOrder.getStatus().equals(6)) {
+                throw new SqxException("当前订单制作完成失败,非制作中订单不能制作完成。【订单id:" + tbOrder.getOrderId() + ",订单状态:" + tbOrder.getStatus() + "】");
+            }
+
             MessageInfo messageInfo = new MessageInfo();
             messageInfo.setTitle("餐品制作完成");
             if (tbOrder.getOrderType() == 1) {
@@ -1705,32 +1723,30 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             }
             messageInfo.setCreateAt(format1);
             messageInfo.setUserId(tbOrder.getUserId().toString());
-            messageInfoDao.insert(messageInfo);
-            //设置小程序消息推送
-            CommonInfo one = commonInfoService.findOne(269);
-            List<String> msgList = new ArrayList<>();
-            Long shopId = tbOrder.getShopId();
-            GoodsShop goodsShop = goodsShopDao.selectById(shopId);
-            String shopName = goodsShop.getShopName();
-            String orderNum1 = tbOrder.getOrderNumber();
-            /*msgList.add(shopName);
-            msgList.add(orderNum1);
-            msgList.add("已制作完成");
-            msgList.add(format1);*/
 
-            msgList.add("已制作完成");
-            msgList.add(orderNum1);
-            msgList.add(shopName);
-            msgList.add(format1);
-            /*
-            if(tbOrder.getOrderType()==1){
-                msgList.add("您的餐品已制作完成,请及时取餐");
-            }else if(tbOrder.getOrderType()==2){
-                msgList.add("您的餐品已制作完成,正在配送中");
-            }*/
-            UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
-            SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
-            userService.pushToSingle("制作完成", "亲爱的用户您好,您的订单已制作完成,请耐心等待配送!", userEntity.getClientid());
+            MyGlobalThreadPool.execute(() -> {
+                try {
+                    messageInfoDao.insert(messageInfo);
+                    //设置小程序消息推送
+                    CommonInfo one = commonInfoService.findOne(269);
+                    List<String> msgList = new ArrayList<>();
+                    Long shopId = tbOrder.getShopId();
+                    GoodsShop goodsShop = goodsShopDao.selectById(shopId);
+                    String shopName = goodsShop.getShopName();
+                    String orderNum1 = tbOrder.getOrderNumber();
+
+                    msgList.add("已制作完成");
+                    msgList.add(orderNum1);
+                    msgList.add(shopName);
+                    msgList.add(format1);
+
+                    UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
+                    SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
+                    // userService.pushToSingle("制作完成", "亲爱的用户您好,您的订单已制作完成,请耐心等待配送!", userEntity.getClientid());
+                } catch (Exception e) {
+                    log.error("订单制作完成通知发送失败,订单id:" + order.getOrderId() + ",异常消息:" + e.getMessage());
+                }
+            });
         } else if (order.getStatus() == 4) {
             if (tbOrder.getStatus().equals(4)) {
                 return Result.success();
@@ -1741,27 +1757,32 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
                 return result;
             }
             //管理端完成订单,则消息通知用户
-            //添加消息记录
-            MessageInfo messageInfo = new MessageInfo();
-            messageInfo.setTitle("订单完成");
-            messageInfo.setContent("您的订单已完成,欢迎下次光临");
-            messageInfo.setCreateAt(format1);
-            messageInfo.setUserId(tbOrder.getUserId().toString());
-            messageInfoDao.insert(messageInfo);
-            //设置小程序消息推送
-            CommonInfo one = commonInfoService.findOne(269);
-            List<String> msgList = new ArrayList<>();
-            Long shopId = tbOrder.getShopId();
-            GoodsShop goodsShop = goodsShopDao.selectById(shopId);
-            String shopName = goodsShop.getShopName();
-            String orderNum1 = tbOrder.getOrderNumber();
-            msgList.add("订单完成");
-            msgList.add(orderNum1);
-            msgList.add(shopName);
-            msgList.add(format1);
-            UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
-            SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
-            userService.pushToSingle("订单完成", "亲爱的用户您好,您的订单已完成,欢迎下次光临!", userEntity.getClientid());
+            MyGlobalThreadPool.execute(() -> {
+                try {
+                    MessageInfo messageInfo = new MessageInfo();
+                    messageInfo.setTitle("订单完成");
+                    messageInfo.setContent("您的订单已完成,欢迎下次光临");
+                    messageInfo.setCreateAt(format1);
+                    messageInfo.setUserId(tbOrder.getUserId().toString());
+                    messageInfoDao.insert(messageInfo);
+                    //设置小程序消息推送
+                    CommonInfo one = commonInfoService.findOne(269);
+                    List<String> msgList = new ArrayList<>();
+                    Long shopId = tbOrder.getShopId();
+                    GoodsShop goodsShop = goodsShopDao.selectById(shopId);
+                    String shopName = goodsShop.getShopName();
+                    String orderNum1 = tbOrder.getOrderNumber();
+                    msgList.add("订单完成");
+                    msgList.add(orderNum1);
+                    msgList.add(shopName);
+                    msgList.add(format1);
+                    UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
+                    SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
+                    // userService.pushToSingle("订单完成", "亲爱的用户您好,您的订单已完成,欢迎下次光临!", userEntity.getClientid());
+                } catch (Exception e) {
+                    log.error("订单完成通知发送失败,订单id:" + order.getOrderId() + ",异常消息:" + e.getMessage());
+                }
+            });
         } else if (order.getStatus() == 8) {
             if (tbOrder.getStatus().equals(8) || tbOrder.getStatus().equals(5)) {
                 return Result.success();
@@ -2038,52 +2059,40 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
         userMoneyService.updateMoney(1, goodsShop.getUserId(), shopMoney.doubleValue());
         log.info("订单id【{}】,商户用户钱包收入更新成功", orderId);
 
-        //管理端完成订单,则消息通知用户
-        //添加消息记录
-        MessageInfo messageInfo = new MessageInfo();
-        messageInfo.setTitle("订单完成");
-        messageInfo.setContent("您的订单已完成,欢迎下次光临");
-        messageInfo.setCreateAt(format);
-        messageInfo.setUserId(tbOrder.getUserId().toString());
-        messageInfoDao.insert(messageInfo);
-        //设置小程序消息推送
-        CommonInfo one = commonInfoService.findOne(269);
-        List<String> msgList = new ArrayList<>();
-
-        String shopName = goodsShop.getShopName();
-        String orderNum1 = tbOrder.getOrderNumber();
-        msgList.add("订单完成");
-        msgList.add(orderNum1);
-        msgList.add(shopName);
-        msgList.add(format);
-        UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
         MyGlobalThreadPool.execute(() -> {
             try {
-                SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
-            } catch (Exception e) {
-                log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", e);
-            }
-        });
+                // 用户通知
+                MessageInfo messageInfo = new MessageInfo();
+                messageInfo.setTitle("订单完成");
+                messageInfo.setContent("您的订单已完成,欢迎下次光临");
+                messageInfo.setCreateAt(format);
+                messageInfo.setUserId(tbOrder.getUserId().toString());
+                messageInfoDao.insert(messageInfo);
+                //设置小程序消息推送
+                CommonInfo one = commonInfoService.findOne(269);
+                List<String> msgList = new ArrayList<>();
+
+                String shopName = goodsShop.getShopName();
+                String orderNum1 = tbOrder.getOrderNumber();
+                msgList.add("订单完成");
+                msgList.add(orderNum1);
+                msgList.add(shopName);
+                msgList.add(format);
+                UserEntity userEntity = userDao.selectById(tbOrder.getUserId());
 
-        MyGlobalThreadPool.execute(() -> {
-            try {
-                userService.pushToSingle("订单完成", "您的订单已完成,欢迎下次光临!", userEntity.getClientid());
-            } catch (Exception e) {
-                log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", e);
-            }
-        });
-
-        String shopTemplate = commonInfoService.findOne(354).getValue();
-        List<String> msgListShop = new ArrayList<>();
-        msgListShop.add(indent.getIndentNumber());
-        msgListShop.add("订单完成");
-        msgListShop.add(DateUtils.format(new Date()));
-        UserEntity shopUser = userService.selectUserById(goodsShop.getUserId());
-        MyGlobalThreadPool.execute(() -> {
-            try {
+                SenInfoCheckUtil.sendMsg(userEntity.getOpenId(), one.getValue(), msgList, 1);
+                // userService.pushToSingle("订单完成", "您的订单已完成,欢迎下次光临!", userEntity.getClientid());
+
+                // 商家通知
+                String shopTemplate = commonInfoService.findOne(354).getValue();
+                List<String> msgListShop = new ArrayList<>();
+                msgListShop.add(indent.getIndentNumber());
+                msgListShop.add("订单完成");
+                msgListShop.add(DateUtils.format(new Date()));
+                UserEntity shopUser = userService.selectUserById(goodsShop.getUserId());
                 SenInfoCheckUtil.sendShopMsg(shopUser.getShopOpenId(), shopTemplate, msgListShop, 9);
             } catch (Exception e) {
-                log.error("订单:{},订单支付成功通知发送失败,失败原因:{}", e);
+                log.error("订单:{},订单完成通知发送失败,失败原因:{}", e);
             }
         });
 
@@ -2597,8 +2606,14 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
      * @return 支付顺序
      */
     private int selectCurrentOrderSequenceByShopId(TbOrder order, Long shopId) {
-        int count = appOrderDao.countCurDayPayByShopId(shopId, order.getPayTime());
+        RLock lock = redissonClient.getLock(String.format(RedisKey.ORDER_SEQUENCE_LOCK, shopId));
+        lock.lock();
+        try {
+            int count = appOrderDao.countCurDayPayByShopId(shopId, order.getPayTime());
 
-        return count + 1;
+            return count + 1;
+        } finally {
+            lock.unlock();
+        }
     }
 }

+ 8 - 8
src/main/java/com/sqx/modules/pay/controller/query/CashOutQueryDTO.java

@@ -56,7 +56,8 @@ public class CashOutQueryDTO extends PageQuery {
                 ","+(type==null?"":type)+
 //                ","+classify+
                 ","+(startTime==null?"":startTime)+
-                ","+(endTime==null?"":endTime)+",";
+                ","+(endTime==null?"":endTime)+
+                ","+(riderStationId==null?"":riderStationId)+",";
     }
     public String toStrMessage() {
         StringBuffer stringBuffer=new StringBuffer();
@@ -79,13 +80,12 @@ public class CashOutQueryDTO extends PageQuery {
                 case 2: stringBuffer.append("状态:已拒绝;");break;
             }
         }
-        //不展示默认查询条件
-//        if(StringUtils.hasText(type)){
-//            switch (type){
-//                case "1": stringBuffer.append("状态:用户提现;");break;
-//                case "2": stringBuffer.append("状态:退保证金;");break;
-//            }
-//        }
+        if(StringUtils.hasText(type)){
+            switch (type){
+                case "1": stringBuffer.append("类型:用户提现;");break;
+                case "2": stringBuffer.append("类型:商户提现;");break;
+            }
+        }
         return stringBuffer.toString();
     }
 }

+ 3 - 1
src/main/java/com/sqx/modules/pay/service/impl/CashOutServiceImpl.java

@@ -610,6 +610,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
         row.add(cashOutVO.getCreateAt());
         row.add(StringUtils.isEmpty(cashOutVO.getOutAt()) ? "" : cashOutVO.getOutAt());
         row.add(cashOutVO.getOrderNumber());
+        row.add(cashOutVO.getStationName());
         return row;
     }
 
@@ -635,6 +636,7 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
                 "拒绝原因",
                 "申请时间",
                 "转账拒绝时间",
-                "转账订单号");
+                "转账订单号",
+                "骑手站点");
     }
 }

+ 7 - 7
src/main/java/com/sqx/modules/utils/fieYun/FeiYunUtils.java

@@ -968,9 +968,9 @@ public class FeiYunUtils {
                     //长度十个字
                     stringBuilder.append(goods_name_start).append("名称").append(goods_name_end);
                     if (sum_money_start != null) {
-                        stringBuilder.append("     ");
+                        stringBuilder.append("      ");
                     } else {
-                        stringBuilder.append("        ");
+                        stringBuilder.append("        ");
                     }
 
                 }
@@ -999,7 +999,7 @@ public class FeiYunUtils {
                     goodsMoney = goodsMoney.add(sumMoney);
                     String name;
                     if (StringUtils.isNotEmpty(orderGoods.getSkuMessage())) {
-                        name = orderGoods.getGoodsName() + "(" + orderGoods.getSkuMessage() + ")";
+                        name = orderGoods.getGoodsName() + "(" + orderGoods.getSkuMessage() + ")";
                     } else {
                         name = orderGoods.getGoodsName();
                     }
@@ -1007,12 +1007,12 @@ public class FeiYunUtils {
 
                     StringBuilder space = new StringBuilder();
                     if (sum_money_start != null) {
-                        for (int len = (name.length() - 1); len < 7; len++) {
-                            space.append(" ");
+                        for (int len = name.length(); len < 8; len++) {
+                            space.append(" ");
                         }
                     }else{
-                        for (int len = (name.length() - 1); len < 10; len++) {
-                            space.append(" ");
+                        for (int len = name.length(); len < 10; len++) {
+                            space.append(" ");
                         }
                     }
 

+ 2 - 2
src/main/java/com/sqx/scheduler/config/ScheduledConfig.java

@@ -25,9 +25,9 @@ public class ScheduledConfig implements AsyncConfigurer {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         executor.setCorePoolSize(10);
         executor.setMaxPoolSize(20);
-        executor.setQueueCapacity(50);
+        executor.setQueueCapacity(150);
         executor.setKeepAliveSeconds(60);
-        executor.setThreadNamePrefix("wm-application-task-");
+        executor.setThreadNamePrefix("wm-task-");
         executor.initialize();
         return executor;
     }

+ 39 - 15
src/main/java/com/sqx/scheduler/export/ExportScheduler.java

@@ -1,15 +1,15 @@
 package com.sqx.scheduler.export;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.sqx.common.utils.SftpUtil;
 import com.sqx.modules.app.entity.RechargeRecord;
 import com.sqx.modules.app.service.RechargeRecordService;
 import com.sqx.modules.app.service.UserMoneyDetailsService;
 import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.datacentre.query.RankListQuery;
 import com.sqx.modules.datacentre.query.ShopCenterQuery;
 import com.sqx.modules.datacentre.service.DataCentreService;
-import com.sqx.modules.exportExecl.mapper.ExportJobMapper;
+import com.sqx.modules.exportExecl.dto.AccountEntry;
 import com.sqx.modules.exportExecl.model.ExportJob;
 import com.sqx.modules.exportExecl.service.ExportJobService;
 import com.sqx.modules.order.service.AppOrderService;
@@ -23,18 +23,15 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -118,6 +115,10 @@ public class ExportScheduler {
                         excelData=getDepositExcelData(exportJob);
                     }else if("shopCenter".equals(fileType)){
                         excelData=getShopCenterExcelData(exportJob);
+                    }else if("accountEntry".equals(fileType)){
+                        excelData=getAccountEntryExcelData(exportJob);
+                    }else if("rankList".equals(fileType)){
+                        excelData=getRankListExcelData(exportJob);
                     }else{
                         continue;
                     }
@@ -161,6 +162,7 @@ public class ExportScheduler {
             log.info("执行:通用数据导出定时任务"+exportJob.getExportId()+"......执行任务完成,执行时长:{} s", (edTime - bgTime) / 1000);
         }
     }
+
     //订单导出
     private ExcelData getOrderExcelData(ExportJob exportJob){
         String[] conditions=exportJob.getConditions().split(",",-1);
@@ -186,9 +188,9 @@ public class ExportScheduler {
         String endTime=conditions[10];
         String payStartTime=conditions[11];
         String payEndTime=conditions[12];
-        ExcelData excelData = appOrderService.excelAllOrderAdmin(status, phone, shopId, userName, orderNumber, orderType, shopName, riderPhone, startTime, endTime,payStartTime,payEndTime);
+        String riderStationId=conditions[13];
 
-        return excelData;
+        return appOrderService.excelAllOrderAdmin(status, phone, shopId, userName, orderNumber, orderType, shopName, riderPhone, startTime, endTime,payStartTime,payEndTime,riderStationId);
     }
 
     //充值记录导出
@@ -196,7 +198,7 @@ public class ExportScheduler {
         String[] conditions=exportJob.getConditions().split(",",-1);
         String rechargeOrder=conditions[1];
         String acount=conditions[2];
-        QueryWrapper qw=new QueryWrapper<RechargeRecord>();
+        QueryWrapper<RechargeRecord> qw=new QueryWrapper<RechargeRecord>();
         if(StringUtils.hasText(rechargeOrder)){
             qw.eq("order_no",rechargeOrder);
         }
@@ -205,16 +207,16 @@ public class ExportScheduler {
         }
         ExcelData data = new ExcelData();
         data.setName("订单列表");
-        List<String> titles = new ArrayList();
+        List<String> titles = new ArrayList<>();
         titles.add("用户id");titles.add("编号");titles.add("充值金额");titles.add("充值前余额");
         titles.add("充值后余额"); titles.add("被充值账号(手机号)");titles.add("被充值名称");titles.add("被充值昵称");
         titles.add("被充值头像"); titles.add("更新时间");titles.add("充值时间");titles.add("充值人账号");
         titles.add("备注");
         data.setTitles(titles);
         List<RechargeRecord> recordList=rechargeRecordService.list(qw);
-        List<List<Object>> rows = new ArrayList();
+        List<List<Object>> rows = new ArrayList<>();
         for (RechargeRecord record:recordList){
-            List<Object> row = new ArrayList();
+            List<Object> row = new ArrayList<>();
             row.add(record.getUserId());
             row.add(record.getOrderNo());
             row.add(record.getAmount());
@@ -247,8 +249,8 @@ public class ExportScheduler {
         queryDTO.setType(conditions[5]);
         queryDTO.setStartTime(conditions[6]);
         queryDTO.setEndTime(conditions[7]);
-        ExcelData excelData = cashOutService.excelPayDetails(queryDTO);
-        return excelData;
+        queryDTO.setRiderStationId(conditions[8]);
+        return cashOutService.excelPayDetails(queryDTO);
     }
 
     //导出保证金记录
@@ -260,9 +262,8 @@ public class ExportScheduler {
         queryDTO.setClassify(conditions[3]);
         queryDTO.setStartTime(conditions[4]);
         queryDTO.setEndTime(conditions[5]);
-        ExcelData excelData = userMoneyDetailsService.excelWalletDetails(queryDTO);
 
-        return excelData;
+        return userMoneyDetailsService.excelWalletDetails(queryDTO);
     }
 
     //导出商铺收益排行
@@ -276,4 +277,27 @@ public class ExportScheduler {
         query.setDateType(conditions[5]);
         return dataCentreService.excelShopCenter(query);
     }
+    //导出入账管理
+    private ExcelData getAccountEntryExcelData(ExportJob exportJob) {
+        String[] conditions=exportJob.getConditions().split(",",-1);
+        AccountEntry query =new AccountEntry();
+        query.setShopName(conditions[1]);
+        query.setShopPhone(conditions[2]);
+        query.setUserPhone(conditions[3]);
+        query.setCouponName(conditions[4]);
+        query.setOrderNumber(conditions[5]);
+        query.setStartTime(conditions[6]);
+        query.setEndTime(conditions[7]);
+        return userMoneyDetailsService.excelAccountEntry(query);
+    }
+    //导出骑手收益排行
+    private ExcelData getRankListExcelData(ExportJob exportJob){
+        String[] conditions=exportJob.getConditions().split(",",-1);
+        RankListQuery query =new RankListQuery();
+        query.setAddress(conditions[1]);
+        query.setDateType(conditions[2]);
+        query.setDate(conditions[3]);
+        query.setRiderStationId(conditions[4]);
+        return dataCentreService.excelRankingList(query);
+    }
 }

+ 13 - 16
src/main/java/com/sqx/scheduler/order/OrderScheduler.java

@@ -19,8 +19,7 @@ import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -88,10 +87,8 @@ public class OrderScheduler {
      * 每分钟30秒时运行一次
      */
     @Async
-    @Scheduled(cron = "30 */1 * * * ?")
+    @Scheduled(cron = "30 */2 * * * ?")
     public void prodIngOrderAutoCompleted(){
-        RLock lock = redissonClient.getLock(SchedulerLock.ORDER_OF_PROD_AUTO_COMPLETED_LOCK);
-        lock.lock();
         try {
             log.info("自动制作完成制作中订单任务开始运行");
             // 获取配置:是否开启制作中订单自动完成
@@ -105,6 +102,8 @@ public class OrderScheduler {
                 if (CollUtil.isEmpty(orders)) {
                     log.info("当前时间段没有需要自动制作完成的订单");
                 } else {
+                    // 订单随机排序
+                    Collections.shuffle(orders);
                     for (TbOrder order: orders){
                         try {
                             log.info("订单:{},开始自动制作完成", order.getOrderId());
@@ -121,8 +120,6 @@ public class OrderScheduler {
             log.info("自动制作完成制作中订单任务运行成功");
         } catch (Exception e) {
             log.error("制作中订单自动制作完成任务运行失败失败原因:【{}】", e);
-        } finally {
-            lock.unlock();
         }
     }
 
@@ -145,17 +142,17 @@ public class OrderScheduler {
             List<TbOrder> orders = orderService.list(queryWrapper);
 
             for (TbOrder order: orders) {
-                LocalDateTime updateTime = LocalDateTime.parse(order.getUpdateTime(), df);
-                // 计算当前订单什么时候超时完成
-                LocalDateTime overDateTime = updateTime.plusHours(Integer.parseInt(one.getValue()));
-                if (LocalDateTime.now().isAfter(overDateTime)) {
-                    log.info("订单id:{},开始自动完成", order.getOrderId());
-                    try {
+                try {
+                    LocalDateTime updateTime = LocalDateTime.parse(order.getUpdateTime(), df);
+                    // 计算当前订单什么时候超时完成
+                    LocalDateTime overDateTime = updateTime.plusHours(Integer.parseInt(one.getValue()));
+                    if (LocalDateTime.now().isAfter(overDateTime)) {
+                        log.info("订单id:{},开始自动完成", order.getOrderId());
                         orderService.accomplishOrders(order.getOrderId(),2);
-                    } catch (Exception e) {
-                        log.error("订单id:{},开始自动完成失败,失败原因【{}】", order.getOrderId(), e);
+                        log.info("订单id:{},完成自动完成", order.getOrderId());
                     }
-                    log.info("订单id:{},完成自动完成", order.getOrderId());
+                } catch (Exception e) {
+                    log.error("订单id:{},开始自动完成失败,失败原因【{}】", order.getOrderId(), e);
                 }
             }
             log.info("自动完成订单任务运行成功");

+ 32 - 0
src/main/resources/mapper/dataCentre/dataCenterMapper.xml

@@ -199,6 +199,38 @@
         ORDER BY moneyOrder DESC
     </select>
 
+    <select id="excelRankList" resultType="com.sqx.modules.errand.entity.TbIndent">
+        SELECT
+        *,
+        @rank_num := @rank_num + 1 AS rankNum
+        FROM
+        ( SELECT @rank_num := 0 ) r,
+        ( SELECT ifnull( sum( rider_money ), 0 ) AS moneyOrder, i.rider_user_id, u.nick_name as nickName, u.avatar as
+        avatar,
+        i.user_province as userProvince, i.user_city as userCity, i.user_district as userDistrict,rs.station_name as stationName
+        FROM tb_indent i left join tb_user u on i.rider_user_id = u.user_id
+        left join rider_station rs on u.rider_station_id=rs.id
+        WHERE i.rider_user_id IS NOT NULL
+        <if test="query.address!=null and query.address!=''">
+            and (i.user_province like concat('%',#{query.address},'%') or i.user_city like concat('%',#{query.address},'%') or
+            i.user_district like concat('%',#{query.address},'%'))
+        </if>
+        <if test="query.dateType=='day'">
+            and date_format(i.create_time,'%Y-%m-%d')=date_format(#{query.date},'%Y-%m-%d')
+        </if>
+        <if test="query.dateType=='month'">
+            and date_format(i.create_time,'%Y-%m')=date_format(#{query.date},'%Y-%m')
+        </if>
+        <if test="query.dateType=='year'">
+            and date_format(i.create_time,'%Y')=date_format(#{query.date},'%Y')
+        </if>
+        <if test="query.riderStationId != null and query.riderStationId !=''">
+            and u.rider_station_id=#{query.riderStationId}
+        </if>
+        GROUP BY i.rider_user_id ) a
+        ORDER BY moneyOrder DESC
+    </select>
+
     <select id="selectNewShopCount" resultType="int">
         select count(*) from goods_shop where 1 = 1
         <if test="query.dateType=='day'">

+ 10 - 3
src/main/resources/mapper/order/OrderMapper.xml

@@ -86,7 +86,8 @@
         shopPhone,
         tiu.user_name as riderNickName,tiu.phone as riderPhone,ti.indent_id as indentId,ti.is_rider as isRider,
         ti.rider_user_id as riderUserId, tcu.money as couponMoney,
-        apr.discount_amount as activityDiscountAmount, ai.title activityTitle,tiu.rider_station_id as riderStationId,rs.station_name as stationName
+        apr.discount_amount as activityDiscountAmount, ai.title activityTitle,tiu.rider_station_id as riderStationId,
+        (select rs.station_name from rider_station rs where  rs.id =tiu.rider_station_id ) as stationName
         from tb_order tor
         left join tb_user tu on tor.user_id = tu.user_id
         left join goods_shop gs on tor.shop_id = gs.shop_id
@@ -95,7 +96,6 @@
         left join tb_coupon_user tcu on tor.coupon_id = tcu.id
         left join activity_part_record apr on apr.order_id = tor.order_id
         left join activity ai on ai.id = apr.activity_id
-        left join rider_station rs on tiu.rider_station_id = rs.id
         where 1 = 1
         <if test="riderPhone!=null and riderPhone!=''">
             and tiu.phone =#{riderPhone}
@@ -153,7 +153,8 @@
         shopPhone,
         tiu.nick_name as riderNickName,tiu.phone as riderPhone,ti.indent_id as indentId,ti.is_rider as isRider,
         ti.rider_user_id as riderUserId, tcu.money as couponMoney,
-        apr.discount_amount as activityDiscountAmount, ai.title activityTitle,ogg.detail,ogg.sumPrice
+        apr.discount_amount as activityDiscountAmount, ai.title activityTitle,ogg.detail,ogg.sumPrice,
+        (select rs.station_name from rider_station rs where  rs.id =tiu.rider_station_id ) as stationName
         from tb_order tor
         left join tb_user tu on tor.user_id = tu.user_id
         left join goods_shop gs on tor.shop_id = gs.shop_id
@@ -204,6 +205,9 @@
         <if test="payEndTime != null and payEndTime != '' ">
             and date_format(tor.pay_time,'%Y-%m-%d') &lt;= date_format(#{payEndTime},'%Y-%m-%d')
         </if>
+        <if test="riderStationId!=null and riderStationId!=''">
+            and tiu.rider_station_id=#{riderStationId}
+        </if>
         order by tor.pay_time desc, tor.create_time desc
     </select>
 
@@ -253,6 +257,9 @@
         <if test="payEndTime != null and payEndTime != '' ">
             and date_format(tor.pay_time,'%Y-%m-%d') &lt;= date_format(#{payEndTime},'%Y-%m-%d')
         </if>
+        <if test="riderStationId!=null and riderStationId!=''">
+            and tiu.rider_station_id=#{riderStationId}
+        </if>
         order by tor.pay_time desc, tor.create_time desc
     </select>
 

+ 4 - 2
src/main/resources/mapper/pay/CashDao.xml

@@ -291,7 +291,7 @@
             <if test="params.openBank != null and params.openBank != '' and params.openBank != 'null'">
                 and co.open_bank = #{params.openBank}
             </if>
-            <if test="params.riderStationId != null">
+            <if test="params.riderStationId != null and params.riderStationId != '' ">
                 and tu.rider_station_id = #{params.riderStationId}
             </if>
         </where>
@@ -322,9 +322,11 @@
     </select>
 
     <select id="excelPayDetails" resultType="com.sqx.modules.pay.vo.CashOutVO">
-        select gh.shop_name, co.*
+        select gh.shop_name, co.*,rs.station_name as stationName
         from cash_out co
         left join goods_shop gh on gh.shop_id = co.shop_id
+        left join tb_user tu on tu.user_id=co.user_id
+        left join rider_station rs on tu.rider_station_id=rs.id
         <include refid="cashOutQueryCondition"></include>
         order by id desc
     </select>

+ 78 - 0
src/main/resources/mapper/userMoney/UserMoneyDetailsMapper.xml

@@ -180,6 +180,7 @@
         ORDER BY umd2.id desc
         LIMIT #{limit} OFFSET #{row}
     </select>
+
     <select id="accountEntryManagementDetailsCount" resultType="java.lang.Integer">
         SELECT
         count(*)
@@ -237,4 +238,81 @@
             and umd2.create_time >= #{startTime} and #{endTime} >= umd2.create_time
         </if>
     </select>
+    <select id="excelAccountEntry" resultType="com.sqx.modules.app.entity.UserMoneyDetails">
+        SELECT
+        umd2.id,
+        umd2.orderNumber,
+        umd2.user_id as userId,
+        umd2.shop_id as shopId,
+        umd2.title,
+        umd2.content,
+        umd2.type,
+        umd2.classify,
+        umd2.money,
+        umd2.create_time as createTime,
+        umd2.state,
+        tbu.user_name as userName,
+        tbu.phone as userPhone,
+        gs.shop_name as shopName,
+        gs.phone as shopPhone,
+        tcu.coupon_name as couponName,
+        tcu.money as couponMoney,
+        apr.discount_amount as activityDiscountAmount,
+        tbo.errand_money as errandMoney
+        FROM
+        (
+        SELECT
+        RIGHT( umd.title, 18 ) AS orderNumber,
+        umd.id,
+        umd.user_id,
+        umd.shop_id,
+        umd.title,
+        umd.content,
+        umd.type,
+        umd.classify,
+        umd.money,
+        umd.create_time,
+        umd.state,
+        umd.children_id
+        FROM
+        `user_money_details` umd
+        WHERE
+        umd.type = 1
+        AND umd.classify = 3
+        AND umd.shop_id IS NOT NULL
+        AND umd.state=2
+        AND umd.title LIKE '商户订单收入' '%'
+        ) umd2
+        LEFT JOIN tb_order tbo on tbo.order_number=umd2.orderNumber
+        LEFT JOIN tb_user tbu on tbu.user_id=tbo.user_id
+        LEFT JOIN goods_shop gs on gs.shop_id=tbo.shop_id
+        LEFT JOIN tb_coupon_user tcu on tbo.coupon_id = tcu.id
+        LEFT JOIN activity_part_record apr on apr.order_id = tbo.order_id
+        where 1 = 1
+        <if test="query.shopName != null and query.shopName != ''">
+            and gs.shop_name like  concat("%", #{query.shopName}, "%")
+        </if>
+
+        <if test="query.shopPhone != null and query.shopPhone != ''">
+            and gs.phone= #{query.shopPhone}
+        </if>
+
+        <if test="query.userPhone != null and query.userPhone != ''">
+            and tbu.phone=#{query.userPhone}
+        </if>
+
+        <if test="query.couponName != null and query.couponName != ''">
+            and tcu.coupon_name like  concat("%", #{query.couponName}, "%")
+        </if>
+
+        <if test="query.orderNumber != null and query.orderNumber != ''">
+            and tbo.order_number = #{query.orderNumber}
+        </if>
+
+        <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+            and umd2.create_time >= #{query.startTime} and #{query.endTime} >= umd2.create_time
+        </if>
+        ORDER BY umd2.id desc
+    </select>
+
 </mapper>