分析页统计:生产单状态mapper抽象独立接口、补充注解

This commit is contained in:
gaoqr
2024-08-07 09:46:43 +08:00
parent fe85c3bb5c
commit 90f845a4fc
5 changed files with 126 additions and 106 deletions
@@ -10,18 +10,13 @@ import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatusRespVO;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.enums.OrderStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -139,65 +134,9 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
List<Long> selectOrderIds(@Param(Constants.WRAPPER) Wrapper<OrderDO> wrapper);
/**
* 生产单状态按时间分组统计
*
* @param reqVO
* @return
*/
List<OrderStatusRespVO> selectOrderStatusCount(@Param("req") OrderStatisticsReqVO reqVO);
// 生产单预警统计
List<OrderOverdueRespVO> selectOrderNear(@Param("today") LocalDateTime today, @Param("orderDate") LocalDateTime orderDate, @Param("organId") Long organId);
// 生产单逾期统计
List<OrderOverdueRespVO> selectOrderOverdue(@Param("today") LocalDateTime today, @Param("organId") Long organId);
/**
* 生产单数量统计
*/
default Integer selectOrderCount(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getDeleted, 0)));
}
/**
* 今日新增生产单总数统计
*
*/
default Integer selectOrderCountToday(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getOrderDate, LocalDate.now())));
}
/**
* 今日完成生产单总数统计
*
*/
default Integer selectOrderCountTodayFinish(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.between(OrderDO::getFinishTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX))));
}
/**
* 生产中生产单总数
*
*/
default Integer selectOrderCountProduce(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
}
/**
* 生产中生产平方数
*
* @param organId
* @return
*/
Integer selectOrderSquareProduce(@Param("organId") Long organId);
}
@@ -0,0 +1,79 @@
package com.cf.imes.module.executor.dal.mysql.order;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatusRespVO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.enums.OrderStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
/**
* @author Gqr
* @since 2024/8/7 9:35
*/
@Mapper
public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
/**
* 生产单数量统计
*/
default Integer selectOrderCount(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getDeleted, 0)));
}
/**
* 今日新增生产单总数统计
*
*/
default Integer selectOrderCountToday(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getOrderDate, LocalDate.now())));
}
/**
* 今日完成生产单总数统计
*
*/
default Integer selectOrderCountTodayFinish(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.between(OrderDO::getFinishTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX))));
}
/**
* 生产中生产单总数
*
*/
default Integer selectOrderCountProduce(Long organId) {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
}
/**
* 生产中生产平方数
*
* @param organId
* @return
*/
Integer selectOrderSquareProduce(@Param("organId") Long organId);
/**
* 生产单状态按时间分组统计
*
* @param reqVO
* @return
*/
List<OrderStatusRespVO> selectOrderStatusCount(@Param("req") OrderStatisticsReqVO reqVO);
}
@@ -6,7 +6,7 @@ import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatusRespVO;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
import com.cf.imes.module.executor.dal.mysql.order.OrderStatisticsMapper;
import com.cf.imes.module.executor.enums.OrderStatisticsUnit;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -32,36 +32,36 @@ import java.util.stream.Collectors;
@Validated
public class OrderStatisticsServiceImpl implements OrderStatisticsService {
@Resource
private OrderMapper orderMapper;
private OrderStatisticsMapper orderStatisticsMapper;
@Override
@OrganIgnore
public Integer orderCount(OrderStatisticsReqVO reqVO) {
return orderMapper.selectOrderCount(getOrganIdParam(reqVO));
return orderStatisticsMapper.selectOrderCount(getOrganIdParam(reqVO));
}
@Override
@OrganIgnore
public Integer orderCountToday(OrderStatisticsReqVO reqVO) {
return orderMapper.selectOrderCountToday(getOrganIdParam(reqVO));
return orderStatisticsMapper.selectOrderCountToday(getOrganIdParam(reqVO));
}
@Override
@OrganIgnore
public Integer orderCountTodayFinish(OrderStatisticsReqVO reqVO) {
return orderMapper.selectOrderCountTodayFinish(getOrganIdParam(reqVO));
return orderStatisticsMapper.selectOrderCountTodayFinish(getOrganIdParam(reqVO));
}
@Override
@OrganIgnore
public Integer orderCountProduce(OrderStatisticsReqVO reqVO) {
return orderMapper.selectOrderCountProduce(getOrganIdParam(reqVO));
return orderStatisticsMapper.selectOrderCountProduce(getOrganIdParam(reqVO));
}
@Override
@OrganIgnore
public Integer orderSquareProduce(OrderStatisticsReqVO reqVO) {
return orderMapper.selectOrderSquareProduce(getOrganIdParam(reqVO));
return orderStatisticsMapper.selectOrderSquareProduce(getOrganIdParam(reqVO));
}
@Override
@@ -73,7 +73,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
getTimeSpan(reqVO);
// 查询订单状态统计数据
List<OrderStatusRespVO> orderStatusRespVOS = orderMapper.selectOrderStatusCount(reqVO);
List<OrderStatusRespVO> orderStatusRespVOS = orderStatisticsMapper.selectOrderStatusCount(reqVO);
// 基于相同的orderDate分组
Map<String, List<OrderStatusRespVO>> orderDateMap = orderStatusRespVOS.stream()
@@ -84,13 +84,13 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
Set<String> dateList = orderDateMap.keySet();
resultMap.put("dateList", dateList);
// 初始化结果集
// 遍历订单状态所有枚举值
List<Map<String, Object>> series = new ArrayList<>();
for (OrderStatusEnum orderStatusEnum : OrderStatusEnum.values()) {
Map<String, Object> seriesItem = new HashMap<>();
int[] sumArr = new int[orderDateMap.size()];
// 遍历日期map
// 遍历日期map记录status下的orderCount到sumArr数组
int index = 0;
for (Map.Entry<String, List<OrderStatusRespVO>> entry : orderDateMap.entrySet()) {
// 查找匹配的订单状态
@@ -98,7 +98,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
.filter(respVO -> Objects.equals(orderStatusEnum.getStatus(), respVO.getOrderState()))
.findFirst();
// 设置计数值
// 没有匹配的补齐0
sumArr[index++] = matchingStatus.map(OrderStatusRespVO::getOrderCount).orElse(0);
}
@@ -79,30 +79,6 @@
</select>
<select id="selectOrderStatusCount"
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatusRespVO">
select o.status as orderState,
count(o.id) as orderCount
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.order_date), '-', QUARTER(o.order_date)) as orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date)) as orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', FLOOR((DayOfMonth(o.order_date)-1)/7)+1) AS
orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate
</if>
from orders o
where o.organ_id = #{organId}
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.deleted = 0
group by o.status, orderDate;
</select>
<select id="selectOrderNear" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO">
@@ -172,14 +148,4 @@
and o.status != 4
and #{today} > DATE(o.delivery_date)
</select>
<select id="selectOrderSquareProduce" resultType="java.lang.Integer">
SELECT SUM(op.area) as area FROM orders o
LEFT JOIN order_plate op on op.order_id = o.id
WHERE o.deleted = 0
<if test="organId != null">
AND o.organ_id = #{organId}
</if>
</select>
</mapper>
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.executor.dal.mysql.order.OrderStatisticsMapper">
<select id="selectOrderSquareProduce" resultType="java.lang.Integer">
SELECT SUM(op.area) as area FROM orders o
LEFT JOIN order_plate op on op.order_id = o.id
WHERE o.deleted = 0
<if test="organId != null">
AND o.organ_id = #{organId}
</if>
</select>
<select id="selectOrderStatusCount"
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatusRespVO">
select o.status as orderState,
count(o.id) as orderCount
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@QUARTER.getValue()">
,CONCAT(YEAR(o.order_date), '-', QUARTER(o.order_date)) as orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@MONTH.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date)) as orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@WEEK.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', FLOOR((DayOfMonth(o.order_date)-1)/7)+1) AS
orderDate
</if>
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@DAY.getValue()">
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate
</if>
from orders o
where o.organ_id = #{organId}
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.deleted = 0
group by o.status, orderDate;
</select>
</mapper>