获取数据源增加配件的备注信息,配件信息增加类型等信息

This commit is contained in:
liuzhaotian
2024-09-25 10:34:48 +08:00
parent 93adc1a065
commit e4f71a9fb7
12 changed files with 198 additions and 111 deletions
@@ -1,5 +1,6 @@
package com.cf.imes.module.executor.controller.admin.plan.bo;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO;
@@ -16,8 +17,6 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -61,6 +60,11 @@ public class OrderSource {
private List<PrintOrderPartsRespVO> orderPartsRespVOS;
@Schema(description = "生产单配件的备注信息")
private List<OrderPartsRemark> orderPartsRemarks;
@Schema(description = "生产单包裹信息")
private List<PrintOrderPackReqVO> orderPackReqVOS;
@@ -1,25 +1,37 @@
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 标签对应的生产单配件信息")
@Data
public class PrintOrderPartsRespVO {
@Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long roomId;
@Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String roomName;
@Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long bodyId;
@Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bodyName;
@Schema(description = "加工组ID", requiredMode = Schema.RequiredMode.REQUIRED)
private List<Long> groupId;
@Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29347")
@ExcelProperty("配件 ID")
private Long id;
@@ -27,6 +39,7 @@ public class PrintOrderPartsRespVO {
private Long orderId;
@Schema(description = "配件数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Long partsNum;
@@ -51,4 +64,8 @@ public class PrintOrderPartsRespVO {
private String factory;
@Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED)
private String type;
}
@@ -42,6 +42,8 @@ public class OrderGoodsResp {
@Schema(description = "板件数量")
private int num;
@Schema(description = "备注")
private String remark;
@Schema(description = "生产单信息")
private List<OrderRespVOCopy> orderList;
@@ -19,6 +19,10 @@ public interface OptimizePlanService {
String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model";
List<PlateOptimize> getPlateListByPlanId(Long planId);
Boolean addRemain(AddRemainReqVO vo);
@@ -16,6 +16,7 @@ import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.es.core.service.ESDocumentService;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
@@ -607,6 +608,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 查询生产单对应的配件信息
List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId());
// 查询生产单对应的配件的ES信息
List<OrderPartsRemark> orderPartsRemarks = buildOrderPartsByOrderId(orderIds, ORDER_PARTS_REMARK_MODEL, printOrderPartsRespVOS.size());
// 查询生产单对应的包裹信息
List<PrintOrderPackReqVO> printOrderPackReqVOS = plateMapper.selectPlanPackList(ids,getUserOrganId());
@@ -631,6 +635,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.optimizeBoardModelDOS(optimizeBoardModelDOS)
.optimizeRemainPlates(optimizeRemainPlates)
.orderPartsRespVOS(printOrderPartsRespVOS)
.orderPartsRemarks(orderPartsRemarks)
.orderPackReqVOS(printOrderPackReqVOS)
.build();
}
@@ -943,6 +948,30 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
public List<OrderPartsRemark> buildOrderPartsByOrderId(List<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<OrderPartsRemark> search = elasticsearchClient.search(builder.build(), OrderPartsRemark.class);
List<Hit<OrderPartsRemark>> hits = search.hits().hits();
if (CollectionUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
}
return new ArrayList<>();
} catch (IOException e) {
log.error(e.getMessage());
throw new ServiceException(INTERNAL_SERVER_ERROR);
}
}
public void deleteByPlanId(List<Long> planIds, String index) {
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
@@ -274,6 +274,8 @@ public class OrderServiceImpl implements OrderService {
if (bodyIds.size() != 0){
List<PlateDO> plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index);
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
@@ -284,63 +286,60 @@ public class OrderServiceImpl implements OrderService {
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);// 删小板
}
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId,getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
if (orderPackageDOS.isEmpty()) {
if(orderPackageDOS.isEmpty()){
OrderDO orderDO = orderMapper.selectById(orderId);
OrderDO orderDO = orderMapper.selectById(orderId);
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderMapper.updateById(orderDO);
orderMapper.updateById(orderDO);
}
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(goodsIdDeleted, status, getUserOrganId());
}
if(!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId());
// 一样,同时删除排单的信息
if(goodsDOS.isEmpty() && status.equals(1)){
planService.deletePlan(planIds);
}
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(goodsIdDeleted, status, getUserOrganId());
}
if (!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId());
// 一样,同时删除排单的信息
if (goodsDOS.isEmpty()) {
planService.deletePlan(planIds);
} else {
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
}
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
@@ -391,67 +390,67 @@ public class OrderServiceImpl implements OrderService {
// 小板还原
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);
}
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if(!goodsDOS.isEmpty()){
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
if(!goodsDOList.isEmpty()){
// 新增的大板信息
List<GoodsDO> list = goodsDOList.stream()
.peek(m -> {
m.setId(null);
m.setPlanId(0L);
m.setCreateTime(LocalDateTime.now());
m.setUpdateTime(LocalDateTime.now());
})
.toList();
goodsMapper.insertBatch(list);
// 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息
List<OrderGoodsIds> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> orderGoodsIdsList = new ArrayList<>();
for (GoodsDO goodsDO : goodsList) {
orderGoodsIdsList.addAll(orderGoodsIds.stream()
.filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId()))
// .filter(a -> a.getOldId() == null)
.map(m -> m.setOldId(goodsDO.getId())).toList());
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if (!goodsDOS.isEmpty()) {
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改
List<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> plateList = new ArrayList<>();
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
for (OrderGoodsIds ids : orderGoodsIdsList) {
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
plateList.addAll(plateDOS.stream()
.filter(f->f.getGoodsId().equals(ids.getOldId()))
.peek(m->{
m.setGoodsId(ids.getId());
if (!goodsDOList.isEmpty()) {
// 新增的大板信息
List<GoodsDO> list = goodsDOList.stream()
.peek(m -> {
m.setId(null);
m.setPlanId(0L);
m.setCreateTime(LocalDateTime.now());
m.setUpdateTime(LocalDateTime.now());
})
.toList());
.toList();
goodsMapper.insertBatch(list);
// 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息
List<OrderGoodsIds> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> orderGoodsIdsList = new ArrayList<>();
for (GoodsDO goodsDO : goodsList) {
orderGoodsIdsList.addAll(orderGoodsIds.stream()
.filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId()))
// .filter(a -> a.getOldId() == null)
.map(m -> m.setOldId(goodsDO.getId())).toList());
}
// 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改
List<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> plateList = new ArrayList<>();
for (OrderGoodsIds ids : orderGoodsIdsList) {
plateList.addAll(plateDOS.stream()
.filter(f -> f.getGoodsId().equals(ids.getOldId()))
.peek(m -> {
m.setGoodsId(ids.getId());
})
.toList());
}
plateMapper.updateBatch(plateList);
}
plateMapper.updateBatch(plateList);
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
@@ -631,7 +631,7 @@ public class PlanServiceImpl implements PlanService {
.in("order_id",orderIds)
.eq("is_optimized",false)
.inIfPresent("goods_id",goodsIds)
.inIfPresent("id",pageReqVO.getIds())
.inIfPresent("goods_id",pageReqVO.getIds())
.eqIfPresent("is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
.eqIfPresent("is_special_shaped", pageReqVO.getSpecialShaped())
.eqIfPresent("is_sculpt", pageReqVO.getSculpt())
@@ -45,7 +45,7 @@
from orders o
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false and og.id = op.goods_id
${ew.customSqlSegment}
@@ -219,6 +219,7 @@
<result property="texture" column="texture"/>
<result property="brand" column="brand"/>
<result property="spec" column="spec"/>
<result property="remark" column="remark"/>
<result property="goodsId" column="goodsId"/>
<collection property="orderIds" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" resultMap="OrderIdMap"/>
@@ -251,13 +252,14 @@
og.width,
og.height,
og.brand,
og.remark,
og.spec
from orders o
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false and og.id = op.goods_id
${ew.customSqlSegment}
@@ -87,19 +87,47 @@
AND organ_id = #{organId}
</delete>
<select id="selectPartList"
resultType="com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO">
<resultMap id="OrderPartsMap" type="com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO">
select distinct oi.num as partsNum,
<result property="partsNum" column="partsNum"/>
<result property="bodyId" column="bodyId"/>
<result property="roomId" column="roomId"/>
<result property="bodyName" column="bodyName"/>
<result property="roomName" column="roomName"/>
<result property="id" column="id"/>
<result property="spec" column="spec"/>
<result property="brand" column="brand"/>
<result property="factory" column="factory"/>
<result property="model" column="model"/>
<result property="name" column="name"/>
<result property="orderId" column="orderId"/>
<result property="type" column="type"/>
<collection property="groupId" ofType="java.lang.Long" column="groupId"/>
</resultMap>
<select id="selectPartList"
parameterType="java.lang.Long"
resultMap="OrderPartsMap">
select distinct oi.group_id as groupId,
oi.num as partsNum,
oi.body_id as bodyId,
oi.room_id as roomId,
ob.name as bodyName,
ob.room_name as roomName,
op.id,
op.spec,
op.brand,
op.factory,
op.model,
op.name,
op.order_id
op.id as id,
op.spec as spec,
op.brand as brand,
op.factory as factory,
op.model as model ,
op.name as name,
op.order_id as orderId,
op.type as type
from order_parts op
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.parts_id
left join order_body ob on oi.organ_id = ob.organ_id and oi.order_id = ob.order_id and oi.body_id = ob.id