禅道bug#1548修复

This commit is contained in:
gaoqr
2026-05-20 12:16:07 +08:00
parent 4e0e0b5f60
commit 6097fd6cea
8 changed files with 240 additions and 42 deletions
@@ -0,0 +1,15 @@
package com.cf.imes.module.executor.dal.mysql.orderItem;
import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import org.apache.ibatis.annotations.Mapper;
/**
*
*
* @author Gqr
* @since 2026/5/20 11:50
*/
@Mapper
public interface OrderItemBatchMapper extends BaseBatchMapper<OrderItemDO> {
}
@@ -299,4 +299,20 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
* @return
*/
List<OrderPrintDetailRespVO> selectOrdersPrintPartsList(@Param("orderIds") List<Long> orderIds, @Param("componentIds") Set<Long> componentIds);
/**
* 查询临时表所需数据
*
* @param orderId
* @param organId
* @param bodyIds
* @param componentIds
* @return
*/
List<OrderItemDO> selectOrderItemForTemp(@Param("orderId") Long orderId,
@Param("organId") Long organId,
@Param("lastId") Long lastId,
@Param("pageSize") int pageSize,
@Param("bodyIds") Set<Long> bodyIds,
@Param("compIds") Set<Long> componentIds);
}
@@ -0,0 +1,15 @@
package com.cf.imes.module.executor.dal.mysql.orderItem;
import com.cf.imes.framework.mybatis.core.injector.BaseBatchMapper;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemTempDO;
import org.apache.ibatis.annotations.Mapper;
/**
*
*
* @author Gqr
* @since 2026/5/20 11:42
*/
@Mapper
public interface OrderItemTempBatchMapper extends BaseBatchMapper<OrderItemTempDO> {
}
@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* 订单明细临时表 order_item_temp Mapper
@@ -16,21 +17,18 @@ import java.util.List;
@Mapper
public interface OrderItemTempMapper extends BaseMapper<OrderItemTempDO> {
/**
* 查询订单明细插入到明细临时表
* 查询临时表所需数据
*
* @param orderId
* @param organId
* @param bodyIds
* @param compIds
* @param componentIds
* @return
*/
void selectInsertOrderItemTemp(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("bodyIds") List<Long> bodyIds, @Param("compIds") List<Long> compIds);
/**
* 查询订单明细临时插入到明细表
*
* @param orderId
* @param bodyIds
* @param compIds
*/
void selectInsertOrderItem(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("bodyIds") List<Long> bodyIds, @Param("compIds") List<Long> compIds);
List<OrderItemTempDO> selectOrderItemTempForItem(@Param("orderId") Long orderId,
@Param("organId") Long organId,
@Param("lastId") Long lastId,
@Param("pageSize") int pageSize,
@Param("bodyIds") Set<Long> bodyIds,
@Param("compIds") Set<Long> componentIds);
}
@@ -54,7 +54,9 @@ import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.executor.dal.mysql.order.OrderMapper;
import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemBatchMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemTempBatchMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemTempMapper;
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
import com.cf.imes.module.executor.dal.mysql.orderParts.PartsMapper;
@@ -169,6 +171,12 @@ public class OrderServiceImpl implements OrderService {
@Resource
private OrderItemTempMapper orderItemTempMapper;
@Resource
private OrderItemBatchMapper orderItemBatchMapper;
@Resource
private OrderItemTempBatchMapper orderItemTempBatchMapper;
@Resource
@Lazy
private PackService packService;
@@ -471,7 +479,7 @@ public class OrderServiceImpl implements OrderService {
}
// order_item记录临时表
orderItemTempMapper.selectInsertOrderItemTemp(orderId, organId, bodyIds, null);
copyOrderItemToTemp(orderId, organId, bodyIds.stream().collect(Collectors.toSet()));
// order_item删除记录
orderItemMapper.delete(new LambdaQueryWrapper<OrderItemDO>()
@@ -491,6 +499,32 @@ public class OrderServiceImpl implements OrderService {
orderInfoVersionControlService.updateOrderPlateNumAndArea(orderDO, true);
}
/**
* 复制订单明细到临时表
*
* @param orderId
* @param organId
* @param deleteIds
*/
private void copyOrderItemToTemp(Long orderId, Long organId, Set<Long> deleteIds) {
int pageSize = 1000;
long lastId = 0L;
while (true) {
List<OrderItemDO> list =
orderItemMapper.selectOrderItemForTemp(orderId, organId, lastId, pageSize, deleteIds, null);
if (CollUtil.isEmpty(list)) {
break;
}
orderItemTempBatchMapper.insertBatchSomeColumn(BeanUtil.copyToList(list, OrderItemTempDO.class));
lastId = list.get(list.size() - 1).getId();
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRestoreBody(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
@@ -525,7 +559,7 @@ public class OrderServiceImpl implements OrderService {
}
// order_item恢复临时记录
orderItemTempMapper.selectInsertOrderItem(orderId, organId, bodyIds, null);
copyTempToOrderItem(orderId, organId, bodyIds.stream().collect(Collectors.toSet()));
// order_item_temp删除记录
orderItemTempMapper.delete(new LambdaQueryWrapper<OrderItemTempDO>()
@@ -552,7 +586,31 @@ public class OrderServiceImpl implements OrderService {
}
/**
* 复制订单明细到临时表
*
* @param orderId
* @param organId
* @param deleteIds
*/
private void copyTempToOrderItem(Long orderId, Long organId, Set<Long> deleteIds) {
int pageSize = 1000;
long lastId = 0L;
while (true) {
List<OrderItemTempDO> list =
orderItemTempMapper.selectOrderItemTempForItem(orderId, organId, lastId, pageSize, deleteIds, null);
if (CollUtil.isEmpty(list)) {
break;
}
orderItemBatchMapper.insertBatchSomeColumn(BeanUtil.copyToList(list, OrderItemDO.class));
lastId = list.get(list.size() - 1).getId();
}
}
@@ -35,7 +35,9 @@ 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.mysql.order.OrderMapper;
import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemBatchMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemTempBatchMapper;
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemTempMapper;
import com.cf.imes.module.executor.dal.mysql.ordercomponent.OrderComponentMapper;
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
@@ -96,6 +98,12 @@ public class OrderComponentServiceImpl implements OrderComponentService {
@Resource
private OrderItemTempMapper orderItemTempMapper;
@Resource
private OrderItemBatchMapper orderItemBatchMapper;
@Resource
private OrderItemTempBatchMapper orderItemTempBatchMapper;
@Resource
private FileApi fileApi;
@@ -447,7 +455,7 @@ public class OrderComponentServiceImpl implements OrderComponentService {
}
// order_item记录临时表
orderItemTempMapper.selectInsertOrderItemTemp(orderId, organId, null, deleteIds.stream().toList());
copyOrderItemToTemp(orderId, organId, deleteIds);
// order_item删除记录
orderItemMapper.delete(new LambdaQueryWrapper<OrderItemDO>()
@@ -472,6 +480,32 @@ public class OrderComponentServiceImpl implements OrderComponentService {
orderInfoVersionControlService.updateOrderPlateNumAndArea(orderDO, true);
}
/**
* 复制订单明细到临时表
*
* @param orderId
* @param organId
* @param deleteIds
*/
private void copyOrderItemToTemp(Long orderId, Long organId, Set<Long> deleteIds) {
int pageSize = 1000;
long lastId = 0L;
while (true) {
List<OrderItemDO> list =
orderItemMapper.selectOrderItemForTemp(orderId, organId, lastId, pageSize, null, deleteIds);
if (CollUtil.isEmpty(list)) {
break;
}
orderItemTempBatchMapper.insertBatchSomeColumn(BeanUtil.copyToList(list, OrderItemTempDO.class));
lastId = list.get(list.size() - 1).getId();
}
}
/**
* 解包和删除包裹
@@ -583,7 +617,7 @@ public class OrderComponentServiceImpl implements OrderComponentService {
}
// order_item恢复临时记录
orderItemTempMapper.selectInsertOrderItem(orderId, organId, null, restoreIds.stream().toList());
copyTempToOrderItem(orderId, organId, restoreIds);
// order_item_temp删除记录
orderItemTempMapper.delete(new LambdaQueryWrapper<OrderItemTempDO>()
@@ -603,6 +637,33 @@ public class OrderComponentServiceImpl implements OrderComponentService {
orderInfoVersionControlService.updateOrderPlateNumAndArea(orderDO, false);
}
/**
* 复制订单明细到临时表
*
* @param orderId
* @param organId
* @param deleteIds
*/
private void copyTempToOrderItem(Long orderId, Long organId, Set<Long> deleteIds) {
int pageSize = 1000;
long lastId = 0L;
while (true) {
List<OrderItemTempDO> list =
orderItemTempMapper.selectOrderItemTempForItem(orderId, organId, lastId, pageSize, null, deleteIds);
if (CollUtil.isEmpty(list)) {
break;
}
orderItemBatchMapper.insertBatchSomeColumn(BeanUtil.copyToList(list, OrderItemDO.class));
lastId = list.get(list.size() - 1).getId();
}
}
/**
* 累计必要数据
*
@@ -860,4 +860,41 @@
WHERE op.deleted = false
ORDER BY op.id, op.type
</select>
<select id="selectOrderItemForTemp"
resultType="com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO">
SELECT *
FROM order_item
WHERE id > #{lastId}
AND order_id = #{orderId}
AND organ_id = #{organId}
AND source_id = 0
<if test="bodyIds != null and bodyIds.size() > 0">
AND body_id IN
<foreach item="bodyId"
collection="bodyIds"
open="("
separator=","
close=")">
#{bodyId}
</foreach>
</if>
<if test="compIds != null and compIds.size() > 0">
AND comp_id IN
<foreach item="compId"
collection="compIds"
open="("
separator=","
close=")">
#{compId}
</foreach>
</if>
ORDER BY id
LIMIT #{pageSize}
</select>
</mapper>
@@ -1,42 +1,40 @@
<?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.orderItem.OrderItemTempMapper">
<insert id="selectInsertOrderItemTemp">
INSERT INTO order_item_temp
SELECT *
FROM order_item
WHERE order_id = #{orderId} and organ_id = #{organId}
<if test="bodyIds != null and bodyIds.size() > 0">
AND body_id IN
<foreach item="bodyId" collection="bodyIds" open="(" separator="," close=")">
#{bodyId}
</foreach>
</if>
<if test="compIds != null and compIds.size() > 0">
AND comp_id IN
<foreach item="compId" collection="compIds" open="(" separator="," close=")">
#{compId}
</foreach>
</if>
AND source_id = 0
</insert>
<select id="selectOrderItemTempForItem"
resultType="com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemTempDO">
<insert id="selectInsertOrderItem">
INSERT INTO order_item
SELECT *
FROM order_item_temp
WHERE order_id = #{orderId} and organ_id = #{organId}
WHERE id > #{lastId}
AND order_id = #{orderId}
AND organ_id = #{organId}
AND source_id = 0
<if test="bodyIds != null and bodyIds.size() > 0">
AND body_id IN
<foreach item="bodyId" collection="bodyIds" open="(" separator="," close=")">
<foreach item="bodyId"
collection="bodyIds"
open="("
separator=","
close=")">
#{bodyId}
</foreach>
</if>
<if test="compIds != null and compIds.size() > 0">
AND comp_id IN
<foreach item="compId" collection="compIds" open="(" separator="," close=")">
<foreach item="compId"
collection="compIds"
open="("
separator=","
close=")">
#{compId}
</foreach>
</if>
</insert>
ORDER BY id
LIMIT #{pageSize}
</select>
</mapper>