huliguo
2025-04-17 19df67e19f23cd2a04d1c7f355e1e656f4140af4
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson2.JSON;
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;
@@ -15,6 +16,8 @@
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;
@@ -22,10 +25,13 @@
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;
@@ -40,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;
@@ -70,13 +79,16 @@
    @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);
    }
@@ -644,5 +656,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));
    }
}