From 0ef46975993c06e780ec4981d7535167673aa51d Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期一, 25 八月 2025 10:39:58 +0800 Subject: [PATCH] Merge branch 'dev' of http://120.76.84.145:10101/gitblit/r/java/gy_jifenshangcheng into dev --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 275 ++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 190 insertions(+), 85 deletions(-) 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 ef321e2..1cf1df9 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 @@ -1,56 +1,63 @@ package com.ruoyi.order.controller; -import com.alibaba.fastjson2.JSON; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; -import com.ruoyi.common.core.constant.ExpressCompanyMap; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.dto.ConfirmOrderDTO; - import com.ruoyi.order.enums.OrderStatus; +import com.ruoyi.order.export.ChargeOrderExport; import com.ruoyi.order.mapper.OrderMapper; +import com.ruoyi.order.model.ChargeOrder; import com.ruoyi.order.model.Order; +import com.ruoyi.order.service.ChargeOrderService; import com.ruoyi.order.service.OrderService; -import com.ruoyi.order.util.payment.model.RefundCallbackResult; -import com.ruoyi.order.util.payment.model.UniPayCallbackResult; -import com.ruoyi.order.util.vo.MapTrackKD100Vo; +import com.ruoyi.order.util.payment.wechat.PayMoneyUtil; +import com.ruoyi.order.util.payment.wx.WechatPayService; +import com.ruoyi.order.util.payment.wx.vo.PayResult; import com.ruoyi.order.util.vo.ShopAnalysisVO; import com.ruoyi.order.vo.*; import com.ruoyi.other.api.domain.BaseSetting; import com.ruoyi.other.api.domain.Goods; +import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.api.dto.ShopAnalysisDTO; import com.ruoyi.other.api.feignClient.BaseSettingClient; import com.ruoyi.other.api.feignClient.ShopClient; -import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; -import io.swagger.annotations.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.Duration; +import java.net.URLEncoder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -69,6 +76,8 @@ @Resource private OrderService orderService; @Resource + private ChargeOrderService chargeOrderService; + @Resource private TokenService tokenService; @Resource private BaseSettingClient baseSettingClient; @@ -81,12 +90,15 @@ @Resource private ShopClient shopClient; - + @Resource + private PayMoneyUtil payMoneyUtil; + @Resource + private WechatPayService wechatPayService; @ResponseBody @PostMapping("/confirmOrder") - @ApiOperation(value = "确定订单", tags = {"商城-订单-小程序"}) + @ApiOperation(value = "确定订单", tags = {"商城-订单-小程序-确定订单"}) public R<ConfirmOrderVo> confirmOrder(@RequestBody ConfirmOrderDTO confirmOrderDTO) { ConfirmOrderVo confirmOrderVo = orderService.confirmOrder(confirmOrderDTO.getGoodId(),confirmOrderDTO.getType()); return R.ok(confirmOrderVo); @@ -94,7 +106,7 @@ @ResponseBody @PostMapping("/orderPayment") - @ApiOperation(value = "订单支付", tags = {"商城-订单支付-小程序"}) + @ApiOperation(value = "订单支付", tags = {"商城-订单支付-小程序-订单支付"}) public R orderPayment(@RequestBody OrderPayment orderPayment){ return orderService.orderPayment(orderPayment); } @@ -103,12 +115,19 @@ * 订单支付回调通知 */ @ResponseBody - @GetMapping("/orderPaymentCallback") - public void orderPaymentCallback(UniPayCallbackResult uniPayCallbackResult, HttpServletResponse response){ - String jsonString = JSONObject.toJSONString(uniPayCallbackResult); + @PostMapping("/orderPaymentCallback") + public void orderPaymentCallback(HttpServletRequest request, HttpServletResponse response){ +// String jsonString = JSONObject.toJSONString(uniPayCallbackResult); + System.err.println("1111111111111"); + PayResult payResult= null; + try { + payResult = wechatPayService.processNotify(request); + } catch (Exception e) { + throw new RuntimeException(e); + } System.out.println("1111111111111111111111"); - System.out.println(jsonString); - R callback = orderService.orderPaymentCallback(uniPayCallbackResult); +// System.out.println(jsonString); + R callback = orderService.orderPaymentCallback(payResult); if(callback.getCode() == 200){ response.setStatus(200); PrintWriter out = null; @@ -126,12 +145,12 @@ /** * 我的订单列表 */ - @ApiOperation(value = "我的订单列表", tags = {"小程序-个人中心-我的订单"}) + @ApiOperation(value = "我的订单列表", tags = {"小程序-个人中心-我的订单-我的订单列表"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单状态", name = "status", required = true, dataType = "int"), }) @GetMapping("/getMyOrderList") - public TableDataInfo<OrderVO> getMyOrderList(@ApiParam("订单状态") Integer status) { + public TableDataInfo<OrderVO> getMyOrderList(@RequestParam("status") Integer status) { startPage(); LoginUser loginUserApplet = tokenService.getLoginUserApplet(); return getDataTable(orderService.selectOrderListByUserId(status, loginUserApplet.getUserid())); @@ -160,43 +179,75 @@ /** * 扫码校验 */ - @ApiOperation(value = "扫码校验", tags = {"小程序-个人中心-门店管理"}) - @ApiImplicitParams({ - @ApiImplicitParam(value = "分享id", name = "shareId", required = true, dataType = "int", paramType = "query"), - }) + @ApiOperation(value = "扫码校验", tags = {"小程序-个人中心-门店管理-扫码校验"}) @GetMapping("/check/{orderNumber}/{shopId}") public R<Boolean> check(@PathVariable("orderNumber") String orderNumber, @PathVariable("shopId") Integer shopId) { LoginUser loginUserApplet = tokenService.getLoginUserApplet(); Order order = orderService.getOne(new LambdaQueryWrapper<Order>() - .eq(Order::getOrderNumber, orderNumber)); + .eq(Order::getId, orderNumber)); return R.ok(orderService.check(order, shopId, loginUserApplet.getUserid())); } /** * 订单核销 */ - @ApiOperation(value = "订单核销", tags = {"小程序-个人中心-门店管理"}) - @ApiImplicitParams({ - @ApiImplicitParam(value = "订单id", name = "id", required = true, dataType = "String"), - }) + @ApiOperation(value = "订单核销", tags = {"小程序-个人中心-门店管理-订单核销"}) @GetMapping("/writeOff") - public R<Void> writeOff(String code, Integer shopId) { - orderService.writeOff(code, shopId); + public R<Void> writeOff(@RequestParam("id") String id, @RequestParam("shopId") Integer shopId) { + orderService.writeOff(id, shopId); return R.ok(); } @GetMapping("/getShopOrderList") - @ApiOperation(value = "获取订单列表", tags = {"门店后台-订单管理", }) - public R<IPage<OrderPageListVo>> getShopOrderList(@ApiParam("模糊查询:订单编号/商品名/手机号 ") String content , - @ApiParam("订单状态") Integer status, - @ApiParam("门店id") Integer shopId, - @ApiParam("页码") @RequestParam("pageNum") Integer pageNum, - @ApiParam("每一页数据大小") @RequestParam("pageSize") Integer pageSize) { + @ApiOperation(value = "获取订单列表", tags = {"门店后台-订单管理-获取订单列表"}) + public R<IPage<OrderPageListVo>> getShopOrderList(@RequestParam("content") String content , + @RequestParam("status") Integer status, + @RequestParam("shopId") Integer shopId, + @RequestParam("pageNum") Integer pageNum, + @RequestParam("pageSize") Integer pageSize) { return R.ok(orderService.getShopOrderList(content,status,shopId,pageNum,pageSize)); + } + @PostMapping("/importExpress") + @ApiOperation(value = "2.0新增导入订单", tags = {"门店后台-订单管理-2.0新增导入订单"}) + public R importExpress(@RequestParam("file") MultipartFile file) { + /* JSONObject jsonObject = JSONObject.parseObject(url); + String url2 = jsonObject.getString("url");*/ + if (file.isEmpty()) { + return R.fail("请选择要上传的文件"); + } + + return orderService.importExpress(file); + } + + @ApiOperation(value = "2.0订单导入模板下载", tags = {"门店后台-订单管理-2.0订单导入模板下载"}) + @GetMapping("/importOrder") + public void importOrder() { + List<OrderExport> orderExports = new ArrayList<>(); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), OrderExport.class, orderExports); + 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(); + } + } } @PutMapping("/shopCancelOrder/{orderId}") - @ApiOperation(value = "取消订单", tags = {"门店后台-订单管理"}) + @ApiOperation(value = "取消订单", tags = {"门店后台-订单管理-取消订单"}) public R shopCancelOrder(@PathVariable("orderId") Long orderId) { return orderService.shopCancelOrder(orderId); } @@ -206,7 +257,7 @@ /** * 取消订单 */ - @ApiOperation(value = "取消订单", tags = {"小程序-个人中心-我的订单"}) + @ApiOperation(value = "取消订单小程序", tags = {"小程序-个人中心-我的订单-取消订单小程序"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), }) @@ -218,7 +269,7 @@ /** * 确认收货 */ - @ApiOperation(value = "确认收货", tags = {"小程序-个人中心-我的订单"}) + @ApiOperation(value = "确认收货", tags = {"小程序-个人中心-我的订单-确认收货"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), }) @@ -246,7 +297,7 @@ /** * 更新订单状态 */ - @ApiOperation(value = "更新订单状态", tags = {"后台-订单管理"}) + @ApiOperation(value = "更新订单状态", tags = {"后台-订单管理-更新订单状态"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单对象", name = "order", required = true, dataType = "Order"), }) @@ -301,20 +352,20 @@ @PutMapping("/cancelOrder/{orderId}") - @ApiOperation(value = "取消订单操作", tags = {"后台-订单管理"}) + @ApiOperation(value = "取消订单操作", tags = {"后台-订单管理-取消订单操作"}) public R cancelOrder(@PathVariable("orderId") Long orderId) { return orderService.cancelOrder(orderId); } @PutMapping("/receivingOperation/{orderId}") - @ApiOperation(value = "收货操作", tags = {"管理后台-订单管理"}) + @ApiOperation(value = "收货操作", tags = {"管理后台-订单管理-收货操作"}) public R receivingOperation(@PathVariable("orderId") Long orderId) { return orderService.receivingOperation(orderId); } @GetMapping("/getOrderInfo/{orderId}") - @ApiOperation(value = "查询订单详情", tags = {"管理后台-订单管理"}) + @ApiOperation(value = "查询订单详情", tags = {"管理后台-订单管理-查询订单详情"}) public R<OrderInfoVo> getOrderInfo(@PathVariable("orderId") Long orderId) { OrderInfoVo orderInfo = orderService.getOrderInfo(orderId); return R.ok(orderInfo); @@ -322,8 +373,14 @@ @GetMapping("/getOrderPageList") - @ApiOperation(value = "获取订单列表", tags = {"后台-订单管理", }) +// @ApiOperation(value = "获取订单列表后台", tags = {"管理后台-订单管理-获取订单列表后台"}) public R<PageInfo<OrderManagePageListVO>> getOrderPageList(OrderPageList orderPageList) { + return R.ok(orderService.getOrderPageList(orderPageList)); + } + + @PostMapping("/queryOrderPageList") + @ApiOperation(value = "获取订单列表后台", tags = {"管理后台-订单管理-获取订单列表后台"}) + public R<PageInfo<OrderManagePageListVO>> queryOrderPageList(@RequestBody OrderPageList orderPageList) { return R.ok(orderService.getOrderPageList(orderPageList)); } @@ -331,7 +388,7 @@ * 订单统计 */ /* @GetMapping("/getOrderStatistics") - @ApiOperation(value = "订单统计", tags = {"管理后台-首页统计"}) + //@ApiOperation(value = "订单统计", tags = {"管理后台-首页统计"}) public R<OrderStatistics> getOrderStatistics(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) { @@ -411,31 +468,30 @@ */ /** * 订单取消支付回退 - * - * @param refundCallbackResult - * @param response - * @return */ @ResponseBody - @GetMapping("/refundPayMoneyCallback") - public void refundPayMoneyCallback(RefundCallbackResult refundCallbackResult, HttpServletResponse response) { - R callback = orderService.refundPayMoneyCallback(refundCallbackResult); + @PostMapping("/refundPayMoneyCallback") + public String refundPayMoneyCallback( @RequestBody(required = false) String xmlData) { + R callback = orderService.refundPayMoneyCallback(xmlData); if (callback.getCode() == 200) { - response.setStatus(200); - PrintWriter out = null; - try { - out = response.getWriter(); - } catch (IOException e) { - throw new RuntimeException(e); - } - out.println("success"); - out.flush(); - out.close(); + return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"; + }else { + System.err.println("支付回退错误:"+callback.getMsg()); + return "<xml><return_code><![CDATA[FAIL]]></return_code></xml>"; } } - + /** + * 获取商品销售数量 + * + * @return + */ + @PostMapping(value = "/getList") + R<List<ChargeOrder>> getList(@RequestParam("siteId") Integer siteId) { + List<ChargeOrder> list = chargeOrderService.lambdaQuery().eq(ChargeOrder::getPowerStationId, siteId).list(); + return R.ok(list); + } /** * 获取商品销售数量 * @@ -501,7 +557,7 @@ * @return *//* @GetMapping("/getOrderExpress/{id}") - @ApiOperation(value = "获取订单快递明细", tags = {"小程序-订单管理"}) + //@ApiOperation(value = "获取订单快递明细", tags = {"小程序-订单管理"}) public R<MapTrackKD100Vo> getOrderExpress(@PathVariable("id") Long id) { Order order = orderService.getById(id); String expressResult = order.getExpressResult(); @@ -583,11 +639,26 @@ orderPage.setAppUserIds(orderPage.getAppUserIds().stream().distinct().collect(Collectors.toList())); } -// UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); -// orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone()); -// userAddress.setRecieveAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getRecieveAddress()); -// orderInfo.setAddress(userAddress.getRecieveAddress()); - + //搜索条件 店铺名称 + if (StringUtils.isNotEmpty(orderPage.getShopName())){ + List<Integer> shopSet = new ArrayList<>(shopClient.getShopIdByName(orderPage.getShopName()).getData()); + if (CollectionUtils.isEmpty(shopSet)) { + return ; + } + if (null != orderPage.getShopIds()) { + List<Integer> shopIds = orderPage.getShopIds(); + if (!containsIntegerAny(shopIds, shopSet)) { + return ; + } + shopIds.addAll(shopSet); + orderPage.setShopIds(shopIds); + } else { + orderPage.setShopIds(shopSet); + } + } + if (null != orderPage.getShopIds()) { + orderPage.setShopIds(orderPage.getShopIds().stream().distinct().collect(Collectors.toList())); + } List<OrderExport> orderExportList = orderMapper.getOrderExportList(orderPage); orderExportList.forEach(orderExport -> { @@ -604,15 +675,16 @@ /* orderExport.setCompanyCostPrice(goods.getOperatingCost()); orderExport.setSupplierCostPrice(goods.getShopCost());*/ } - - String expressJson = orderExport.getExpressJson(); - if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) { - JSONObject jsonObject = JSONObject.parseObject(expressJson); - orderExport.setExpressNum(jsonObject.getString("num")); - orderExport.setExpressName(ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com"))); - } }); - + List<Shop> data = shopClient.getAllShop().getData(); + // 转化为map + Map<Integer, Shop> shopMap = data.stream().collect(Collectors.toMap(Shop::getId, shop -> shop)); + for (OrderExport orderExport : orderExportList) { + Shop shop = shopMap.get(orderExport.getShopId()); + if (shop!=null){ + orderExport.setShopName(shop.getName()); + } + } ExcelUtil<OrderExport> util = new ExcelUtil<OrderExport>(OrderExport.class); util.exportExcel(response, orderExportList, "订单数据"); } @@ -639,6 +711,27 @@ // 如果没有找到共同元素,返回 false return false; } + /** + * 判断 list1 是否包含 list2 中的至少一个元素 + * + * @param list1 第一个列表 + * @param list2 第二个列表 + * @return 如果 list1 包含 list2 中的至少一个元素,返回 true;否则返回 false + */ + private boolean containsIntegerAny(List<Integer> list1, List<Integer> list2) { + // 将 list1 转换为 HashSet 以提高查询效率 + Set<Integer> set1 = new HashSet<>(list1); + + // 遍历 list2,检查是否有元素存在于 set1 中 + for (Integer element : list2) { + if (set1.contains(element)) { + return true; + } + } + + // 如果没有找到共同元素,返回 false + return false; + } /** @@ -650,8 +743,10 @@ @PostMapping("/getOrderCountByAppUserId") public R<Long> getOrderCountByAppUserId(@RequestParam("id") Long appUserId) { long count = orderService.count(new LambdaQueryWrapper<Order>().eq(Order::getDelFlag, 0) - .eq(Order::getAppUserId, appUserId).in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 7, 8)) - .eq(Order::getPayStatus, 2)); + .eq(Order::getAppUserId, appUserId) + .in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 7, 8)) + .eq(Order::getPayStatus, 2) + ); return R.ok(count); } @@ -730,7 +825,7 @@ //折线图 - List<OrderStatisticsDetail> orderStatisticsDetailList=orderService.getOrderListGroupByDate(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime()); + List<OrderStatisticsDetail> orderStatisticsDetailList=orderService.getOrderListGroupByDate(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime(),shopAnalysisDTO.getShopId()); shopAnalysisVO.setOrderStatisticsDetailList(orderStatisticsDetailList); return R.ok(shopAnalysisVO); } @@ -738,7 +833,7 @@ /** * 统计用户总消费积分数和现金支付金额 */ - @GetMapping("/getOrderCountByAppUserId/") + @GetMapping("/getConsumeScoreAndPayAmount") R<Map<String ,Object>> getConsumeScoreAndPayAmount(@RequestParam(value = "userId",required = false) Long userId){ QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); // 条件构造 统计充值积分 @@ -747,10 +842,20 @@ queryWrapper.in("order_status", Arrays.asList(3,4,8));//待核销 已完成 已评价 queryWrapper.eq("pay_status",2); if (userId != null) { - queryWrapper.eq("user_id", userId); + queryWrapper.eq("app_user_id", userId); } return R.ok(orderService.getMap(queryWrapper)); } + /** + * 获取商户RSA加密公钥 + */ + + @GetMapping("/getRsaPublicKey") + public R<Void> getRsaPublicKey(){ + wechatPayService.getRsaPublicKey(); + return R.ok(); + } + } -- Gitblit v1.7.1