lubo 4 mesi fa
parent
commit
f44d4dd348

+ 54 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/subsidy/SubsidyQueueController.java

@@ -1,12 +1,18 @@
 package com.ruoyi.web.controller.subsidy;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Arrays;
-import java.util.Map;
-
+import java.util.*;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.ruoyi.common.excel.ExcelResult;
+import com.ruoyi.common.excel.ImportMessage;
+import com.ruoyi.subsidy.SubsidyQueueImportListener;
+import com.ruoyi.subsidy.domain.bo.SubsidyQueueImportBo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueMoveBo;
 import com.ruoyi.subsidy.enums.SubsidyCountType;
+import com.ruoyi.system.domain.vo.SysUserImportVo;
+import com.ruoyi.system.listener.SysUserImportListener;
+import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.*;
@@ -27,9 +33,7 @@ import com.ruoyi.subsidy.domain.vo.SubsidyQueueVo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueBo;
 import com.ruoyi.subsidy.service.ISubsidyQueueService;
 import com.ruoyi.common.core.page.TableDataInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiOperation;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 补贴排队Controller
@@ -175,4 +179,46 @@ public class SubsidyQueueController extends BaseController {
         ExcelUtil.exportExcel(list, "排队订单", SubsidyQueueVo.class, response);
     }
 
+
+    @ApiOperation("导入补贴列表")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true),
+    })
+    @Log(title = "导入补贴列表", businessType = BusinessType.IMPORT)
+    @SaCheckPermission("subsidy:subsidyQueue:import")
+    @PostMapping("/importData/{businessId}")
+    public R<ImportMessage> importData(@RequestPart("file") MultipartFile file, @ApiParam("主键串") @NotNull(message = "主键不能为空")
+                                      @PathVariable Long businessId) throws Exception {
+        ExcelResult<SubsidyQueueImportBo> result = ExcelUtil.importExcel(file.getInputStream(), SubsidyQueueImportBo.class, new SubsidyQueueImportListener(businessId));
+        List<SubsidyQueueImportBo> list = result.getList();
+        List<SubsidyQueueImportBo> validList = list.stream().filter(item -> "正排队".equals(item.getQueueStatus())).sorted(Comparator.comparing(SubsidyQueueImportBo::getQueueOrder)).collect(Collectors.toList());
+        List<SubsidyQueueImportBo> noValidList = list.stream().filter(item -> "已完成".equals(item.getQueueStatus())).collect(Collectors.toList());
+
+        int failureNum = 0;
+        int successNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+
+        ImportMessage importMessage = new ImportMessage();
+        if(CollectionUtil.isNotEmpty(noValidList))
+        {
+            for (SubsidyQueueImportBo bo : noValidList) {
+                failureNum++;
+                failureMsg.append("<br/>").append(failureNum).append("、订单编号:").append(bo.getOrderNo()).append(" 导入失败:").append("已完成");
+            }
+        }
+        List<SubsidyQueueImportBo> errorList = iSubsidyQueueService.importData(businessId,validList);
+
+        if (failureNum > 0) {
+            failureMsg.insert(0, "数据导入成功共 " + successNum + " 条! 导入失败共 " + failureNum + " 条!数据格式不正确,错误如下:");
+            List failureList = Arrays.asList(failureMsg.toString().split("<br/>"));
+            importMessage.setMessageList(failureList);
+            importMessage.setMessage(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据导入成功!共" + successNum + " 条");
+            importMessage.setMessage(successMsg.toString());
+        }
+        return R.ok(importMessage);
+    }
+
 }

+ 2 - 0
ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelResult.java

@@ -23,4 +23,6 @@ public interface ExcelResult<T> {
      * 导入回执
      */
     String getAnalysis();
+
+
 }

+ 20 - 0
ruoyi-common/src/main/java/com/ruoyi/common/excel/ImportMessage.java

@@ -0,0 +1,20 @@
+package com.ruoyi.common.excel;
+
+
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RequiredArgsConstructor
+@Slf4j
+@Data
+public class ImportMessage {
+
+   private String message = "";
+
+   private List<String> messageList = new ArrayList<>();
+
+}

+ 52 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/SubsidyQueueImportListener.java

@@ -0,0 +1,52 @@
+package com.ruoyi.subsidy;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.common.excel.ExcelListener;
+import com.ruoyi.common.excel.ExcelResult;
+import com.ruoyi.subsidy.domain.bo.SubsidyQueueImportBo;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+@Slf4j
+public class SubsidyQueueImportListener extends AnalysisEventListener<SubsidyQueueImportBo> implements ExcelListener<SubsidyQueueImportBo> {
+    private final Long businessId;
+
+    private List<SubsidyQueueImportBo> originDataList;
+
+    public SubsidyQueueImportListener(Long businessId) {
+        this.businessId = businessId;
+    }
+
+    @Override
+    public ExcelResult<SubsidyQueueImportBo> getExcelResult() {
+        return new ExcelResult<SubsidyQueueImportBo>() {
+
+            @Override
+            public String getAnalysis() {
+                return null;
+            }
+
+            @Override
+            public List<SubsidyQueueImportBo> getList() {
+                return originDataList;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+
+    @Override
+    public void invoke(SubsidyQueueImportBo subsidyQueueImportBo, AnalysisContext analysisContext) {
+        this.originDataList.add(subsidyQueueImportBo);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+    }
+}

+ 127 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/domain/bo/SubsidyQueueImportBo.java

@@ -0,0 +1,127 @@
+package com.ruoyi.subsidy.domain.bo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.convert.ExcelDateTimeConvert;
+import com.ruoyi.common.core.domain.BaseTimeEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.onlineorder.enums.OnlineOrderRefundStatus;
+import com.ruoyi.subsidy.enums.PurchaseSource;
+import com.ruoyi.subsidy.enums.SubsidyCancelType;
+import com.ruoyi.subsidy.enums.SubsidyStatus;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 补贴排队导入业务对象 tb_subsidy_queue
+ *
+ * @author lubo
+ * @date 2025-11-18
+ */
+@Data
+@EqualsAndHashCode
+@ExcelIgnoreUnannotated
+@ApiModel("补贴排队导入业务对象")
+public class SubsidyQueueImportBo implements Serializable {
+
+
+    /**
+     * 订单编号
+     */
+    @ApiModelProperty(value = "订单编号", required = true)
+    @ExcelProperty(value = "订单编号")
+    private String orderNo;
+
+    /**
+     * 用户手机号
+     */
+    @ExcelProperty(value = "用户手机号")
+    @ApiModelProperty(value = "用户手机号", required = true)
+    private String userMobile;
+
+
+    /**
+     * 申请时间
+     */
+    @ApiModelProperty(value = "申请时间", required = true)
+    @ExcelProperty(value = "申请时间",converter = ExcelDateTimeConvert.class)
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    private String applyTime;
+
+
+    /**
+     * 排队时间
+     */
+    @ApiModelProperty(value = "排队时间", required = true)
+    @ExcelProperty(value = "申请时间",converter = ExcelDateTimeConvert.class)
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    private Date queueTime;
+
+    /**
+     * 当前所属商家名称
+     */
+    @ApiModelProperty(value = "店铺名称", required = true)
+    @ExcelProperty(value = "店铺名称")
+    private String businessName;
+
+    /**
+     * 排队状态
+     */
+    @ApiModelProperty(value = "排队状态", required = true)
+    @ExcelProperty(value = "排队状态")
+    private String queueStatus;
+
+
+
+    /**
+     * 订单实付金额
+     */
+    @ApiModelProperty(value = "订单金额", required = true)
+    @ExcelProperty(value = "订单金额")
+    private BigDecimal payAmount;
+
+
+    /**
+     * 排队名次
+     */
+    @ApiModelProperty(value = "排队名次", required = true)
+    @ExcelProperty(value = "排队名次")
+    private Integer queueOrder;
+
+
+    /**
+     * 已兑换酷豆
+     */
+    @ApiModelProperty(value = "已兑换酷豆", required = true)
+    @ExcelProperty(value = "已兑换酷豆")
+    private BigDecimal exchangePoints;
+
+
+    /**
+     * 应返金额
+     */
+    @ApiModelProperty(value = "应返金额", required = true)
+    @ExcelProperty(value = "应返金额")
+    private BigDecimal shouldSubsidyAmount;
+
+    /**
+     * 已补贴金额
+     */
+    @ApiModelProperty(value = "已返金额", required = true)
+    @ExcelProperty(value = "已返金额")
+    private BigDecimal actualSubsidyAmount;
+
+}

+ 9 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/ISubsidyQueueService.java

@@ -4,6 +4,7 @@ import com.ruoyi.onlineorder.domain.OnlineOrder;
 import com.ruoyi.onlineorder.enums.OnlineOrderRefundStatus;
 import com.ruoyi.subsidy.domain.SubsidyQueue;
 import com.ruoyi.subsidy.domain.bo.SubsidyExchangePointBo;
+import com.ruoyi.subsidy.domain.bo.SubsidyQueueImportBo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueMoveBo;
 import com.ruoyi.subsidy.domain.vo.SubsidyQueueVo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueBo;
@@ -179,4 +180,12 @@ public interface ISubsidyQueueService {
      * @return 统计结果
      */
     BigDecimal getStatistics(Long businessId, SubsidyCountType countType);
+
+    /**
+     * 导入数据
+     * @param businessId 商家ID
+     * @param validList 校验后的数据
+     * @return 导入结果
+     */
+    List<SubsidyQueueImportBo> importData(Long businessId,List<SubsidyQueueImportBo> validList);
 }

+ 17 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidyQueueServiceImpl.java

@@ -37,6 +37,7 @@ import com.ruoyi.subsidy.domain.SubsidyMode;
 import com.ruoyi.subsidy.domain.SubsidyQueue;
 import com.ruoyi.subsidy.domain.bo.SubsidyExchangePointBo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueBo;
+import com.ruoyi.subsidy.domain.bo.SubsidyQueueImportBo;
 import com.ruoyi.subsidy.domain.bo.SubsidyQueueMoveBo;
 import com.ruoyi.subsidy.domain.vo.SubsidyQueueVo;
 import com.ruoyi.subsidy.enums.PurchaseSource;
@@ -731,6 +732,22 @@ public class SubsidyQueueServiceImpl implements ISubsidyQueueService {
         return this.baseMapper.getSubsidyAmount(businessId,countType.getCode());
     }
 
+    @Override
+    public List<SubsidyQueueImportBo> importData(Long businessId,List<SubsidyQueueImportBo> validList) {
+        List<SubsidyQueueImportBo> errorList = new ArrayList<>();
+        Long l = validQueueCount(businessId, null);
+        for(SubsidyQueueImportBo bo:validList) {
+            boolean exists = this.baseMapper.exists(new LambdaQueryWrapper<SubsidyQueue>().eq(SubsidyQueue::getOrderNo, bo.getOrderNo()));
+            if(exists) {
+                errorList.add( bo);
+                continue;
+            }
+            l++;
+            SubsidyQueue subsidyQueue = new SubsidyQueue();
+        }
+        return Collections.emptyList();
+    }
+
     private List<Long> validQueueIds(Long businessId) {
         return this.baseMapper.validQueueIds(businessId);
     }