From 17abf0608f62cdd318dba3e7b12a32ea486cb482 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期一, 21 四月 2025 20:34:03 +0800 Subject: [PATCH] 导入导出,财务统计 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 203 +++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 174 insertions(+), 29 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 37fddf0..f68ed57 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 @@ -4,7 +4,8 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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; @@ -15,16 +16,22 @@ 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.mapper.OrderMapper; import com.ruoyi.order.model.Order; 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.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.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; @@ -39,7 +46,10 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Duration; +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,17 +79,49 @@ @Resource private AppUserClient appUserClient; + @Resource + private ShopClient shopClient; + @ResponseBody - @GetMapping("/confirmOrder") + @PostMapping("/confirmOrder") @ApiOperation(value = "确定订单", tags = {"商城-订单-小程序"}) - public R<ConfirmOrderVo> confirmOrder(@ApiParam("商品id") Integer goodId,@ApiParam("支付类型(1-现金,2-积分)")Integer type) { - ConfirmOrderVo confirmOrderVo = orderService.confirmOrder(goodId,type); + public R<ConfirmOrderVo> confirmOrder(@RequestBody ConfirmOrderDTO confirmOrderDTO) { + ConfirmOrderVo confirmOrderVo = orderService.confirmOrder(confirmOrderDTO.getGoodId(),confirmOrderDTO.getType()); return R.ok(confirmOrderVo); } + @ResponseBody + @PostMapping("/orderPayment") + @ApiOperation(value = "订单支付", tags = {"商城-订单支付-小程序"}) + public R orderPayment(@RequestBody OrderPayment orderPayment){ + return orderService.orderPayment(orderPayment); + } + /** + * 订单支付回调通知 + */ + @ResponseBody + @GetMapping("/orderPaymentCallback") + public void orderPaymentCallback(UniPayCallbackResult uniPayCallbackResult, HttpServletResponse response){ + String jsonString = JSONObject.toJSONString(uniPayCallbackResult); + System.out.println("1111111111111111111111"); + System.out.println(jsonString); + R callback = orderService.orderPaymentCallback(uniPayCallbackResult); + 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(); + } + } /** * 我的订单列表 @@ -138,10 +180,28 @@ @ApiImplicitParam(value = "订单id", name = "id", required = true, dataType = "String"), }) @GetMapping("/writeOff") - public R<Void> writeOff(String code, Integer shopId, String technicianId) { - orderService.writeOff(code, shopId, technicianId); + public R<Void> writeOff(String code, Integer shopId) { + orderService.writeOff(code, 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) { + return R.ok(orderService.getShopOrderList(content,status,shopId,pageNum,pageSize)); + } + + @PutMapping("/shopCancelOrder/{orderId}") + @ApiOperation(value = "取消订单", tags = {"门店后台-订单管理"}) + public R shopCancelOrder(@PathVariable("orderId") Long orderId) { + return orderService.shopCancelOrder(orderId); + } + + /** * 取消订单 @@ -241,7 +301,7 @@ @PutMapping("/cancelOrder/{orderId}") - @ApiOperation(value = "取消订单操作", tags = {"管理后台-订单管理"}) + @ApiOperation(value = "取消订单操作", tags = {"后台-订单管理"}) public R cancelOrder(@PathVariable("orderId") Long orderId) { return orderService.cancelOrder(orderId); } @@ -262,15 +322,15 @@ @GetMapping("/getOrderPageList") -// @ApiOperation(value = "获取订单列表", tags = {"管理后台-订单管理", "门店后台-订单管理"}) - public R<PageInfo<OrderPageListVo>> getOrderPageList(OrderPageList orderPageList) { + @ApiOperation(value = "获取订单列表", tags = {"后台-订单管理", }) + public R<PageInfo<OrderManagePageListVO>> getOrderPageList(OrderPageList orderPageList) { return R.ok(orderService.getOrderPageList(orderPageList)); } /** * 订单统计 */ - @GetMapping("/getOrderStatistics") + /* @GetMapping("/getOrderStatistics") @ApiOperation(value = "订单统计", tags = {"管理后台-首页统计"}) public R<OrderStatistics> getOrderStatistics(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) { @@ -348,7 +408,7 @@ return R.ok(orderStatistics); } - +*/ /** * 订单取消支付回退 * @@ -434,12 +494,12 @@ } - /** + /* *//** * 获取订单快递明细 * * @param id * @return - */ + *//* @GetMapping("/getOrderExpress/{id}") @ApiOperation(value = "获取订单快递明细", tags = {"小程序-订单管理"}) public R<MapTrackKD100Vo> getOrderExpress(@PathVariable("id") Long id) { @@ -451,7 +511,7 @@ } return R.ok(); } - +*/ /** * 根据id获取订单详情 @@ -485,7 +545,7 @@ */ @GetMapping("/exportExpress") public void exportExpress(HttpServletResponse response, OrderPageList orderPage) { - //搜索条件,用户姓名 + /* //搜索条件,用户姓名 if (StringUtils.isNotEmpty(orderPage.getUserName())) { List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPage.getUserName()).getData(); List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); @@ -499,7 +559,7 @@ } else { orderPage.setAppUserIds(collect); } - } + }*/ //搜索条件,用户电话 if (StringUtils.isNotEmpty(orderPage.getPhone())) { List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPage.getPhone()).getData(); @@ -523,10 +583,6 @@ 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()); List<OrderExport> orderExportList = orderMapper.getOrderExportList(orderPage); @@ -541,15 +597,8 @@ if (StringUtils.isNotEmpty(goodJson) && !"NULL".equals(goodJson)) { Goods goods = JSONObject.parseObject(goodJson, Goods.class); orderExport.setGoodsName(goods.getName()); - 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"))); + /* orderExport.setCompanyCostPrice(goods.getOperatingCost()); + orderExport.setSupplierCostPrice(goods.getShopCost());*/ } }); @@ -596,5 +645,101 @@ } + /** + * 工作台统计 + */ + @PostMapping("/homeStatistics/getShopAnalysis") + @ApiOperation(value = "店铺分析", tags = {"后台-工作台-店铺统计"}) + public R<ShopAnalysisVO> getShopAnalysis(@RequestBody ShopAnalysisDTO shopAnalysisDTO) { + ShopAnalysisVO shopAnalysisVO = new ShopAnalysisVO(); + if (shopAnalysisDTO.getStartTime() == null || shopAnalysisDTO.getEndTime() == null) { + LocalDate now = LocalDate.now(); + shopAnalysisDTO.setStartTime(now.minusDays(6)); // 7天前 + shopAnalysisDTO.setEndTime(now); + } + else if (shopAnalysisDTO.getStartTime().isAfter(shopAnalysisDTO.getEndTime())) { + return R.fail("开始时间不能大于结束时间"); + } + /* // 限制最大查询范围不超过3个月(可选) + else if (Duration.between(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime()).toDays() > 90) { + return R.fail("查询时间范围不能超过90天"); + }*/ + //订单统计 + QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("count(*) as total","SUM(total_amount) as total_money"); + queryWrapper.eq("del_flag", 0); + queryWrapper.in("order_status", Arrays.asList(3,4,8));//待核销 已完成 已评价 + queryWrapper.eq("pay_status",2); + queryWrapper.ge("create_time", shopAnalysisDTO.getStartTime().atStartOfDay()); + queryWrapper.le("create_time", shopAnalysisDTO.getEndTime().atTime(LocalTime.MAX)); + + if (null!=shopAnalysisDTO.getShopId()){ + queryWrapper.eq("shop_id", shopAnalysisDTO.getShopId()); + } + Map<String, Object> result = orderService.getMap(queryWrapper); + if (result == null || result.get("total") == null) { + shopAnalysisVO.setTotal(0); + }else { + shopAnalysisVO.setTotal(Integer.valueOf(result.get("total").toString())); + } + + if (result == null || result.get("total_money") == null) { + shopAnalysisVO.setTotalMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setTotalMoney(new BigDecimal(result.get("total_money").toString())); + } + + + //收益分析 + Map<String, Object> shopResult =shopClient.getIncomeAnalysis(shopAnalysisDTO).getData(); + if (shopResult!=null){ + if (shopResult.get("balance")==null||shopResult.get("canWithdrawMoney")==null){ + shopAnalysisVO.setCanWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setFreezeMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setCanWithdrawMoney(new BigDecimal(shopResult.get("canWithdrawMoney").toString())); + shopAnalysisVO.setFreezeMoney(new BigDecimal(shopResult.get("balance").toString()).subtract(shopAnalysisVO.getCanWithdrawMoney())); + } + if (shopResult.get("withdrawMoney")==null){ + shopAnalysisVO.setWithdrawMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setWithdrawMoney(new BigDecimal(shopResult.get("withdrawMoney").toString())); + } + if (shopResult.get("withdrawAuditMoney")==null){ + shopAnalysisVO.setWithdrawAuditMoney(BigDecimal.ZERO); + }else { + shopAnalysisVO.setWithdrawAuditMoney(new BigDecimal(shopResult.get("withdrawAuditMoney").toString())); + } + }else { + shopAnalysisVO.setCanWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setFreezeMoney(BigDecimal.ZERO); + shopAnalysisVO.setWithdrawMoney(BigDecimal.ZERO); + shopAnalysisVO.setWithdrawAuditMoney(BigDecimal.ZERO); + } + + + //折线图 + List<OrderStatisticsDetail> orderStatisticsDetailList=orderService.getOrderListGroupByDate(shopAnalysisDTO.getStartTime(), shopAnalysisDTO.getEndTime()); + shopAnalysisVO.setOrderStatisticsDetailList(orderStatisticsDetailList); + return R.ok(shopAnalysisVO); + } + + /** + * 统计用户总消费积分数和现金支付金额 + */ + @GetMapping("/getOrderCountByAppUserId/") + R<Map<String ,Object>> getConsumeScoreAndPayAmount(@RequestParam(value = "userId",required = false) Long userId){ + QueryWrapper<Order> queryWrapper = new QueryWrapper<>(); + // 条件构造 统计充值积分 + queryWrapper.select("SUM(point) as total_points","SUM(payment_amount) as payment_amounts"); + queryWrapper.eq("del_flag", 0); + queryWrapper.in("order_status", Arrays.asList(3,4,8));//待核销 已完成 已评价 + queryWrapper.eq("pay_status",2); + if (userId != null) { + queryWrapper.eq("user_id", userId); + } + return R.ok(orderService.getMap(queryWrapper)); + } + } -- Gitblit v1.7.1