mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
优化生产修改开料状态逻辑,参数修改,添加小板数量查询修改
This commit is contained in:
+126
-137
@@ -17,7 +17,6 @@ import co.elastic.clients.json.JsonData;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.GoodsFilterConditionsEnum;
|
||||
import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
||||
@@ -71,7 +70,7 @@ import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.DATA_DATA_ERROR;
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_DATA_ERROR;
|
||||
@@ -149,6 +148,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
private static final String FIELD_SORT = " order by createTime desc ";
|
||||
private static final String FIELD_IS_OPTIMIZED = " op.is_optimized";
|
||||
private static final String FIELD_PLAN_CONFIG_ID = "planConfigId";
|
||||
private static final String FIELD_UPDATETIME = "updateTime";
|
||||
|
||||
private static final String ES_ORDER_MODEL_DATA_ERROR = "生产单板材造型信息ES文档查询数据异常: ";
|
||||
|
||||
@@ -239,7 +239,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
// 更新开料相关的数据
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("cutedBoardInfo",cutedBoardInfo);
|
||||
objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
|
||||
objectObjectHashMap.put(FIELD_UPDATETIME,simpleDateFormat.format(date));
|
||||
|
||||
try {
|
||||
|
||||
@@ -341,7 +341,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
// 更新开料相关的数据
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("cutedBoardInfo",cutedBoardInfo);
|
||||
objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
|
||||
objectObjectHashMap.put(FIELD_UPDATETIME,simpleDateFormat.format(date));
|
||||
|
||||
try {
|
||||
|
||||
@@ -680,6 +680,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR);
|
||||
|
||||
if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
|
||||
throw exception(THIS_PLAN_OPTIMIZE_DATA_ERROR);
|
||||
}
|
||||
|
||||
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
|
||||
|
||||
Boolean isLock = Optional.ofNullable(optimizeBoardModelDO.getIsLock()).orElse(false);
|
||||
@@ -1204,47 +1208,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void goodsFilter(List<String> filter, List<GoodsReqVO> goodsReqVOS) {
|
||||
|
||||
int goodsNum = goodsReqVOS.size();
|
||||
|
||||
Map<String, Function<GoodsReqVO, ?>> attributeMap = new HashMap<>();
|
||||
attributeMap.put(GoodsFilterConditionsEnum.THICKNESS.getFilterField(), GoodsReqVO::getThickness);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.MATERIAL.getFilterField(), GoodsReqVO::getMaterial);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.COLOR.getFilterField(), GoodsReqVO::getColor);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.TEXTURE.getFilterField(), GoodsReqVO::getTexture);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.BRAND.getFilterField(), GoodsReqVO::getBrand);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.WIDTH.getFilterField(), GoodsReqVO::getWidth);
|
||||
attributeMap.put(GoodsFilterConditionsEnum.HEIGHT.getFilterField(), GoodsReqVO::getWidth);
|
||||
|
||||
for (String s : filter) {
|
||||
Function<GoodsReqVO, ?> 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 String conversion(String filed) {
|
||||
|
||||
// 去除字段中的 【 】
|
||||
@@ -1404,114 +1367,141 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private Long updatePlanOptimizeData(List<RemainBoardInfo> remainBoardInfos,
|
||||
OptimizeBoardModelDO optimizeBoardModelDO,
|
||||
List<Long> orderIds,
|
||||
List<String> goodsIds,
|
||||
List<Integer> goodsNo,
|
||||
Integer cutedType){
|
||||
|
||||
Date date = new Date();
|
||||
|
||||
long goodsNum = 0L;
|
||||
|
||||
List<String> planNo = new ArrayList<>();
|
||||
|
||||
remainBoardInfos.forEach(f->{
|
||||
|
||||
if(goodsIds.contains(f.getGoodsId())){
|
||||
|
||||
f.getPlaceBoardList().forEach(p->{
|
||||
|
||||
if(goodsNo.contains(p.getBoardId())) {
|
||||
p.setCutedType(cutedType);
|
||||
planNo.addAll(p.getBlocks().stream().map(RemainBoardInfo.Blocks::getBlockId).toList());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// 更新开料相关的数据
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
Integer cutedType) {
|
||||
|
||||
|
||||
if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){
|
||||
Date currentDate = new Date();
|
||||
AtomicLong goodsCount = new AtomicLong(0L);
|
||||
List<String> planNos = new ArrayList<>();
|
||||
|
||||
// 开料的大板数量
|
||||
long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L);
|
||||
// 更新板材状态并统计数量
|
||||
updateRemainBoardInfo(remainBoardInfos, goodsIds, goodsNo, cutedType, goodsCount, planNos);
|
||||
|
||||
// 开料的小板数量
|
||||
long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElse(0L);
|
||||
// 更新优化数据
|
||||
long goodsNum = updateOptimizeData(optimizeBoardModelDO, goodsCount.get(), planNos.size(), cutedType);
|
||||
|
||||
if(cutedBoardNumber != 0L && cutedBlockNumber != 0L) {
|
||||
|
||||
cutedBoardNumber -= goodsNo.size();
|
||||
|
||||
cutedBlockNumber -= planNo.size();
|
||||
|
||||
goodsNum = cutedBoardNumber;
|
||||
|
||||
objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber);
|
||||
objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(OrderPlateCutStatusEnum.OPENED.getStatus().equals(cutedType)){
|
||||
|
||||
// 开料的大板数量
|
||||
long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L);
|
||||
|
||||
// 开料的小板数量
|
||||
long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElse(0L);
|
||||
|
||||
cutedBoardNumber += goodsNo.size();
|
||||
|
||||
cutedBlockNumber += planNo.size();
|
||||
|
||||
goodsNum = cutedBoardNumber;
|
||||
|
||||
objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber);
|
||||
objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber);
|
||||
|
||||
}
|
||||
|
||||
|
||||
objectObjectHashMap.put("remainBoardInfo", toJsonString(remainBoardInfos));
|
||||
objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
|
||||
|
||||
try {
|
||||
|
||||
esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
|
||||
|
||||
} catch (IOException | ElasticsearchException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new ServiceException(ES_DATA_ERROR);
|
||||
}
|
||||
|
||||
|
||||
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(orderIds, planNo, getUserOrganId());
|
||||
|
||||
AssertUtils.notEmpty(plateDOS,THIS_PLAN_PLATE_DATA_ERROR);
|
||||
|
||||
plateDOS.forEach(f->{
|
||||
f.setIsCutted(cutedType);
|
||||
});
|
||||
|
||||
plateMapper.updateBatch(plateDOS);
|
||||
// 同步数据到 ES
|
||||
syncWithElasticsearch(remainBoardInfos, optimizeBoardModelDO, currentDate);
|
||||
|
||||
// 更新数据库中的板材信息
|
||||
updatePlateData(orderIds, planNos, cutedType);
|
||||
|
||||
return goodsNum;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void updateRemainBoardInfo(List<RemainBoardInfo> remainBoardInfos,
|
||||
List<String> goodsIds,
|
||||
List<Integer> goodsNo,
|
||||
Integer cutedType,
|
||||
AtomicLong goodsCount,
|
||||
List<String> planNos) {
|
||||
|
||||
remainBoardInfos.stream()
|
||||
.filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId()))
|
||||
.flatMap(remainBoard -> remainBoard.getPlaceBoardList().stream())
|
||||
.filter(board -> goodsNo.contains(board.getBoardId()) && !board.getCutedType().equals(cutedType) &&
|
||||
(cutedType.equals(OrderPlateCutStatusEnum.OPENING.getStatus()) ?
|
||||
!board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus()) : true))
|
||||
.forEach(board -> {
|
||||
goodsCount.incrementAndGet();
|
||||
board.setCutedType(cutedType);
|
||||
planNos.addAll(board.getBlocks().stream()
|
||||
.map(RemainBoardInfo.Blocks::getBlockId)
|
||||
.toList());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private long updateOptimizeData(OptimizeBoardModelDO optimizeBoardModelDO,
|
||||
long goodsCount,
|
||||
int blockCount,
|
||||
Integer cutedType) {
|
||||
|
||||
long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L);
|
||||
long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElse(0L);
|
||||
|
||||
if (OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)) {
|
||||
cutedBoardNumber -= goodsCount;
|
||||
cutedBlockNumber -= blockCount;
|
||||
} else if (OrderPlateCutStatusEnum.OPENED.getStatus().equals(cutedType)) {
|
||||
cutedBoardNumber += goodsCount;
|
||||
cutedBlockNumber += blockCount;
|
||||
}
|
||||
|
||||
optimizeBoardModelDO.setCutedBoardNumber(cutedBoardNumber);
|
||||
optimizeBoardModelDO.setCutedBlockNumber(cutedBlockNumber);
|
||||
|
||||
return cutedBoardNumber;
|
||||
}
|
||||
|
||||
private void syncWithElasticsearch(List<RemainBoardInfo> remainBoardInfos,
|
||||
OptimizeBoardModelDO optimizeBoardModelDO,
|
||||
Date date) {
|
||||
|
||||
Map<String, Object> updateData = new HashMap<>();
|
||||
updateData.put("cutedBoardNumber", optimizeBoardModelDO.getCutedBoardNumber());
|
||||
updateData.put("cutedBlockNumber", optimizeBoardModelDO.getCutedBlockNumber());
|
||||
updateData.put("remainBoardInfo", toJsonString(remainBoardInfos));
|
||||
updateData.put(FIELD_UPDATETIME, simpleDateFormat.format(date));
|
||||
|
||||
try {
|
||||
esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, updateData);
|
||||
|
||||
} catch (IOException | ElasticsearchException e) {
|
||||
log.error("Failed to sync with Elasticsearch: {}", e.getMessage());
|
||||
throw new ServiceException(ES_DATA_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void updatePlateData(List<Long> orderIds, List<String> planNo, Integer cutedType) {
|
||||
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(orderIds, planNo, getUserOrganId());
|
||||
AssertUtils.notEmpty(plateDOS, THIS_PLAN_PLATE_DATA_ERROR);
|
||||
|
||||
if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType)){
|
||||
|
||||
plateDOS.forEach(plate -> {
|
||||
if( !plate.getIsCutted().equals(cutedType) && !plate.getIsCutted().equals(OrderPlateCutStatusEnum.OPENED.getStatus())){
|
||||
plate.setIsCutted(cutedType);
|
||||
}
|
||||
});
|
||||
|
||||
}else {
|
||||
plateDOS.forEach(plate -> {
|
||||
if(!plate.getIsCutted().equals(cutedType)){
|
||||
plate.setIsCutted(cutedType);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
plateMapper.updateBatch(plateDOS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateOrderAndPlanByCutStatus(PlanDO planDO,Long goodsNum,Integer cutedType,List<Long> orderIds,Integer boardCount){
|
||||
|
||||
|
||||
// 未开料
|
||||
if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){
|
||||
|
||||
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
||||
@@ -1543,7 +1533,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
|
||||
|
||||
if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType)){
|
||||
// 开料中
|
||||
if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType) && !planDO.getStatus().equals(OrderPlateCutStatusEnum.OPENED.getStatus())){
|
||||
|
||||
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
||||
|
||||
@@ -1559,6 +1550,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
}
|
||||
|
||||
|
||||
// 已开料
|
||||
if(OrderPlateCutStatusEnum.OPENED.getStatus().equals(cutedType)){
|
||||
|
||||
List<PlateDO> plateDOList = plateMapper.selectNoCutPlateByPlateId(orderIds, getUserOrganId());
|
||||
@@ -1591,9 +1583,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+9
-75
@@ -9,7 +9,6 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.GoodsFilterConditionsEnum;
|
||||
import com.cf.imes.framework.common.enums.OrderPlateTypeEnum;
|
||||
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
||||
import com.cf.imes.framework.common.enums.PlanTypeEnum;
|
||||
@@ -60,8 +59,6 @@ import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_DATA_ERROR;
|
||||
@@ -287,9 +284,6 @@ public class PlateServiceImpl implements PlateService {
|
||||
@Override
|
||||
public PageResult<PlateResList> getOrderPlatePage(NoPlanPlatePageReqVO pageReqVO) {
|
||||
|
||||
// 使用这种方法分页查询速度太慢,所以要自己实现分页
|
||||
// PageDTO<PlateResList> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
|
||||
List<Integer> statusList = new ArrayList<>();
|
||||
statusList.add(OrderStatusEnum.NEW_ORDER.getStatus());
|
||||
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
|
||||
@@ -303,6 +297,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
.eq("o.deleted",false)
|
||||
.in("o.status",statusList)
|
||||
.isNull("opi.plan_id")
|
||||
.isNotNull("op.id")
|
||||
|
||||
.inIfPresent("op.goods_id",pageReqVO.getGoodsIdList())
|
||||
.likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null)
|
||||
@@ -323,7 +318,6 @@ public class PlateServiceImpl implements PlateService {
|
||||
.likeIfPresent("op.remark",pageReqVO.getRemark())
|
||||
.orderByDesc("o.id");
|
||||
|
||||
List<Long> plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX);
|
||||
|
||||
List<PlateResList> plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX,pageNo,pageReqVO.getPageSize());
|
||||
|
||||
@@ -332,17 +326,15 @@ public class PlateServiceImpl implements PlateService {
|
||||
return new PageResult<>();
|
||||
|
||||
}
|
||||
// List<Long> plateIds = plateResLists.stream().map(PlateResList::getPlateId).toList();
|
||||
//
|
||||
// List<OrderModelDO> orderModelDOS = esUtils.getEsDocument(FIELD_PLATE_ID, plateIds, plateIds.size(), ORDER_PLATE_MODEL, OrderModelDO.class);
|
||||
//
|
||||
//
|
||||
// PlateModelDetailRespVO.builder()
|
||||
// .plateResLists(new PageResult<>(plateResLists, (long) plateCount.size()))
|
||||
// .plateModels(orderModelDOS)
|
||||
// .build();
|
||||
|
||||
return new PageResult<>(plateResLists, (long) plateCount.size());
|
||||
queryWrapperX
|
||||
.groupBy("o.id");
|
||||
|
||||
List<Long> plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX);
|
||||
|
||||
long sum = plateCount.stream().mapToLong(Long::longValue).sum();
|
||||
|
||||
return new PageResult<>(plateResLists, sum);
|
||||
|
||||
}
|
||||
|
||||
@@ -557,62 +549,4 @@ public class PlateServiceImpl implements PlateService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void goodsFilter(List<String> filters, List<GoodsDO> goodsDOS,GoodsPlateFilterPageReqVO pageReqVO) {
|
||||
|
||||
int goodsNum = goodsDOS.size();
|
||||
|
||||
|
||||
// 查询条件
|
||||
Map<String, Function<GoodsDO, ?>> attributeGetters = new HashMap<>();
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.THICKNESS.getFilterField(), GoodsDO::getThickness);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.MATERIAL.getFilterField(), GoodsDO::getMaterial);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.COLOR.getFilterField(), GoodsDO::getColor);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.TEXTURE.getFilterField(), GoodsDO::getTexture);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.BRAND.getFilterField(), GoodsDO::getBrand);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.WIDTH.getFilterField(), GoodsDO::getWidth);
|
||||
attributeGetters.put(GoodsFilterConditionsEnum.HEIGHT.getFilterField(), GoodsDO::getHeight);
|
||||
|
||||
// 赋值
|
||||
Map<String, Consumer<Object>> attributeSetters = new HashMap<>();
|
||||
attributeSetters.put(GoodsFilterConditionsEnum.THICKNESS.getFilterField(), value -> pageReqVO.setThickness((BigDecimal) value));
|
||||
attributeSetters.put(GoodsFilterConditionsEnum.MATERIAL.getFilterField(), value -> pageReqVO.setMaterial((String) value));
|
||||
attributeSetters.put(GoodsFilterConditionsEnum.COLOR.getFilterField(), value -> pageReqVO.setColor((String) value));
|
||||
// attributeSetters.put(GoodsFilterConditionsEnum.TEXTURE.getFilterField(), value -> pageReqVO.setTexture((Boolean) value));
|
||||
// attributeSetters.put(GoodsFilterConditionsEnum.BRAND.getFilterField(), value -> pageReqVO.setBrand((String) value));
|
||||
// attributeSetters.put(GoodsFilterConditionsEnum.WIDTH.getFilterField(), value -> pageReqVO.setWidth((BigDecimal) value));
|
||||
// attributeSetters.put(GoodsFilterConditionsEnum.HEIGHT.getFilterField(), value -> pageReqVO.setHeight((BigDecimal) value));
|
||||
|
||||
for (String filter : filters) {
|
||||
Function<GoodsDO, ?> getter = attributeGetters.get(filter);
|
||||
|
||||
Consumer<Object> setter = attributeSetters.get(filter);
|
||||
|
||||
if (getter == null || setter == null) {
|
||||
throw exception(PLAN_MIXED_DATA_ERROR);
|
||||
}
|
||||
|
||||
// 获取当前属性的第一个值
|
||||
Object attributeValue = goodsDOS.stream()
|
||||
.map(getter)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
// 根据属性值过滤列表
|
||||
long count = goodsDOS.stream()
|
||||
.filter(good -> attributeValue.equals(getter.apply(good)))
|
||||
.count();
|
||||
|
||||
if (goodsNum != count) {
|
||||
throw exception(PLAN_MIXED_ORDER_ERROR,GoodsFilterConditionsEnum.getValueByKey(filter));
|
||||
}
|
||||
|
||||
// 设置属性值
|
||||
setter.accept(attributeValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+2
-2
@@ -412,12 +412,12 @@
|
||||
|
||||
|
||||
select
|
||||
op.id
|
||||
count(op.id)
|
||||
|
||||
from orders o
|
||||
left join order_plate op on o.organ_id = op.organ_id and o.id = op.order_id
|
||||
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id
|
||||
left join order_goods og on op.organ_id = og.organ_id and op.order_id = og.order_id and op.goods_id = og.id
|
||||
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id
|
||||
|
||||
${ew.customSqlSegment}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user