mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-13 21:32:07 +08:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
||||
package com.cf.imes.module.executor.enums;
|
||||
|
||||
/**
|
||||
* 生产单统计维度单位
|
||||
* @author Gqr
|
||||
* @since 2024/8/6 10:04
|
||||
*/
|
||||
public enum OrderStatisticsUnit {
|
||||
//季度、月、周、日
|
||||
QUARTER(0),
|
||||
MONTH(1),
|
||||
WEEK(2),
|
||||
DAY(3);
|
||||
|
||||
OrderStatisticsUnit(Integer value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
private Integer value;
|
||||
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
// from value
|
||||
public static OrderStatisticsUnit fromValue(Integer value) {
|
||||
for (OrderStatisticsUnit unit : OrderStatisticsUnit.values()) {
|
||||
if (unit.getValue().equals(value)) {
|
||||
return unit;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
-53
@@ -455,59 +455,6 @@ public class OrderController {
|
||||
return success(orderService.getOrderWarn());
|
||||
}
|
||||
|
||||
// 生产单总数
|
||||
@GetMapping("/orderCount")
|
||||
@Operation(summary = "生产单总数")
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<Integer> getOrderCount() {
|
||||
return success(orderService.orderCount());
|
||||
}
|
||||
|
||||
// 今日新增生产单总数
|
||||
@GetMapping("/orderCountToday")
|
||||
@Operation(summary = "今日新增生产单总数")
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<Integer> getOrderCountToday() {
|
||||
return success(orderService.orderCountToday());
|
||||
}
|
||||
|
||||
// 今日生产单完成总数
|
||||
@GetMapping("/orderCountTodayFinish")
|
||||
@Operation(summary = "今日生产单完成总数")
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<Integer> getOrderCountTodayFinish() {
|
||||
return success(orderService.orderCountTodayFinish());
|
||||
}
|
||||
|
||||
// 生产中生产单总数
|
||||
@GetMapping("/orderCountProduce")
|
||||
@Operation(summary = "生产中生产单总数")
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<Integer> getOrderCountProduce() {
|
||||
return success(orderService.orderCountProduce());
|
||||
}
|
||||
|
||||
// 生产中生产平方数
|
||||
@GetMapping("/orderSquareProduce")
|
||||
@Operation(summary = "生产中生产平方数")
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<Integer> getOrderSquareProduce() {
|
||||
return success(orderService.orderSquareProduce());
|
||||
}
|
||||
|
||||
// 生产单状态分组统计返回
|
||||
@GetMapping("/getOrderStatusCount")
|
||||
@Operation(summary = "生产单状态分组统计返回")
|
||||
@Parameters({
|
||||
@Parameter(name = "startTime", description = "开始时间", example = "2024-07-15"),
|
||||
@Parameter(name = "endTime", description = "结束时间", example = "2024-07-16")
|
||||
})
|
||||
@PreAuthorize("@ss.hasPermission('productManager:List')")
|
||||
public CommonResult<List<OrderStatusRespVO>> getOrderStatusCount(@RequestParam(value = "startTime") String startTime,
|
||||
@RequestParam(value = "endTime") String endTime) {
|
||||
return success(orderService.getOrderStatusCount(startTime + " 00:00:00", endTime + " 23:59:59"));
|
||||
}
|
||||
|
||||
// 小板数量 <集合>
|
||||
@GetMapping("/getPlateCount")
|
||||
@Operation(summary = "小板数量")
|
||||
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
package com.cf.imes.module.executor.controller.admin.order;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.service.order.OrderStatisticsService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
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 javax.validation.Valid;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/5 17:00
|
||||
*/
|
||||
@Tag(name = "管理后台 - 生产单统计管理")
|
||||
@RestController
|
||||
@RequestMapping("/executor/order/statistics")
|
||||
@Validated
|
||||
public class OrderStatisticsController {
|
||||
@Resource
|
||||
private OrderStatisticsService orderStatisticsService;
|
||||
|
||||
@GetMapping("/total")
|
||||
@Operation(summary = "生产单总数")
|
||||
public CommonResult<Integer> getOrderCount(OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.orderCount(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/today/increase")
|
||||
@Operation(summary = "今日新增生产单总数")
|
||||
public CommonResult<Integer> getOrderCountToday(OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.orderCountToday(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/today/finish")
|
||||
@Operation(summary = "今日生产单完成总数")
|
||||
public CommonResult<Integer> getOrderCountTodayFinish(OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.orderCountTodayFinish(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/producing/total")
|
||||
@Operation(summary = "生产中生产单总数")
|
||||
public CommonResult<Integer> getOrderCountProduce(OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.orderCountProduce(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/producing/square")
|
||||
@Operation(summary = "生产中生产平方数")
|
||||
public CommonResult<Integer> getOrderSquareProduce(OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.orderSquareProduce(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/orderStatus/group")
|
||||
@Operation(summary = "生产单状态分组统计")
|
||||
public CommonResult<Map<String, Object>> getOrderStatusCount(@Valid OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.getOrderStatusCount(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/orderAndPlanCount/group")
|
||||
@Operation(summary = "生产单、排单单量分组统计")
|
||||
public CommonResult<Map<String, Object>> getOrderAndPlanCountGroup(@Valid OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.getOrderAndPlanCountGroup(reqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/orderAndPlanArea/group")
|
||||
@Operation(summary = "生产单、排单平方数分组统计")
|
||||
public CommonResult<Map<String, Object>> getOrderAndPlanAreaGroup(@Valid OrderStatisticsReqVO reqVO) {
|
||||
return success(orderStatisticsService.getOrderAndPlanAreaSumGroup(reqVO));
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.cf.imes.module.executor.controller.admin.order.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 生产单平方数统计")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString(callSuper = true)
|
||||
public class OrderStatisticsAreaRespVO implements Comparable<OrderStatisticsAreaRespVO> {
|
||||
@Schema(description = "订单平方数")
|
||||
private BigDecimal areaSum;
|
||||
|
||||
@Schema(description = "生产单时间")
|
||||
private String date;
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull OrderStatisticsAreaRespVO other) {
|
||||
// 解析 orderDate 字符串为年、月、周
|
||||
String[] partsThis = date.split("-");
|
||||
String[] partsOther = other.date.split("-");
|
||||
|
||||
// 比较年份
|
||||
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
|
||||
if (yearComparison != 0) {
|
||||
return yearComparison;
|
||||
}
|
||||
|
||||
// 比较月份
|
||||
if (partsThis.length > 1 && partsOther.length > 1) {
|
||||
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
|
||||
if (monthComparison != 0) {
|
||||
return monthComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 比较周数
|
||||
if (partsThis.length > 2 && partsOther.length > 2) {
|
||||
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
|
||||
if (weekComparison != 0) {
|
||||
return weekComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有部分都相同,则按状态排序
|
||||
return this.areaSum.compareTo(other.areaSum);
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.cf.imes.module.executor.controller.admin.order.vo.order;
|
||||
|
||||
import com.cf.imes.module.executor.validation.order.OrderStatisticsUnitInEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/5 17:10
|
||||
*/
|
||||
@Schema(description = "管理后台 - 生产单统计 Request VO")
|
||||
@Data
|
||||
public class OrderStatisticsReqVO {
|
||||
@Schema(description = "组织id")
|
||||
private Long organId;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private LocalDate[] createTime;
|
||||
|
||||
/**
|
||||
* 统计维度单位
|
||||
*/
|
||||
@Schema(description = "统计维度单位", example = "0", allowableValues = {"0", "1", "2", "3"}, type = "integer")
|
||||
@OrderStatisticsUnitInEnum
|
||||
private Integer unit;
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package com.cf.imes.module.executor.controller.admin.order.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@Schema(description = "管理后台 - 生产单状态统计")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString(callSuper = true)
|
||||
public class OrderStatisticsStatusRespVO implements Comparable<OrderStatisticsStatusRespVO> {
|
||||
@Schema(description = "订单状态")
|
||||
private Integer orderStatus;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private Integer orderCount;
|
||||
|
||||
@Schema(description = "生产单时间")
|
||||
private String date;
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull OrderStatisticsStatusRespVO other) {
|
||||
// 解析 orderDate 字符串为年、月、周
|
||||
String[] partsThis = date.split("-");
|
||||
String[] partsOther = other.date.split("-");
|
||||
|
||||
// 比较年份
|
||||
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
|
||||
if (yearComparison != 0) {
|
||||
return yearComparison;
|
||||
}
|
||||
|
||||
// 比较月份
|
||||
if (partsThis.length > 1 && partsOther.length > 1) {
|
||||
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
|
||||
if (monthComparison != 0) {
|
||||
return monthComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 比较周数
|
||||
if (partsThis.length > 2 && partsOther.length > 2) {
|
||||
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
|
||||
if (weekComparison != 0) {
|
||||
return weekComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有部分都相同,则按状态排序
|
||||
return this.orderStatus.compareTo(other.orderStatus);
|
||||
}
|
||||
}
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
package com.cf.imes.module.executor.controller.admin.order.vo.order;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 生产单状态统计")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString(callSuper = true)
|
||||
public class OrderStatusRespVO {
|
||||
@Schema(description = "订单状态")
|
||||
private Integer orderState;
|
||||
|
||||
@Schema(description = "订单数量")
|
||||
private Integer orderCount;
|
||||
|
||||
@Schema(description = "生产单时间")
|
||||
private LocalDateTime orderDate;
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/7 15:12
|
||||
*/
|
||||
|
||||
@Schema(description = "管理后台 - 排单统计RespVO")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString(callSuper = true)
|
||||
public class OrderPlanStatisticsAreaRespVO implements Comparable<OrderPlanStatisticsAreaRespVO> {
|
||||
@Schema(description = "统计时间")
|
||||
private String date;
|
||||
|
||||
@Schema(description = "面积总和")
|
||||
private BigDecimal areaSum;
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull OrderPlanStatisticsAreaRespVO other) {
|
||||
// 解析 date 字符串为年、月、周
|
||||
String[] partsThis = date.split("-");
|
||||
String[] partsOther = other.date.split("-");
|
||||
|
||||
// 比较年份
|
||||
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
|
||||
if (yearComparison != 0) {
|
||||
return yearComparison;
|
||||
}
|
||||
|
||||
// 比较月份
|
||||
if (partsThis.length > 1 && partsOther.length > 1) {
|
||||
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
|
||||
if (monthComparison != 0) {
|
||||
return monthComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 比较周数
|
||||
if (partsThis.length > 2 && partsOther.length > 2) {
|
||||
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
|
||||
if (weekComparison != 0) {
|
||||
return weekComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有部分都相同,则按面积排序
|
||||
return this.areaSum.compareTo(other.areaSum);
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.cf.imes.module.executor.controller.admin.plan.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/7 15:12
|
||||
*/
|
||||
|
||||
@Schema(description = "管理后台 - 排单统计RespVO")
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString(callSuper = true)
|
||||
public class OrderPlanStatisticsCountRespVO implements Comparable<OrderPlanStatisticsCountRespVO> {
|
||||
|
||||
@Schema(description = "数量")
|
||||
private Integer count;
|
||||
|
||||
@Schema(description = "统计时间")
|
||||
private String date;
|
||||
|
||||
@Override
|
||||
public int compareTo(@NotNull OrderPlanStatisticsCountRespVO other) {
|
||||
// 解析 date 字符串为年、月、周
|
||||
String[] partsThis = date.split("-");
|
||||
String[] partsOther = other.date.split("-");
|
||||
|
||||
// 比较年份
|
||||
int yearComparison = Integer.compare(Integer.parseInt(partsThis[0]), Integer.parseInt(partsOther[0]));
|
||||
if (yearComparison != 0) {
|
||||
return yearComparison;
|
||||
}
|
||||
|
||||
// 比较月份
|
||||
if (partsThis.length > 1 && partsOther.length > 1) {
|
||||
int monthComparison = Integer.compare(Integer.parseInt(partsThis[1]), Integer.parseInt(partsOther[1]));
|
||||
if (monthComparison != 0) {
|
||||
return monthComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 比较周数
|
||||
if (partsThis.length > 2 && partsOther.length > 2) {
|
||||
int weekComparison = Integer.compare(Integer.parseInt(partsThis[2]), Integer.parseInt(partsOther[2]));
|
||||
if (weekComparison != 0) {
|
||||
return weekComparison;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有部分都相同,则按面积排序
|
||||
return this.count.compareTo(other.count);
|
||||
}
|
||||
}
|
||||
-66
@@ -8,19 +8,14 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
||||
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.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.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -139,70 +134,9 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
|
||||
|
||||
List<Long> selectOrderIds(@Param(Constants.WRAPPER) Wrapper<OrderDO> wrapper);
|
||||
|
||||
// 生产单状态统计
|
||||
List<OrderStatusRespVO> selectOrderStatusCount(@Param("organId")Long organId, @Param("startTime")String startTime, @Param("endTime")String endTime);
|
||||
|
||||
// 生产单预警统计
|
||||
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 LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getOrganId, organId)
|
||||
.eq(OrderDO::getDeleted, 0)));
|
||||
}
|
||||
@OrganIgnore
|
||||
default Integer selectOrderCount(){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, 0)));
|
||||
}
|
||||
|
||||
// 今日新增生产单总数统计
|
||||
default Integer selectOrderCountToday(Long organId){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getOrganId, organId)
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.between(OrderDO::getCreateTime, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0), LocalDateTime.now().withHour(23).withMinute(59).withSecond(59))));
|
||||
}
|
||||
@OrganIgnore
|
||||
default Integer selectOrderCountToday(){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.between(OrderDO::getCreateTime, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0), LocalDateTime.now().withHour(23).withMinute(59).withSecond(59))));
|
||||
}
|
||||
|
||||
// 今日新增生产单总数统计
|
||||
default Integer selectOrderCountTodayFinish(Long organId){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getOrganId, organId)
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.between(OrderDO::getFinishTime, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0), LocalDateTime.now().withHour(23).withMinute(59).withSecond(59))));
|
||||
}
|
||||
@OrganIgnore
|
||||
default Integer selectOrderCountTodayFinish(){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.between(OrderDO::getFinishTime, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0), LocalDateTime.now().withHour(23).withMinute(59).withSecond(59))));
|
||||
}
|
||||
|
||||
// 今日新增生产单总数统计
|
||||
default Integer selectOrderCountProduce(Long organId){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getOrganId, organId)
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
|
||||
}
|
||||
@OrganIgnore
|
||||
default Integer selectOrderCountProduce(){
|
||||
return Math.toIntExact(selectCount(new LambdaQueryWrapper<OrderDO>()
|
||||
.eq(OrderDO::getDeleted, 0)
|
||||
.eq(OrderDO::getStatus, OrderStatusEnum.IN_PRODUCTION.getStatus())));
|
||||
}
|
||||
|
||||
// 生产中生产平方数
|
||||
@OrganIgnore
|
||||
Integer selectOrderSquareProduce(@Param("organId") Long organId);
|
||||
}
|
||||
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
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.OrderStatisticsAreaRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO;
|
||||
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<OrderStatisticsStatusRespVO> selectOrderStatusCountGroupBy(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 生产单按时间分组统计数量
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
List<OrderStatisticsStatusRespVO> selectOrderCountGroupByOrderDate(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 生产单按时间分组统计面积
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
List<OrderStatisticsAreaRespVO> selectOrderAreaGroupByOrderDate(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
}
|
||||
+17
-8
@@ -2,15 +2,16 @@ package com.cf.imes.module.executor.dal.mysql.plan;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -26,7 +27,7 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge
|
||||
public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
|
||||
default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) {
|
||||
if(StrUtil.isNotBlank(reqVO.getCustomer())) {
|
||||
if(StringUtils.isNotBlank(reqVO.getCustomer())) {
|
||||
return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>()
|
||||
.eq(PlanDO::getDeleted,false)
|
||||
.eq(PlanDO::getOrganId,getUserOrganId())
|
||||
@@ -85,10 +86,18 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
.eq(PlanDO::getMachineId,machineId));
|
||||
}
|
||||
|
||||
//
|
||||
// default PlanDO selectByOrderId(Long orderId) {
|
||||
// return selectOne(new MPJLambdaWrapperX<PlanDO>()
|
||||
// .like(PlanDO::getOrderNos, orderId));
|
||||
//
|
||||
// }
|
||||
/**
|
||||
* 排单按时间分组统计数量
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
List<OrderPlanStatisticsCountRespVO> selectPlanCountGroupByCreateTime(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 排单按时间分组统计面积
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
List<OrderPlanStatisticsAreaRespVO> selectPlanAreaGroupByCreateTime(@Param("req") OrderStatisticsReqVO reqVO);
|
||||
}
|
||||
-29
@@ -173,41 +173,12 @@ public interface OrderService {
|
||||
*/
|
||||
List<ApiOrderRespVO> getApiOrderList(JSONObject orderList);
|
||||
|
||||
/**
|
||||
* 生产单状态统计
|
||||
*/
|
||||
List<OrderStatusRespVO> getOrderStatusCount(String startTime, String endTime);
|
||||
|
||||
/**
|
||||
* 生产单超期告警分析统计
|
||||
*/
|
||||
Map<String,List<OrderOverdueRespVO>> getOrderWarn();
|
||||
|
||||
/**
|
||||
* 生产单总数统计
|
||||
*/
|
||||
Integer orderCount();
|
||||
|
||||
/**
|
||||
* 今日新增生产单总数统计
|
||||
*/
|
||||
Integer orderCountToday();
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderCountTodayFinish();
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderCountProduce();
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderSquareProduce();
|
||||
|
||||
/**
|
||||
* 小板数量
|
||||
*/
|
||||
|
||||
-64
@@ -1,7 +1,6 @@
|
||||
package com.cf.imes.module.executor.service.order;
|
||||
|
||||
import cn.smallbun.screw.core.util.CollectionUtils;
|
||||
import co.elastic.clients.elasticsearch.nodes.Ingest;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -71,7 +70,6 @@ import java.nio.file.Paths;
|
||||
import java.time.*;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -296,61 +294,6 @@ public class OrderServiceImpl implements OrderService {
|
||||
return JsonUtils.zipString(orderBodyToString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer orderCount() {
|
||||
// 角色判断
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// 数据查询
|
||||
if (loginUser.getIsSupAdmin()){
|
||||
return orderMapper.selectOrderCount();
|
||||
}
|
||||
return orderMapper.selectOrderCount(getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer orderCountToday() {
|
||||
// 角色判断
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// 数据查询
|
||||
if (loginUser.getIsSupAdmin()){
|
||||
return orderMapper.selectOrderCountToday();
|
||||
}
|
||||
return orderMapper.selectOrderCountToday(getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer orderCountTodayFinish() {
|
||||
// 角色判断
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// 数据查询
|
||||
if (loginUser.getIsSupAdmin()){
|
||||
return orderMapper.selectOrderCountTodayFinish();
|
||||
}
|
||||
return orderMapper.selectOrderCountTodayFinish(getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer orderCountProduce() {
|
||||
// 角色判断
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// 数据查询
|
||||
if (loginUser.getIsSupAdmin()){
|
||||
return orderMapper.selectOrderCountProduce();
|
||||
}
|
||||
return orderMapper.selectOrderCountProduce(getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer orderSquareProduce() {
|
||||
// 角色判断
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
// 数据查询
|
||||
if (loginUser.getIsSupAdmin()){
|
||||
return orderMapper.selectOrderSquareProduce(null);
|
||||
}
|
||||
return orderMapper.selectOrderSquareProduce(getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<OrderGoodsPlateRespVO> plateCount(String startTime, String endTime, Integer pageNo, Integer pageSize) {
|
||||
// 角色判断
|
||||
@@ -677,13 +620,6 @@ public class OrderServiceImpl implements OrderService {
|
||||
return apiOrderRespVOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OrderStatusRespVO> getOrderStatusCount(String startTime, String endTime) {
|
||||
List<OrderStatusRespVO> orderStatusRespVOS = orderMapper.selectOrderStatusCount(OrganContextHolder.getOrganId(), startTime, endTime);
|
||||
orderStatusRespVOS.removeIf(obj -> obj.getOrderState() == OrderStatusEnum.EMPTY.getStatus());
|
||||
return orderStatusRespVOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String,List<OrderOverdueRespVO>> getOrderWarn() {
|
||||
Map<String,List<OrderOverdueRespVO>> map = new HashMap<>();
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
package com.cf.imes.module.executor.service.order;
|
||||
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 生产单统计 order_{N} Service 接口
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/8/5 16:57
|
||||
*/
|
||||
public interface OrderStatisticsService {
|
||||
/**
|
||||
* 生产单总数统计
|
||||
*/
|
||||
Integer orderCount(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 今日新增生产单总数统计
|
||||
*/
|
||||
Integer orderCountToday(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderCountTodayFinish(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderCountProduce(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 今日生产单完成总数
|
||||
*/
|
||||
Integer orderSquareProduce(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 生产单状态分组统计
|
||||
*/
|
||||
Map<String, Object> getOrderStatusCount(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 生产单、排单单量分组统计
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> getOrderAndPlanCountGroup(OrderStatisticsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 生产单、排单平方数统计
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
Map<String,Object> getOrderAndPlanAreaSumGroup(OrderStatisticsReqVO reqVO);
|
||||
}
|
||||
+318
@@ -0,0 +1,318 @@
|
||||
package com.cf.imes.module.executor.service.order;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.OrderStatisticsAreaRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
|
||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO;
|
||||
import com.cf.imes.module.executor.dal.mysql.order.OrderStatisticsMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||
import com.cf.imes.module.executor.enums.OrderStatisticsUnit;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Gqr
|
||||
* @since 2024/8/5 16:58
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class OrderStatisticsServiceImpl implements OrderStatisticsService {
|
||||
@Resource
|
||||
private OrderStatisticsMapper orderStatisticsMapper;
|
||||
|
||||
@Resource
|
||||
private PlanMapper planMapper;
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Integer orderCount(OrderStatisticsReqVO reqVO) {
|
||||
return orderStatisticsMapper.selectOrderCount(getOrganIdParam(reqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Integer orderCountToday(OrderStatisticsReqVO reqVO) {
|
||||
return orderStatisticsMapper.selectOrderCountToday(getOrganIdParam(reqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Integer orderCountTodayFinish(OrderStatisticsReqVO reqVO) {
|
||||
return orderStatisticsMapper.selectOrderCountTodayFinish(getOrganIdParam(reqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Integer orderCountProduce(OrderStatisticsReqVO reqVO) {
|
||||
return orderStatisticsMapper.selectOrderCountProduce(getOrganIdParam(reqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Integer orderSquareProduce(OrderStatisticsReqVO reqVO) {
|
||||
return orderStatisticsMapper.selectOrderSquareProduce(getOrganIdParam(reqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Map<String, Object> getOrderStatusCount(OrderStatisticsReqVO reqVO) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
|
||||
// 获取机构id
|
||||
reqVO.setOrganId(getOrganIdParam(reqVO));
|
||||
|
||||
// 计算时间跨度
|
||||
getTimeSpan(reqVO);
|
||||
|
||||
// 查询订单状态统计数据
|
||||
List<OrderStatisticsStatusRespVO> orderStatusRespVOS = orderStatisticsMapper.selectOrderStatusCountGroupBy(reqVO);
|
||||
|
||||
// 基于相同的orderDate分组
|
||||
Map<String, List<OrderStatisticsStatusRespVO>> orderDateMap = orderStatusRespVOS.stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderStatisticsStatusRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
|
||||
|
||||
// 所有的日期集合
|
||||
List<String> dateList = generateDateRange(reqVO);
|
||||
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[dateList.size()];
|
||||
|
||||
// 遍历完整的日期范围
|
||||
int index = 0;
|
||||
for (String dateStr : dateList) {
|
||||
// 查找匹配的订单状态
|
||||
List<OrderStatisticsStatusRespVO> listForDate = orderDateMap.get(dateStr);
|
||||
int count = 0;
|
||||
if (listForDate != null) {
|
||||
count = listForDate.stream()
|
||||
.filter(respVO -> Objects.equals(orderStatusEnum.getStatus(), respVO.getOrderStatus()))
|
||||
.mapToInt(OrderStatisticsStatusRespVO::getOrderCount)
|
||||
.sum();
|
||||
}
|
||||
|
||||
sumArr[index++] = count;
|
||||
}
|
||||
|
||||
seriesItem.put("data", sumArr);
|
||||
seriesItem.put("name", orderStatusEnum.getDescription());
|
||||
series.add(seriesItem);
|
||||
}
|
||||
|
||||
resultMap.put("series", series);
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Map<String, Object> getOrderAndPlanCountGroup(OrderStatisticsReqVO reqVO) {
|
||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
||||
|
||||
// 获取机构id
|
||||
reqVO.setOrganId(getOrganIdParam(reqVO));
|
||||
|
||||
// 计算时间跨度
|
||||
getTimeSpan(reqVO);
|
||||
|
||||
// 所有的日期集合
|
||||
List<String> dateList = generateDateRange(reqVO);
|
||||
|
||||
Map<String, List<OrderStatisticsStatusRespVO>> orderRespMap = orderStatisticsMapper.selectOrderCountGroupByOrderDate(reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderStatisticsStatusRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
|
||||
Map<String, List<OrderPlanStatisticsCountRespVO>> planRespMap = planMapper.selectPlanCountGroupByCreateTime(reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderPlanStatisticsCountRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
|
||||
|
||||
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
|
||||
for (int i = 0; i < dateList.size(); i++) {
|
||||
String dateStr = dateList.get(i);
|
||||
int[] countArr = new int[2];
|
||||
// 存入生产单数量
|
||||
Integer orderCount = Optional.ofNullable(orderRespMap.get(dateStr))
|
||||
.map(list -> list.stream().findFirst().orElse(new OrderStatisticsStatusRespVO()))
|
||||
.map(OrderStatisticsStatusRespVO::getOrderCount)
|
||||
.orElse(0);
|
||||
countArr[0] = orderCount;
|
||||
|
||||
// 存入排单数量
|
||||
Integer planCount = Optional.ofNullable(planRespMap.get(dateStr))
|
||||
.map(list -> list.stream().findFirst().orElse(new OrderPlanStatisticsCountRespVO()))
|
||||
.map(OrderPlanStatisticsCountRespVO::getCount)
|
||||
.orElse(0);
|
||||
countArr[1] = planCount;
|
||||
|
||||
resultMap.put(dateStr, countArr);
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Map<String, Object> getOrderAndPlanAreaSumGroup(OrderStatisticsReqVO reqVO) {
|
||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
||||
|
||||
// 获取机构id
|
||||
reqVO.setOrganId(getOrganIdParam(reqVO));
|
||||
|
||||
// 计算时间跨度
|
||||
getTimeSpan(reqVO);
|
||||
|
||||
// 所有的日期集合
|
||||
List<String> dateList = generateDateRange(reqVO);
|
||||
|
||||
Map<String, List<OrderStatisticsAreaRespVO>> orderRespMap = orderStatisticsMapper.selectOrderAreaGroupByOrderDate(reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderStatisticsAreaRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
|
||||
Map<String, List<OrderPlanStatisticsAreaRespVO>> planRespMap = planMapper.selectPlanAreaGroupByCreateTime(reqVO).stream()
|
||||
.sorted(Comparator.naturalOrder())
|
||||
.collect(Collectors.groupingBy(OrderPlanStatisticsAreaRespVO::getDate, LinkedHashMap::new, Collectors.toList()));
|
||||
|
||||
// 遍历时间跨度列表,匹配数量存入数组,没有补0存入数组
|
||||
for (String dateStr : dateList) {
|
||||
BigDecimal[] areaArr = new BigDecimal[2];
|
||||
|
||||
// 存生产单面积
|
||||
List<OrderStatisticsAreaRespVO> orderCountRespVOS = orderRespMap.get(dateStr);
|
||||
areaArr[0] = orderCountRespVOS != null && !orderCountRespVOS.isEmpty() ? orderCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
|
||||
|
||||
// 存排单面积
|
||||
List<OrderPlanStatisticsAreaRespVO> planCountRespVOS = planRespMap.get(dateStr);
|
||||
areaArr[1] = planCountRespVOS != null && !planCountRespVOS.isEmpty() ? planCountRespVOS.get(0).getAreaSum() : BigDecimal.ZERO;
|
||||
|
||||
resultMap.put(dateStr, areaArr);
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取统计的时间跨度
|
||||
* 计算起止时间:前端不传入时间就根据维度单位从当前日期计算
|
||||
*
|
||||
* @param reqVO
|
||||
*/
|
||||
private void getTimeSpan(OrderStatisticsReqVO reqVO) {
|
||||
LocalDate[] createTime = reqVO.getCreateTime();
|
||||
LocalDate startTime = null;
|
||||
LocalDate endTime;
|
||||
LocalDate now = LocalDate.now();
|
||||
if (ObjectUtil.isNull(createTime) || ObjectUtil.isNull(createTime[0]) || ObjectUtil.isNull(createTime[1])) {
|
||||
endTime = now;
|
||||
switch (OrderStatisticsUnit.fromValue(reqVO.getUnit())) {
|
||||
case QUARTER:
|
||||
// 从now往前的2年
|
||||
startTime = now.minusYears(2);
|
||||
break;
|
||||
case MONTH:
|
||||
// 从now往前的12个月
|
||||
startTime = now.minusMonths(12);
|
||||
break;
|
||||
case WEEK:
|
||||
// 从now往前的12周
|
||||
startTime = now.minusWeeks(12);
|
||||
break;
|
||||
case DAY:
|
||||
// 从now往前的15天
|
||||
startTime = now.minusDays(15);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// 声明一个LocalDateTime的数组,把startTime和endTime放进去
|
||||
reqVO.setCreateTime(new LocalDate[]{startTime, endTime});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取日期范围内的所有格式字符串
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
private List<String> generateDateRange(OrderStatisticsReqVO reqVO) {
|
||||
Integer unit = reqVO.getUnit();
|
||||
// 计算时间跨度
|
||||
getTimeSpan(reqVO);
|
||||
// 计算后的开始和结束时间
|
||||
LocalDate startDate = ObjectUtil.clone(reqVO.getCreateTime()[0]);
|
||||
LocalDate endDate = ObjectUtil.clone(reqVO.getCreateTime()[1]);
|
||||
|
||||
List<String> dates = new ArrayList<>();
|
||||
while (!startDate.isAfter(endDate)) {
|
||||
String dateStr;
|
||||
switch (OrderStatisticsUnit.fromValue(unit)) {
|
||||
case QUARTER:
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-Q"));
|
||||
// 加一季度(3个月)
|
||||
startDate = startDate.plusMonths(3);
|
||||
break;
|
||||
case MONTH:
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M"));
|
||||
// 加一月
|
||||
startDate = startDate.plusMonths(1);
|
||||
break;
|
||||
case WEEK:
|
||||
// 使用自定义格式表示月份
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M"));
|
||||
// 计算从月份第一天到当前日期经过了多少周
|
||||
LocalDate monthStart = startDate.with(TemporalAdjusters.firstDayOfMonth());
|
||||
long weeksInMonth = ChronoUnit.WEEKS.between(monthStart, startDate) + 1;
|
||||
dateStr = dateStr + "-" + weeksInMonth;
|
||||
// 加一周
|
||||
startDate = startDate.plusWeeks(1);
|
||||
break;
|
||||
case DAY:
|
||||
dateStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-M-d"));
|
||||
// 加一天
|
||||
startDate = startDate.plusDays(1);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported unit: " + unit);
|
||||
}
|
||||
dates.add(dateStr);
|
||||
}
|
||||
return dates;
|
||||
}
|
||||
|
||||
/**
|
||||
* 前端传组织否则查当前用户所在的组织
|
||||
*
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
private Long getOrganIdParam(OrderStatisticsReqVO reqVO) {
|
||||
if (reqVO != null && reqVO.getOrganId() != null) {
|
||||
return reqVO.getOrganId();
|
||||
} else {
|
||||
return SecurityFrameworkUtils.getUserOrganId();
|
||||
}
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.cf.imes.module.executor.validation.order;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 生产单统计维度单位入参校验注解
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/7/17 9:33
|
||||
*/
|
||||
@Target({
|
||||
ElementType.METHOD,
|
||||
ElementType.FIELD,
|
||||
ElementType.ANNOTATION_TYPE,
|
||||
ElementType.CONSTRUCTOR,
|
||||
ElementType.PARAMETER,
|
||||
ElementType.TYPE_USE
|
||||
})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Constraint(
|
||||
validatedBy = {OrderStatisticsUnitInEnumValidator.class}
|
||||
)
|
||||
public @interface OrderStatisticsUnitInEnum {
|
||||
String message() default "生产单统计维度单位[unit]错误,请检查";
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.cf.imes.module.executor.validation.order;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.cf.imes.module.executor.enums.OrderStatisticsUnit;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
|
||||
/**
|
||||
* 生产单统计维度单位入参校验器
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/7/17 9:33
|
||||
*/
|
||||
public class OrderStatisticsUnitInEnumValidator implements ConstraintValidator<OrderStatisticsUnitInEnum, Integer> {
|
||||
|
||||
@Override
|
||||
public void initialize(OrderStatisticsUnitInEnum constraintAnnotation) {
|
||||
ConstraintValidator.super.initialize(constraintAnnotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(Integer value, ConstraintValidatorContext context) {
|
||||
if (ObjectUtil.isNull(value)) {
|
||||
return true;
|
||||
}
|
||||
OrderStatisticsUnit unit = OrderStatisticsUnit.fromValue(value);
|
||||
if (ObjectUtil.isNotNull(unit)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-22
@@ -79,18 +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,
|
||||
o.order_date
|
||||
from orders o
|
||||
where o.organ_id = #{organId}
|
||||
and DATE(o.order_date) between #{startTime} and #{endTime}
|
||||
and o.deleted = 0
|
||||
group by o.status, o.order_date
|
||||
</select>
|
||||
|
||||
<select id="selectOrderNear" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO">
|
||||
@@ -160,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>
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
<?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="selectOrderStatusCountGroupBy"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO">
|
||||
select o.status as orderStatus,
|
||||
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 date
|
||||
</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 date
|
||||
</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
|
||||
date
|
||||
</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 date
|
||||
</if>
|
||||
from orders o
|
||||
where o.organ_id = #{req.organId}
|
||||
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and o.deleted = 0
|
||||
group by orderStatus, date;
|
||||
</select>
|
||||
|
||||
<select id="selectOrderCountGroupByOrderDate"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsStatusRespVO">
|
||||
select 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 date
|
||||
</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 date
|
||||
</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 date
|
||||
</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 date
|
||||
</if>
|
||||
from orders o
|
||||
where o.organ_id = #{req.organId}
|
||||
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and o.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
|
||||
<select id="selectOrderAreaGroupByOrderDate"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsAreaRespVO">
|
||||
select sum(op.area) as areaSum
|
||||
<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 date
|
||||
</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 date
|
||||
</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 date
|
||||
</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 date
|
||||
</if>
|
||||
from orders o
|
||||
join order_plate op on op.order_id = o.id and op.organ_id = #{req.organId}
|
||||
where o.organ_id = #{req.organId}
|
||||
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and o.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
</mapper>
|
||||
+48
@@ -123,4 +123,52 @@
|
||||
|
||||
<select id="selectPlanByOrderIds" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO"></select>
|
||||
|
||||
<select id="selectPlanCountGroupByCreateTime"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO">
|
||||
select
|
||||
count(p.id) as count
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@QUARTER.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', QUARTER(p.create_time)) as date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@MONTH.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time)) as date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@WEEK.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', FLOOR((DayOfMonth(p.create_time)-1)/7)+1) AS date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@DAY.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', DAY(p.create_time)) as date
|
||||
</if>
|
||||
from order_plan p
|
||||
where p.organ_id = #{req.organId}
|
||||
and p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and p.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
|
||||
<select id="selectPlanAreaGroupByCreateTime"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO">
|
||||
select sum(op.area) areaSum
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@QUARTER.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', QUARTER(p.create_time)) as date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@MONTH.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time)) as date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@WEEK.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', FLOOR((DayOfMonth(p.create_time)-1)/7)+1) AS
|
||||
date
|
||||
</if>
|
||||
<if test="req.unit != null and req.unit == @com.cf.imes.module.executor.enums.OrderStatisticsUnit@DAY.getValue()">
|
||||
,CONCAT(YEAR(p.create_time), '-', MONTH(p.create_time), '-', DAY(p.create_time)) as date
|
||||
</if>
|
||||
from order_plan p
|
||||
join order_plan_item opi on p.id = opi.plan_id and opi.organ_id = #{req.organId}
|
||||
join order_item oi on oi.id = opi.item_id and oi.organ_id = #{req.organId}
|
||||
join order_plate op on oi.plate_id = op.id and op.organ_id = #{req.organId}
|
||||
where p.organ_id = #{req.organId}
|
||||
and p.create_time between #{req.createTime[0]} and #{req.createTime[1]}
|
||||
and p.deleted = 0
|
||||
group by date;
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user