mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
首页-统计1
This commit is contained in:
+9
-7
@@ -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
@@ -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.*;
|
||||
|
||||
|
||||
-8
@@ -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;
|
||||
|
||||
+78
@@ -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;
|
||||
}
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+1
-1
@@ -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("生产单排序号")
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
+7
@@ -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);
|
||||
}
|
||||
|
||||
+5
@@ -181,4 +181,9 @@ public interface OrderService {
|
||||
* 小板数据分析统计
|
||||
*/
|
||||
List<OrderGoodsPlateRespVO> getOrderPlateAnalysisCount();
|
||||
|
||||
/**
|
||||
* 生产单超期告警分析统计
|
||||
*/
|
||||
Map<String,List<OrderOverdueRespVO>> getOrderWarn(Integer startTerm);
|
||||
}
|
||||
+57
-21
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -574,19 +575,25 @@ public class OrderServiceImpl implements OrderService {
|
||||
@Override
|
||||
public List<OrderStatusRespVO> getOrderStatusCount(Integer startTerm) {
|
||||
// 根据开始条件选择
|
||||
LocalDateTime orderDate = null;
|
||||
LocalTime endOfDay = LocalTime.of(00, 00, 00);
|
||||
switch (startTerm) {
|
||||
case 1:
|
||||
orderDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay();
|
||||
break;
|
||||
case 2:
|
||||
orderDate = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
||||
break;
|
||||
case 3:
|
||||
orderDate = LocalDate.now().withMonth(1).withDayOfMonth(1).atStartOfDay();
|
||||
break;
|
||||
LocalDateTime orderDate = null;
|
||||
|
||||
if (startTerm != null){
|
||||
switch (startTerm) {
|
||||
case 2: // 月
|
||||
orderDate = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
||||
break;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
+65
-1
@@ -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>
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user