首页-统计1

This commit is contained in:
lym
2024-07-11 17:36:18 +08:00
parent 0aafe646b6
commit 02c4da859b
12 changed files with 225 additions and 42 deletions
@@ -7,6 +7,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRe
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.enums.OrderTypeEnum;
import com.cf.imes.module.executor.util.ExcelWriterUtil;
import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataAchieve;
import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize;
@@ -286,7 +287,7 @@ public class OrderController {
if (list.size() == 0) {
orderDO.setStatus(0);
}
orderDO = ((OrderDO) mapOrder.get("order")).setOrderType(0).setStatus(1);
orderDO = ((OrderDO) mapOrder.get("order")).setOrderType(OrderTypeEnum.MAIN_ORDER.getStatus()).setStatus(1);
String err = ((String) mapOrder.get("error"));
if (!orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) {
@@ -383,10 +384,11 @@ public class OrderController {
}
// 生产单超期告警
// @GetMapping("/getOrderOverdue")
// @Operation(summary = "生产单超期告警")
// @PreAuthorize("@ss.hasPermission('productManager:List')")
// public CommonResult<List<OrderOverdueRespVO>> getOrderOverdue() {
// return success(orderService.getOrderOverdue());
// }
@GetMapping("/getOrderWarn")
@Operation(summary = "生产单警告")
@Parameter(name = "startTerm", description = "时间段选择", required = false, example = "1,3,7")
@PreAuthorize("@ss.hasPermission('productManager:List')")
public CommonResult<Map<String,List<OrderOverdueRespVO>>> getOrderOverdue(@RequestParam(value = "startTerm", required = false) Integer startTerm) {
return success(orderService.getOrderWarn(startTerm));
}
}
@@ -1,6 +1,5 @@
package com.cf.imes.module.executor.controller.admin.order.vo.order;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@@ -12,14 +12,6 @@ import java.math.BigDecimal;
@NoArgsConstructor
@ToString(callSuper = true)
public class OrderGoodsPlateRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4109")
private Long id;
@Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12114")
private Long orderId;
@Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "832")
private Long rawGoodsId;
@Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "243")
private Long goodsId;
@@ -0,0 +1,78 @@
package com.cf.imes.module.executor.controller.admin.order.vo.order;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 生产单逾期列表")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true)
public class OrderOverdueRespVO {
@Schema(description = "生产单号")
private Long id;
@Schema(description = "父单号")
private Long parentNo;
@Schema(description = "源生产单号")
private String apiOrderId;
@Schema(description = "生产单日期", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime orderDate;
@Schema(description = "交付日期", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime deliveryDate;
@Schema(description = "生产单类型,1主单 2子单", example = "1")
private Integer orderType;
@Schema(description = "生产单排序号")
private Integer orderSort;
@Schema(description = "CAD数据类型,1CAD 2WebCAD 3Excel", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer dataType;
@Schema(description = "订单状态,订单状态,0空订单1新单2生产中3生产完成", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer status;
@Schema(description = "自定义单号")
private String customOrderNo;
@Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED)
private String customer;
@Schema(description = "客户地址", requiredMode = Schema.RequiredMode.REQUIRED)
private String address;
@Schema(description = "客户电话", requiredMode = Schema.RequiredMode.REQUIRED)
private String phoneNumber;
@Schema(description = "经销商", requiredMode = Schema.RequiredMode.REQUIRED)
private String dealer;
@Schema(description = "经销商电话", requiredMode = Schema.RequiredMode.REQUIRED)
private String dealerPhoneNumber;
@Schema(description = "业务员")
private String salesman;
@Schema(description = "拆单员")
private String splitter;
@Schema(description = "备注", example = "你猜")
private String remark;
@Schema(description = "距离到期时间")
private String becomeDue;
@Schema(description = "逾期时间")
private String beOverdue;
}
@@ -37,7 +37,7 @@ public class OrderPageReqVO extends PageParam {
private LocalDateTime[] deliveryDate;
@Schema(description = "生产单类型,1主单 2子单", example = "1")
private Boolean orderType;
private Integer orderType;
@Schema(description = "生产单排序号")
private Integer orderSort;
@@ -33,7 +33,7 @@ public class OrderRespVO {
@Schema(description = "生产单类型,1主单 2子单", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("生产单类型,1主单 2子单")
private Boolean orderType;
private Integer orderType;
@Schema(description = "生产单排序号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("生产单排序号")
@@ -30,7 +30,7 @@ public class OrderSaveReqVO {
private LocalDateTime deliveryDate;
@Schema(description = "生产单类型,1主单 2子单", example = "1")
private Boolean orderType;
private Integer orderType;
@Schema(description = "生产单排序号")
private Integer orderSort;
@@ -9,6 +9,7 @@ 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.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;
@@ -138,4 +139,10 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
// 生产单状态统计
List<OrderStatusRespVO> selectOrderStatusCount(@Param("organId")Long organId, @Param("orderDate") LocalDateTime orderDate);
// 生产单预警统计
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);
}
@@ -181,4 +181,9 @@ public interface OrderService {
* 小板数据分析统计
*/
List<OrderGoodsPlateRespVO> getOrderPlateAnalysisCount();
/**
* 生产单超期告警分析统计
*/
Map<String,List<OrderOverdueRespVO>> getOrderWarn(Integer startTerm);
}
@@ -64,6 +64,7 @@ import java.nio.file.Path;
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;
@@ -286,7 +287,7 @@ public class OrderServiceImpl implements OrderService {
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
return orderBodyMapper.selectRoomAndBody(orderIds,getUserOrganId());
return orderBodyMapper.selectRoomAndBody(orderIds, getUserOrganId());
}
@@ -296,10 +297,10 @@ public class OrderServiceImpl implements OrderService {
Integer deleted = getOrderDeleted(orderId);
// 模块信息
List<OrderModuleRespVO> orderModuleRespVOList = orderBodyMapper.selectModuleByOrderId(orderId,
SecurityFrameworkUtils.getLoginUser().getOrganId(),deleted); // 模块信息
SecurityFrameworkUtils.getLoginUser().getOrganId(), deleted); // 模块信息
// 配件
List<OrderPlatesDetailRespVO> orderItemDOS = orderItemMapper.selectPartsByOrderId(orderId,
SecurityFrameworkUtils.getLoginUser().getOrganId(),deleted);
SecurityFrameworkUtils.getLoginUser().getOrganId(), deleted);
Map<String, List<?>> map = new HashMap<>();
map.put("module", orderModuleRespVOList);
@@ -425,7 +426,7 @@ public class OrderServiceImpl implements OrderService {
orderModelDOs.forEach(orderModelDO -> orderModelDO.setOrderId(order.get(0).getId()));
orderInputProcessor.batchSaveModel(orderModelDOs);
}
if (partsRemark.size() > 0){
if (partsRemark.size() > 0) {
orderInputProcessor.batchSaveOrderPartsModel(partsRemark);
}
@@ -552,7 +553,7 @@ public class OrderServiceImpl implements OrderService {
public List<ApiOrderRespVO> getApiOrderList(JSONObject orderList) {
List<ApiOrderRespVO> apiOrderRespVOS = new ArrayList<>();
JSONArray jsonArray = orderList.getJSONArray("data");
if (jsonArray != null && jsonArray.size() > 0){
if (jsonArray != null && jsonArray.size() > 0) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
int index = jsonObject.getString("order_no").indexOf("@N");
@@ -560,8 +561,8 @@ public class OrderServiceImpl implements OrderService {
ApiOrderRespVO apiOrderRespVO = JSON.parseObject(jsonObject.toJSONString(), ApiOrderRespVO.class).setOrder_no(order_no);
// 判断是否已经导入
if (validateOrderNoExists(apiOrderRespVO.getOrder_no(), OrganContextHolder.getOrganId())){
if (!apiOrderRespVO.getOrder_state().equals(SUBMIT_STATE)){
if (validateOrderNoExists(apiOrderRespVO.getOrder_no(), OrganContextHolder.getOrganId())) {
if (!apiOrderRespVO.getOrder_state().equals(SUBMIT_STATE)) {
apiOrderRespVOS.add(apiOrderRespVO);
}
}
@@ -575,18 +576,24 @@ public class OrderServiceImpl implements OrderService {
public List<OrderStatusRespVO> getOrderStatusCount(Integer startTerm) {
// 根据开始条件选择
LocalDateTime orderDate = null;
LocalTime endOfDay = LocalTime.of(00, 00, 00);
if (startTerm != null){
switch (startTerm) {
case 1:
orderDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
break;
case 2:
case 2: // 月
orderDate = LocalDate.now().withDayOfMonth(1).atStartOfDay();
break;
case 3:
case 3: // 年
orderDate = LocalDate.now().withMonth(1).withDayOfMonth(1).atStartOfDay();
break;
default: // 周
orderDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
break;
}
}else {
orderDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
}
List<OrderStatusRespVO> orderStatusRespVOS = orderMapper.selectOrderStatusCount(OrganContextHolder.getOrganId(), orderDate);
orderStatusRespVOS.removeIf(obj -> obj.getOrderState() == OrderStatusEnum.EMPTY.getStatus());
return orderStatusRespVOS;
@@ -599,6 +606,35 @@ public class OrderServiceImpl implements OrderService {
return orderGoodsPlateRespVOS;
}
@Override
public Map<String,List<OrderOverdueRespVO>> getOrderWarn(Integer startTerm) {
Map<String,List<OrderOverdueRespVO>> map = new HashMap<>();
LocalDateTime today = LocalDateTime.now();
// 根据开始条件选择
LocalDateTime orderDate = null;
switch (startTerm) {
case 3:
orderDate = LocalDateTime.now().minus(3, ChronoUnit.DAYS);
break;
case 7:
orderDate = LocalDateTime.now().minus(7, ChronoUnit.DAYS);
break;
default:
orderDate = LocalDateTime.now().minus(1, ChronoUnit.DAYS);
break;
}
// 查询预警单
List<OrderOverdueRespVO> orderNearVOS = orderMapper.selectOrderNear(today, orderDate, OrganContextHolder.getOrganId());
map.put("orderNearVOS",orderNearVOS);
// 查询超时单
List<OrderOverdueRespVO> orderOverdueVOS = orderMapper.selectOrderOverdue(today, OrganContextHolder.getOrganId());
map.put("orderOverdueVOS",orderOverdueVOS);
return map;
}
// 判断是否已经导入
private Boolean validateOrderNoExists(String orderNo, Long organId) {
if (orderMapper.selectCount(new LambdaQueryWrapper<OrderDO>()
@@ -673,10 +709,10 @@ public class OrderServiceImpl implements OrderService {
// validateCustomOrderNoExists(orderDO.getCustomOrderNo());
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, null, itemDO, orderDO, goodsDO, plateGoodDOS);
if (orderModelDOS.size() > 0){
if (orderModelDOS.size() > 0) {
orderInputProcessor.batchSaveModel(orderModelDOS);
}
if (orderPartsRemarks.size() > 0){
if (orderPartsRemarks.size() > 0) {
orderInputProcessor.batchSaveOrderPartsModel(orderPartsRemarks);
}
@@ -88,9 +88,73 @@
from orders o
where o.organ_id = #{organId}
and DATE(o.order_date) >= #{orderDate}
and o.deleted = false
and o.deleted = 0
group by o.status
</select>
<select id="selectOrderNear" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO">
select
o.id,
o.api_order_id,
o.customer,
o.parent_no,
o.organ_id,
o.status,
o.order_date,
o.order_sort,
o.delivery_date,
o.order_type,
o.custom_order_no,
o.address,
o.data_type,
o.phone_number,
o.dealer,
o.dealer_phone_number,
o.salesman,
o.splitter,
o.remark,
CONCAT(
LPAD(FLOOR(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}) / (24 * 60 * 60)), 2, '0'), '天 ',
LPAD(FLOOR(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)) / (60 * 60)), 2, '0'), ':',
LPAD(FLOOR(MOD(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)), (60 * 60)) / 60), 2, '0'), ':',
LPAD(MOD(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)), (60 * 60)) % 60, 2, '0')
) AS becomeDue
from orders o
where o.organ_id = #{organId}
and o.deleted = 0
and o.delivery_date between #{orderDate} and #{today}
</select>
<select id="selectOrderOverdue" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderOverdueRespVO">
select
o.id,
o.api_order_id,
o.customer,
o.parent_no,
o.organ_id,
o.status,
o.order_date,
o.delivery_date,
o.order_type,
o.order_sort,
o.custom_order_no,
o.data_type,
o.address,
o.phone_number,
o.dealer,
o.dealer_phone_number,
o.salesman,
o.splitter,
o.remark,
CONCAT(
LPAD(FLOOR(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}) / (24 * 60 * 60)), 2, '0'), '天 ',
LPAD(FLOOR(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)) / (60 * 60)), 2, '0'), ':',
LPAD(FLOOR(MOD(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)), (60 * 60)) / 60), 2, '0'), ':',
LPAD(MOD(MOD(TIMESTAMPDIFF(SECOND, o.delivery_date, #{today}), (24 * 60 * 60)), (60 * 60)) % 60, 2, '0')
) AS beOverdue
from orders o
where o.organ_id = #{organId}
and o.deleted = 0
and #{today} > DATE(o.delivery_date)
</select>
</mapper>
@@ -505,7 +505,7 @@
LEFT JOIN orders o ON o.id = a.order_id
WHERE
o.organ_id = #{organId}
AND a.deleted = false
AND a.deleted = 0
AND DATE(o.order_date) >= #{orderDate}
GROUP BY
g.goods_id