1、分堆打包明细sql语句优化,mycat不支持的函数改为join后在内存分组;2、分堆打包订单分页接口支持主单带子单;3、移除原/order/page接口,webcad拆单订单分页支持子级;

This commit is contained in:
gaoqr
2026-04-17 17:20:43 +08:00
parent 81d33ca911
commit bca08afedb
14 changed files with 725 additions and 376 deletions
@@ -41,17 +41,6 @@ public class PackController {
} }
@GetMapping("/getOrderPlate")
@Operation(summary = "查看生产订单对应的没有打包的板材信息")
@Parameter(name = "orderId", description = "订单Id", required = true)
@PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-lost-plate','manage:pack:pack')")
public CommonResult<List<PlateDetailsRespVO>> getOrderPlateList(@Valid @RequestParam("orderId") Long orderId) {
return success(packService.getOrderPlateList(orderId));
}
@PostMapping("/unpack/details") @PostMapping("/unpack/details")
@Operation(summary = "获取订单列表下未打包明细") @Operation(summary = "获取订单列表下未打包明细")
@Parameter(name = "orderIds", description = "订单ID列表", required = true) @Parameter(name = "orderIds", description = "订单ID列表", required = true)
@@ -98,7 +98,7 @@ public class OrderPartsRespVO {
@Schema(description = "组件名称") @Schema(description = "组件名称")
private String componentName; private String componentName;
private List<GroupNameList> processGroupNameList; private List<String> processGroupNameList;
@Schema(description = "加工组") @Schema(description = "加工组")
private String processGroup; private String processGroup;
@@ -17,9 +17,8 @@ public class PackRespVO {
@Schema(description = "订单号", example = "7788") @Schema(description = "订单号", example = "7788")
private Long id; private Long id;
@Schema(description = "订单号", example = "7788") @Schema(description = "订单号", example = "7788")
private Long orderId; private Long parentId;
@Schema(description = "包裹ID", example = "7788") @Schema(description = "包裹ID", example = "7788")
private Long packId; private Long packId;
@@ -94,10 +93,6 @@ public class PackRespVO {
@Schema(description = "待处理量") @Schema(description = "待处理量")
private Long pendingNum; private Long pendingNum;
@Schema(description = "子订单")
@Schema(description = "订单对应的板材ID集") private List<PackRespVO> child;
private List<Long> plateIdList;
@Schema(description = "订单对应的包裹ID集")
private List<Long> packIdList;
} }
@@ -143,7 +143,7 @@ public class PlateDetailsRespVO {
@Schema(description = "加工组名称集合") @Schema(description = "加工组名称集合")
private List<GroupNameList> processGroupNameList; private List<String> processGroupNameList;
@Schema(description = "开料长") @Schema(description = "开料长")
private BigDecimal splitHeight; private BigDecimal splitHeight;
@@ -70,6 +70,8 @@ public class PackageDetailsRespVO {
@Schema(description = "加工组") @Schema(description = "加工组")
private String processGroup; private String processGroup;
private List<String> processGroupNameList;
@Schema(description = "备注(板材和配件都要传递)") @Schema(description = "备注(板材和配件都要传递)")
private String remark; private String remark;
@@ -140,13 +140,6 @@ public class OrderController {
return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class)); return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class));
} }
@GetMapping("/page")
@Operation(summary = "获得订单分页")
@PreAuthorize("@ss.hasPermission('productManager:List')")
public CommonResult<PageResult<OrderRespVO>> getOrderPage(@Valid OrderPageReqVO pageReqVO) {
return success(BeanUtils.toBean(orderService.getOrderPage(pageReqVO), OrderRespVO.class));
}
@GetMapping("/main/page") @GetMapping("/main/page")
@Operation(summary = "获得主订单分页") @Operation(summary = "获得主订单分页")
@PreAuthorize("@ss.hasPermission('productManager:List')") @PreAuthorize("@ss.hasPermission('productManager:List')")
@@ -157,7 +150,7 @@ public class OrderController {
@GetMapping("/webcad/page") @GetMapping("/webcad/page")
@Operation(summary = "获得订单分页") @Operation(summary = "获得订单分页")
public CommonResult<PageResult<OrderRespVO>> webCadGetOrderPage(@Valid OrderPageReqVO pageReqVO) { public CommonResult<PageResult<OrderRespVO>> webCadGetOrderPage(@Valid OrderPageReqVO pageReqVO) {
return success(BeanUtils.toBean(orderService.getOrderPage(pageReqVO), OrderRespVO.class)); return success(BeanUtils.toBean(orderService.getMainOrderPage(pageReqVO), OrderRespVO.class));
} }
// 不做订单是否作废判断 // 不做订单是否作废判断
@@ -19,7 +19,7 @@ public class OrderRespVO {
@Schema(description = "父单号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "父单号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("父单号") @ExcelProperty("父单号")
private Long parentNo; private Long parentId;
@Schema(description = "源订单号") @Schema(description = "源订单号")
@ExcelProperty("父单号") @ExcelProperty("父单号")
@@ -22,7 +22,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@@ -194,24 +197,139 @@ public class HeapSplitServiceImpl implements HeapSplitService {
// 查询配件 // 查询配件
List<OrderPartsRespVO> parts = orderPartsMapper.selectOrdersHeapSplitPartsList(orderIds); List<OrderPartsRespVO> parts = orderPartsMapper.selectOrdersHeapSplitPartsList(orderIds);
// 根据成倍数量重新赋值柜体名称 respVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates)));
plates.forEach(item -> { respVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts)));
if (item.getMultiNum() != null && item.getMultiNum() > 1
&& item.getMultiSort() != null) {
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
}
});
parts.forEach(item -> {
if (item.getMultiNum() != null && item.getMultiNum() > 1
&& item.getMultiSort() != null) {
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
}
});
respVO.setPlates(plates);
respVO.setParts(parts);
return respVO; return respVO;
} }
/**
* 板件分组:加工组
*
* @param plates
* @return
*/
private Collection<PlateDetailsRespVO> buildPlateGroup( List<PlateDetailsRespVO> plates){
Map<String, PlateDetailsRespVO> map = new LinkedHashMap<>();
for (PlateDetailsRespVO row : plates) {
// ===== 1. 组装 唯一key=====
String key = row.getPlateId() + "_" + row.getRoomId() + "_" + row.getBodyId();
PlateDetailsRespVO vo = map.computeIfAbsent(key, k -> {
PlateDetailsRespVO newVo = new PlateDetailsRespVO();
BeanUtils.copyProperties(row, newVo);
// ===== 初始化 =====
newVo.setProcessGroupNameList(new ArrayList<>());
return newVo;
});
// ===== 2. 收集加工组(允许重复,不去重)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
}
}
Collection<PlateDetailsRespVO> values = map.values();
// ===== 3. 转换成逗号字符串 =====
for (PlateDetailsRespVO vo : values) {
List<String> listGroup = vo.getProcessGroupNameList();
// 拼接加工组
if (listGroup != null && !listGroup.isEmpty()) {
vo.setProcessGroup(String.join(",", listGroup));
} else {
vo.setProcessGroup("");
}
// 可释放内存
vo.setProcessGroupNameList(null);
// 成倍编号处理
if (vo.getMultiNum() > 1) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
}
}
return values;
}
/**
* 配件分组:加工组、部件(目前是一对一)
*
* @param parts
* @return
*/
private Collection<OrderPartsRespVO> buildPartsGroup(List<OrderPartsRespVO> parts) {
Map<String, OrderPartsRespVO> map = new LinkedHashMap<>();
for (OrderPartsRespVO row : parts) {
// ===== 1. 分组 key =====
String key = row.getPartsId()
+ "_" + row.getRoomId()
+ "_" + row.getBodyId();
OrderPartsRespVO vo = map.computeIfAbsent(key, k -> {
OrderPartsRespVO v = new OrderPartsRespVO();
BeanUtils.copyProperties(row, v);
v.setNum(BigDecimal.ZERO);
v.setHeapNum(BigDecimal.ZERO);
v.setProcessGroupNameList(new ArrayList<>());
return v;
});
// ===== 3. num 累加 =====
if (row.getNum() != null) {
vo.setNum(vo.getNum().add(row.getNum()));
}
// ===== 4. heapNum 累加 =====
if (row.getHeapNum() != null) {
vo.setHeapNum(vo.getHeapNum().add(row.getHeapNum()));
}
// ===== 5. 加工组(允许重复)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
}
}
// ===== 7. 收尾处理 =====
for (OrderPartsRespVO vo : map.values()) {
// 加工组拼接
List<String> processGroupNameList = vo.getProcessGroupNameList();
if (CollUtil.isNotEmpty(processGroupNameList)) {
vo.setProcessGroup(String.join(",", processGroupNameList));
} else {
vo.setProcessGroup("");
}
// 可释放内存
vo.setProcessGroupNameList(null);
// ===== multiSort 处理(柜体编号)=====
if (vo.getMultiNum() > 1) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
} else {
vo.setCabinetName(vo.getCabinetName());
}
}
return map.values();
}
/** /**
* 分堆打包数量 * 分堆打包数量
* *
@@ -29,10 +29,6 @@ public interface PackService {
PageResult<OrderPackageVO> getPageOrderPack(PackageDetailsReqVO reqVO); PageResult<OrderPackageVO> getPageOrderPack(PackageDetailsReqVO reqVO);
// 查看生产订单对应的板材信息
List<PlateDetailsRespVO> getOrderPlateList(Long orderId);
/** /**
* 拆包 * 拆包
* *
@@ -38,14 +38,19 @@ import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService;
import com.cf.imes.module.executor.service.orderitem.OrderItemService; import com.cf.imes.module.executor.service.orderitem.OrderItemService;
import com.cf.imes.module.executor.service.plate.PlateService; import com.cf.imes.module.executor.service.plate.PlateService;
import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@@ -131,38 +136,6 @@ public class PackServiceImpl implements PackService {
} }
// 查看生产订单对应的板材信息
@Override
public List<PlateDetailsRespVO> getOrderPlateList(Long orderId) {
// 查询订单对应的板件信息
List<PlateDetailsRespVO> plateDetailsRespVOS = orderPlateMapper.selectOrderNoPackPlateList(orderId, getUserOrganId());
if(plateDetailsRespVOS.isEmpty()){
return new ArrayList<>();
}
for (PlateDetailsRespVO plateDetailsRespVO : plateDetailsRespVOS) {
StringBuilder name = new StringBuilder();
if (!plateDetailsRespVO.getProcessGroupNameList().isEmpty()) {
for (GroupNameList groupNameList : plateDetailsRespVO.getProcessGroupNameList()) {
// 去除最后的逗号
name.append(groupNameList.getName()).append(",");
}
name = new StringBuilder(name.substring(0, name.length() - 1));
}
plateDetailsRespVO.setProcessGroup(name.toString());
}
return plateDetailsRespVOS;
}
@Override @Override
public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) { public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
List<Long> orderIds = reqVO.getOrderIds(); List<Long> orderIds = reqVO.getOrderIds();
@@ -924,7 +897,7 @@ public class PackServiceImpl implements PackService {
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress())); pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
// 查询查询分页 // 查询主单分页
IPage<PackRespVO> packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId()); IPage<PackRespVO> packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId());
if (CollUtil.isEmpty(packRespVOS.getRecords())) { if (CollUtil.isEmpty(packRespVOS.getRecords())) {
@@ -933,6 +906,20 @@ public class PackServiceImpl implements PackService {
orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList()); orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList());
// 查询分页下子级
List<OrderDO> childList = ordersMapper.selectList(
new LambdaQueryWrapperX<OrderDO>()
.in(OrderDO::getParentId, orderIds)
.eqIfPresent(OrderDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
.ne(OrderDO::getStatus, OrderStatusEnum.EMPTY.getStatus())
.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);
}
return buildPageResult(orderIds, packRespVOS); return buildPageResult(orderIds, packRespVOS);
} }
@@ -949,6 +936,7 @@ public class PackServiceImpl implements PackService {
if (orderIds.isEmpty()) { if (orderIds.isEmpty()) {
return new PageResult<>(); return new PageResult<>();
} }
List<PackRespVO> records = packRespVOS.getRecords();
// 查询当前生产的包裹数量 // 查询当前生产的包裹数量
List<PackRespVO> orderPackNumGroup = orderPackageMapper.selectPackPage(orderIds, getUserOrganId()); List<PackRespVO> orderPackNumGroup = orderPackageMapper.selectPackPage(orderIds, getUserOrganId());
@@ -957,20 +945,41 @@ public class PackServiceImpl implements PackService {
// 查询当前订单已经打包的板材数量 // 查询当前订单已经打包的板材数量
List<PackRespVO> orderPackedPlateNumGroup = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId()); List<PackRespVO> orderPackedPlateNumGroup = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId());
for (PackRespVO vosRecord : packRespVOS.getRecords()) { for (PackRespVO vosRecord : records) {
// 板材总数 // 板材总数
vosRecord.setTotalPieceCount(vosRecord.getPlateNum().longValue()); vosRecord.setTotalPieceCount(vosRecord.getPlateNum().longValue());
// 已打包裹数 // 已打包裹数
vosRecord.setPackCount(orderPackNumGroup.stream().filter(f -> Objects.equals(f.getOrderId(), vosRecord.getId())).mapToLong(PackRespVO::getPackCount).sum()); 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.getOrderId(), vosRecord.getId())).mapToLong(PackRespVO::getPackPieceCount).sum()); vosRecord.setPackPieceCount(orderPackedPlateNumGroup.stream().filter(f -> Objects.equals(f.getId(), vosRecord.getId())).mapToLong(PackRespVO::getPackPieceCount).sum());
// 待处理量 // 待处理量
vosRecord.setPendingNum(vosRecord.getTotalPieceCount() - vosRecord.getPackPieceCount()); vosRecord.setPendingNum(vosRecord.getTotalPieceCount() - vosRecord.getPackPieceCount());
} }
return new PageResult<>(packRespVOS.getRecords(), packRespVOS.getTotal()); Map<Long, PackRespVO> parentMap = new HashMap<>();
List<PackRespVO> result = new ArrayList<>();
// 1. 把所有 parent 放进 map
for (PackRespVO vo : records) {
if (vo.getParentId() == 0) {
vo.setChild(new ArrayList<>());
parentMap.put(vo.getId(), vo);
result.add(vo);
}
}
// 2. 再挂子节点
for (PackRespVO vo : records) {
if (vo.getParentId() != 0) {
PackRespVO parent = parentMap.get(vo.getParentId());
if (parent != null) {
parent.getChild().add(vo);
}
}
}
return new PageResult<>(result, Long.valueOf(result.size()));
} }
@@ -1044,24 +1053,138 @@ public class PackServiceImpl implements PackService {
// 查询配件 // 查询配件
List<OrderPartsRespVO> parts = orderPartsMapper.selectOrdersPartsList(orderIds); List<OrderPartsRespVO> parts = orderPartsMapper.selectOrdersPartsList(orderIds);
// 根据成倍数量重新赋值柜体名称 ordersUnpackDetailRespVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates)));
plates.forEach(item -> { ordersUnpackDetailRespVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts)));
if (item.getMultiNum() != null && item.getMultiNum() > 1
&& item.getMultiSort() != null) {
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
}
});
parts.forEach(item -> {
if (item.getMultiNum() != null && item.getMultiNum() > 1
&& item.getMultiSort() != null) {
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
}
});
ordersUnpackDetailRespVO.setPlates(plates);
ordersUnpackDetailRespVO.setParts(parts);
return ordersUnpackDetailRespVO; return ordersUnpackDetailRespVO;
} }
/**
* 板件分组:加工组
*
* @param plates
* @return
*/
private Collection<PlateDetailsRespVO> buildPlateGroup(List<PlateDetailsRespVO> plates) {
Map<String, PlateDetailsRespVO> map = new LinkedHashMap<>();
for (PlateDetailsRespVO row : plates) {
// ===== 1. 组装 唯一key=====
String key = row.getPlateId() + "_" + row.getRoomId() + "_" + row.getBodyId();
PlateDetailsRespVO vo = map.computeIfAbsent(key, k -> {
PlateDetailsRespVO newVo = new PlateDetailsRespVO();
BeanUtils.copyProperties(row, newVo);
// ===== 初始化 =====
newVo.setProcessGroupNameList(new ArrayList<>());
return newVo;
});
// ===== 2. 收集加工组(允许重复,不去重)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
}
}
Collection<PlateDetailsRespVO> values = map.values();
// ===== 3. 转换成逗号字符串 =====
for (PlateDetailsRespVO vo : values) {
List<String> listGroup = vo.getProcessGroupNameList();
// 拼接加工组
if (listGroup != null && !listGroup.isEmpty()) {
vo.setProcessGroup(String.join(",", listGroup));
} else {
vo.setProcessGroup("");
}
// 可释放内存
vo.setProcessGroupNameList(null);
// 成倍编号处理
if (vo.getMultiNum() != null
&& vo.getMultiNum() > 1
&& vo.getMultiSort() != null
&& vo.getCabinetName() != null) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
}
}
return values;
}
/**
* 配件分组:加工组、部件(目前是一对一)
*
* @param parts
* @return
*/
private Collection<OrderPartsRespVO> buildPartsGroup(List<OrderPartsRespVO> parts) {
Map<String, OrderPartsRespVO> map = new LinkedHashMap<>();
for (OrderPartsRespVO row : parts) {
// ===== 1. 组装 唯一key=====
String key = row.getPartsId()
+ "_" + row.getRoomId()
+ "_" + row.getBodyId();
OrderPartsRespVO vo = map.computeIfAbsent(key, k -> {
OrderPartsRespVO newVo = new OrderPartsRespVO();
BeanUtils.copyProperties(row, newVo);
// ===== 初始化 =====
newVo.setProcessGroupNameList(new ArrayList<>());
newVo.setNum(BigDecimal.ZERO);
return newVo;
});
// ===== 2. num 累加 =====
if (row.getNum() != null) {
vo.setNum(vo.getNum().add(row.getNum()));
}
// ===== 3. 加工组(允许重复)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
}
}
Collection<OrderPartsRespVO> values = map.values();
for (OrderPartsRespVO vo : values) {
// ===== 加工组拼接 =====
List<String> processGroupNameList = vo.getProcessGroupNameList();
if (CollUtil.isNotEmpty(processGroupNameList)) {
vo.setProcessGroup(String.join(",", processGroupNameList));
} else {
vo.setProcessGroup(null);
}
// 可释放内存
vo.setProcessGroupNameList(null);
// ===== multiSort 处理(柜体编号)=====
if (vo.getMultiNum() > 1) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
} else {
vo.setCabinetName(vo.getCabinetName());
}
}
return values;
}
@Override @Override
public List<PackageDetailsRespVO> getOrdersPackageDetails(String packageNo) { public List<PackageDetailsRespVO> getOrdersPackageDetails(String packageNo) {
List<OrderPackagDO> orderPackagDONews = orderPackageMapper.selectList(new LambdaQueryWrapper<OrderPackagDO>() List<OrderPackagDO> orderPackagDONews = orderPackageMapper.selectList(new LambdaQueryWrapper<OrderPackagDO>()
@@ -1075,16 +1198,135 @@ public class PackServiceImpl implements PackService {
List<PackageDetailsRespVO> packPlateList = orderPlateMapper.selectPackedPlateList(orderIds, packageNo); List<PackageDetailsRespVO> packPlateList = orderPlateMapper.selectPackedPlateList(orderIds, packageNo);
// 查询配件 // 查询配件
List<PackageDetailsRespVO> packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo); List<PackageDetailsRespVO> packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo);
packPlateList.addAll(packPartsList);
// 根据成倍数量重新赋值柜体名称 Collection<PackageDetailsRespVO> resultList = buildPackaPlateGroup(packPlateList);
packPlateList.forEach(item -> { resultList.addAll(buildPackaPlateGroup(packPartsList));
if (item.getMultiNum() != null && item.getMultiNum() > 1 return CollUtil.newArrayList(resultList);
&& item.getMultiSort() != null) { }
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
/**
* 包裹板件分组:加工组
*
* @param plates
* @return
*/
private Collection<PackageDetailsRespVO> buildPackaPlateGroup(List<PackageDetailsRespVO> plates) {
Map<String, PackageDetailsRespVO> map = new LinkedHashMap<>();
for (PackageDetailsRespVO row : plates) {
// ===== 1. 组装 唯一key=====
String key = row.getPlateId()
+ "_" + row.getRoomId()
+ "_" + row.getBodyId();
PackageDetailsRespVO vo = map.computeIfAbsent(key, k -> {
PackageDetailsRespVO newVo = new PackageDetailsRespVO();
BeanUtils.copyProperties(row, newVo);
// ===== 初始化 =====
newVo.setProcessGroupNameList(new ArrayList<>());
return newVo;
});
// ===== 2. 收集加工组(允许重复,不去重)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
} }
}); }
return packPlateList;
Collection<PackageDetailsRespVO> values = map.values();
// ===== 3. 转换成逗号字符串 =====
for (PackageDetailsRespVO vo : values) {
List<String> listGroup = vo.getProcessGroupNameList();
// 拼接加工组
if (listGroup != null && !listGroup.isEmpty()) {
vo.setProcessGroup(String.join(",", listGroup));
} else {
vo.setProcessGroup("");
}
// 可释放内存
vo.setProcessGroupNameList(null);
// 成倍编号处理
if (vo.getMultiNum() > 1) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
}
}
return values;
}
/**
* 包裹配件分组:加工组、部件(目前是一对一)
*
* @param parts
* @return
*/
private Collection<PackageDetailsRespVO> buildPackPartsGroup(List<PackageDetailsRespVO> parts) {
Map<String, PackageDetailsRespVO> map = new LinkedHashMap<>();
for (PackageDetailsRespVO row : parts) {
// ===== 1. 组装 唯一key=====
String key = row.getPartsId()
+ "_" + row.getRoomId()
+ "_" + row.getBodyId();
PackageDetailsRespVO vo = map.computeIfAbsent(key, k -> {
PackageDetailsRespVO newVo = new PackageDetailsRespVO();
BeanUtils.copyProperties(row, newVo);
// ===== 初始化 =====
newVo.setProcessGroupNameList(new ArrayList<>());
newVo.setPackNum(BigDecimal.ZERO);
return newVo;
});
// ===== 2. num 累加 =====
if (row.getPackNum() != null) {
vo.setPackNum(vo.getPackNum().add(row.getPackNum()));
}
// ===== 3. 加工组(允许重复)=====
if (row.getProcessGroup() != null) {
vo.getProcessGroupNameList().add(row.getProcessGroup());
}
}
Collection<PackageDetailsRespVO> values = map.values();
for (PackageDetailsRespVO vo : values) {
// ===== 加工组拼接 =====
List<String> processGroupNameList = vo.getProcessGroupNameList();
if (CollUtil.isNotEmpty(processGroupNameList)) {
vo.setProcessGroup(String.join(",", processGroupNameList));
} else {
vo.setProcessGroup(null);
}
// 可释放内存
vo.setProcessGroupNameList(null);
// ===== multiSort 处理(柜体编号)=====
if (vo.getMultiNum() > 1) {
vo.setCabinetName(
vo.getCabinetName() + "-" + vo.getMultiSort()
);
} else {
vo.setCabinetName(vo.getCabinetName());
}
}
return values;
} }
@Override @Override
@@ -485,7 +485,8 @@
<resultMap id="PackMap" type="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO"> <resultMap id="PackMap" type="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO">
<result property="id" column="orderNo"/> <result property="id" column="id"/>
<result property="parentId" column="parentId"/>
<result property="customOrderNo" column="customOrderNo"/> <result property="customOrderNo" column="customOrderNo"/>
<result property="dealer" column="dealer"/> <result property="dealer" column="dealer"/>
<result property="dealerPhoneNumber" column="dealerPhoneNumber"/> <result property="dealerPhoneNumber" column="dealerPhoneNumber"/>
@@ -542,7 +543,8 @@
select select
id as orderNo, id,
parent_id as parentId,
custom_order_no as customOrderNo, custom_order_no as customOrderNo,
dealer as dealer, dealer as dealer,
dealer_phone_number as dealerPhoneNumber, dealer_phone_number as dealerPhoneNumber,
@@ -564,6 +566,7 @@
organ_id =#{organId} organ_id =#{organId}
and deleted = false and deleted = false
and status in (1,2,3,4) and status in (1,2,3,4)
and parent_id = 0
<if test="pageReqVO.orderId !=null"> <if test="pageReqVO.orderId !=null">
and id like concat('%', #{pageReqVO.orderId},'%') and id like concat('%', #{pageReqVO.orderId},'%')
@@ -298,18 +298,23 @@
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="partsMap"> resultMap="partsMap">
SELECT SELECT
t.room_name AS roomName, ob.room_name AS roomName,
t.body_name AS bodyName, ob.name AS bodyName,
t.room_id AS roomId, ob.room_id AS roomId,
t.body_id AS bodyId, ob.id AS bodyId,
t.group_names AS groupName,
t.component_names AS componentName, og.name AS groupName,
t.pack_num AS packNum, oc.name AS componentName,
t.package_id AS packageId,
t.multiNum AS multiNum, oi.pack_num AS packNum,
t.multiSort AS multiSort, oi.package_id AS packageId,
op.id AS partsId,
op.order_id AS orderId, ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS partsId,
op.order_id AS orderId,
op.name, op.name,
op.model, op.model,
op.spec, op.spec,
@@ -317,50 +322,48 @@
op.brand, op.brand,
op.factory, op.factory,
op.remark, op.remark,
op.color AS partsColor, op.color AS partsColor,
op.width AS partsWidth, op.width AS partsWidth,
op.length AS partsLength, op.length AS partsLength,
op.thickness AS partsThickness, op.thickness AS partsThickness,
op.category, op.category,
op.subparts, op.subparts,
op.type op.type
FROM order_parts op
JOIN (
SELECT
oi.parts_id,
oi.package_id,
oi.room_id,
oi.body_id,
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
SUM(oi.pack_num) AS pack_num,
MIN(ob.multi_num) AS multiNum,
MIN(ob.multi_sort) AS multiSort
FROM order_item oi FROM order_item oi
JOIN order_parts op
ON oi.parts_id = op.id
AND oi.organ_id = op.organ_id
AND oi.order_id = op.order_id
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE oi.package_id = #{packageNo}
WHERE
oi.package_id = #{packageNo}
AND oi.parts_id != 0 AND oi.parts_id != 0
GROUP BY oi.room_id, oi.body_id, oi.parts_id, oi.package_id
) t ON t.parts_id = op.id AND op.deleted = false
WHERE op.deleted = false
AND op.type != '封边条' AND op.type != '封边条'
AND op.order_id IN AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
order by partsId
</select> </select>
@@ -402,17 +405,17 @@
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="PartsListMap"> resultMap="PartsListMap">
SELECT SELECT
t.room_name AS roomName, ob.room_name AS roomName,
t.body_name AS bodyName, ob.name AS bodyName,
t.room_id AS roomId, ob.room_id AS roomId,
t.body_id AS bodyId, ob.id AS bodyId,
t.group_names AS processGroup, og.name AS processGroup,
t.component_names AS componentName, oc.name AS componentName,
t.num AS num, (oi.num - oi.pack_num) AS num,
t.multiNum AS multiNum, ob.multi_num AS multiNum,
t.multiSort AS multiSort, ob.multi_sort AS multiSort,
op.id AS partsId, op.id AS partsId,
op.order_id AS orderId, op.order_id AS orderId,
op.name, op.name,
op.model, op.model,
op.spec, op.spec,
@@ -420,71 +423,69 @@
op.brand, op.brand,
op.factory, op.factory,
op.remark, op.remark,
op.color AS partsColor, op.color AS partsColor,
op.width AS partsWidth, op.width AS partsWidth,
op.length AS partsLength, op.length AS partsLength,
op.thickness AS partsThickness, op.thickness AS partsThickness,
op.category, op.category,
op.subparts, op.subparts,
op.type op.type
FROM order_parts op
JOIN (
SELECT
oi.parts_id,
oi.room_id,
oi.body_id,
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
SUM(oi.num - oi.pack_num) AS num,
MIN(ob.multi_num) AS multiNum,
MIN(ob.multi_sort) AS multiSort
FROM order_item oi FROM order_item oi
JOIN order_parts op
ON oi.parts_id = op.id
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE WHERE
oi.parts_id != 0 oi.parts_id != 0
AND oi.package_id = 0 AND oi.package_id = 0
AND oi.source_id = 0 AND oi.source_id = 0
GROUP BY oi.room_id, oi.body_id, oi.parts_id AND op.deleted = false
) t ON t.parts_id = op.id
WHERE op.deleted = false
AND op.type != '封边条' AND op.type != '封边条'
AND op.order_id IN AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
order by partsId
</select> </select>
<select id="selectOrdersHeapSplitPartsList" <select id="selectOrdersHeapSplitPartsList"
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="PartsListMap"> resultMap="PartsListMap">
SELECT SELECT
t.room_name AS roomName, ob.room_name AS roomName,
t.body_name AS bodyName, ob.name AS bodyName,
t.room_id AS roomId, ob.room_id AS roomId,
t.body_id AS bodyId, ob.id AS bodyId,
t.heap_split_status AS heapSplitStatus,
t.group_names AS processGroup, oi.heap_split_status AS heapSplitStatus,
t.component_names AS componentName,
t.multi_num AS multiNum, og.name AS processGroup,
t.multi_sort AS multiSort, oc.name AS componentName,
t.num AS num,
t.heap_num AS heapNum, ob.multi_num AS multiNum,
op.id AS partsId, ob.multi_sort AS multiSort,
op.order_id AS orderId,
(oi.num - oi.heap_num) AS num,
oi.heap_num AS heapNum,
op.id AS partsId,
op.order_id AS orderId,
op.name, op.name,
op.model, op.model,
op.spec, op.spec,
@@ -492,58 +493,52 @@
op.brand, op.brand,
op.factory, op.factory,
op.remark, op.remark,
op.color AS partsColor, op.color AS partsColor,
op.width AS partsWidth, op.width AS partsWidth,
op.length AS partsLength, op.length AS partsLength,
op.thickness AS partsThickness, op.thickness AS partsThickness,
op.category, op.category,
op.subparts, op.subparts,
op.type op.type
FROM order_parts op
JOIN (
SELECT
oi.parts_id,
oi.room_id,
oi.body_id,
oi.heap_split_status,
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
SUM(oi.num - oi.heap_num) AS num,
SUM(oi.heap_num) AS heap_num,
MIN(ob.multi_num) AS multi_num,
MIN(ob.multi_sort) AS multi_sort
FROM order_item oi FROM order_item oi
JOIN order_parts op
ON oi.parts_id = op.id
AND oi.organ_id = op.organ_id
AND oi.order_id = op.order_id
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE WHERE
oi.parts_id != 0 oi.parts_id != 0
AND
( AND (
source_id = 0 oi.source_id = 0
OR OR (oi.source_id != 0 AND oi.heap_split_status = 1)
(source_id != 0 AND oi.heap_split_status = 1)
) )
GROUP BY oi.room_id, oi.body_id, oi.parts_id, oi.heap_split_status
) t ON t.parts_id = op.id AND op.deleted = false
WHERE op.deleted = false
AND op.type != '封边条' AND op.type != '封边条'
AND op.order_id IN AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
order by partsId
</select> </select>
<resultMap id="LabelPartsMap" type="com.cf.imes.module.executor.controller.admin.order.vo.order.LabelOrderPartsData"> <resultMap id="LabelPartsMap" type="com.cf.imes.module.executor.controller.admin.order.vo.order.LabelOrderPartsData">
@@ -5,7 +5,7 @@
parameterType="java.util.List" parameterType="java.util.List"
resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO"> resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO">
select select
order_id as orderId, order_id as id,
COUNT(*) AS packCount COUNT(*) AS packCount
from order_package from order_package
where where
@@ -26,7 +26,7 @@
resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO"> resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO">
select select
op.order_id as orderId, op.order_id as id,
COUNT(DISTINCT oi.plate_id) AS packPieceCount COUNT(DISTINCT oi.plate_id) AS packPieceCount
from order_package op from order_package op
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.package_no = oi.package_id left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.package_no = oi.package_id
@@ -814,28 +814,32 @@
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="PlateDetailsMap"> resultMap="PlateDetailsMap">
SELECT SELECT
t.group_names AS processGroup, og.name AS processGroup,
t.component_names AS componentName, oc.name AS componentName,
t.room_name AS roomName,
t.body_name AS bodyName, ob.room_name AS roomName,
t.room_id AS roomId, ob.name AS bodyName,
t.body_id AS bodyId, ob.room_id AS roomId,
t.multi_num AS multiNum, ob.id AS bodyId,
t.multi_sort AS multiSort, ob.multi_num AS multiNum,
op.id AS plateId, ob.multi_sort AS multiSort,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo, op.id AS plateId,
op.name AS plateName, op.plate_no AS plateNo,
ogs.material AS plateMaterial, op.custom_plate_no AS customPlateNo,
ogs.color AS plateColor, op.name AS plateName,
ogs.brand AS brand, ogs.material AS plateMaterial,
op.order_id AS orderId, ogs.color AS plateColor,
op.height AS plateHeight, ogs.brand AS brand,
op.width AS plateWidth, op.order_id AS orderId,
op.thickness AS plateThickness,
op.area AS plateArea, op.height AS plateHeight,
op.width AS plateWidth,
op.thickness AS plateThickness,
op.area AS plateArea,
op.texture, op.texture,
op.remark, op.remark,
op.is_special_shaped AS specialShaped, op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling, op.is_sculpt AS profiling,
op.is_row_hole AS rowHole, op.is_row_hole AS rowHole,
@@ -852,212 +856,224 @@
op.seal_right AS sealRight, op.seal_right AS sealRight,
op.seal_up AS sealUp, op.seal_up AS sealUp,
op.seal_down AS sealDown op.seal_down AS sealDown
FROM order_plate op FROM order_plate op
LEFT JOIN order_goods ogs LEFT JOIN order_goods ogs
ON op.organ_id = ogs.organ_id ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_id AND op.order_id = ogs.order_id
AND op.goods_id = ogs.id AND op.goods_id = ogs.id
JOIN (
SELECT JOIN order_item oi
oi.plate_id, ON oi.organ_id = op.organ_id
oi.room_id, AND oi.order_id = op.order_id
oi.body_id, AND oi.plate_id = op.id
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,-- 聚合加工组
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
MIN(ob.multi_num) AS multi_num,
MIN(ob.multi_sort) AS multi_sort
FROM order_item oi
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE oi.plate_id != 0
AND oi.package_id = 0 WHERE
GROUP BY oi.plate_id, room_id, body_id op.deleted = false
) t ON t.plate_id = op.id AND op.order_id in
WHERE op.deleted = false
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
AND oi.plate_id != 0
AND oi.package_id = 0
AND oi.organ_id = 1
order by plateId
</select> </select>
<select id="selectPackedPlateList" <select id="selectPackedPlateList"
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="orderItemMap"> resultMap="orderItemMap">
SELECT SELECT
t.package_id AS packageId, oi.package_id AS packageId,
t.group_names AS processGroup,
t.component_names AS componentName, og.name AS processGroup,
t.room_name AS roomName, oc.name AS componentName,
t.body_name AS bodyName,
t.room_id AS roomId, ob.room_name AS roomName,
t.body_id AS bodyId, ob.name AS bodyName,
t.multi_num AS multiNum, ob.room_id AS roomId,
t.multi_sort AS multiSort, ob.id AS bodyId,
op.id AS plateId,
op.plate_no AS plateNo, ob.multi_num AS multiNum,
op.custom_plate_no AS customPlateNo, ob.multi_sort AS multiSort,
op.name AS plateName,
ogs.material AS plateMaterial, op.id AS plateId,
ogs.color AS plateColor, op.plate_no AS plateNo,
ogs.brand AS brand, op.custom_plate_no AS customPlateNo,
op.order_id AS orderId, op.name AS plateName,
op.height AS plateHeight,
op.width AS plateWidth, ogs.material AS plateMaterial,
op.thickness AS plateThickness, ogs.color AS plateColor,
op.area AS plateArea, ogs.brand AS brand,
op.order_id AS orderId,
op.height AS plateHeight,
op.width AS plateWidth,
op.thickness AS plateThickness,
op.area AS plateArea,
op.texture, op.texture,
op.remark, op.remark,
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling, op.is_special_shaped AS specialShaped,
op.is_row_hole AS rowHole, op.is_sculpt AS profiling,
op.front_hole_count AS frontHoleCount, op.is_row_hole AS rowHole,
op.back_hole_count AS backHoleCount, op.front_hole_count AS frontHoleCount,
op.side_hole_count AS sideHoleCount, op.back_hole_count AS backHoleCount,
op.open_door_type AS openDoorType, op.side_hole_count AS sideHoleCount,
op.is_side_sculpt AS isSideSculpt, op.open_door_type AS openDoorType,
op.is_2v AS is2v, op.is_side_sculpt AS isSideSculpt,
op.is_side_2v AS isSide2v, op.is_2v AS is2v,
op.split_width AS splitWidth, op.is_side_2v AS isSide2v,
op.split_height AS splitHeight, op.split_width AS splitWidth,
op.seal_left AS sealLeft, op.split_height AS splitHeight,
op.seal_right AS sealRight, op.seal_left AS sealLeft,
op.seal_up AS sealUp, op.seal_right AS sealRight,
op.seal_down AS sealDown op.seal_up AS sealUp,
FROM order_plate op op.seal_down AS sealDown
FROM order_item oi
JOIN order_plate op
ON oi.organ_id = op.organ_id
AND oi.order_id = op.order_id
AND oi.plate_id = op.id
LEFT JOIN order_goods ogs LEFT JOIN order_goods ogs
ON op.organ_id = ogs.organ_id ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_id AND op.order_id = ogs.order_id
AND op.goods_id = ogs.id AND op.goods_id = ogs.id
JOIN (
SELECT
oi.plate_id,
oi.package_id,
oi.room_id,
oi.body_id,
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,-- 聚合加工组
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
MIN(ob.multi_num) AS multi_num,
MIN(ob.multi_sort) AS multi_sort
FROM order_item oi
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE oi.package_id = #{packageNo}
WHERE
oi.package_id = #{packageNo}
AND oi.plate_id != 0 AND oi.plate_id != 0
GROUP BY oi.room_id, oi.body_id, oi.plate_id, oi.package_id AND op.deleted = false
) t ON t.plate_id = op.id
WHERE op.deleted = false
AND op.order_id IN AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
order by plateId
</select> </select>
<select id="selectOrdersHeapSplitPlateList" <select id="selectOrdersHeapSplitPlateList"
parameterType="java.lang.Long" parameterType="java.lang.Long"
resultMap="PlateDetailsMap"> resultMap="PlateDetailsMap">
SELECT SELECT
t.group_names AS processGroup, og.name AS processGroup,
t.component_names AS componentName, oc.name AS componentName,
t.room_name AS roomName,
t.body_name AS bodyName, ob.room_name AS roomName,
t.room_id AS roomId, ob.name AS bodyName,
t.body_id AS bodyId, ob.room_id AS roomId,
t.heap_split_status AS heapSplitStatus, ob.id AS bodyId,
t.multi_num AS multiNum,
t.multi_sort AS multiSort, oi.heap_split_status AS heapSplitStatus,
op.id AS plateId,
op.plate_no AS plateNo, ob.multi_num AS multiNum,
op.custom_plate_no AS customPlateNo, ob.multi_sort AS multiSort,
op.name AS plateName,
ogs.material AS plateMaterial, op.id AS plateId,
ogs.color AS plateColor, op.plate_no AS plateNo,
ogs.brand AS brand, op.custom_plate_no AS customPlateNo,
op.order_id AS orderId, op.name AS plateName,
op.height AS plateHeight,
op.width AS plateWidth, ogs.material AS plateMaterial,
op.thickness AS plateThickness, ogs.color AS plateColor,
op.area AS plateArea, ogs.brand AS brand,
op.order_id AS orderId,
op.height AS plateHeight,
op.width AS plateWidth,
op.thickness AS plateThickness,
op.area AS plateArea,
op.texture, op.texture,
op.remark, op.remark,
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling, op.is_special_shaped AS specialShaped,
op.is_row_hole AS rowHole, op.is_sculpt AS profiling,
op.front_hole_count AS frontHoleCount, op.is_row_hole AS rowHole,
op.back_hole_count AS backHoleCount, op.front_hole_count AS frontHoleCount,
op.side_hole_count AS sideHoleCount, op.back_hole_count AS backHoleCount,
op.open_door_type AS openDoorType, op.side_hole_count AS sideHoleCount,
op.is_side_sculpt AS isSideSculpt, op.open_door_type AS openDoorType,
op.is_2v AS is2v, op.is_side_sculpt AS isSideSculpt,
op.is_side_2v AS isSide2v, op.is_2v AS is2v,
op.split_width AS splitWidth, op.is_side_2v AS isSide2v,
op.split_height AS splitHeight, op.split_width AS splitWidth,
op.seal_left AS sealLeft, op.split_height AS splitHeight,
op.seal_right AS sealRight, op.seal_left AS sealLeft,
op.seal_up AS sealUp, op.seal_right AS sealRight,
op.seal_down AS sealDown op.seal_up AS sealUp,
FROM order_plate op op.seal_down AS sealDown
FROM order_item oi
JOIN order_plate op
ON oi.organ_id = op.organ_id
AND oi.order_id = op.order_id
AND oi.plate_id = op.id
LEFT JOIN order_goods ogs LEFT JOIN order_goods ogs
ON op.organ_id = ogs.organ_id ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_id AND op.order_id = ogs.order_id
AND op.goods_id = ogs.id AND op.goods_id = ogs.id
JOIN (
SELECT
oi.plate_id,
oi.room_id,
oi.body_id,
oi.heap_split_status,
GROUP_CONCAT(og.name SEPARATOR ',') AS group_names,
MIN(oc.name) AS component_names,
MIN(ob.room_name) AS room_name,
MIN(ob.name) AS body_name,
MIN(ob.multi_num) AS multi_num,
MIN(ob.multi_sort) AS multi_sort
FROM order_item oi
LEFT JOIN order_group og LEFT JOIN order_group og
ON oi.organ_id = og.organ_id ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id AND oi.order_id = og.order_id
AND oi.group_id = og.id AND oi.group_id = og.id
LEFT JOIN order_body ob LEFT JOIN order_body ob
ON oi.organ_id = ob.organ_id ON oi.organ_id = ob.organ_id
AND oi.order_id = ob.order_id AND oi.order_id = ob.order_id
AND oi.body_id = ob.id AND oi.body_id = ob.id
LEFT JOIN order_component oc LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id AND oi.comp_id = oc.id
WHERE oi.plate_id != 0
GROUP BY room_id, body_id, oi.plate_id, oi.heap_split_status WHERE
) t ON t.plate_id = op.id oi.plate_id != 0
WHERE op.deleted = false AND op.deleted = false
AND op.order_id IN AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")"> <foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId} #{orderId}
</foreach> </foreach>
order by plateId
</select> </select>
<select id="selectLabelOrderPlateDataByOrderId" <select id="selectLabelOrderPlateDataByOrderId"