补板完善;修改配件类型匹配,对应异形数量、弧形地脚;bug-826,bug-812修改

This commit is contained in:
lym
2024-12-05 18:03:21 +08:00
parent 4b6d958303
commit 1a935c91f8
11 changed files with 211 additions and 51 deletions
@@ -314,7 +314,7 @@ public class OrderController {
}else if (orderDO == null) {
mapOrder.put(customOrderNoKey, "生产单内为空");
flag = false;
} else if (orderDO.getCustomOrderNo() != null && !orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) {
} else if (index == 0 && orderDO.getCustomOrderNo() != null && !orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) {
mapOrder.put(customOrderNoKey, mapOrder.get(customOrderNoKey) + customOrderNoKey + "重复");
flag = false;
} else if ( excelReadUtil.isErr() > 0 ){
@@ -115,7 +115,7 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
return update(new LambdaUpdateWrapper<OrderDO>()
.set(OrderDO::getStatus, status)
.eq(OrderDO::getId, id)
.eq(OrderDO::getDeleted, 0)
// .eq(OrderDO::getDeleted, 0)
.eq(OrderDO::getOrganId, organId));
}
@@ -99,19 +99,12 @@ public interface OrderBodyMapper extends BaseMapperX<OrderBodyDO> {
}
default int selectNoDeletedBodyCount(Long orderId, Long organId ) {
default int selectBodyCountByDeleted(Long orderId, Long organId , Integer deleted) {
return Math.toIntExact(selectCount(new LambdaUpdateWrapper<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.eq(OrderBodyDO::getDeleted, false)));
}
default int selectDeletedBodyCount(Long orderId, Long organId ) {
return Math.toIntExact(selectCount(new LambdaUpdateWrapper<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.eq(OrderBodyDO::getDeleted, true)));
.eq(OrderBodyDO::getDeleted, deleted)));
}
@@ -130,4 +130,11 @@ public interface OrderGroupMapper extends BaseMapperX<OrderGroupDO> {
List<OrderGroupRespVO> selectPlanGroupDataSource(@Param("filed") String filed, @Param("field2") String field2 ,@Param("groupIds") List<Long> groupIds, @Param("organId") Long organId);
// 控制是否删除,进行查询
default List<OrderGroupDO> selectList(Long orderId, Integer deleted, Long organId) {
return selectList(new LambdaUpdateWrapper<OrderGroupDO>()
.eq(OrderGroupDO::getOrderId, orderId)
.eq(OrderGroupDO::getDeleted, deleted)
.eq(OrderGroupDO::getOrganId, organId));
}
}
@@ -66,9 +66,9 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
void updateDeletedById(@Param("partsIds") List<Long> partsIds, @Param("deleted") Integer deleted, @Param("organId") Long organId,@Param("orderId") Long orderId);
void updateDeletedParts(@Param("partsIds") List<Long> partsIds, @Param("orderId") Long orderId, @Param("organId") Long organId);
void updateDeletedParts(@Param("partsIds") List<Long> partsIds, @Param("organId") Long organId, @Param("orderId") Long orderId);
void updateNoDeletedParts(@Param("partsIds") List<Long> partsIds, @Param("orderId") Long orderId, @Param("organId") Long organId);
void updateNoDeletedParts(@Param("partsIds") List<Long> partsIds, @Param("organId") Long organId, @Param("orderId") Long orderId);
void deletedById(@Param("partsIds") List<Long> partsIds, @Param("organId") Long organId);
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.DeletedCodeEnum;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
@@ -70,6 +71,7 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -308,7 +310,7 @@ public class OrderServiceImpl implements OrderService {
}
int bodyCount = orderBodyMapper.selectNoDeletedBodyCount(orderId, getUserOrganId());
int bodyCount = orderBodyMapper.selectBodyCountByDeleted(orderId, getUserOrganId(), 0);
// 生产单柜体数量判断
if ( bodyCount == 0 ) {
@@ -365,10 +367,10 @@ public class OrderServiceImpl implements OrderService {
return;
}
int bodyCount = orderBodyMapper.selectDeletedBodyCount(orderId, getUserOrganId());
int bodyCount = orderBodyMapper.selectBodyCountByDeleted(orderId, getUserOrganId(), 0);
// 生产单柜体数量判断
if ( bodyCount == 0 ) {
if ( bodyCount != 0 ) {
orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId());
}
@@ -473,7 +475,7 @@ public class OrderServiceImpl implements OrderService {
List<PartsDO> partsDOList = getPartsGoods(partsDO);
if (index != 0) {
roomCabinetProcessGroupMatch(orderDO.getId(), bodyDO, itemDO);
roomCabinetProcessGroupMatch(orderDO.getId(), bodyDO, groupDO, itemDO);
if (Objects.equals(orderDO.getStatus(), OrderStatusEnum.EMPTY.getStatus())) {
orderDO.setStatus(OrderStatusEnum.NEW_ORDER.getStatus());
updateOrder(BeanUtils.toBean(orderDO, OrderSaveReqVO.class));
@@ -789,40 +791,175 @@ public class OrderServiceImpl implements OrderService {
}
// 房间、柜体、加工组匹配
public void roomCabinetProcessGroupMatch(Long orderId, List<OrderBodyDO> orderBodyList, List<OrderItemDO> orderItemDOList) {
Map<String, List<OrderBodyDO>> bodyMap = orderBodyList.stream().collect(Collectors.groupingBy(OrderBodyDO::getRoomName));
bodyMap.forEach((roomName, roomList) -> {
List<OrderBodyDO> sameBodyList = orderBodyMapper.selectByRoomName(orderId, roomName, OrganContextHolder.getOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus());
public void roomCabinetProcessGroupMatch(Long orderId, List<OrderBodyDO> orderBodyList, List<OrderGroupDO> orderGroupList, List<OrderItemDO> orderItemDOList) {
Map<String, List<OrderBodyDO>> roomMap = orderBodyList.stream().collect(Collectors.groupingBy(OrderBodyDO::getRoomName));
if (sameBodyList != null && sameBodyList.size() > 0) {
Long originalRoomId = roomList.get(0).getRoomId();
// 查询所有房间柜体
List<OrderBodyDO> orderBodyDOList = orderBodyMapper.selectList(orderId, DeletedCodeEnum.NOT_DELETED.getStatus(), OrganContextHolder.getOrganId());
Map<String, List<OrderBodyDO>> roomOriginalMap = orderBodyDOList.stream().collect(Collectors.groupingBy(OrderBodyDO::getRoomName));
// 查询所有的加工组
List<OrderGroupDO> orderGroupDOList = orderGroupMapper.selectList(orderId, DeletedCodeEnum.NOT_DELETED.getStatus(), OrganContextHolder.getOrganId());
Map<Long, Map<String, List<OrderGroupDO>>> groupOriginalMap = orderGroupDOList.stream().collect(Collectors.groupingBy(OrderGroupDO::getBodyId, Collectors.groupingBy(OrderGroupDO::getGroupTypeName)));
Long roomId = sameBodyList.get(0).getRoomId();
// 需要修改的柜体表
List<OrderBodyDO> updateBodyList = new ArrayList<>();
// 需要修改的加工组表
List<OrderGroupDO> updateGroupList = new ArrayList<>();
roomMap.forEach((roomName, roomList) -> {
// List<OrderBodyDO> sameOriginalRoomList = orderBodyMapper.selectByRoomName(orderId, roomName, OrganContextHolder.getOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus());
List<OrderBodyDO> sameOriginalRoomList = roomOriginalMap.get(roomName);
if (sameOriginalRoomList != null && sameOriginalRoomList.size() > 0) {
Long roomId = roomList.get(0).getRoomId();
Long OriginalRoomId = sameOriginalRoomList.get(0).getRoomId();
// 修改roomId orderBody中)
updateRoomIdInOrderBodies(orderBodyList, originalRoomId, roomId);
updateRoomIdInOrderBodies(orderBodyList, roomId, OriginalRoomId);
// 修改orderItem
updateRoomIdInOrderItems(orderItemDOList, originalRoomId, roomId);
updateRoomIdInOrderItems(orderItemDOList, roomId, OriginalRoomId);
Map<String, OrderBodyDO> bodyMap = roomList.stream()
.collect(Collectors.toMap(
OrderBodyDO::getName,
Function.identity()
)); // 新
sameOriginalRoomList.forEach(originalRoomBody -> {
if (bodyMap.containsKey(originalRoomBody.getName())) {
OrderBodyDO newRoomBody = bodyMap.get(originalRoomBody.getName());
Long originalBodyId = originalRoomBody.getId();
Long bodyId = bodyMap.get(originalRoomBody.getName()).getId();
int multiNum = originalRoomBody.getMultiNum() + newRoomBody.getMultiNum();
int plateNum = originalRoomBody.getPlateNum() + newRoomBody.getPlateNum();
int unregularNum = originalRoomBody.getUnregularNum() + newRoomBody.getUnregularNum();
updateBodyList.add(originalRoomBody.setMultiNum(multiNum).setPlateNum(plateNum).setUnregularNum(unregularNum));
// 新增去除
orderBodyList.remove(newRoomBody);
// 修改orderItem
updateBodyIdInOrderItems(orderItemDOList, bodyId, originalBodyId);
// 修改group, 相同body的条件下,修改bodyId
updateGroupIdInOrderGroups(orderGroupList, bodyId, originalBodyId);
}
});
}
});
// 需要存的
Map<Long, Map<String, List<OrderGroupDO>>> groupMap = orderGroupList.stream().collect(Collectors.groupingBy(OrderGroupDO::getBodyId, Collectors.groupingBy(OrderGroupDO::getGroupTypeName)));
groupMap.forEach((bodyId, groupMapByBodyIdMap) -> {
Map<String, List<OrderGroupDO>> groupOriginalMapByBodyId = groupOriginalMap.get(bodyId); //原来的
if (groupOriginalMapByBodyId == null) {
return;
}
groupOriginalMapByBodyId.forEach((groupTypeName, groupOriginalList) -> {
if (groupMapByBodyIdMap.containsKey(groupTypeName)) {
List<OrderGroupDO> groupMapByBodyIdList = groupMapByBodyIdMap.get(groupTypeName);
groupMapByBodyIdList.forEach(group -> {
Long groupTypeId = group.getGroupTypeId();
Long OriginalGroupTypeId = groupOriginalList.get(0).getGroupTypeId();
// 修改group表中的groupTypeId
updateGroupTypeIdInOrderGroups(orderGroupList, groupTypeId, OriginalGroupTypeId);
Map<String, OrderGroupDO> groupByGroupNameMap = groupMapByBodyIdList.stream().collect(Collectors.toMap(
OrderGroupDO::getName,
Function.identity()
)); // type相同的时候找name相同
groupOriginalList.forEach(originalGroup -> {
if (groupByGroupNameMap.containsKey(originalGroup.getName())) {
OrderGroupDO newGroup = groupByGroupNameMap.get(originalGroup.getName());
Long originalGroupId = originalGroup.getId();
Long groupId = newGroup.getId();
int multiNum = originalGroup.getMultiNum() + newGroup.getMultiNum();
int plateNum = originalGroup.getPlateNum() + newGroup.getPlateNum();
int unregularNum = originalGroup.getUnregularNum() + newGroup.getUnregularNum();
updateGroupList.add(originalGroup.setMultiNum(multiNum).setPlateNum(plateNum).setUnregularNum(unregularNum)); // 修改新增
// 新增去除
orderGroupList.remove(newGroup);
// item修改
updateGroupIdInOrderItems(orderItemDOList, groupId, originalGroupId);
}
});
});
}
});
});
// 批量更新
if (!updateBodyList.isEmpty()) {
orderBodyMapper.updateBatch(updateBodyList);
}
if (!updateGroupList.isEmpty()) {
orderGroupMapper.updateBatch(updateGroupList);
}
}
private void updateRoomIdInOrderBodies(List<OrderBodyDO> orderBodyList, Long originalRoomId, Long roomId) {
orderBodyList.forEach(room -> {
if (room.getRoomId().equals(originalRoomId)) {
room.setRoomId(roomId);
}
});
private void updateRoomIdInOrderBodies(List<OrderBodyDO> orderBodyList, Long roomId, Long originalRoomId) {
Map<Long, List<OrderBodyDO>> bodyMap = orderBodyList.stream().collect(Collectors.groupingBy(OrderBodyDO::getRoomId));
if (bodyMap.containsKey(roomId)) {
bodyMap.get(roomId).forEach(room -> {
room.setRoomId(originalRoomId);
});
}
}
private void updateRoomIdInOrderItems(List<OrderItemDO> orderItemDOList, Long originalRoomId, Long roomId) {
orderItemDOList.forEach(item -> {
if (item.getRoomId() != null && item.getRoomId().equals(originalRoomId)) {
item.setRoomId(roomId);
}
});
private void updateRoomIdInOrderItems(List<OrderItemDO> orderItemDOList, Long roomId, Long originalRoomId ) {
Map<Long, List<OrderItemDO>> itemMap = orderItemDOList.stream().collect(Collectors.groupingBy(OrderItemDO::getRoomId));
if (itemMap.containsKey(roomId)) {
itemMap.get(roomId).forEach(item -> {
item.setRoomId(originalRoomId);
});
}
}
private void updateBodyIdInOrderItems(List<OrderItemDO> orderItemDOList, Long bodyId , Long originalBodyId) {
Map<Long, List<OrderItemDO>> itemMap = orderItemDOList.stream().collect(Collectors.groupingBy(OrderItemDO::getBodyId));
if (itemMap.containsKey(bodyId)) {
itemMap.get(bodyId).forEach(item -> {
item.setBodyId(originalBodyId);
});
}
}
private void updateGroupIdInOrderGroups(List<OrderGroupDO> orderGroupDOList, Long bodyId , Long originalBodyId) {
Map<Long, List<OrderGroupDO>> groupMap = orderGroupDOList.stream().collect(Collectors.groupingBy(OrderGroupDO::getBodyId));
if (groupMap.containsKey(bodyId)) {
groupMap.get(bodyId).forEach(group -> {
group.setBodyId(originalBodyId);
});
}
}
private void updateGroupIdInOrderItems(List<OrderItemDO> orderItemDOList, Long groupId , Long originalGroupId) {
Map<Long, List<OrderItemDO>> itemMap = orderItemDOList.stream() .filter(item -> item.getGroupId() != null) // 过滤掉getGroupId为null的对象
.collect(Collectors.groupingBy(OrderItemDO::getGroupId));
if (itemMap.containsKey(groupId)) {
itemMap.get(groupId).forEach(item -> {
item.setGroupId(originalGroupId);
});
}
}
private void updateGroupTypeIdInOrderGroups(List<OrderGroupDO> orderGroupDOList, Long groupTypeId , Long originalGroupTypeId) {
Map<Long, List<OrderGroupDO>> itemMap = orderGroupDOList.stream().collect(Collectors.groupingBy(OrderGroupDO::getGroupTypeId));
if (itemMap.containsKey(groupTypeId)) {
itemMap.get(groupTypeId).forEach(item -> {
item.setGroupTypeId(originalGroupTypeId);
});
}
}
// 根据ype 与 orderId获取相关信息
@@ -80,6 +80,7 @@ public class PlateDetail{
// 偏移量
private BigDecimal offsetX;
private BigDecimal offsetY;
private Boolean isHXDJX; // 是否弧形地脚
// 大板基本信息
// private BoardInfo boardInfo;
@@ -310,7 +310,7 @@ public class ApiTypeRealize {
.orderId(orderId)
.bodyId(bodyInfoChange.get(group.getLong(ProduceApiConstants.M_BOX_ID)).getId())//group.getLong("BoxID")
.groupTypeId(group.getLong(ProduceApiConstants.M_MODULE_TYPE_ID))
.groupTypeName("")
.groupTypeName(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME))
.name(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME))
.width(group.getDouble(ProduceApiConstants.M_WIDTH))
.height(group.getDouble(ProduceApiConstants.M_LENGTH))
@@ -569,6 +569,18 @@ public class ApiTypeRealize {
return goodsSn;
}
// 配件类型转换
private String changePartType(String objectType, boolean isComposite) {
if (PART_CATEGORY_ONE.equals(objectType)) {
return PART_CATEGORY_ONE;
} else {
if (isComposite) {
return PART_CATEGORY_THREE;
} else {
return PART_CATEGORY_TWO;
}
}
}
/**
* 配件信息转存
*
@@ -627,7 +639,7 @@ public class ApiTypeRealize {
// .material(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null
// ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getMaterial() : ""))
.material((String) sizeMap.get(PART_MATERIAL))
.type(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE))
.type(changePartType(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE), parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE)))
.model(parts.getString(ProduceApiConstants.PD_MODEL))
.color((String) sizeMap.get(PART_COLOR))
.width((Double) sizeMap.get(PART_WIDTH))
@@ -726,6 +738,11 @@ public class ApiTypeRealize {
Map<Long, PlateDO> platesInfos = new HashMap<>();
Map<Long, OrderItemDO> platesItem = new HashMap<>();
map.put("platesInfos", platesInfos);
map.put("platesItems", platesItem);
map.put("plateDetail", plateDetail);
map.put("bodyInfos", bodyInfos);
if (dataPlates == null || dataPlates.isEmpty()) {
return map;
}
@@ -762,7 +779,7 @@ public class ApiTypeRealize {
.sealUp(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_UP)))
.sealDown(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_DOWN)))
.holeArrange(0) // 排孔类型 值无实际含义,默认初始化值
.unregularPointCount(0)// 异形孔个数 值无实际含义,默认初始化值
.unregularPointCount(plate.getInteger(ProduceApiConstants.BD_UN_REGULAR_POINT_COUNT))//
.frontHoleCount(plate.getInteger(ProduceApiConstants.BD_FRONT_HOLE_COUNT))
.sideHoleCount(plate.getInteger(ProduceApiConstants.BD_BACK_HOLE_COUNT))
.sideHoleCount(plate.getInteger(ProduceApiConstants.BD_SIDE_HOLE_COUNT))
@@ -889,10 +906,7 @@ public class ApiTypeRealize {
NUM.set(0);
specialShapedNum.set(0);
});
map.put("platesInfos", platesInfos);
map.put("platesItems", platesItem);
map.put("plateDetail", plateDetail);
map.put("bodyInfos", bodyInfos);
return map;
}
@@ -981,6 +995,7 @@ public class ApiTypeRealize {
.sideHoleDetail(getHoleDetail(block, false))
.contourDetail(getModelDetail(block.getJSONArray(ProduceApiConstants.BPD_MODEL)))
.sideDetail(getModelDetail(block.getJSONArray(ProduceApiConstants.BPD_SIDE_MODEL)))
.isHXDJX(block.getBoolean(ProduceApiConstants.BPD_IS_HXDJ))
.build();
if (block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK) != null) {
@@ -233,6 +233,7 @@ public class ProduceApiConstants {
public static final String BPD_IS_UN_REGULAR = "IsUnRegular"; // 是否异形
public static final String BPD_OFFSET_X = "OffsetX"; // 开料轮廓,成品轮廓 偏移量X
public static final String BPD_OFFSET_Y = "OffsetY"; // 开料轮廓,成品轮廓 偏移量y
public static final String BPD_IS_HXDJ = "IsHXDJX";// 是否孤形地脚
public static final String BPD_POINTS = "Points"; // 异形板的开料轮廓 (不含封边)
public static final String BPD_ORG_POINTS = "OrgPoints"; // 异形板的成品轮廓 (含封边)
@@ -190,7 +190,7 @@ public class XmlTypeRealize {
.orderId(orderId)
.bodyId(0L)
.groupTypeId(0L)
.groupTypeId(0L)
.groupTypeName(NOT_ASSIGNED)
.name(groupXmlVO.getName())
.height(Double.parseDouble(groupXmlVO.getHeight()))
.width(Double.parseDouble(groupXmlVO.getWidth()))
@@ -433,8 +433,13 @@ public class XmlTypeRealize {
}
// id得到
private Map<String, Long> getId(PositionVO positionVO, Map<String, Map<String, OrderBodyDO>> roomInfos, Map<String, OrderGroupDO> groupInfos,
Double plateNum, Double unregularNum, Long orderId, Long organId) {
private Map<String, Long> getId(PositionVO positionVO,
Map<String, Map<String, OrderBodyDO>> roomInfos,
Map<String, OrderGroupDO> groupInfos,
Double plateNum,
Double unregularNum,
Long orderId,
Long organId) {
Map<String, Long> map = new HashMap<>();
OrderGroupDO orderGroupDO;
@@ -477,7 +482,7 @@ public class XmlTypeRealize {
|| (positionVO.getGroupName() != null && !positionVO.getGroupName().isEmpty())) {
orderGroupDO = groupInfos.get(positionVO.getGroupCode());
if (orderGroupDO != null) {
orderGroupDO.setBodyId(bodyId).setPlateNum((int) (orderGroupDO.getPlateNum() + plateNum))
orderGroupDO.setBodyId(bodyId).setGroupTypeId(bodyId).setPlateNum((int) (orderGroupDO.getPlateNum() + plateNum))
.setUnregularNum((int) (orderGroupDO.getUnregularNum() + unregularNum));
} else {
orderGroupDO = OrderGroupDO.builder()
@@ -485,6 +490,7 @@ public class XmlTypeRealize {
.organId(organId)
.orderId(orderId)
.bodyId(bodyId)
.groupTypeId(bodyId)
.name(positionVO.getGroupName())
.width(0.0)
.height(0.0)