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")
@Operation(summary = "获取订单列表下未打包明细")
@Parameter(name = "orderIds", description = "订单ID列表", required = true)
@@ -98,7 +98,7 @@ public class OrderPartsRespVO {
@Schema(description = "组件名称")
private String componentName;
private List<GroupNameList> processGroupNameList;
private List<String> processGroupNameList;
@Schema(description = "加工组")
private String processGroup;
@@ -17,9 +17,8 @@ public class PackRespVO {
@Schema(description = "订单号", example = "7788")
private Long id;
@Schema(description = "订单号", example = "7788")
private Long orderId;
@Schema(description = "订单号", example = "7788")
private Long parentId;
@Schema(description = "包裹ID", example = "7788")
private Long packId;
@@ -94,10 +93,6 @@ public class PackRespVO {
@Schema(description = "待处理量")
private Long pendingNum;
@Schema(description = "订单对应的板材ID集")
private List<Long> plateIdList;
@Schema(description = "订单对应的包裹ID集")
private List<Long> packIdList;
@Schema(description = "子订单")
private List<PackRespVO> child;
}
@@ -143,7 +143,7 @@ public class PlateDetailsRespVO {
@Schema(description = "加工组名称集合")
private List<GroupNameList> processGroupNameList;
private List<String> processGroupNameList;
@Schema(description = "开料长")
private BigDecimal splitHeight;
@@ -70,6 +70,8 @@ public class PackageDetailsRespVO {
@Schema(description = "加工组")
private String processGroup;
private List<String> processGroupNameList;
@Schema(description = "备注(板材和配件都要传递)")
private String remark;
@@ -140,13 +140,6 @@ public class OrderController {
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")
@Operation(summary = "获得主订单分页")
@PreAuthorize("@ss.hasPermission('productManager:List')")
@@ -157,7 +150,7 @@ public class OrderController {
@GetMapping("/webcad/page")
@Operation(summary = "获得订单分页")
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)
@ExcelProperty("父单号")
private Long parentNo;
private Long parentId;
@Schema(description = "源订单号")
@ExcelProperty("父单号")
@@ -22,7 +22,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -194,24 +197,139 @@ public class HeapSplitServiceImpl implements HeapSplitService {
// 查询配件
List<OrderPartsRespVO> parts = orderPartsMapper.selectOrdersHeapSplitPartsList(orderIds);
// 根据成倍数量重新赋值柜体名称
plates.forEach(item -> {
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);
respVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates)));
respVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts)));
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);
// 查看生产订单对应的板材信息
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.plate.PlateService;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
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
public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
List<Long> orderIds = reqVO.getOrderIds();
@@ -924,7 +897,7 @@ public class PackServiceImpl implements PackService {
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
// 查询查询分页
// 查询主单分页
IPage<PackRespVO> packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId());
if (CollUtil.isEmpty(packRespVOS.getRecords())) {
@@ -933,6 +906,20 @@ public class PackServiceImpl implements PackService {
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);
}
@@ -949,6 +936,7 @@ public class PackServiceImpl implements PackService {
if (orderIds.isEmpty()) {
return new PageResult<>();
}
List<PackRespVO> records = packRespVOS.getRecords();
// 查询当前生产的包裹数量
List<PackRespVO> orderPackNumGroup = orderPackageMapper.selectPackPage(orderIds, getUserOrganId());
@@ -957,20 +945,41 @@ public class PackServiceImpl implements PackService {
// 查询当前订单已经打包的板材数量
List<PackRespVO> orderPackedPlateNumGroup = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId());
for (PackRespVO vosRecord : packRespVOS.getRecords()) {
for (PackRespVO vosRecord : records) {
// 板材总数
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());
}
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);
// 根据成倍数量重新赋值柜体名称
plates.forEach(item -> {
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);
ordersUnpackDetailRespVO.setPlates(CollUtil.newArrayList(buildPlateGroup(plates)));
ordersUnpackDetailRespVO.setParts(CollUtil.newArrayList(buildPartsGroup(parts)));
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
public List<PackageDetailsRespVO> getOrdersPackageDetails(String packageNo) {
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> packPartsList = orderPartsMapper.selectPackedParts(orderIds, packageNo);
packPlateList.addAll(packPartsList);
// 根据成倍数量重新赋值柜体名称
packPlateList.forEach(item -> {
if (item.getMultiNum() != null && item.getMultiNum() > 1
&& item.getMultiSort() != null) {
item.setCabinetName(item.getCabinetName() + "-" + item.getMultiSort());
Collection<PackageDetailsRespVO> resultList = buildPackaPlateGroup(packPlateList);
resultList.addAll(buildPackaPlateGroup(packPartsList));
return CollUtil.newArrayList(resultList);
}
/**
* 包裹板件分组:加工组
*
* @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
@@ -485,7 +485,8 @@
<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="dealer" column="dealer"/>
<result property="dealerPhoneNumber" column="dealerPhoneNumber"/>
@@ -542,7 +543,8 @@
select
id as orderNo,
id,
parent_id as parentId,
custom_order_no as customOrderNo,
dealer as dealer,
dealer_phone_number as dealerPhoneNumber,
@@ -564,6 +566,7 @@
organ_id =#{organId}
and deleted = false
and status in (1,2,3,4)
and parent_id = 0
<if test="pageReqVO.orderId !=null">
and id like concat('%', #{pageReqVO.orderId},'%')
@@ -298,18 +298,23 @@
parameterType="java.lang.Long"
resultMap="partsMap">
SELECT
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.group_names AS groupName,
t.component_names AS componentName,
t.pack_num AS packNum,
t.package_id AS packageId,
t.multiNum AS multiNum,
t.multiSort AS multiSort,
op.id AS partsId,
op.order_id AS orderId,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
og.name AS groupName,
oc.name AS componentName,
oi.pack_num AS packNum,
oi.package_id AS packageId,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS partsId,
op.order_id AS orderId,
op.name,
op.model,
op.spec,
@@ -317,50 +322,48 @@
op.brand,
op.factory,
op.remark,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.category,
op.subparts,
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
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
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
WHERE oi.package_id = #{packageNo}
AND oi.comp_id = oc.id
WHERE
oi.package_id = #{packageNo}
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
WHERE op.deleted = false
AND op.deleted = false
AND op.type != '封边条'
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
order by partsId
</select>
@@ -402,17 +405,17 @@
parameterType="java.lang.Long"
resultMap="PartsListMap">
SELECT
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.group_names AS processGroup,
t.component_names AS componentName,
t.num AS num,
t.multiNum AS multiNum,
t.multiSort AS multiSort,
op.id AS partsId,
op.order_id AS orderId,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
og.name AS processGroup,
oc.name AS componentName,
(oi.num - oi.pack_num) AS num,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS partsId,
op.order_id AS orderId,
op.name,
op.model,
op.spec,
@@ -420,71 +423,69 @@
op.brand,
op.factory,
op.remark,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.category,
op.subparts,
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
JOIN order_parts op
ON oi.parts_id = op.id
LEFT JOIN order_group og
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
AND oi.comp_id = oc.id
WHERE
oi.parts_id != 0
AND oi.package_id = 0
AND oi.source_id = 0
GROUP BY oi.room_id, oi.body_id, oi.parts_id
) t ON t.parts_id = op.id
WHERE op.deleted = false
AND op.deleted = false
AND op.type != '封边条'
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
order by partsId
</select>
<select id="selectOrdersHeapSplitPartsList"
parameterType="java.lang.Long"
resultMap="PartsListMap">
SELECT
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.heap_split_status AS heapSplitStatus,
t.group_names AS processGroup,
t.component_names AS componentName,
t.multi_num AS multiNum,
t.multi_sort AS multiSort,
t.num AS num,
t.heap_num AS heapNum,
op.id AS partsId,
op.order_id AS orderId,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
oi.heap_split_status AS heapSplitStatus,
og.name AS processGroup,
oc.name AS componentName,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
(oi.num - oi.heap_num) AS num,
oi.heap_num AS heapNum,
op.id AS partsId,
op.order_id AS orderId,
op.name,
op.model,
op.spec,
@@ -492,58 +493,52 @@
op.brand,
op.factory,
op.remark,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.color AS partsColor,
op.width AS partsWidth,
op.length AS partsLength,
op.thickness AS partsThickness,
op.category,
op.subparts,
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
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
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
AND oi.comp_id = oc.id
WHERE
oi.parts_id != 0
AND
(
source_id = 0
OR
(source_id != 0 AND oi.heap_split_status = 1)
AND (
oi.source_id = 0
OR (oi.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
WHERE op.deleted = false
AND op.deleted = false
AND op.type != '封边条'
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
order by partsId
</select>
<resultMap id="LabelPartsMap" type="com.cf.imes.module.executor.controller.admin.order.vo.order.LabelOrderPartsData">
@@ -5,7 +5,7 @@
parameterType="java.util.List"
resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO">
select
order_id as orderId,
order_id as id,
COUNT(*) AS packCount
from order_package
where
@@ -26,7 +26,7 @@
resultType="com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO">
select
op.order_id as orderId,
op.order_id as id,
COUNT(DISTINCT oi.plate_id) AS packPieceCount
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
@@ -814,28 +814,32 @@
parameterType="java.lang.Long"
resultMap="PlateDetailsMap">
SELECT
t.group_names AS processGroup,
t.component_names AS componentName,
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.multi_num AS multiNum,
t.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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,
og.name AS processGroup,
oc.name AS componentName,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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.remark,
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling,
op.is_row_hole AS rowHole,
@@ -852,212 +856,224 @@
op.seal_right AS sealRight,
op.seal_up AS sealUp,
op.seal_down AS sealDown
FROM order_plate op
LEFT JOIN order_goods ogs
ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_id
AND op.goods_id = ogs.id
JOIN (
SELECT
oi.plate_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
JOIN order_item oi
ON oi.organ_id = op.organ_id
AND oi.order_id = op.order_id
AND oi.plate_id = op.id
LEFT JOIN order_group og
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
WHERE oi.plate_id != 0
AND oi.package_id = 0
GROUP BY oi.plate_id, room_id, body_id
) t ON t.plate_id = op.id
WHERE op.deleted = false
AND op.order_id IN
AND oi.comp_id = oc.id
WHERE
op.deleted = false
AND op.order_id in
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
AND oi.plate_id != 0
AND oi.package_id = 0
AND oi.organ_id = 1
order by plateId
</select>
<select id="selectPackedPlateList"
parameterType="java.lang.Long"
resultMap="orderItemMap">
SELECT
t.package_id AS packageId,
t.group_names AS processGroup,
t.component_names AS componentName,
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.multi_num AS multiNum,
t.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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,
oi.package_id AS packageId,
og.name AS processGroup,
oc.name AS componentName,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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.remark,
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling,
op.is_row_hole AS rowHole,
op.front_hole_count AS frontHoleCount,
op.back_hole_count AS backHoleCount,
op.side_hole_count AS sideHoleCount,
op.open_door_type AS openDoorType,
op.is_side_sculpt AS isSideSculpt,
op.is_2v AS is2v,
op.is_side_2v AS isSide2v,
op.split_width AS splitWidth,
op.split_height AS splitHeight,
op.seal_left AS sealLeft,
op.seal_right AS sealRight,
op.seal_up AS sealUp,
op.seal_down AS sealDown
FROM order_plate op
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling,
op.is_row_hole AS rowHole,
op.front_hole_count AS frontHoleCount,
op.back_hole_count AS backHoleCount,
op.side_hole_count AS sideHoleCount,
op.open_door_type AS openDoorType,
op.is_side_sculpt AS isSideSculpt,
op.is_2v AS is2v,
op.is_side_2v AS isSide2v,
op.split_width AS splitWidth,
op.split_height AS splitHeight,
op.seal_left AS sealLeft,
op.seal_right AS sealRight,
op.seal_up AS sealUp,
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
ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_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
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
WHERE oi.package_id = #{packageNo}
AND oi.comp_id = oc.id
WHERE
oi.package_id = #{packageNo}
AND oi.plate_id != 0
GROUP BY oi.room_id, oi.body_id, oi.plate_id, oi.package_id
) t ON t.plate_id = op.id
WHERE op.deleted = false
AND op.deleted = false
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
order by plateId
</select>
<select id="selectOrdersHeapSplitPlateList"
parameterType="java.lang.Long"
resultMap="PlateDetailsMap">
SELECT
t.group_names AS processGroup,
t.component_names AS componentName,
t.room_name AS roomName,
t.body_name AS bodyName,
t.room_id AS roomId,
t.body_id AS bodyId,
t.heap_split_status AS heapSplitStatus,
t.multi_num AS multiNum,
t.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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,
og.name AS processGroup,
oc.name AS componentName,
ob.room_name AS roomName,
ob.name AS bodyName,
ob.room_id AS roomId,
ob.id AS bodyId,
oi.heap_split_status AS heapSplitStatus,
ob.multi_num AS multiNum,
ob.multi_sort AS multiSort,
op.id AS plateId,
op.plate_no AS plateNo,
op.custom_plate_no AS customPlateNo,
op.name AS plateName,
ogs.material AS plateMaterial,
ogs.color AS plateColor,
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.remark,
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling,
op.is_row_hole AS rowHole,
op.front_hole_count AS frontHoleCount,
op.back_hole_count AS backHoleCount,
op.side_hole_count AS sideHoleCount,
op.open_door_type AS openDoorType,
op.is_side_sculpt AS isSideSculpt,
op.is_2v AS is2v,
op.is_side_2v AS isSide2v,
op.split_width AS splitWidth,
op.split_height AS splitHeight,
op.seal_left AS sealLeft,
op.seal_right AS sealRight,
op.seal_up AS sealUp,
op.seal_down AS sealDown
FROM order_plate op
op.is_special_shaped AS specialShaped,
op.is_sculpt AS profiling,
op.is_row_hole AS rowHole,
op.front_hole_count AS frontHoleCount,
op.back_hole_count AS backHoleCount,
op.side_hole_count AS sideHoleCount,
op.open_door_type AS openDoorType,
op.is_side_sculpt AS isSideSculpt,
op.is_2v AS is2v,
op.is_side_2v AS isSide2v,
op.split_width AS splitWidth,
op.split_height AS splitHeight,
op.seal_left AS sealLeft,
op.seal_right AS sealRight,
op.seal_up AS sealUp,
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
ON op.organ_id = ogs.organ_id
AND op.order_id = ogs.order_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
ON oi.organ_id = og.organ_id
AND oi.order_id = og.order_id
AND oi.group_id = og.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
LEFT JOIN order_component oc
ON oi.organ_id = oc.organ_id
AND oi.order_id = oc.order_id
AND oc.id = oi.comp_id
WHERE oi.plate_id != 0
GROUP BY room_id, body_id, oi.plate_id, oi.heap_split_status
) t ON t.plate_id = op.id
WHERE op.deleted = false
AND oi.comp_id = oc.id
WHERE
oi.plate_id != 0
AND op.deleted = false
AND op.order_id IN
<foreach item="orderId" collection="orderIds" open="(" separator="," close=")">
#{orderId}
</foreach>
order by plateId
</select>
<select id="selectLabelOrderPlateDataByOrderId"