package com.gxwebsoft.apps.controller; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.apps.entity.BcPlan; import com.gxwebsoft.apps.param.BcPlanParam; import com.gxwebsoft.apps.service.BcPlanService; import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.service.OrganizationService; import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.shop.entity.Goods; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderGoods; import com.gxwebsoft.shop.param.OrderGoodsParam; import com.gxwebsoft.shop.service.GoodsService; import com.gxwebsoft.shop.service.OrderGoodsService; import com.gxwebsoft.shop.service.OrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import static com.gxwebsoft.common.core.constants.OrderConstants.*; /** * 报餐统计控制器 * * @author 科技小王子 * @since 2023-04-27 17:59:40 */ @Api(tags = "报餐统计管理") @RestController @RequestMapping("/api/apps/bc-statistics") public class BcStatisticsController extends BaseController { @Resource private GoodsService goodsService; @Resource private OrderService orderService; @Resource private OrderGoodsService orderGoodsService; @Resource private BcPlanService bcPlanService; @Resource private UserService userService; @Resource private OrganizationService organizationService; @ApiOperation("预定菜品统计") @GetMapping("/baoCanFoodCount") public ApiResult baoCanFoodCount(BcPlanParam param) { // 验证签名 isCheckSign(); BcPlan plan = param.getOne(bcPlanService.listRel(param)); System.out.println("1查询菜品列表param = " + plan); if (plan == null) { return fail("当日未发布菜品"); } // json转数组 如:[0,1]转为ArrayList ArrayList goodsIds = JSONUtil.parseObject(plan.getGoodsIds(), ArrayList.class); final List list = goodsService.listByIds(goodsIds); final ArrayList goods = new ArrayList<>(); // 查询今日有效订单 final List orders = orderService.list(new LambdaQueryWrapper() .eq(Order::getDeliveryTime, param.getDayTime()) .eq(Order::getPayStatus, PAY_STATUS_SUCCESS) .ne(Order::getOrderStatus, ORDER_STATUS_CANCEL) ); final List orderIds = orders.stream().map(Order::getOrderId).collect(Collectors.toList()); // 整理餐段菜品数据 list.forEach(d -> { if (d.getCategoryId().equals(param.getCategoryId())) { final int DeliveryTimes = orderGoodsService.count(new LambdaQueryWrapper() .in(OrderGoods::getOrderId, orderIds) .eq(OrderGoods::getCategoryId, param.getCategoryId()) .eq(OrderGoods::getGoodsId, d.getGoodsId()) .gt(OrderGoods::getTotalNum, 0) ); final int NoDeliveryTimes = orderGoodsService.count(new LambdaQueryWrapper() .in(OrderGoods::getOrderId, orderIds) .eq(OrderGoods::getCategoryId, param.getCategoryId()) .eq(OrderGoods::getGoodsId, d.getGoodsId()) .gt(OrderGoods::getTotalNum, 0) .eq(OrderGoods::getDeliveryStatus, 10) ); d.setDeliveryTimes(DeliveryTimes); d.setNoDeliveryTimes(NoDeliveryTimes); goods.add(d); } }); return success("查询成功", goods); } @ApiOperation("预定人员统计") @GetMapping("/baoCanUserCount") public ApiResult baoCanUserCount(BcPlanParam param) { // 验证签名 isCheckSign(); // 查询今日有效订单 final List list = orderService.list(new LambdaQueryWrapper() .eq(Order::getDeliveryTime, param.getDayTime()) .eq(Order::getPayStatus, PAY_STATUS_SUCCESS) .ne(Order::getOrderStatus, ORDER_STATUS_CANCEL) ); final List orderIds = list.stream().map(Order::getOrderId).collect(Collectors.toList()); // System.out.println("list.size() = " + list.size()); final List list25 = orderGoodsService.list(new LambdaQueryWrapper() .in(OrderGoods::getOrderId, orderIds) .eq(OrderGoods::getCategoryId, param.getCategoryId()) .gt(OrderGoods::getTotalNum, 0) .eq(OrderGoods::getDeleted, 0) ); final List userIds25 = list25.stream().map(OrderGoods::getUserId).collect(Collectors.toList()); final List users25 = userService.listByIds(userIds25); return success("查询成功", users25); } @ApiOperation("报餐统计") @GetMapping("/baoCanUsers") public ApiResult baoCanUsers(OrderGoodsParam param) { // 验证签名 isCheckSign(); System.out.println("param = " + param); // 修复订单商品的支付状态 // repairPayPriceStatus(); final HashMap map = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // 默认查询条件 wrapper.ge(Order::getPayStatus,PAY_STATUS_SUCCESS) .ne(Order::getOrderStatus, ORDER_STATUS_CANCEL); // 按部门查询 if(param.getOrganizationId() != null){ System.out.println("按部门查询 = "); final List users = userService.list(new LambdaQueryWrapper().eq(User::getOrganizationId,param.getOrganizationId())); final List collect = users.stream().map(User::getUserId).collect(Collectors.toList()); System.out.println("userIds = " + collect); wrapper.in(Order::getUserId,collect); } // 是否选择日期 if(param.getDeliveryTime() == null && param.getDeliveryTimeStart() == null && param.getCategoryId() != 0){ return success("请选择预定日期",map); } // 按时间范围查询 if(param.getDeliveryTimeStart() != null){ // 最大只能选择一个月 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date1 = df.parse(param.getDeliveryTimeStart()); Date date2 = df.parse(param.getDeliveryTimeEnd()); final boolean after = date1.after(date2); final long between = DateUtil.between(date1, date2, DateUnit.DAY); if(between > 30L){ return fail("超出日期查询范围"); } System.out.println("between = " + between); System.out.println("after = " + after); } catch (ParseException e) { e.printStackTrace(); } wrapper.ge(Order::getDeliveryTime,param.getDeliveryTimeStart()); wrapper.le(Order::getDeliveryTime,param.getDeliveryTimeEnd()); } // 按预定日期查询 if(param.getDeliveryTime() != null){ wrapper.eq(Order::getDeliveryTime,param.getDeliveryTime()); } final List list = orderService.list(wrapper); if(list.size() == 0){ return success("查询成功",null); } System.out.println("报餐统计 = " + list.size()); final List orderIds = list.stream().map(Order::getOrderId).collect(Collectors.toList()); System.out.println("orderIds = " + orderIds.size()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(OrderGoods::getDeleted,0) .gt(OrderGoods::getTotalNum,0) .in(OrderGoods::getOrderId,orderIds); if(param.getCategoryId() != null){ queryWrapper.eq(OrderGoods::getCategoryId,param.getCategoryId()); } if(param.getGear() != null){ queryWrapper.eq(OrderGoods::getGear,param.getGear()); } // 已报餐 final int post = orderGoodsService.count(queryWrapper); // 已签到 queryWrapper.eq(OrderGoods::getDeliveryStatus,DELIVERY_STATUS_YES); final int sign = orderGoodsService.count(queryWrapper); // 未签到 int noSign = post - sign; map.put("post",post); map.put("sign",sign); map.put("noSign", noSign); return success(map); // //// 查询今日签到记录 // final int sign25 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 25) // .eq(OrderGoods::getDeliveryStatus, 20) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); // final int sign26 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 26) // .eq(OrderGoods::getDeliveryStatus, 20) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); // final int sign27 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 27) // .eq(OrderGoods::getDeliveryStatus, 20) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); //// // 查询今日报餐人数 // final int post25 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 25) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); // final int post26 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 26) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); // final int post27 = orderGoodsService.count(new LambdaQueryWrapper() // .in(OrderGoods::getOrderId, orderIds) // .eq(OrderGoods::getCategoryId, 27) // .gt(OrderGoods::getTotalNum, 0) // .eq(OrderGoods::getDeleted, 0) // ); //// // map.put("breakfastSignUsers", sign25); // map.put("lunchSignUsers", sign26); // map.put("dinnerSignUsers", sign27); // // map.put("breakfastPostUsers", post25); // map.put("lunchPostUsers", post26); // map.put("dinnerPostUsers", post27); } @ApiOperation("导出报表") @GetMapping("/export") public ApiResult export(OrderGoodsParam param) { return success("导出报表"); } private void repairPayPriceStatus() { final OrderGoodsParam param = new OrderGoodsParam(); param.setUserId(0); final List list = orderGoodsService.listRel(param); System.out.println("修复支付状态 = " + list.size()); list.forEach(d -> { final Order order = orderService.getById(d.getOrderId()); if (order != null) { System.out.println("order = " + order); d.setPayStatus(PAY_STATUS_SUCCESS); d.setUserId(order.getUserId()); orderGoodsService.updateById(d); } else { orderGoodsService.removeById(d); } }); } private void updateTimeByOrderGoods() { System.out.println("修复数据 = "); // final Order order = orderService.getById(2467); final LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // wrapper.eq(Order::getTenantId,10048); // wrapper.eq(Order::getDeleted,0); // wrapper.eq(Order::getOrderStatus,10); // wrapper.eq(Order::getDeliveryStatus,10); wrapper.in(Order::getOrderId, 3184); // wrapper.eq(Order::getPayStatus,20); // wrapper.gt(Order::getOrderId,1000); // wrapper.lt(Order::getOrderId,2000); final List list = orderService.list(wrapper); System.out.println("修复数据list = " + list.size()); list.forEach(order -> { final OrderGoodsParam orderGoodsParam = new OrderGoodsParam(); orderGoodsParam.setOrderId(order.getOrderId()); final List goods = orderGoodsService.listRel(orderGoodsParam); goods.forEach(d -> { d.setDeliveryTime(order.getDeliveryTime()); d.setPayStatus(order.getPayStatus()); orderGoodsService.updateById(d); System.out.println("修复预定时间 = " + d.getOrderId()); }); }); } }