Merge branch 'main' of ssh://192.168.1.205:9922/cf_devdept2/cf_imes_server

This commit is contained in:
lym
2024-05-28 18:17:26 +08:00
5 changed files with 122 additions and 33 deletions
@@ -5,8 +5,10 @@ import java.util.*;
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.module.executor.controller.admin.plan.vo.PlateInfoVO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 生产单开料排单明细 Mapper
@@ -17,4 +19,5 @@ import org.apache.ibatis.annotations.Mapper;
public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
List<PlateInfoVO> selectGoodsList(@Param("planIds") List<Long> planIds);
}
@@ -1,23 +1,20 @@
package com.cf.imes.module.executor.service.optimizeplan;
import cn.hutool.Hutool;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.elasticsearch._types.query_dsl.TermQuery;
import co.elastic.clients.elasticsearch._types.query_dsl.TermsQuery;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Hit;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.es.core.dal.ESDocument;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.es.core.service.ESDocumentService;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.dto.Material;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
@@ -44,14 +41,23 @@ import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.infra.api.file.dto.FileCreateReqDTO;
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
import com.cf.imes.module.system.api.machine.MachineApi;
import com.github.yulichang.interfaces.MPJBaseJoin;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http2.DefaultHttp2Headers;
import io.netty.handler.codec.http2.DefaultHttp2HeadersDecoder;
import io.netty.handler.codec.http2.DefaultHttp2HeadersEncoder;
import io.netty.handler.codec.http2.Http2Headers;
import io.swagger.v3.core.util.Json;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
@@ -61,6 +67,9 @@ import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.e
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS;
import io.netty.handler.codec.http2.Http2HeadersEncoder;
import io.netty.handler.codec.http2.Http2HeadersDecoder;
/**
* @author there
*/
@@ -313,7 +322,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialList(orderId);
List<OrderModelDO> orderModelDOS = buildRespByOrderId(orderId, ORDER_PLATE_MODEL);
Integer size = plateDOS.size();
List<OrderModelDO> orderModelDOS = buildRespByOrderId(orderId, ORDER_PLATE_MODEL,size);
orderSource.setOptimizePlateDetialRespVO(optimizePlateDetialRespVO);
orderSource.setPlan(planDO);
@@ -349,7 +360,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialListByIds(orderIds);
List<OrderModelDO> orderModelDOS = buildRespByOrderIds(orderIds, ORDER_PLATE_MODEL);
Integer size = plateDOS.size();
List<OrderModelDO> orderModelDOS = buildRespByOrderIds(orderIds, ORDER_PLATE_MODEL,size);
return OrderSource.builder()
.optimizePlateDetialRespVO(optimizePlateDetialRespVOS)
.orderList(orderDOS)
@@ -360,10 +373,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.build();
}
private List<OrderModelDO> buildRespByOrderIds(Collection<Long> orderIds, String index) {
private List<OrderModelDO> buildRespByOrderIds(Collection<Long> orderIds, String index,Integer size) {
List<FieldValue> fieldValues = orderIds.stream().map(FieldValue::of).toList();
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(index);
builder.size(size);
builder.query(q -> q.terms(b -> b.field("orderId").terms(e->e.value(fieldValues))));
try {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
@@ -378,9 +394,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
}
private List<OrderModelDO> buildRespByOrderId(Long orderId, String index) {
private List<OrderModelDO> buildRespByOrderId(Long orderId, String index,Integer size) {
SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(index);
builder.size(size);
builder.query(q -> q.term(b -> b.field("orderId").value(orderId)));
try {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
@@ -91,12 +91,15 @@ public class PlanServiceImpl implements PlanService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long createPlan(PlanSaveReqVO createReqVO) {
List<PlanSaveReqVO.Item> itemList = createReqVO.getItemList();
// 插入
long sort = System.currentTimeMillis();
PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class);
plan.setIsPay(Boolean.FALSE);
plan.setSort(sort);
plan.setPlanNo(identifierGenerator.nextId(null).toString());
String orderNos = itemList.stream().map(i -> i.getOrderId()).collect(Collectors.toList()).toString();
plan.setOrderNos(orderNos);
planMapper.insert(plan);
Long planId = plan.getId();
/* List<Long> orderIds = createReqVO.getOrderIds();
@@ -111,12 +114,13 @@ public class PlanServiceImpl implements PlanService {
planOrderMapper.insertBatch(planOrderDOS);
}*/
//List<Long> plateIds = createReqVO.getPlateIds();
List<PlanSaveReqVO.Item> itemList = createReqVO.getItemList();
Set<Long> plateIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList);
if (CollectionUtil.isNotEmpty(plateIds)) {
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList);
if (CollectionUtil.isNotEmpty(itemIds)) {
ArrayList<PlanItemDO> planItemDOS = new ArrayList<>();
for (Long plateId : plateIds) {
for (Long plateId : itemIds) {
planItemDOS.add(PlanItemDO.builder()
.planId(planId)
.itemId(plateId)
@@ -227,29 +231,54 @@ public class PlanServiceImpl implements PlanService {
}
Set<Long> macheineIds = planDOPageResult.getList().stream().map(PlanDO::getMachineId).collect(Collectors.toSet());
List<CuttingRespDTO> machines = machineApi.list(macheineIds).getCheckedData();
Set<Long> ids = planDOPageResult.getList().stream().map(PlanDO::getId).collect(Collectors.toSet());
List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, ids));
List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>().in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet())));
List<Long> planIds = planDOPageResult.getList().stream().map(PlanDO::getId).collect(Collectors.toList());
// // 根据排单ID查询排单明细表对应的明细ID
// List<PlanItemDO> itemDOS = planItemMapper.selectList(new LambdaQueryWrapperX<PlanItemDO>().in(PlanItemDO::getPlanId, ids));
//
// List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, ids));
//
// List<Long> longs = goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toList());
//
//
// List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>().in(PlateDO::getGoodsId,longs ));
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectGoodsList(planIds);
PageResult<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class);
// planRespVOPageResult.getList().forEach(e -> {
// e.setMachineName(machines.stream()
// .filter(f -> Objects.equals(f.getId(), e.getMachineId()))
// .map(CuttingRespDTO::getName)
// .findAny()
// .orElse(null));
// e.setPlateInfoList(goodsDOS.stream()
// .filter(f -> Objects.equals(f.getOrderId(), e.getId()))
// .map(p -> PlateInfoVO.builder()
// .material(p.getMaterial())
// .width(p.getWidth())
// .height(p.getHeight())
// .thickness(p.getThickness())
// .color(p.getColor())
// .area(p.getHeight().multiply(p.getWidth()).setScale(2, RoundingMode.HALF_UP))
// .count(plateDOS.stream().filter(f -> Objects.equals(f.getGoodsId(), p.getGoodsId())).collect(Collectors.toSet()).size())
// .build())
// .collect(Collectors.toList()));
// });
planRespVOPageResult.getList().forEach(e -> {
e.setMachineName(machines.stream()
.filter(f -> Objects.equals(f.getId(), e.getMachineId()))
.map(CuttingRespDTO::getName)
.findAny()
.orElse(null));
e.setPlateInfoList(goodsDOS.stream()
.filter(f -> Objects.equals(f.getOrderId(), e.getId()))
.map(p -> PlateInfoVO.builder()
.material(p.getMaterial())
.width(p.getWidth())
.height(p.getHeight())
.thickness(p.getThickness())
.color(p.getColor())
.area(p.getHeight().multiply(p.getWidth()).setScale(2, RoundingMode.HALF_UP))
.count(plateDOS.stream().filter(f -> Objects.equals(f.getGoodsId(), p.getGoodsId())).collect(Collectors.toSet()).size())
.build())
.collect(Collectors.toList()));
e.setPlateInfoList(plateInfoVOS);
});
return planRespVOPageResult;
}
@@ -0,0 +1,39 @@
<?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.planitem.PlanItemMapper">
<resultMap id="GoodsListMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.PlateInfoVO">
<result property="material" column="material"/>
<result property="width" column="width"/>
<result property="height" column="height"/>
<result property="thickness" column="thickness"/>
<result property="color" column="color"/>
<result property="count" column="plateNum"/>
<result property="area" column="area"/>
</resultMap>
<select id="selectGoodsList" resultMap="GoodsListMap">
select og.material as material,
og.width as width,
og.height as height,
og.thickness as thickness ,
og.color as color,
count(oi.plate_id) as plateNum,
ROUND(og.height * og.width , 2) as area
from order_plan_item opi
join order_item oi on opi.item_id = oi.id
join order_goods og on oi.order_id = og.order_id
where opi.plan_id in
<foreach collection="planIds" item="ids" open="(" close=")" separator=",">
#{ids}
</foreach>
group by material,width,height,thickness,color;
</select>
</mapper>
@@ -78,8 +78,9 @@
</select>
<select id="selectBatchOrderIdsAndGoodsIds" resultType="java.lang.Long">
select id from order_plate
where ( order_id, goods_id ) in
select oi.id from order_plate op
join order_item oi on op.id = oi.plate_id
where ( op.order_id, op.goods_id ) in
<foreach collection="itemList" item="item" open="(" close=")" separator=",">
(#{item.orderId},#{item.goodsId})
</foreach>