|
@@ -1,15 +1,28 @@
|
|
|
package org.springblade.factory.service.impl;
|
|
|
|
|
|
+import com.alibaba.cloud.commons.lang.StringUtils;
|
|
|
+import com.alibaba.excel.util.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.factory.entity.PcBladeOrder;
|
|
|
import org.springblade.factory.entity.PcBladeOrderShipment;
|
|
|
+import org.springblade.factory.entity.PcBladeOrderShipmentItem;
|
|
|
+import org.springblade.factory.mapper.PcBladeOrderShipmentItemMapper;
|
|
|
import org.springblade.factory.mapper.PcBladeOrderShipmentMapper;
|
|
|
import org.springblade.factory.service.PcBladeOrderShipmentService;
|
|
|
+import org.springblade.factory.vo.PcBladeOrderShipmentVO;
|
|
|
+import org.springblade.factory.wrapper.PcBladeOrderShipmentWrapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
@@ -18,6 +31,8 @@ public class PcBladeOrderShipmentServiceImpl
|
|
|
implements PcBladeOrderShipmentService {
|
|
|
|
|
|
|
|
|
+ private PcBladeOrderShipmentItemMapper shipmentItemMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public List<PcBladeOrderShipment> selectPcBladeOrderShipmentList(PcBladeOrderShipment pcBladeOrderShipment)
|
|
|
{
|
|
@@ -32,6 +47,7 @@ public class PcBladeOrderShipmentServiceImpl
|
|
|
return this.getById(id);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public boolean insertPcBladeOrderShipment(PcBladeOrderShipment pcBladeOrderShipment) {
|
|
|
return this.save(pcBladeOrderShipment);
|
|
@@ -43,4 +59,161 @@ public class PcBladeOrderShipmentServiceImpl
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<PcBladeOrderShipmentVO> getByOrderId(Long orderId) {
|
|
|
+ // 1. 校验参数
|
|
|
+ if (orderId == null) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 构建主表查询条件
|
|
|
+ QueryWrapper<PcBladeOrderShipment> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("order_id", orderId)
|
|
|
+ .eq("is_deleted", 0)
|
|
|
+ .orderByDesc("shipment_date");
|
|
|
+
|
|
|
+ // 3. 查询主表数据
|
|
|
+ List<PcBladeOrderShipment> shipmentList = baseMapper.selectList(queryWrapper);
|
|
|
+ if (CollectionUtils.isEmpty(shipmentList)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 批量查询所有关联的明细数据(优化:减少SQL查询次数)
|
|
|
+ List<Long> shipmentIds = shipmentList.stream()
|
|
|
+ .map(PcBladeOrderShipment::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ QueryWrapper<PcBladeOrderShipmentItem> itemQuery = new QueryWrapper<>();
|
|
|
+ itemQuery.in("shipment_id", shipmentIds)
|
|
|
+ .eq("is_deleted", 0);
|
|
|
+ List<PcBladeOrderShipmentItem> allItems = shipmentItemMapper.selectList(itemQuery);
|
|
|
+
|
|
|
+ // 5. 按发货单ID分组明细(内存中关联,提升性能)
|
|
|
+ Map<Long, List<PcBladeOrderShipmentItem>> itemMap = allItems.stream()
|
|
|
+ .collect(Collectors.groupingBy(PcBladeOrderShipmentItem::getShipmentId));
|
|
|
+
|
|
|
+ // 6. 为主表数据设置明细
|
|
|
+ shipmentList.forEach(shipment ->
|
|
|
+ shipment.setPcBladeOrderShipmentItem(itemMap.getOrDefault(shipment.getId(), Collections.emptyList()))
|
|
|
+ );
|
|
|
+
|
|
|
+ // 7. 转换为VO并返回
|
|
|
+ return PcBladeOrderShipmentWrapper.build().listVO(shipmentList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<PcBladeOrderShipmentVO> getByOrderCode(String orderCode) {
|
|
|
+ // 1. 校验参数
|
|
|
+ if (StringUtils.isBlank(orderCode)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 构建主表查询条件
|
|
|
+ QueryWrapper<PcBladeOrderShipment> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("order_code", orderCode)
|
|
|
+ .eq("is_deleted", 0)
|
|
|
+ .orderByDesc("shipment_date");
|
|
|
+
|
|
|
+ // 3. 查询主表数据
|
|
|
+ List<PcBladeOrderShipment> shipmentList = baseMapper.selectList(queryWrapper);
|
|
|
+ if (CollectionUtils.isEmpty(shipmentList)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 批量查询所有关联的明细数据
|
|
|
+ List<Long> shipmentIds = shipmentList.stream()
|
|
|
+ .map(PcBladeOrderShipment::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ QueryWrapper<PcBladeOrderShipmentItem> itemQuery = new QueryWrapper<>();
|
|
|
+ itemQuery.in("shipment_id", shipmentIds)
|
|
|
+ .eq("is_deleted", 0);
|
|
|
+ List<PcBladeOrderShipmentItem> allItems = shipmentItemMapper.selectList(itemQuery);
|
|
|
+
|
|
|
+ // 5. 按发货单ID分组明细
|
|
|
+ Map<Long, List<PcBladeOrderShipmentItem>> itemMap = allItems.stream()
|
|
|
+ .collect(Collectors.groupingBy(PcBladeOrderShipmentItem::getShipmentId));
|
|
|
+
|
|
|
+ // 6. 为主表数据设置明细
|
|
|
+ shipmentList.forEach(shipment ->
|
|
|
+ shipment.setPcBladeOrderShipmentItem(itemMap.getOrDefault(shipment.getId(), Collections.emptyList()))
|
|
|
+ );
|
|
|
+
|
|
|
+ // 7. 转换为VO并返回
|
|
|
+ return PcBladeOrderShipmentWrapper.build().listVO(shipmentList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增订单发货单及明细(事务)
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean insertPcBladeOrderShipmentPro(PcBladeOrderShipment pcBladeOrderShipment) {
|
|
|
+ // 1. 保存主表信息
|
|
|
+ boolean mainSaved = save(pcBladeOrderShipment);
|
|
|
+ if (!mainSaved) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 处理明细数据
|
|
|
+ List<PcBladeOrderShipmentItem> items = pcBladeOrderShipment.getPcBladeOrderShipmentItem();
|
|
|
+ if (!CollectionUtils.isEmpty(items)) {
|
|
|
+ // 为每条明细设置关联字段
|
|
|
+ for (PcBladeOrderShipmentItem item : items) {
|
|
|
+ item.setShipmentId(pcBladeOrderShipment.getId());
|
|
|
+ item.setShipmentNo(pcBladeOrderShipment.getShipmentNo());
|
|
|
+ item.setOrderId(pcBladeOrderShipment.getOrderId());
|
|
|
+ // 设置创建人等基础信息
|
|
|
+ item.setCreateUser(pcBladeOrderShipment.getCreateUser());
|
|
|
+ item.setCreateTime(pcBladeOrderShipment.getCreateTime());
|
|
|
+ // 确保没有ID,避免更新操作
|
|
|
+ item.setId(null);
|
|
|
+ shipmentItemMapper.insert(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改订单发货单及明细(事务)
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean updatePcBladeOrderShipmentPro(PcBladeOrderShipment pcBladeOrderShipment) {
|
|
|
+ // 1. 更新主表信息
|
|
|
+ boolean mainUpdated = updateById(pcBladeOrderShipment);
|
|
|
+ if (!mainUpdated) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 先删除原有明细 - 使用MyBatis-Plus的remove方法
|
|
|
+ QueryWrapper<PcBladeOrderShipmentItem> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("shipment_id", pcBladeOrderShipment.getId());
|
|
|
+ shipmentItemMapper.delete(queryWrapper);
|
|
|
+
|
|
|
+ // 3. 保存新的明细数据
|
|
|
+ List<PcBladeOrderShipmentItem> items = pcBladeOrderShipment.getPcBladeOrderShipmentItem();
|
|
|
+ if (!CollectionUtils.isEmpty(items)) {
|
|
|
+ for (PcBladeOrderShipmentItem item : items) {
|
|
|
+ item.setShipmentId(pcBladeOrderShipment.getId());
|
|
|
+ item.setShipmentNo(pcBladeOrderShipment.getShipmentNo());
|
|
|
+ item.setOrderId(pcBladeOrderShipment.getOrderId());
|
|
|
+ // 设置更新人等信息
|
|
|
+ item.setUpdateUser(pcBladeOrderShipment.getUpdateUser());
|
|
|
+ item.setUpdateTime(pcBladeOrderShipment.getUpdateTime());
|
|
|
+ // 重置ID确保是新增操作
|
|
|
+ item.setId(null);
|
|
|
+ // 使用MyBatis-Plus的批量保存方法
|
|
|
+ shipmentItemMapper.insert(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|