xuhy
2025-04-24 641ad2ace982eece2637c6a79d46094b3cb0d4ea
大屏回收订单
5个文件已修改
2个文件已添加
366 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -268,6 +268,11 @@
            }
            @Override
            public R<List<Order>> getTodayOrderData() {
                return R.fail(cause.getMessage());
            }
            @Override
            public R<Boolean> changeOrderState(String orderId, Integer state) {
                return R.fail(cause.getMessage());
            }
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -454,4 +454,10 @@
    @GetMapping(value = "/order/receiving")
    R<String> receiving(@RequestParam("orderId")String orderId, @RequestParam("recycleSubsidy")BigDecimal recycleSubsidy);
    /**
     * 今日订单数据
     * @return
     */
    @GetMapping(value = "/order/getTodayOrderData")
    R<List<Order>> getTodayOrderData();
}
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java
@@ -1,24 +1,40 @@
package com.ruoyi.admin.large.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.admin.large.model.AnalysisOrderData;
import com.ruoyi.admin.large.model.query.OrderDataQuery;
import com.ruoyi.admin.large.service.AnalysisOrderDataService;
import com.ruoyi.admin.service.SysUserService;
import com.ruoyi.admin.utils.ImportExcelUtil;
import com.ruoyi.admin.utils.WebUtils;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.entity.Order;
import com.ruoyi.order.api.feignClient.OrderClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
 * <p>
@@ -35,12 +51,14 @@
    private final AnalysisOrderDataService analysisOrderDataService;
    private final TokenService tokenService;
    private final SysUserService sysUserService;
    private final OrderClient orderClient;
    @Autowired
    public AnalysisOrderDataController(AnalysisOrderDataService analysisOrderDataService, TokenService tokenService, SysUserService sysUserService) {
    public AnalysisOrderDataController(AnalysisOrderDataService analysisOrderDataService, TokenService tokenService, SysUserService sysUserService, OrderClient orderClient) {
        this.analysisOrderDataService = analysisOrderDataService;
        this.tokenService = tokenService;
        this.sysUserService = sysUserService;
        this.orderClient = orderClient;
    }
    /**
@@ -94,5 +112,93 @@
    public R<Boolean> deleteById(@RequestParam("id") Integer id) {
        return R.ok(analysisOrderDataService.removeById(id));
    }
    @ApiOperation(value = "回收订单导入模板下载")
    @GetMapping("/import-template")
    public void importTemplate() {
        List<AnalysisOrderData> contractList = new ArrayList<>();
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), AnalysisOrderData.class, contractList);
        HttpServletResponse response = WebUtils.response();
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("回收订单导入模板.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("回收订单导入模板下载失败!");
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    @ApiOperation(value = "回收订单导入")
    @PostMapping("/importAnalysisOrder")
    @ApiImplicitParam(paramType = "form", name = "file", value = "文件对象", required = true, dataType = "__file")
    public R<String> importAnalysisOrder(@RequestPart("file") MultipartFile file) {
        ImportParams params = new ImportParams();
//        params.setTitleRows(1);//标题行数
        params.setHeadRows(1); //表头行数
        try {
            InputStream inputStream = file.getInputStream();
            List<AnalysisOrderData> analysisOrderDataList = ExcelImportUtil.importExcel(inputStream, AnalysisOrderData.class, params);
            List<String> errors = new ArrayList<>();
            Iterator<AnalysisOrderData> iterator = analysisOrderDataList.iterator();
            while (iterator.hasNext()){
                AnalysisOrderData analysisOrderData = iterator.next();
                try {
                    analysisOrderData.setOrderDate(new SimpleDateFormat("yyyy-MM-dd").parse(analysisOrderData.getOrderDateStr()));
                }catch (Exception e){
                    errors.add("回收订单编号:["+analysisOrderData.getOrderNum()+"],时间格式化错误,忽略导入");
                    iterator.remove();
                }
            }
            analysisOrderDataService.saveBatch(analysisOrderDataList);
            Integer errorLines = 0;
            Integer successLines = 0;
            errorLines += errors.size();
            successLines += (analysisOrderDataList.size() - errorLines);
            R<String> stringApiResult = ImportExcelUtil.importReturnMsg(errorLines, successLines, errors);
            return stringApiResult;
        } catch (Exception e) {
            System.out.println("回收订单导入失败!" + e.getMessage());
            e.printStackTrace();
        }
        return R.ok();
    }
    @ApiOperation(value = "同步家电回收哥当日订单数据")
    @PostMapping("/synchronousOrder")
    public R<String> synchronousOrder() {
        // 查询家电回收哥今日订单数据
        List<Order> orders = orderClient.getTodayOrderData().getData();
        if(!CollectionUtils.isEmpty(orders)){
            List<AnalysisOrderData> analysisOrderDataList = new ArrayList<>();
            orders.forEach(order -> {
                AnalysisOrderData analysisOrderData = new AnalysisOrderData();
                analysisOrderData.setOrderNum(order.getOrderNumber());
                analysisOrderData.setOrderDate(analysisOrderData.getOrderDate());
//                analysisOrderData.setOrderChannel(order.getOrderChannel());
                analysisOrderData.setCity(order.getCity());
                analysisOrderData.setOrderCategory(order.getServeName());
                analysisOrderData.setUserName(order.getReservationName());
                analysisOrderData.setUserPhone(order.getReservationPhone());
                analysisOrderData.setRecyclePerson(order.getServerName());
                analysisOrderData.setState(order.getState());
                analysisOrderDataList.add(analysisOrderData);
            });
            analysisOrderDataService.saveBatch(analysisOrderDataList);
        }
        return R.ok();
    }
}
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java
@@ -1,16 +1,21 @@
package com.ruoyi.admin.large.model;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
@@ -31,38 +36,47 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @Excel(name = "订单渠道")
    @ApiModelProperty(value = "订单渠道")
    @TableField("order_channel")
    private String orderChannel;
    @Excel(name = "订单编号")
    @ApiModelProperty(value = "订单编号")
    @TableField("order_num")
    private String orderNum;
    @Excel(name = "城市")
    @ApiModelProperty(value = "城市")
    @TableField("city")
    private String city;
    @Excel(name = "品类")
    @ApiModelProperty(value = "品类")
    @TableField("order_category")
    private String orderCategory;
    @Excel(name = "用户姓名")
    @ApiModelProperty(value = "用户姓名")
    @TableField("user_name")
    private String userName;
    @ApiModelProperty(value = "用户手机号")
    @Excel(name = "电话")
    @ApiModelProperty(value = "电话")
    @TableField("user_phone")
    private String userPhone;
    @Excel(name = "回收员")
    @ApiModelProperty(value = "回收员")
    @TableField("recycle_person")
    private String recyclePerson;
    @ApiModelProperty(value = "日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @TableField("order_date")
    private LocalDateTime orderDate;
    private Date orderDate;
    @Excel(name = "状态 0:待派单;1:待上门;2:待完工;3:已完结;4:已取消;5:已改派;6:待改派;7:待预约")
    @ApiModelProperty(value = "状态")
    @TableField("state")
    private Integer state;
@@ -71,5 +85,8 @@
    @TableField("import_time")
    private LocalDateTime importTime;
    @Excel(name = "日期")
    @TableField(exist = false)
    private String orderDateStr;
}
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.admin.utils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.List;
/**
 * 导出返回信息
 */
@Slf4j
public class ImportExcelUtil {
    /**
     * @param errorLines   错误行数
     * @param successLines 成功行数
     * @param errorMessage 错误信息
     * @return
     * @throws IOException
     */
    public static R<String> importReturnMsg(int errorLines, int successLines, List<String> errorMessage) throws IOException {
        if (errorLines == 0) {
            return R.ok("共" + successLines + "行数据全部导入成功!");
        } else {
            JSONObject result = new JSONObject(5);
            int totalCount = successLines + errorLines;
            result.put("totalCount", totalCount);
            result.put("errorCount", errorLines);
            result.put("errorMessage", errorMessage);
            result.put("successCount", successLines);
            result.put("msg", "总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误行数:" + errorLines);
            return R.ok(JSON.toJSONString(result));
        }
    }
}
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java
New file
@@ -0,0 +1,170 @@
package com.ruoyi.admin.utils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
/**
 * web工具类
 *
 * @author liheng
 */
public final class WebUtils extends org.springframework.web.util.WebUtils {
    /**
     * 当前请求
     */
    public static HttpServletRequest request() {
        return contextHolder() == null ? null : contextHolder().getRequest();
    }
    /**
     * 当前响应
     */
    public static HttpServletResponse response() {
        return contextHolder() == null ? null : contextHolder().getResponse();
    }
    /**
     * 当前session
     */
    public static HttpSession session() {
        return request() == null ? null : request().getSession();
    }
    /**
     * 当前ServletRequest
     */
    public static ServletRequestAttributes contextHolder() {
        return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    }
    /**
     * 判断请求是否为 AJAX
     *
     * @param request 当前请求
     */
    public static boolean isAjax(HttpServletRequest request) {
        return "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
    }
    /**
     * 获取操作系统,浏览器及浏览器版本信息
     *
     * @param request
     * @return
     */
    public static Map<String, String> getOsAndBrowserInfo(HttpServletRequest request) {
        Map<String, String> map = new HashMap<>(2);
        String browserDetails = request.getHeader("User-Agent");
        String userAgent = browserDetails;
        String user = userAgent.toLowerCase();
        String os = "";
        String browser = "";
        //=================OS Info=======================
        if (userAgent.toLowerCase().contains("windows")) {
            os = "Windows";
        } else if (userAgent.toLowerCase().contains("mac")) {
            os = "Mac";
        } else if (userAgent.toLowerCase().contains("x11")) {
            os = "Unix";
        } else if (userAgent.toLowerCase().contains("android")) {
            os = "Android";
        } else if (userAgent.toLowerCase().contains("iphone")) {
            os = "IPhone";
        } else {
            os = "UnKnown, More-Info: " + userAgent;
        }
        //===============Browser===========================
        if (user.contains("edge")) {
            browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
        } else if (user.contains("msie")) {
            String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
            browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
        } else if (user.contains("safari") && user.contains("version")) {
            browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
                    + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
        } else if (user.contains("opr") || user.contains("opera")) {
            if (user.contains("opera")) {
                browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
                        + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
            } else if (user.contains("opr")) {
                browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
                        .replace("OPR", "Opera");
            }
        } else if (user.contains("chrome")) {
            browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
        } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) ||
                (user.contains("mozilla/4.7")) || (user.contains("mozilla/4.78")) ||
                (user.contains("mozilla/4.08")) || (user.contains("mozilla/3"))) {
            browser = "Netscape-?";
        } else if (user.contains("firefox")) {
            browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
        } else if (user.contains("rv")) {
            String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
            browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1);
        } else {
            browser = "UnKnown, More-Info: " + userAgent;
        }
        map.put("os", os);
        map.put("browser", browser);
        return map;
    }
    /**
     * 读取cookie
     *
     * @param name cookie name
     * @return cookie value
     */
    public String getCookieVal(String name) {
        return getCookieVal(request(), name);
    }
    /**
     * 读取cookie
     *
     * @param request HttpServletRequest
     * @param name    cookie name
     * @return cookie value
     */
    public String getCookieVal(HttpServletRequest request, String name) {
        Cookie cookie = getCookie(request, name);
        return cookie != null ? cookie.getValue() : null;
    }
    /**
     * 清除 某个指定的cookie
     *
     * @param response HttpServletResponse
     * @param key      cookie key
     */
    public void removeCookie(HttpServletResponse response, String key) {
        setCookie(response, key, null, 0);
    }
    /**
     * 设置cookie
     *
     * @param response        HttpServletResponse
     * @param name            cookie name
     * @param value           cookie value
     * @param maxAgeInSeconds maxage
     */
    public void setCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds) {
        Cookie cookie = new Cookie(name, value);
        cookie.setPath("/");
        cookie.setMaxAge(maxAgeInSeconds);
        //cookie.setHttpOnly(true);
        response.addCookie(cookie);
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.constant.Constants;
@@ -912,4 +913,14 @@
        return R.ok();
    }
    /**
     * 领取补贴金
     */
    @GetMapping(value = "/getTodayOrderData")
    public R<List<Order>> getTodayOrderData() {
        List<Order> orders = orderService.list(Wrappers.lambdaQuery(Order.class)
                .between(Order::getCreateTime, LocalDate.now().atStartOfDay(), LocalDate.now().plusDays(1).atStartOfDay()));
        return R.ok(orders);
    }
}