分析页统计:1、接口支持超管忽视机构查看全部;2、图表接口回调X轴日期格式完善;

This commit is contained in:
gaoqr
2024-08-08 11:02:45 +08:00
parent a261b91fec
commit ea53d09634
4 changed files with 56 additions and 62 deletions
@@ -25,9 +25,8 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
/** /**
* 生产单数量统计 * 生产单数量统计
*/ */
default Integer selectOrderCount(Long organId) { default Integer selectOrderCount() {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>() return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getDeleted, 0))); .eq(OrderDO::getDeleted, 0)));
} }
@@ -35,9 +34,8 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
* 今日新增生产单总数统计 * 今日新增生产单总数统计
* *
*/ */
default Integer selectOrderCountToday(Long organId) { default Integer selectOrderCountToday() {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>() return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getOrderDate, LocalDate.now()))); .eq(OrderDO::getOrderDate, LocalDate.now())));
} }
@@ -46,9 +44,8 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
* 今日完成生产单总数统计 * 今日完成生产单总数统计
* *
*/ */
default Integer selectOrderCountTodayFinish(Long organId) { default Integer selectOrderCountTodayFinish() {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>() 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)))); .between(OrderDO::getFinishTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX))));
} }
@@ -56,9 +53,8 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
* 生产中生产单总数 * 生产中生产单总数
* *
*/ */
default Integer selectOrderCountProduce(Long organId) { default Integer selectOrderCountProduce() {
return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>() return Math.toIntExact(selectCount(new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getOrganId, organId)
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus()))); .eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
} }
@@ -68,7 +64,7 @@ public interface OrderStatisticsMapper extends BaseMapperX<OrderDO> {
* @param organId * @param organId
* @return * @return
*/ */
Integer selectOrderSquareProduce(@Param("organId") Long organId); Integer selectOrderSquareProduce();
/** /**
* 生产单状态按时间分组统计数量 * 生产单状态按时间分组统计数量
@@ -2,8 +2,6 @@ package com.cf.imes.module.executor.service.order;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.enums.OrderStatusEnum; import com.cf.imes.framework.common.enums.OrderStatusEnum;
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.OrderGoodsPlateRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsPlateRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsAreaRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsAreaRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
@@ -49,44 +47,41 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
@Resource @Resource
private OrderPlateStatisticsMapper orderPlateStatisticsMapper; private OrderPlateStatisticsMapper orderPlateStatisticsMapper;
// 常用的字段key
private static final String DATELIST_FIELD_NAME = "dateList";
private static final String SERIES_FIELD_NAME = "series";
@Override @Override
@OrganIgnore
public Integer orderCount(OrderStatisticsReqVO reqVO) { public Integer orderCount(OrderStatisticsReqVO reqVO) {
return orderStatisticsMapper.selectOrderCount(getOrganIdParam(reqVO)); return orderStatisticsMapper.selectOrderCount();
} }
@Override @Override
@OrganIgnore
public Integer orderCountToday(OrderStatisticsReqVO reqVO) { public Integer orderCountToday(OrderStatisticsReqVO reqVO) {
return orderStatisticsMapper.selectOrderCountToday(getOrganIdParam(reqVO)); return orderStatisticsMapper.selectOrderCountToday();
} }
@Override @Override
@OrganIgnore
public Integer orderCountTodayFinish(OrderStatisticsReqVO reqVO) { public Integer orderCountTodayFinish(OrderStatisticsReqVO reqVO) {
return orderStatisticsMapper.selectOrderCountTodayFinish(getOrganIdParam(reqVO)); return orderStatisticsMapper.selectOrderCountTodayFinish();
} }
@Override @Override
@OrganIgnore
public Integer orderCountProduce(OrderStatisticsReqVO reqVO) { public Integer orderCountProduce(OrderStatisticsReqVO reqVO) {
return orderStatisticsMapper.selectOrderCountProduce(getOrganIdParam(reqVO)); return orderStatisticsMapper.selectOrderCountProduce();
} }
@Override @Override
@OrganIgnore
public Integer orderSquareProduce(OrderStatisticsReqVO reqVO) { public Integer orderSquareProduce(OrderStatisticsReqVO reqVO) {
return orderStatisticsMapper.selectOrderSquareProduce(getOrganIdParam(reqVO)); return orderStatisticsMapper.selectOrderSquareProduce();
} }
@Override @Override
@OrganIgnore
public Map<String, Object> getOrderStatusCount(OrderStatisticsReqVO reqVO) { public Map<String, Object> getOrderStatusCount(OrderStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
// 所有的日期集合 // 所有的日期集合
List<String> dateList = getDateList(reqVO); List<String> dateList = getDateList(reqVO);
resultMap.put("dateList", dateList);
// 查询订单状态统计数据 // 查询订单状态统计数据
List<OrderStatisticsStatusRespVO> orderStatusRespVOS = orderStatisticsMapper.selectOrderStatusCountGroupBy(reqVO); List<OrderStatisticsStatusRespVO> orderStatusRespVOS = orderStatisticsMapper.selectOrderStatusCountGroupBy(reqVO);
@@ -122,14 +117,13 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", orderStatusEnum.getDescription()); seriesItem.put("name", orderStatusEnum.getDescription());
series.add(seriesItem); series.add(seriesItem);
} }
resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
resultMap.put("series", series); resultMap.put(SERIES_FIELD_NAME, series);
return resultMap; return resultMap;
} }
@Override @Override
@OrganIgnore
public Map<String, Object> getOrderAndPlanCountGroup(OrderStatisticsReqVO reqVO) { public Map<String, Object> getOrderAndPlanCountGroup(OrderStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>(); Map<String, Object> resultMap = new LinkedHashMap<>();
@@ -144,8 +138,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
.collect(Collectors.groupingBy(OrderPlanStatisticsCountRespVO::getDate, LinkedHashMap::new, Collectors.toList())); .collect(Collectors.groupingBy(OrderPlanStatisticsCountRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组 // 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
for (int i = 0; i < dateList.size(); i++) { for (String dateStr : dateList) {
String dateStr = dateList.get(i);
int[] countArr = new int[2]; int[] countArr = new int[2];
// 存入生产单数量 // 存入生产单数量
Integer orderCount = Optional.ofNullable(orderRespMap.get(dateStr)) Integer orderCount = Optional.ofNullable(orderRespMap.get(dateStr))
@@ -161,14 +154,13 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
.orElse(0); .orElse(0);
countArr[1] = planCount; countArr[1] = planCount;
resultMap.put(dateStr, countArr); resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), countArr);
} }
return resultMap; return resultMap;
} }
@Override @Override
@OrganIgnore
public Map<String, Object> getOrderAndPlanAreaSumGroup(OrderStatisticsReqVO reqVO) { public Map<String, Object> getOrderAndPlanAreaSumGroup(OrderStatisticsReqVO reqVO) {
Map<String, Object> resultMap = new LinkedHashMap<>(); Map<String, Object> resultMap = new LinkedHashMap<>();
@@ -194,7 +186,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
List<OrderPlanStatisticsAreaRespVO> planCountRespVOS = planRespMap.get(dateStr); List<OrderPlanStatisticsAreaRespVO> planCountRespVOS = planRespMap.get(dateStr);
areaArr[1] = planCountRespVOS != null && !planCountRespVOS.isEmpty() ? planCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO; areaArr[1] = planCountRespVOS != null && !planCountRespVOS.isEmpty() ? planCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
resultMap.put(dateStr, areaArr); resultMap.put(generateDateRangeAxis(dateStr, reqVO.getUnit()), areaArr);
} }
return resultMap; return resultMap;
@@ -207,7 +199,6 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 所有的日期集合 // 所有的日期集合
List<String> dateList = getDateList(reqVO); List<String> dateList = getDateList(reqVO);
resultMap.put("dateList", dateList);
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOList = orderPlateStatisticsMapper.selectPlateAnalysisListByCount(reqVO); List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOList = orderPlateStatisticsMapper.selectPlateAnalysisListByCount(reqVO);
// 基于相同的orderDate分组 // 基于相同的orderDate分组
@@ -250,7 +241,8 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", entry.getValue()); seriesItem.put("name", entry.getValue());
series.add(seriesItem); series.add(seriesItem);
} }
resultMap.put("series", series); resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap; return resultMap;
} }
@@ -260,7 +252,6 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
// 所有的日期集合 // 所有的日期集合
List<String> dateList = getDateList(reqVO); List<String> dateList = getDateList(reqVO);
resultMap.put("dateList", dateList);
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOList = orderPlateStatisticsMapper.selectPlateAnalysisListByArea(reqVO); List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOList = orderPlateStatisticsMapper.selectPlateAnalysisListByArea(reqVO);
// 基于相同的orderDate分组 // 基于相同的orderDate分组
@@ -303,7 +294,8 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
seriesItem.put("name", entry.getValue()); seriesItem.put("name", entry.getValue());
series.add(seriesItem); series.add(seriesItem);
} }
resultMap.put("series", series); resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList());
resultMap.put(SERIES_FIELD_NAME, series);
return resultMap; return resultMap;
} }
@@ -316,9 +308,6 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
* @return * @return
*/ */
private List<String> getDateList(OrderStatisticsReqVO reqVO) { private List<String> getDateList(OrderStatisticsReqVO reqVO) {
// 获取机构id
reqVO.setOrganId(getOrganIdParam(reqVO));
// 计算时间跨度 // 计算时间跨度
getTimeSpan(reqVO); getTimeSpan(reqVO);
@@ -416,16 +405,33 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
} }
/** /**
* 前端传组织否则查当前用户所在的组织 * 构建日期格式到图标横轴可用格式
* * 2024-1 -> 2024年第1季度
* @param reqVO * 2024-1-1 -> 2024年1月
* ...
* @param unit
* @return * @return
*/ */
private Long getOrganIdParam(OrderStatisticsReqVO reqVO) { private String generateDateRangeAxis(String date, Integer unit) {
if (reqVO != null && reqVO.getOrganId() != null) { OrderStatisticsUnit orderStatisticsUnit = OrderStatisticsUnit.fromValue(unit);
return reqVO.getOrganId(); StringBuffer newDateStrBuffer = new StringBuffer();
} else { String[] dateSplit = date.split("-");
return SecurityFrameworkUtils.getUserOrganId(); switch (orderStatisticsUnit) {
case QUARTER:
newDateStrBuffer.append(dateSplit[0]).append("年第").append(dateSplit[1]).append("季度");
break;
case MONTH:
newDateStrBuffer.append(dateSplit[0]).append("").append(dateSplit[1]).append("");
break;
case WEEK:
newDateStrBuffer.append(dateSplit[0]).append("").append(dateSplit[1]).append("").append("").append(dateSplit[2]).append("");
break;
case DAY:
newDateStrBuffer.append(dateSplit[0]).append("").append(dateSplit[1]).append("").append(dateSplit[2]).append("");
break;
default:
} }
return newDateStrBuffer.toString();
} }
} }
@@ -5,9 +5,6 @@
SELECT SUM(op.area) as area FROM orders o SELECT SUM(op.area) as area FROM orders o
LEFT JOIN order_plate op on op.order_id = o.id LEFT JOIN order_plate op on op.order_id = o.id
WHERE o.deleted = 0 WHERE o.deleted = 0
<if test="organId != null">
AND o.organ_id = #{organId}
</if>
</select> </select>
<select id="selectOrderStatusCountGroupBy" <select id="selectOrderStatusCountGroupBy"
@@ -28,8 +25,7 @@
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date
</if> </if>
from orders o from orders o
where o.organ_id = #{req.organId} where o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.deleted = 0 and o.deleted = 0
group by orderStatus, date; group by orderStatus, date;
</select> </select>
@@ -50,8 +46,7 @@
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date
</if> </if>
from orders o from orders o
where o.organ_id = #{req.organId} where o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.deleted = 0 and o.deleted = 0
group by date; group by date;
</select> </select>
@@ -72,9 +67,8 @@
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date
</if> </if>
from orders o from orders o
join order_plate op on op.order_id = o.id and op.organ_id = #{req.organId} join order_plate op on op.order_id = o.id
where o.organ_id = #{req.organId} where o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
and o.deleted = 0 and o.deleted = 0
group by date; group by date;
</select> </select>
@@ -26,11 +26,10 @@
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate
</if> </if>
FROM order_goods g FROM order_goods g
LEFT JOIN order_plate a ON g.id = a.goods_id AND g.organ_id = #{req.organId} LEFT JOIN order_plate a ON g.id = a.goods_id
LEFT JOIN orders o ON o.id = a.order_id AND o.organ_id = #{req.organId} LEFT JOIN orders o ON o.id = a.order_id
WHERE a.deleted = 0 WHERE a.deleted = 0
AND o.order_date BETWEEN #{req.createTime[0]} AND #{req.createTime[1]} AND o.order_date BETWEEN #{req.createTime[0]} AND #{req.createTime[1]}
AND g.organ_id = #{req.organId}
GROUP BY GROUP BY
g.goods_id,orderDate g.goods_id,orderDate
HAVING HAVING
@@ -65,11 +64,10 @@
,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as orderDate
</if> </if>
FROM order_goods g FROM order_goods g
LEFT JOIN order_plate a ON g.id = a.goods_id AND g.organ_id = #{req.organId} LEFT JOIN order_plate a ON g.id = a.goods_id
LEFT JOIN orders o ON o.id = a.order_id AND o.organ_id = #{req.organId} LEFT JOIN orders o ON o.id = a.order_id
WHERE a.deleted = 0 WHERE a.deleted = 0
AND o.order_date BETWEEN #{req.createTime[0]} AND #{req.createTime[1]} AND o.order_date BETWEEN #{req.createTime[0]} AND #{req.createTime[1]}
AND g.organ_id = #{req.organId}
GROUP BY GROUP BY
g.goods_id,orderDate g.goods_id,orderDate
HAVING HAVING