From 641ad2ace982eece2637c6a79d46094b3cb0d4ea Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期四, 24 四月 2025 10:26:25 +0800 Subject: [PATCH] 大屏回收订单 --- ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java | 114 +++++++++++++++ ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java | 170 ++++++++++++++++++++++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 11 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java | 5 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java | 6 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java | 21 ++ ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java | 39 +++++ 7 files changed, 360 insertions(+), 6 deletions(-) diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java index 17286a3..56b9e4d 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java +++ b/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()); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java index 0941c3a..e639dba 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java +++ b/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(); } diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java index 645f8b3..e6e486d 100644 --- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/controller/AnalysisOrderDataController.java +++ b/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(); + } + } diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java index 248cca8..46bd01a 100644 --- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/large/model/AnalysisOrderData.java +++ b/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; } diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java new file mode 100644 index 0000000..66ec7df --- /dev/null +++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ImportExcelUtil.java @@ -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)); + } + } + +} diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java new file mode 100644 index 0000000..03618bf --- /dev/null +++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/WebUtils.java @@ -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); + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index aafb2a0..8990bdc 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/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); + } + } -- Gitblit v1.7.1