mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
1、打包/删除包裹支持统计已打包板件/配件数到订单信息;2、创建排单 - 订单列表支持外部选择子单后弹窗订单列表展示下级;
This commit is contained in:
+6
-7
@@ -77,19 +77,18 @@ public class PackRespVO {
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "板件数量")
|
||||
private Integer plateNum;
|
||||
|
||||
@Schema(description = "已打包数-包裹数")
|
||||
private Long packCount;
|
||||
private Integer packCount;
|
||||
|
||||
@Schema(description = "已打包板件数")
|
||||
private Integer packedPlatesCount;
|
||||
|
||||
@Schema(description = "已打包片数-已处理量")
|
||||
private Long packPieceCount;
|
||||
@Schema(description = "已打包配件数")
|
||||
private Integer packedPartsCount;
|
||||
|
||||
|
||||
@Schema(description = "总片数-板件总数")
|
||||
private Long totalPieceCount;
|
||||
private Integer totalPieceCount;
|
||||
|
||||
|
||||
@Schema(description = "待处理量")
|
||||
|
||||
+10
@@ -152,6 +152,16 @@ public class OrderDO extends BaseDO {
|
||||
*/
|
||||
private int version;
|
||||
|
||||
/**
|
||||
* 已打包板件数
|
||||
*/
|
||||
private Integer packedPlatesCount;
|
||||
|
||||
/**
|
||||
* 已打包配件数
|
||||
*/
|
||||
private Integer packedPartsCount;
|
||||
|
||||
/**
|
||||
* 子单列表
|
||||
*/
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.cf.imes.module.executor.dal.dataobject.order;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 订单已打包数统计 DO
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2026/5/8 10:55
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class OrderPackNumDO {
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 已打包板件数量
|
||||
*/
|
||||
private Integer plateNum;
|
||||
|
||||
/**
|
||||
* 已打包配件数量
|
||||
*/
|
||||
private Integer partsNum;
|
||||
}
|
||||
+17
@@ -23,6 +23,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlat
|
||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderPackNumDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderPlateNumAndAreaDO;
|
||||
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
|
||||
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
||||
@@ -343,4 +344,20 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
|
||||
* @return
|
||||
*/
|
||||
OrderPlateNumAndAreaDO selectPlateNumAndArea(@Param("orderId") Long orderId, @Param("delete") Boolean delete);
|
||||
|
||||
/**
|
||||
* 查询订单列表对应的已打包数
|
||||
*
|
||||
* @param orderIds
|
||||
* @return
|
||||
*/
|
||||
List<OrderPackNumDO> selectPackPlateNum(@Param("orderIds") Collection<Long> orderIds);
|
||||
|
||||
/**
|
||||
* 查询订单列表对应的已打包数
|
||||
*
|
||||
* @param orderIds
|
||||
* @return
|
||||
*/
|
||||
List<OrderPackNumDO> selectPackPartsNum(@Param("orderIds") Collection<Long> orderIds);
|
||||
}
|
||||
|
||||
+33
-30
@@ -17,7 +17,6 @@ import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.Assert.AssertUtils;
|
||||
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.api.plan.OrderPlanApi;
|
||||
import com.cf.imes.module.executor.controller.admin.manage.pack.vo.*;
|
||||
import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO;
|
||||
@@ -34,6 +33,7 @@ import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper;
|
||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||
import com.cf.imes.module.executor.enums.OrderPackageMethodEnum;
|
||||
import com.cf.imes.module.executor.enums.pack.PackScanComponentCorrelationTypeEnum;
|
||||
import com.cf.imes.module.executor.service.order.OrderInfoVersionControlService;
|
||||
import com.cf.imes.module.executor.service.order.OrderService;
|
||||
import com.cf.imes.module.executor.service.orderParts.OrderPartsService;
|
||||
import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService;
|
||||
@@ -113,6 +113,9 @@ public class PackServiceImpl implements PackService {
|
||||
@Resource
|
||||
private OrderComponentService orderComponentService;
|
||||
|
||||
@Resource
|
||||
private OrderInfoVersionControlService orderInfoVersionControlService;
|
||||
|
||||
// 打包分页查询
|
||||
@Override
|
||||
public PageResult<PackRespVO> getPackPage(PackPageReqVO pageReqVO) {
|
||||
@@ -218,7 +221,7 @@ public class PackServiceImpl implements PackService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public OrderPackRespVO updatePack(OrderPackReqVO packageVO) {
|
||||
Long organId = SecurityFrameworkUtils.getUserOrganId();
|
||||
Long organId = getUserOrganId();
|
||||
String packNo = packageVO.getPackNo();
|
||||
List<Long> orderIds = packageVO.getOrderIds();
|
||||
List<Long> addPlateNos = packageVO.getAddPlateNoList();
|
||||
@@ -269,14 +272,17 @@ public class PackServiceImpl implements PackService {
|
||||
processParts(addPartsList, packMethod, orderIds, packageNo, true);
|
||||
|
||||
// 更新订单打包状态
|
||||
for (Long orderId : orderIds) {
|
||||
if (validateOrderPack(orderId)) {
|
||||
List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds);
|
||||
for (OrderDO orderDO : orderDOS) {
|
||||
if (validateOrderPack(orderDO.getId())) {
|
||||
|
||||
// 修改订单的打包状态
|
||||
PackServiceImpl p = (PackServiceImpl) AopContext.currentProxy();
|
||||
p.updateOrderStatus(orderId);
|
||||
p.updateOrderStatus(orderDO);
|
||||
}
|
||||
}
|
||||
// 更新已打包数量到订单
|
||||
orderInfoVersionControlService.updateOrderPackNum(orderDOS);
|
||||
|
||||
return typeConversion(orderPackageDOS.get(0), orderIds);
|
||||
}
|
||||
@@ -346,14 +352,17 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
|
||||
// 更新订单打包状态
|
||||
for (Long orderId : orderIds) {
|
||||
if (validateOrderPack(orderId)) {
|
||||
List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds);
|
||||
for (OrderDO orderDO : orderDOS) {
|
||||
if (validateOrderPack(orderDO.getId())) {
|
||||
|
||||
// 修改订单的打包状态
|
||||
PackServiceImpl p = (PackServiceImpl) AopContext.currentProxy();
|
||||
p.updateOrderStatus(orderId);
|
||||
p.updateOrderStatus(orderDO);
|
||||
}
|
||||
}
|
||||
// 更新已打包数量到订单
|
||||
orderInfoVersionControlService.updateOrderPackNum(orderDOS);
|
||||
|
||||
return typeConversion(existPackageDO, orderIds);
|
||||
|
||||
@@ -617,7 +626,7 @@ public class PackServiceImpl implements PackService {
|
||||
OrderItemDO newItem = new OrderItemDO();
|
||||
|
||||
// 基础字段复制(建议用BeanUtils)
|
||||
org.springframework.beans.BeanUtils.copyProperties(source, newItem);
|
||||
BeanUtils.copyProperties(source, newItem);
|
||||
|
||||
newItem.setId(null); // 新ID
|
||||
newItem.setPackNum(packNum);
|
||||
@@ -650,10 +659,8 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
// 修改当前订单的工序状态和订单的状态
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateOrderStatus(Long orderId) {
|
||||
|
||||
OrderDO orderDO = ordersMapper.selectById(orderId);
|
||||
|
||||
public OrderDO updateOrderStatus(OrderDO orderDO) {
|
||||
Long orderId = orderDO.getId();
|
||||
|
||||
// 修改订单的打包状态为已打包
|
||||
orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus());
|
||||
@@ -667,8 +674,7 @@ public class PackServiceImpl implements PackService {
|
||||
|
||||
ordersMapper.updateById(orderDO);
|
||||
|
||||
|
||||
|
||||
return orderDO;
|
||||
}
|
||||
|
||||
|
||||
@@ -690,6 +696,8 @@ public class PackServiceImpl implements PackService {
|
||||
Long packageNo = reqVO.getPackageNo();
|
||||
List<Long> orderIds = reqVO.getOrderIds();
|
||||
|
||||
List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds);
|
||||
|
||||
List<OrderPackagDO> orderPackagDOS = orderPackageMapper.selectList(new LambdaQueryWrapper<OrderPackagDO>()
|
||||
.eq(OrderPackagDO::getPackageNo, packageNo)
|
||||
.in(OrderPackagDO::getOrderId, orderIds)
|
||||
@@ -827,6 +835,9 @@ public class PackServiceImpl implements PackService {
|
||||
.eq(OrderDO::getPackaged, OrderPackageStatusEnum.PACKAGED.getStatus())
|
||||
.set(OrderDO::getPackaged, OrderPackageStatusEnum.UNPACKED.getStatus())
|
||||
);
|
||||
|
||||
// 更新已打包数量到订单
|
||||
orderInfoVersionControlService.updateOrderPackNum(orderDOS);
|
||||
}
|
||||
|
||||
// 生成包裹编号
|
||||
@@ -940,9 +951,12 @@ public class PackServiceImpl implements PackService {
|
||||
.orderByDesc(OrderDO::getId)
|
||||
);
|
||||
if (CollUtil.isNotEmpty(childList)) {
|
||||
List<PackRespVO> childOrdersPackList = BeanUtil.copyToList(childList, PackRespVO.class);
|
||||
orderIds.addAll(childOrdersPackList.stream().map(PackRespVO::getId).toList());
|
||||
packRespVOS.getRecords().addAll(childOrdersPackList);
|
||||
for (OrderDO child : childList) {
|
||||
PackRespVO childPackRespVO = BeanUtil.copyProperties(child, PackRespVO.class);
|
||||
childPackRespVO.setTotalPieceCount(child.getPlateNum());
|
||||
packRespVOS.getRecords().add(childPackRespVO);
|
||||
orderIds.add(childPackRespVO.getId());
|
||||
}
|
||||
}
|
||||
|
||||
return buildPageResult(orderIds, packRespVOS);
|
||||
@@ -966,20 +980,9 @@ public class PackServiceImpl implements PackService {
|
||||
// 查询当前生产的包裹数量
|
||||
List<PackRespVO> orderPackNumGroup = orderPackageMapper.selectPackPage(orderIds, getUserOrganId());
|
||||
|
||||
|
||||
// 查询当前订单已经打包的板材数量
|
||||
List<PackRespVO> orderPackedPlateNumGroup = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId());
|
||||
|
||||
for (PackRespVO vosRecord : records) {
|
||||
|
||||
// 板材总数
|
||||
vosRecord.setTotalPieceCount(vosRecord.getPlateNum().longValue());
|
||||
// 已打包裹数
|
||||
vosRecord.setPackCount(orderPackNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToLong(PackRespVO::getPackCount).sum());
|
||||
// 已打包片数
|
||||
vosRecord.setPackPieceCount(orderPackedPlateNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToLong(PackRespVO::getPackPieceCount).sum());
|
||||
// 待处理量
|
||||
vosRecord.setPendingNum(vosRecord.getTotalPieceCount() - vosRecord.getPackPieceCount());
|
||||
vosRecord.setPackCount(orderPackNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToInt(PackRespVO::getPackCount).sum());
|
||||
|
||||
}
|
||||
|
||||
|
||||
+44
-2
@@ -84,6 +84,7 @@ import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.DATA_DATA_ERROR;
|
||||
@@ -796,14 +797,55 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_MODEL_DATE_ERROR);
|
||||
|
||||
return OrderSource.builder()
|
||||
.orderList(orderDOS)
|
||||
.orderList(buildTree(orderDOS))
|
||||
.goodsList(goodsReqVOS)
|
||||
.plateList(plateDetailRespVOS)
|
||||
// .plateModels(orderModelDOS)
|
||||
.plateModels(Collections.emptyList())
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将订单列表整理成父子结构
|
||||
* 规则:
|
||||
* 1. parentId = 0 的为父级
|
||||
* 2. 子级通过 parentId 关联父级 id
|
||||
* 3. 只有一层父子关系
|
||||
*/
|
||||
public List<OrderDO> buildTree(List<OrderDO> orderList) {
|
||||
|
||||
if (orderList == null || orderList.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 父级Map
|
||||
Map<Long, OrderDO> parentMap = orderList.stream()
|
||||
.filter(order -> order.getParentId() == 0)
|
||||
.collect(Collectors.toMap(OrderDO::getId, Function.identity()));
|
||||
|
||||
// 初始化child
|
||||
parentMap.values().forEach(order -> order.setChild(new ArrayList<>()));
|
||||
|
||||
List<OrderDO> result = new ArrayList<>();
|
||||
|
||||
for (OrderDO order : orderList) {
|
||||
|
||||
// 顶级
|
||||
if (order.getParentId() == 0) {
|
||||
result.add(order);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 子级挂到父级
|
||||
OrderDO parent = parentMap.get(order.getParentId());
|
||||
if (parent != null) {
|
||||
parent.getChild().add(order);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页获取订单ids下的es.orderModels数据
|
||||
*
|
||||
|
||||
+8
@@ -3,6 +3,7 @@ package com.cf.imes.module.executor.service.order;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 订单信息版本控制服务 Service
|
||||
@@ -34,4 +35,11 @@ public interface OrderInfoVersionControlService {
|
||||
* @param delete
|
||||
*/
|
||||
void updateOrderGoodsPlateNumAndArea(Collection<Long> orderGoodsIds, Boolean delete);
|
||||
|
||||
/**
|
||||
* 更新订单的已打包板件数
|
||||
*
|
||||
* @param orderDOS
|
||||
*/
|
||||
void updateOrderPackNum(List<OrderDO> orderDOS);
|
||||
}
|
||||
|
||||
+46
@@ -1,11 +1,14 @@
|
||||
package com.cf.imes.module.executor.service.order;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX;
|
||||
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.goods.OrderGoodsPlateNumAndAreaDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderPackNumDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderPlateNumAndAreaDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyPlateNumDO;
|
||||
@@ -19,6 +22,8 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -137,4 +142,45 @@ public class OrderInfoVersionControlServiceImpl implements OrderInfoVersionContr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateOrderPackNum(List<OrderDO> orderDOS) {
|
||||
List<Long> orderIds = orderDOS.stream().map(OrderDO::getId).collect(Collectors.toList());
|
||||
Map<Long, OrderDO> orderMap = orderDOS.stream()
|
||||
.collect(Collectors.toMap(OrderDO::getId, Function.identity()));
|
||||
|
||||
List<OrderPackNumDO> orderPackPlateNumDOS = orderMapper.selectPackPlateNum(orderIds);
|
||||
List<OrderPackNumDO> orderPackPartsNumDOS = orderMapper.selectPackPartsNum(orderIds);
|
||||
Map<Long, Integer> orderPackPartsNumMap = new HashMap<>();
|
||||
if (CollUtil.isNotEmpty(orderPackPartsNumDOS)) {
|
||||
orderPackPartsNumMap = orderPackPartsNumDOS.stream()
|
||||
.collect(Collectors.toMap(OrderPackNumDO::getOrderId, OrderPackNumDO::getPartsNum));
|
||||
}
|
||||
|
||||
for (OrderPackNumDO orderPackPlateNumDO : orderPackPlateNumDOS) {
|
||||
Long orderId = orderPackPlateNumDO.getOrderId();
|
||||
// 当前订单下已打包板件
|
||||
Integer plateNum = orderPackPlateNumDO.getPlateNum();
|
||||
// 当前订单下已打包配件
|
||||
Integer partsNum = orderPackPartsNumMap.getOrDefault(orderId, 0);
|
||||
|
||||
OrderDO orderDO = orderMap.get(orderId);
|
||||
|
||||
if (ObjectUtil.isNull(orderDO)) {
|
||||
continue;
|
||||
}
|
||||
int version = orderDO.getVersion();
|
||||
// 更新数量
|
||||
LambdaUpdateWrapper<OrderDO> updateWrapper = new LambdaUpdateWrapperX<OrderDO>()
|
||||
.eq(OrderDO::getId, orderId)
|
||||
.eq(OrderDO::getVersion, version)
|
||||
.set(OrderDO::getPackedPlatesCount, plateNum)
|
||||
.set(OrderDO::getPackedPartsCount, partsNum)
|
||||
.set(OrderDO::getVersion, version + 1);
|
||||
int update = orderMapper.update(updateWrapper);
|
||||
if (update == 0) {
|
||||
throw new ServiceException(com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_PLATE_UPDATE_CONCURRENCY_ERROR, orderId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+38
-3
@@ -502,8 +502,8 @@
|
||||
<result property="packId" column="packId"/>
|
||||
<result property="packCount" column="packCount"/>
|
||||
<result property="totalPieceCount" column="totalPieceCount"/>
|
||||
<result property="packPieceCount" column="packPieceCount"/>
|
||||
<result property="plateNum" column="plateNum"/>
|
||||
<result property="packedPlatesCount" column="packedPlatesCount"/>
|
||||
<result property="packedPartsCount" column="packedPartsCount"/>
|
||||
<result property="orderType" column="orderType"/>
|
||||
|
||||
</resultMap>
|
||||
@@ -559,7 +559,9 @@
|
||||
splitter as splitter,
|
||||
packaged as packaged,
|
||||
remark as remark,
|
||||
plate_num as plateNum
|
||||
plate_num as totalPieceCount,
|
||||
packed_plates_count as packedPlatesCount,
|
||||
packed_parts_count as packedPartsCount
|
||||
|
||||
from orders
|
||||
<where>
|
||||
@@ -650,4 +652,37 @@
|
||||
and o.deleted = false
|
||||
</select>
|
||||
|
||||
<select id="selectPackPlateNum" resultType="com.cf.imes.module.executor.dal.dataobject.order.OrderPackNumDO">
|
||||
select oi.order_id as order_id,
|
||||
IFNULL(sum(case
|
||||
when oi.plate_id != 0
|
||||
and oi.package_id != 0
|
||||
then 1
|
||||
else 0
|
||||
end), 0) as plate_num
|
||||
from order_item oi
|
||||
where oi.order_id in
|
||||
<foreach collection="orderIds" item="orderId" open="(" separator="," close=")">
|
||||
#{orderId}
|
||||
</foreach>
|
||||
and oi.package_id != 0
|
||||
and oi.plate_id != 0
|
||||
group by oi.order_id
|
||||
</select>
|
||||
|
||||
<select id="selectPackPartsNum" resultType="com.cf.imes.module.executor.dal.dataobject.order.OrderPackNumDO">
|
||||
select order_id,
|
||||
count(*) as parts_num
|
||||
from (
|
||||
select distinct order_id, parts_id, body_id
|
||||
from order_item
|
||||
where parts_id != 0
|
||||
and package_id != 0
|
||||
and order_id in
|
||||
<foreach collection="orderIds" item="orderId" open="(" separator="," close=")">
|
||||
#{orderId}
|
||||
</foreach>
|
||||
) t
|
||||
group by order_id
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user