排单异常信息补全,加工方案组删除逻辑更改,ES异常捕捉更改

This commit is contained in:
liuzhaotian
2025-01-14 17:25:55 +08:00
parent 39705f711e
commit 699169377d
18 changed files with 230 additions and 225 deletions
@@ -30,6 +30,11 @@ public interface OrderPlanApi {
@Parameter(name = "orderId", description = "生产单ID", required = true)
CommonResult<Boolean> getOrder(@RequestParam("orderId") Long orderId);
@GetMapping(PREFIX +"/apiGetOrderProcessScheme")
@Operation(summary = "查询加工组方案是否在排单中使用")
@Parameter(name = "processId", description = "加工方案ID", required = true)
CommonResult<Boolean> getOrderProcessScheme(@RequestParam("processId") Long processId);
/*
* 机台数据源数据查询
@@ -153,6 +153,17 @@ public class OrderPlanApiImpl implements OrderPlanApi{
@Override
public CommonResult<Boolean> getOrderProcessScheme(Long processId) {
List<PlanDO> planDOS = planMapper.selectProcessScheme(processId, getUserOrganId());
return CommonResult.success(CollUtil.isNotEmpty(planDOS));
}
/*
* 机台数据源数据查询
*
@@ -175,7 +175,7 @@ public class PlanController {
@Operation(summary = "获取未排单的生产单的柜体和房间名称")
@Parameter(name = "orderIds", description = "生产单ID", required = true)
@PreAuthorize("@ss.hasPermission('placeorder:orderlist')")
public CommonResult<List<OrderRoomBodyList>> getOrderRoomBody(@Valid @RequestParam @Size(max = 20,message = "最多可同时查询20个生产单信息") List<Long> orderIds) {
public CommonResult<List<OrderRoomBodyList>> getOrderRoomBody(@Valid @NotEmpty(message = "生产单ID不能为空") @RequestParam @Size(max = 20,message = "最多可同时查询20个生产单信息") List<Long> orderIds) {
return success(planService.getOrderRoomBody(orderIds));
}
@@ -6,7 +6,6 @@ import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
@Data
@@ -118,11 +117,11 @@ public class RemainBoardInfo {
private Boolean isScrap;
private List<Objects> points;
private List<Object> points;
private List<Blocks> blocks;
private List<Objects> objects;
private List<Object> objects;
private BigDecimal area;
@@ -157,7 +156,75 @@ public class RemainBoardInfo {
}
@Data
public static class PlaceObject {
private Long orderId;
private Long oldBlockId;
private Long blockNo;
private BigDecimal cuttingWidth;
private BigDecimal cuttingLength;
private BigDecimal cuttingArea;
private Integer texture;
private Boolean isTurnFaceToPlace;
private Boolean isDoubleFaceProcess;
private Boolean isPlaced;
private PlaceObjectDetail blockDetail;
}
@Data
public static class PlaceObjectDetail {
private Long orderId;
private Long blockId;
private Integer psFrontNormalTexture;
private Integer psFrontReverseTexture;
private Integer psBackNormalTexture;
private Integer psBackReverseTexture;
private Boolean hasBlockInnerSpace;
private List<PlaceSpace> spaces;
}
@Data
public static class PlaceSpace {
private Long boardId;
private Long spaceId;
private BigDecimal x;
private BigDecimal y;
private BigDecimal width;
private BigDecimal length;
private Boolean isBlockInnerSpace;
private Object spaces;
}
}
@@ -8,7 +8,6 @@ import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
@@ -85,7 +84,7 @@ public class OrderPageReqVOCopy extends PageParam {
@Schema(description = "商品ID-板材库对应的大板ID-由板材查询生产单时传")
@Size(max = 20,message = "最多可同时查询20个板材")
// @Size(max = 20,message = "最多可同时查询20个板材")
private List<String> goodsId;
@Schema(description = "排单ID-修改排单时为必传条件")
@@ -98,7 +97,7 @@ public class OrderPageReqVOCopy extends PageParam {
private List<Long> bodyId;
@Schema(description = "生产单ids")
@Size(max = 20,message = "最多可同时查询20个生产单")
// @Size(max = 20,message = "最多可同时查询20个生产单")
private List<Long> orderIds;
}
@@ -88,7 +88,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
default List<GoodsDO> selectListByGoodsId(List<Long> orderIds,List<String> goodsIds, Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.in(GoodsDO::getOrderId,orderIds)
.inIfPresent(GoodsDO::getOrderId,orderIds)
.in(GoodsDO::getGoodsId, goodsIds)
.eq(GoodsDO::getDeleted, false));
@@ -5,10 +5,13 @@ 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.MPJLambdaWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
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.controller.admin.plan.vo.PlanPageReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
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 org.apache.ibatis.annotations.Param;
@@ -42,8 +45,8 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(PlanDO::getOperator, reqVO.getOperator())
.betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime())
.leftJoin(GoodsDO.class, GoodsDO::getPlanId, PlanDO::getId)
.leftJoin(OrderDO.class, OrderDO::getId, GoodsDO::getOrderId)
.leftJoin(PlanItemDO.class, PlanItemDO::getPlanId, PlanDO::getId)
.leftJoin(OrderDO.class, OrderDO::getId, PlanItemDO::getOrderId)
.like(OrderDO::getCustomer, reqVO.getCustomer())
.orderByDesc(PlanDO::getCreateTime)
.distinct()
@@ -133,4 +136,15 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.in(PlanDO::getStatus,status)
.orderByAsc(PlanDO::getSort));
}
default List<PlanDO> selectProcessScheme(Long processId,Long organId) {
return selectList( new LambdaQueryWrapperX<PlanDO>()
.eq(PlanDO::getOrganId,organId)
.eq(PlanDO::getDeleted,false)
.in(PlanDO::getProcessId,processId)
.select(PlanDO::getId));
}
}
@@ -31,7 +31,7 @@ public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
default List<PlanItemDO> selectPlanPlateList(List<Long> planIds, List<Long> orderIds, Long organId) {
return selectList( new LambdaQueryWrapperX<PlanItemDO>()
.eq(PlanItemDO::getOrganId, organId)
.in(PlanItemDO::getOrderId,orderIds)
.inIfPresent(PlanItemDO::getOrderId,orderIds)
.in(PlanItemDO::getPlanId,planIds));
}
@@ -410,21 +410,37 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
PlanDO planDO = validatePlanExists(planId);
List<Long> orderIds = new ArrayList<>(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList());
// 校验生产单信息和获取 orderId
String orderNos = Optional.ofNullable(planDO.getOrderNos()).orElseThrow(() -> new ServiceException(ORDER_PLAN_ERROR));
List<Long> orderIds = new ArrayList<>(JSON.parseArray(orderNos).toJavaList(Long.class).stream().distinct().toList());
// 查询优化信息
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,respVO.getPlanConfigId(), planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
AssertUtils.notEmpty(optimizeBoardModelDOS,ORDER_PLAN_OPTIMIZE_ERROR);
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
// 校验信息
String remainBoardInfo = optimizeBoardModelDO.getRemainBoardInfo();
AssertUtils.notEmpty(remainBoardInfo,ORDER_PLAN_OPTIMIZE_ERROR);
Integer boardCount = optimizeBoardModelDO.getBoardCount();
AssertUtils.notEmpty(boardCount,ORDER_PLAN_OPTIMIZE_ERROR);
List<RemainBoardInfo> remainBoardInfos = parseArray(remainBoardInfo, RemainBoardInfo.class);
List<RemainBoardInfo> remainBoardInfos;
try {
remainBoardInfos = new ArrayList<>(parseArray(remainBoardInfo, RemainBoardInfo.class));
}catch (Exception e){
log.error(e.getMessage());
throw exception(PLAN_PLATE_OPTIMIZE_DATA_ERROR);
}
AssertUtils.notEmpty(remainBoardInfos,ORDER_PLAN_OPTIMIZE_ERROR);
Long goodsNum = updatePlanOptimizeData(remainBoardInfos, optimizeBoardModelDO, orderIds, goodsIds, goodsNo, cutedType);
@@ -506,21 +522,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 计算工资金额
public List<ProcessStepSalaryIds> calculateSalary(List<Long> processStepId){
// 查询当前工序对应的板材的面积
List<ProcessStepAreaIds> processStepAreaIds = processStepItemMapper.selectAreaByProcessStepId(processStepId,getUserOrganId());
// 计算当前工序的工资金额
return processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId());
}
@Override
public Map<String, Object> getLabelDataSourceValue(GetSourceDataReq req) {
String sqlStr = dataSourceApi.getSqlById(req.getDataSourceId()).getCheckedData();
@@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.order;
import cn.hutool.core.collection.CollUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.ElasticsearchException;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Hit;
@@ -195,7 +196,7 @@ public class OrderInputProcessor {
log.error(bulkResponse.items().toString());
throw new ServiceException(500, "未知异常");
}
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new RuntimeException(e);
@@ -217,7 +218,7 @@ public class OrderInputProcessor {
log.error(bulkResponse.items().toString());
throw new ServiceException(500, "未知异常");
}
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new RuntimeException(e);
@@ -242,7 +243,7 @@ public class OrderInputProcessor {
log.error(bulkResponse.items().toString());
throw new ServiceException(500, "未知异常");
}
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new RuntimeException(e);
@@ -285,7 +286,7 @@ public class OrderInputProcessor {
try {
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
log.info("Deleted {} documents with planId {}", response.deleted(), orderId);
} catch (IOException e) {
} catch (IOException | ElasticsearchException e) {
log.error("Error deleting documents with planId {}: {}", orderId, e.getMessage());
throw new ServiceException(INTERNAL_SERVER_ERROR);
}
@@ -305,7 +306,7 @@ public class OrderInputProcessor {
try {
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
log.info("Deleted {} documents with planId {}", response.deleted(), orderIds);
} catch (IOException e) {
} catch (IOException | ElasticsearchException e) {
log.error("Error deleting documents with planId {}: {}", orderIds, e.getMessage());
throw new ServiceException(INTERNAL_SERVER_ERROR);
}
@@ -4,7 +4,6 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import javax.validation.Valid;
import java.util.List;
@@ -72,8 +71,4 @@ public interface PlanService {
List<OrderRoomBodyList> getOrderRoomBody(List<Long> orderIds);
List<OrderModelDO> buildPlateByOrderIds(List<Long> orderIds, List<Long> ids, Integer size);
}
@@ -3,10 +3,7 @@ package com.cf.imes.module.executor.service.plan;
import cn.hutool.core.collection.CollUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.UpdateByQueryRequest;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.json.JsonData;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
@@ -32,7 +29,6 @@ import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
@@ -60,7 +56,6 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -72,7 +67,6 @@ import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString;
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORDER_PLAN_ERROR;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
/**
@@ -172,9 +166,9 @@ public class PlanServiceImpl implements PlanService {
if (Boolean.TRUE.equals(createReqVO.getIsMix())) {
// 混单时走的逻辑
List<SavePlanPlateList.PlateItemList> plateItemList = savePlanPlateList.getPlateItemList();
List<SavePlanPlateList.PlateItemList> plateItemList = Optional.ofNullable(savePlanPlateList.getPlateItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
List<SavePlanPlateList.GoodsItemList> goodsItemList = savePlanPlateList.getGoodsItemList();
List<SavePlanPlateList.GoodsItemList> goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
// 查找材质和厚度相同的大板
Map<String, List<Long>> grouped = groupByMaterialAndThickness(goodsItemList);
@@ -218,18 +212,17 @@ public class PlanServiceImpl implements PlanService {
// 获取所有的大板ID
ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList());
// 获取所有的小板ID
plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).map(Long::valueOf).toList());
plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).toList());
// 获取所有的生产单ID
orderIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().map(Long::valueOf).toList());
orderIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList());
} else {
// 非混单
List<SavePlanPlateList.PlateItemList> plateItemList = savePlanPlateList.getPlateItemList();
List<SavePlanPlateList.GoodsItemList> goodsItemList = savePlanPlateList.getGoodsItemList();
List<SavePlanPlateList.PlateItemList> plateItemList = Optional.ofNullable(savePlanPlateList.getPlateItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
List<SavePlanPlateList.GoodsItemList> goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
// 查找材质和厚度和颜色相同的大板
Map<String, List<Long>> grouped = groupByMaterialAndThicknessAndColor(goodsItemList);
@@ -340,7 +333,7 @@ public class PlanServiceImpl implements PlanService {
// 删除小板
List<OrderPlateIds> deleteOrderPlateIds = updateReqVO.getDeleteOrderPlateIds();
List<OrderPlateIds> deleteOrderPlateIds = Optional.ofNullable(updateReqVO.getDeleteOrderPlateIds()).orElse(new ArrayList<>());
if(CollUtil.isNotEmpty(deleteOrderPlateIds)){
@@ -351,7 +344,7 @@ public class PlanServiceImpl implements PlanService {
// 添加小板
List<OrderPlateIds> insertOrderPlateIds = updateReqVO.getInsertOrderPlateIds();
List<OrderPlateIds> insertOrderPlateIds = Optional.ofNullable(updateReqVO.getInsertOrderPlateIds()).orElse(new ArrayList<>());
if(CollUtil.isNotEmpty(insertOrderPlateIds)){
@@ -366,16 +359,23 @@ public class PlanServiceImpl implements PlanService {
@Transactional(rollbackFor = Exception.class)
public Boolean deletePlan(List<Long> planIds) {
// 校验存在
validatePlan(planIds);
List<PlanDO> planDOS = planMapper.selectBatchIds(planIds);
AssertUtils.notEmpty(planDOS,PLAN_NOT_EXISTS);
List<Long> orderIds = new ArrayList<>();
for (PlanDO planDO : planDOS) {
orderIds.addAll(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList());
planDOS.forEach(f->{
if ( f.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || f.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) {
throw exception(PLAN_NOT_ALLOW_DELETE,f.getId());
}
String orderNos = Optional.ofNullable(f.getOrderNos()).orElse("[]");
orderIds.addAll(JSON.parseArray(orderNos).toJavaList(Long.class).stream().distinct().toList());
});
}
// 删除排单信息,更新排单对应的余料板的排单ID为0
planMapper.deleteBatchIds(planIds);
@@ -395,8 +395,8 @@ public class PlanServiceImpl implements PlanService {
// 删除板材和排单明细表里对应的小板ID
planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>()
.eq(PlanItemDO::getOrganId, getUserOrganId())
.in(PlanItemDO::getOrderId,orderIds)
.in(PlanItemDO::getPlateId, plateIds)
.inIfPresent(PlanItemDO::getOrderId,orderIds)
.inIfPresent(PlanItemDO::getPlateId, plateIds)
.in(PlanItemDO::getPlanId, planIds));
@@ -410,7 +410,7 @@ public class PlanServiceImpl implements PlanService {
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId, getUserOrganId())
.in(OrderItemDO::getOrderId, orderIds)
.inIfPresent(OrderItemDO::getOrderId, orderIds)
.in(OrderItemDO::getPlateId, plateIdList));
@@ -519,15 +519,16 @@ public class PlanServiceImpl implements PlanService {
// 查询排单对应的小板数量和小板面积
plateInfoVOS.forEach(m -> {
if(CollUtil.isNotEmpty(plateInfoVOS)) {
plateInfoVOS.forEach(m -> {
m.setCount((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count());
m.setCount((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count());
m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add));
m.setPlatePages(null);
});
m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add));
m.setPlatePages(null);
});
}
// 根据排单ID查询ES中的优化数据
@@ -590,16 +591,17 @@ public class PlanServiceImpl implements PlanService {
List<PlateInfoVO> plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId());
// 查询排单对应的小板数量和小板面积
plateInfoVOS.forEach(m -> {
if(CollUtil.isNotEmpty(plateInfoVOS)) {
// 查询排单对应的小板数量和小板面积
plateInfoVOS.forEach(m -> {
m.setCount((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count());
m.setCount((int) m.getPlatePages().stream().map(PlatePage::getPlateId).count());
m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add));
m.setPlatePages(null);
});
m.setArea(m.getPlatePages().stream().map(PlatePage::getArea).reduce(BigDecimal.ZERO, BigDecimal::add));
m.setPlatePages(null);
});
}
// 根据排单ID查询ES中的优化数据
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, planIds.size(), ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class);
@@ -648,7 +650,7 @@ public class PlanServiceImpl implements PlanService {
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
statusList.add(OrderStatusEnum.SORTED.getStatus());
List<String> goodsId = pageReqVO.getGoodsId();
List<String> goodsId = Optional.ofNullable(pageReqVO.getGoodsId()).orElse(new ArrayList<>());
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
@@ -692,7 +694,7 @@ public class PlanServiceImpl implements PlanService {
QueryWrapperX<PlateDO> queryWrapperX2 = new QueryWrapperX<>();
queryWrapperX2
.eq("op.organ_id",getUserOrganId())
.in("op.order_id",orderIds)
.inIfPresent("op.order_id",orderIds)
.eq(FIELD_OP_DELETED,false)
.eq("op.is_optimized",false)
.inIfPresent("op.goods_id",ids)
@@ -731,7 +733,6 @@ public class PlanServiceImpl implements PlanService {
if(CollUtil.isNotEmpty(pageReqVO.getRoomId()) || CollUtil.isNotEmpty(pageReqVO.getBodyId() )){
AssertUtils.notEmpty(pageReqVO.getOrderIds(),ORDER_PLAN_ERROR);
queryWrapperX
.eq(FIELD_ORGAN_ID, getUserOrganId())
@@ -741,7 +742,7 @@ public class PlanServiceImpl implements PlanService {
.isNull(FIELD_PLAN_ID)
.isNotNull(FIELD_OP_ID)
.in("o.id", pageReqVO.getOrderIds())
.inIfPresent("o.id", pageReqVO.getOrderIds())
.inIfPresent("oi.room_id",pageReqVO.getRoomId())
.inIfPresent("oi.body_id",pageReqVO.getBodyId())
.likeIfPresent("o.id", pageReqVO.getOrderId())
@@ -923,23 +924,23 @@ public class PlanServiceImpl implements PlanService {
List<PlateResList> plateResLists = goodsMapper.selectPlateListByPlanId(planIds, getUserOrganId());
if(plateResLists.isEmpty()){
Set<Long> bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet());
if(plateResLists.isEmpty() || bodyIds.isEmpty()){
return new ArrayList<>();
}
Set<Long> bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet());
List<OrderBodyDO> orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds);
if(orderBodyDOS.isEmpty()){
return plateResLists;
}
for (PlateResList resList :plateResLists) {
resList.setBodyName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getId(), resList.getBodyId())).map(OrderBodyDO::getName).findAny().orElse(null));
resList.setRoomName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getRoomId(), resList.getRoomId())).map(OrderBodyDO::getRoomName).findAny().orElse(null));
}
plateResLists.forEach(f->{
f.setBodyName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getId(), f.getBodyId())).map(OrderBodyDO::getName).findAny().orElse(null));
f.setRoomName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getRoomId(), f.getRoomId())).map(OrderBodyDO::getRoomName).findAny().orElse(null));
});
return plateResLists;
@@ -984,23 +985,6 @@ public class PlanServiceImpl implements PlanService {
}
private void validatePlan(List<Long> ids) {
List<PlanDO> planDOS = planMapper.selectBatchIds(ids);
AssertUtils.notEmpty(planDOS,PLAN_NOT_EXISTS);
for (PlanDO planDO : planDOS) {
if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) {
throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId());
}
}
}
// 方案信息
@@ -1060,104 +1044,9 @@ public class PlanServiceImpl implements PlanService {
private void goodsFilter(List<String> filter, List<GoodsDO> goodsReqVOS) {
int goodsNum = goodsReqVOS.size();
Map<String, Function<GoodsDO, ?>> attributeMap = new HashMap<>();
attributeMap.put(GoodsFilterConditionsEnum.THICKNESS.getFilterField(), GoodsDO::getThickness);
attributeMap.put(GoodsFilterConditionsEnum.MATERIAL.getFilterField(), GoodsDO::getMaterial);
attributeMap.put(GoodsFilterConditionsEnum.COLOR.getFilterField(), GoodsDO::getColor);
attributeMap.put(GoodsFilterConditionsEnum.TEXTURE.getFilterField(), GoodsDO::getTexture);
attributeMap.put(GoodsFilterConditionsEnum.BRAND.getFilterField(), GoodsDO::getBrand);
attributeMap.put(GoodsFilterConditionsEnum.WIDTH.getFilterField(), GoodsDO::getWidth);
attributeMap.put(GoodsFilterConditionsEnum.HEIGHT.getFilterField(), GoodsDO::getHeight);
for (String s : filter) {
Function<GoodsDO, ?> attributeFunc = attributeMap.get(s);
if (attributeFunc == null) {
throw new ServiceException(PLAN_MIXED_DATA_ERROR);
}
// 获取当前属性的第一个值
Object attributeValue = goodsReqVOS.stream()
.map(attributeFunc)
.findFirst()
.orElse(null);
// 根据属性值过滤列表
long count = goodsReqVOS.stream()
.filter(f -> attributeValue.equals(attributeFunc.apply(f)))
.count();
if (goodsNum != count) {
throw exception(PLAN_MIXED_ORDER_ERROR,GoodsFilterConditionsEnum.getValueByKey(s));
}
}
}
private List<OrderModelDO> getOrderModelList(List<Long> orderIds,List<Long> ids,Boolean isOptimized) {
int plateSize = plateMapper.selectPlateIds(orderIds, ids, getUserOrganId()).size();
List<OrderModelDO> orderModelDOS = buildPlateByOrderIds(orderIds,ids,plateSize);
AssertUtils.notEmpty(orderModelDOS,ORDER_PLAN_PLATE_MODEL_DATE_ERROR);
orderModelDOS.forEach(f->{
f.setIsOptimized(isOptimized);
f.setUpdateTime(LocalDateTime.now().toString());
});
return orderModelDOS;
}
@Override
public List<OrderModelDO> buildPlateByOrderIds(List<Long> orderIds,List<Long> ids, Integer size) {
List<FieldValue> orderIdList = orderIds.stream().map(FieldValue::of).toList();
List<FieldValue> plateGoodsIds = ids.stream().map(FieldValue::of).toList();
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(ORDER_PLATE_MODEL);
builder.size(size);
builder.query(q -> q.bool(b -> b
.filter(m->{
m.terms(t->t.field("orderId").terms(e -> e.value(orderIdList)));
m.terms(t->t.field("plateGoodsId").terms(e -> e.value(plateGoodsIds)));
return m;
})));
try {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
List<Hit<OrderModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
log.error("ES_SELECT_DATA_ERROR"+e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
}
private void deletePlanPlate( List<OrderPlateIds> deleteOrderPlateIds) {
private void deletePlanPlate(List<OrderPlateIds> deleteOrderPlateIds) {
List<Long> deletePlanIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
@@ -1175,11 +1064,16 @@ public class PlanServiceImpl implements PlanService {
List<Long> deletePlateIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getPlateId).toList();
List<Long> deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList();
AssertUtils.notEmpty(deletePlateIds,DELETE_PLAN_PLATE_DATA_ERROR);
List<Long> deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).toList();
AssertUtils.notEmpty(deleteOrderIds,DELETE_PLAN_PLATE_DATA_ERROR);
// 查询需要删除的小板对应的信息
List<PlateDO> plateDOS = plateMapper.selectBatchIds(deletePlateIds);
AssertUtils.notEmpty(plateDOS,DELETE_PLAN_PLATE_DATA_ERROR);
List<PlateDO> plateDOList = plateDOS.stream().filter(f -> plateStatus.contains(f.getIsCutted())).toList();
@@ -1255,7 +1149,6 @@ public class PlanServiceImpl implements PlanService {
planMapper.deleteBatchIds(noPlanIds);
// 删除排单对应的优化生产数据
esUtils.deleteEsDocument(FIELD_PLANID,planIds,ORDER_REMAIN_PLATE_MODEL);
@@ -1313,12 +1206,10 @@ public class PlanServiceImpl implements PlanService {
private void insertPlanPlate(List<OrderPlateIds> insertOrderPlateIds){
// 后面还需要看看是否需要进行混单的判断
List<Long> insertPlanIds = insertOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
List<PlanDO> planDOS = validatePlanExists(insertPlanIds);
List<PlanItemDO> planItemDOS = new ArrayList<>();
insertOrderPlateIds.forEach(f->{
@@ -1335,7 +1226,6 @@ public class PlanServiceImpl implements PlanService {
if(f.getType().equals(PlanStatusEnum.OPENED.getStatus())){
f.setStatus(PlanStatusEnum.OPENING.getStatus());
}
List<Long> orderIds = new ArrayList<>(insertOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList());
@@ -1408,7 +1298,6 @@ public class PlanServiceImpl implements PlanService {
private void updateProcessSchemeStatus(List<Long> planIds) {
try {
@@ -3,6 +3,7 @@ package com.cf.imes.module.executor.util.elasticsearch;
import cn.hutool.core.collection.CollUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.ElasticsearchException;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.DeleteByQueryRequest;
import co.elastic.clients.elasticsearch.core.DeleteByQueryResponse;
@@ -17,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -64,7 +66,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -86,7 +88,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -113,7 +115,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -135,7 +137,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -162,7 +164,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -189,7 +191,7 @@ public class EsUtils {
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
@@ -208,7 +210,7 @@ public class EsUtils {
try {
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
log.info("Deleted {} documents with value {}", response.deleted(), value);
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error("Error deleting documents with value {}: {}", value, e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
@@ -227,7 +229,7 @@ public class EsUtils {
try {
elasticsearchClient.deleteByQuery(builder.build());
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error("ES文档删除失败:", e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
@@ -246,7 +248,7 @@ public class EsUtils {
try {
DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build());
log.info("Deleted {} documents with values {}", response.deleted(), values);
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error("Error deleting documents with values {}: {}", values, e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
@@ -264,7 +266,7 @@ public class EsUtils {
esDocumentService.bulkCreate(index, targetClass);
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
e.printStackTrace();
log.error(e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
@@ -286,7 +288,7 @@ public class EsUtils {
elasticsearchClient.indices().refresh(refreshRequest);
} catch (Exception e) {
} catch (IOException | ElasticsearchException e) {
log.error("ES文档数据刷新失败:"+e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}