未排单,排单管理Sonar代码检查问题修改

This commit is contained in:
liuzhaotian
2024-10-22 17:09:10 +08:00
parent f191dc5759
commit 603bd88469
22 changed files with 619 additions and 585 deletions
@@ -3,6 +3,7 @@ package com.cf.imes.module.executor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @author there
*/
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true) // add config
@EnableFeignClients
@EnableAsync
@EnableScheduling //开启定时任务
@@ -63,7 +63,7 @@ public class OptimizePlanController {
})
@PreAuthorize("@ss.hasPermission('placeorder:optimize')")
public CommonResult<Boolean> commit(@RequestParam("planId") @NotNull(message = "排单ID不能为空") Long planId,
@RequestParam("goodsNo") @NotEmpty(message = "开料大板编号不能为空") List<Long> goodsNo) {
@RequestParam("goodsNo") @NotEmpty(message = "排单异常,请重新优化或重新进入排单") List<Long> goodsNo) {
return CommonResult.success(optimizePlanService.commit(planId,goodsNo));
}
@@ -80,7 +80,8 @@ public class OptimizePlanController {
@Operation(summary = "修改开料状态")
@PreAuthorize("@ss.hasPermission('placeorder:optimize:updateCuttingStatus')")
public CommonResult<Boolean> updateCuttingStatus(@RequestBody CuttingStatusRespVO respVO) {
return success(optimizePlanService.updateCuttingStatus(respVO));
optimizePlanService.updateCuttingStatus(respVO);
return success(Boolean.TRUE);
}
@@ -12,9 +12,6 @@ import java.util.List;
public class SavePlanPlateResultReqVO {
// @Schema(description = "优化后的生产单数据", requiredMode = Schema.RequiredMode.REQUIRED)
// private List<OrderDO> orderList;
@Schema(description = "优化后的大板列表数据", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -28,20 +25,4 @@ public class SavePlanPlateResultReqVO {
// @Schema(description = "优化后的小板列表数据", requiredMode = Schema.RequiredMode.REQUIRED)
// private List<PlateDetialRespVO> plateList;
//
//
//
// @Schema(description = "优化后新增的小板ID")
// private List<Long> addPlateIds;
//
//
//
// @Schema(description = "优化后删除的小板ID")
// private List<Long> deletePlateIds;
}
@@ -8,7 +8,6 @@ import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author Beal
@@ -232,8 +231,8 @@ public class PlateRespVO extends PageParam {
@Schema(description = "小板详情列表")
private List<PlateDetailVO> plateDetailList;
// @Schema(description = "小板详情列表")
// private List<PlateDetailVO> plateDetailList;
}
@@ -75,7 +75,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
// 删板材,批量
void updateDeletedById(@Param("orderId") Long orderId,@Param("ids") List<Long> ids, @Param("deleted") Integer deleted, @Param("organId") Long organId);
void updateDeletedById(@Param("orderId") Long orderId,@Param("ids") List<Long> ids , @Param("organId") Long organId);
void deletedById(@Param("ids") List<Long> ids, @Param("organId") Long organId);
@@ -104,8 +104,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
// List<GoodsDO> seleTestSQL(@Param("sql") String sql);
@@ -122,8 +122,8 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
// 查询单个生产单
default OrderDO selectOrderOne(Long id, Long organId) {
return selectOne(new LambdaQueryWrapper<OrderDO>()
.eq(OrderDO::getId, id)
.eq(OrderDO::getOrganId, organId));
.eq(OrderDO::getOrganId, organId)
.eq(OrderDO::getId, id));
}
// 删除状态为条件,查询生产单
@@ -13,7 +13,6 @@ import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 生产单柜体 Mapper
@@ -54,6 +53,25 @@ public interface OrderBodyMapper extends BaseMapperX<OrderBodyDO> {
.eq(OrderBodyDO::getOrderId, orderId));
}
default int updateDeletedBody(Collection<Long> ids , Long organId, Long orderId) {
return update(new LambdaUpdateWrapper<OrderBodyDO>()
.set(OrderBodyDO::getDeleted, true)
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.in(OrderBodyDO::getId, ids));
}
default int updateNoDeletedBody(Collection<Long> ids , Long organId, Long orderId) {
return update(new LambdaUpdateWrapper<OrderBodyDO>()
.set(OrderBodyDO::getDeleted, false)
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.in(OrderBodyDO::getId, ids));
}
default int deletedByOrderId(Long orderId, Long organId) {
return delete(new LambdaUpdateWrapper<OrderBodyDO>()
.eq(OrderBodyDO::getOrderId, orderId)
@@ -80,6 +98,24 @@ public interface OrderBodyMapper extends BaseMapperX<OrderBodyDO> {
.eq(OrderBodyDO::getOrganId, organId)));
}
default int selectNoDeletedBodyCount(Long orderId, Long organId ) {
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)));
}
// 按照房间名称查询
default List<OrderBodyDO> selectByRoomName(Long orderId, String roomName,
Long organId, Integer deleted) {
@@ -110,9 +146,36 @@ public interface OrderBodyMapper extends BaseMapperX<OrderBodyDO> {
.eq(OrderBodyDO::getDeleted, deleted)
.select(OrderBodyDO::getId)).stream()
.map(OrderBodyDO::getId)
.collect(Collectors.toList());
.toList();
}
default List<Long> selectNoDeletedBodyId(Long orderId, Set<Long> roomIds, Long organId) {
return selectList(new LambdaQueryWrapper<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.in(OrderBodyDO::getRoomId, roomIds)
.eq(OrderBodyDO::getDeleted, false)
.select(OrderBodyDO::getId)).stream()
.map(OrderBodyDO::getId)
.toList();
}
default List<Long> selectDeletedBodyId(Long orderId, Set<Long> roomIds, Long organId) {
return selectList(new LambdaQueryWrapper<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getOrderId, orderId)
.in(OrderBodyDO::getRoomId, roomIds)
.eq(OrderBodyDO::getDeleted, true)
.select(OrderBodyDO::getId)).stream()
.map(OrderBodyDO::getId)
.toList();
}
// 根据生产单进行删除
default int deleteByOrderId(Long orderId, Long organId) {
return delete(new LambdaQueryWrapperX<OrderBodyDO>()
@@ -48,6 +48,26 @@ public interface OrderGroupMapper extends BaseMapperX<OrderGroupDO> {
return 0;
}
default int updateDeletedGroup(Collection<Long> bodyIds , Long organId, Long orderId) {
return update(new LambdaUpdateWrapper<OrderGroupDO>()
.set(OrderGroupDO::getDeleted, true)
.eq(OrderGroupDO::getOrganId, organId)
.eq(OrderGroupDO::getOrderId, orderId)
.in(OrderGroupDO::getBodyId, bodyIds));
}
default int updateNoDeletedGroup(Collection<Long> bodyIds , Long organId, Long orderId) {
return update(new LambdaUpdateWrapper<OrderGroupDO>()
.set(OrderGroupDO::getDeleted, false)
.eq(OrderGroupDO::getOrganId, organId)
.eq(OrderGroupDO::getOrderId, orderId)
.in(OrderGroupDO::getBodyId, bodyIds));
}
default int deletedById(Long id, Long organId) {
return delete(new LambdaUpdateWrapper<OrderGroupDO>()
.eq(OrderGroupDO::getBodyId, id)
@@ -64,7 +64,13 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
return update(wrapper);
}
void updateDeletedById(@Param("partsIds") List<Long> partsIds, @Param("deleted") Integer deleted, @Param("organId") Long organId);
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 updateNoDeletedParts(@Param("partsIds") List<Long> partsIds, @Param("orderId") Long orderId, @Param("organId") Long organId);
void deletedById(@Param("partsIds") List<Long> partsIds, @Param("organId") Long organId);
List<PrintOrderPartsRespVO> selectPartList( @Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
@@ -104,6 +104,11 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
void updateDeletedById(@Param("plateIds") List<Long> plateIds, @Param("deleted") Integer deleted, @Param("organId") Long organId, @Param("orderId") Long orderId);
void updateDeletedPlate(@Param("plateIds") List<Long> plateIds, @Param("organId") Long organId, @Param("orderId") Long orderId);
void updateNoDeletedPlate(@Param("plateIds") List<Long> plateIds, @Param("organId") Long organId, @Param("orderId") Long orderId);
int countPlateByOrderId(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("deleted") Integer deleted);
@@ -149,7 +154,11 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
List<PlateDO> selectPlateTypeByRoomId(@Param("orderId") Long orderId, @Param("bodyIds") Collection<Long> bodyIds,
@Param("organId") Long organId, @Param("deleted") Integer deleted);
// 根据生产单id删除
List<PlateDO> selectNoDeletedPlate(@Param("orderId") Long orderId, @Param("bodyIds") Collection<Long> bodyIds,@Param("organId") Long organId);
List<PlateDO> selectDeletedPlate(@Param("orderId") Long orderId, @Param("bodyIds") Collection<Long> bodyIds,@Param("organId") Long organId);
// 根据生产单id删除
default int deleteByOrderId(Long orderId, Long organId) {
return delete(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId, organId)
@@ -30,7 +30,7 @@ public interface OptimizePlanService {
Boolean commit(Long planId, List<Long> goodsNo);
Boolean updateCuttingStatus(CuttingStatusRespVO respVO);
void updateCuttingStatus(CuttingStatusRespVO respVO);
Boolean endCutting(Long planId);
@@ -1,8 +1,6 @@
package com.cf.imes.module.executor.service.optimizeplan;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
@@ -43,7 +41,6 @@ import com.cf.imes.module.system.api.dataSource.DataSourceApi;
import com.cf.imes.module.system.api.machine.MachineApi;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -52,12 +49,11 @@ import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.*;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.json.JsonUtils.parseObject;
import static com.cf.imes.framework.common.util.json.JsonUtils.parseTree;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS;
@@ -91,7 +87,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Resource
private ElasticsearchClient elasticsearchClient;
private Snowflake snowflake = IdUtil.getSnowflake();
@Resource
private MachineApi machineApi;
@@ -111,6 +106,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
private static final String FIELD_ORDER_ID = "orderId";
private static final String FIELD_PLAN_ID = "planId";
private static final String ES_SELECT_DATA_ERROR = "优化生产ES文档查询异常: ";
@Override
public List<PlateOptimize> getPlateListByPlanId(Long planId) {
return planMapper.selectPlateListByPlanId(planId,getUserOrganId());
@@ -146,7 +143,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
// todo 目前只解决了非混单的情况,混单情况待解决
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10);
@@ -154,10 +150,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
if(!optimizeBoardModelDO.getIsOptimized()){
throw exception(ORDER_PLAN_NO_OPTIMIZE_ERROR);
Boolean isOptimized = optimizeBoardModelDO.getIsOptimized();
if(Boolean.FALSE.equals(isOptimized)){
throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR);
}
@@ -166,30 +162,30 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 创建一个列表存储 BlockPlaceInfo 对象,将优化的小板信息拿出,获取到小板编号,查询生产单,修改生产单的状态
List<BlockPlaceInfo> outputList = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper();
String blockPlaceInfo = optimizeBoardModelDO.getBlockPlaceInfo();
try {
// 解析 JSON 字符串
JsonNode jsonArray = mapper.readTree(optimizeBoardModelDO.getBlockPlaceInfo());
AssertUtils.notEmpty(blockPlaceInfo, ORDER_PLAN_OPTIMIZE_ERROR);
// 遍历 JSON 数组并提取所需字段
if (jsonArray.isArray()) {
for (JsonNode jsonNode : jsonArray) {
Long bi = jsonNode.get("bi").asLong();
String bo = jsonNode.get("bo").asText();
outputList.add(new BlockPlaceInfo(bi,bo));
}
}
} catch (Exception e) {
JsonNode jsonArray = parseTree(blockPlaceInfo);
boolean isArray = jsonArray.isArray();
if (Boolean.FALSE.equals(isArray)) {
throw exception(ORDER_PLAN_OPTIMIZE_ERROR);
}
for (JsonNode jsonNode : jsonArray) {
Long bi = jsonNode.get("bi").asLong();
String bo = jsonNode.get("bo").asText();
outputList.add(new BlockPlaceInfo(bi,bo));
}
for (Long goods : goodsNo) {
plateNo.addAll(outputList.stream().filter(f -> f.getBi().equals(goods)).map(BlockPlaceInfo::getBo).distinct().toList());
}
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(plateNo.stream().distinct().toList(), getUserOrganId());
@@ -200,22 +196,22 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId());
CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo();
CutedBoardInfo cutedBoardInfo = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new CutedBoardInfo());
// 获取原排单的开料大板数 + 新增的开料大板数
// 获取原排单的已开料的大板编号
List<Long> cutedBoardList = cutedBoardInfo.getCutedBoardList() == null ? new ArrayList<>() : cutedBoardInfo.getCutedBoardList();
List<Long> cutedBoardList = Optional.ofNullable(cutedBoardInfo.getCutedBoardList()).orElseGet(ArrayList::new);
goodsNo.addAll(cutedBoardList);
// 将新开料的大板编号添加到已开料的大板编号中
cutedBoardList.addAll(Stream.concat(
cutedBoardList.stream().filter(str -> !goodsNo.contains(str)),
goodsNo.stream().filter(str -> !cutedBoardList.contains(str)))
.toList());
// 将开料的大板编号和已经开料的大板编号进行去重,相同去除,不同新增
goodsNo.forEach(item -> {
if (!cutedBoardList.contains(item)) {
cutedBoardList.add(item);
}
});
long cutedBoardNumber = cutedBoardList.size();
@@ -251,18 +247,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
planMapper.updateById(planDO);
List<Long> deleteOrderIds = goodsMapper.selectNoPlanOrdersListByOrderIds(orderIds, getUserOrganId()).stream().map(GoodsDO::getOrderId).distinct().toList();
orderIds.removeAll(deleteOrderIds);
if(!orderIds.isEmpty()) {
if(ObjectUtil.isNotEmpty(orderIds)) {
List<Long> orderIdList = goodsMapper.selectOrderPlanList(orderIds, getUserOrganId());
List<OrderDO> orderDOS = orderMapper.selectOrderPackList(orderIdList, getUserOrganId());
if (!orderDOS.isEmpty()) {
if (ObjectUtil.isNotEmpty(orderDOS)) {
List<OrderDO> orderDOList = orderDOS.stream().map(m -> m.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus())).toList();
orderMapper.updateBatch(orderDOList);
}
@@ -278,13 +273,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateCuttingStatus(CuttingStatusRespVO respVO) {
public void updateCuttingStatus(CuttingStatusRespVO respVO) {
Long planId = respVO.getPlanId();
List<Long> goodsNo = respVO.getGoodsNo();
if(goodsNo.isEmpty()){
return true;
return;
}
PlanDO planDO = planMapper.selectById(planId);
@@ -298,14 +293,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
if(!optimizeBoardModelDO.getIsOptimized()){
Boolean isOptimized = optimizeBoardModelDO.getIsOptimized();
if(Boolean.FALSE.equals(isOptimized)){
throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR);
}
CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo();
CutedBoardInfo cutedBoardInfo = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new CutedBoardInfo());
if(cutedBoardInfo.getCutedBoardNumber() != null) {
@@ -316,8 +313,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 移除取消开料的数据
cutedBoardList.removeAll(goodsNo);
// 减去取消开料的大板数量
cutedBoardNumber -= (goodsNo.isEmpty() ? 0 : goodsNo.size());
cutedBoardNumber -= goodsNo.size();
// 将需要更新更新的数据更新到原数据中
@@ -354,14 +352,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.toList());
}
return Boolean.TRUE;
return;
}
// if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) && cutedBoardInfo.getCutedBoardNumber() > 0 && cutedBoardInfo.getCutedBoardNumber() < optimizeBoardModelDO.getBoardCount() ){
//
// planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(),getUserOrganId());
// }
planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(),getUserOrganId());
@@ -389,57 +383,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// todo 待确认,是否要达到这样的需求 : 生产单的状态也应该更改,如果大板变为未开料,生产单对应的状态应该变为已排单(这时取消开料对应的大板对应的生产单应该在其他排单中不存在,可修改)
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean endCutting(Long planId) {
// 目前结束开料已去掉,所以这些代码先注释,后面如果加再修改逻辑
//
// PlanDO planDO = planMapper.selectById(planId);
// if (Objects.isNull(planDO)) {
// throw exception(PLAN_NOT_EXISTS);
// }
// planMapper.updateById(PlanDO.builder()
// .id(planId)
// .status(PlanStatusEnum.OPENED.getStatus())
// .produceTime(LocalDateTime.now())
// .build());
//
// LoginUser loginUser = getLoginUser();
// List<ProcessDTO> userProcess = processApi.getUserProcess(loginUser.getId());
//
// if(!userProcess.isEmpty()) {
//
// List<Long> processStepIds = new ArrayList<>();
//
// List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
//
// List<ProcessStepDO> processStepDOS = processStepMapper.selectOrderList(orderIds, getUserOrganId());
//
//
// for (ProcessDTO process : userProcess) {
// processStepIds.addAll(processStepDOS.stream().filter(f -> Objects.equals(f.getProcessinfoId(), process.getId()))
// .map(ProcessStepDO::getId).toList());
// }
//
//
// if(!processStepIds.isEmpty()) {
//
// List<ProcessStepSalaryIds> processStepSalaryIds = calculateSalary(processStepIds);
//
// // 修改生产明细表和步骤表的工序状态
// processStepMapper.updateStatus(processStepSalaryIds, loginUser.getNickname());
//
// processStepItemMapper.updateStatus(processStepIds);
//
// }
//
// }
return Boolean.TRUE;
@@ -455,9 +404,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 计算当前工序的工资金额
List<ProcessStepSalaryIds> salary = processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId());
return salary;
return processStepMapper.calculateSalary(processStepAreaIds,getUserOrganId());
}
@@ -504,9 +451,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
public OrderSource getOrderSourceByOrderId(Long orderId) {
OrderDO orderDO = orderMapper.selectById(orderId);
// if (Objects.isNull(orderDO)) {
// throw exception(ORDER_NOT_EXISTS);
// }
AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS);
@@ -519,16 +463,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(plateDOS,ORDER_PLATE_ERROR);
for (PlateDetialRespVO plateDetailsRespVO : plateDOS) {
String name = "";
StringBuilder name = new StringBuilder();
if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) {
for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) {
// 去除最后的逗号
name += groupNameList.getGroupName() + ",";
name.append(groupNameList.getGroupName()).append(",");
}
name = name.substring(0, name.length() - 1);
name = new StringBuilder(name.substring(0, name.length() - 1));
}
plateDetailsRespVO.setProcessGroupName(name);
plateDetailsRespVO.setProcessGroupName(name.toString());
}
@@ -586,9 +530,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
public OrderSource getOrderSourceByPlanId(Long planId) {
PlanDO planDO = planMapper.selectById(planId);
// if (Objects.isNull(planDO)) {
// throw exception(PLAN_NOT_EXISTS);
// }
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
@@ -607,16 +548,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(plateDetialRespVOS,ORDER_PLAN_PLATE_ERROR);
for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) {
String name = "";
StringBuilder name = new StringBuilder();
if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) {
for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) {
// 去除最后的逗号
name += groupNameList.getGroupName() + ",";
name.append(groupNameList.getGroupName()).append(",");
}
name = name.substring(0, name.length() - 1);
name = new StringBuilder(name.substring(0, name.length() - 1));
}
plateDetailsRespVO.setProcessGroupName(name);
plateDetailsRespVO.setProcessGroupName(name.toString());
}
@@ -704,17 +645,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) {
String name = "";
StringBuilder name = new StringBuilder();
if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) {
for (ProcessGroupList groupNameList : plateDetailsRespVO.getProcessGroupLists()) {
// 去除最后的逗号
name += groupNameList.getGroupName() + ",";
name.append(groupNameList.getGroupName()).append(",");
}
name = name.substring(0, name.length() - 1);
name = new StringBuilder(name.substring(0, name.length() - 1));
}
plateDetailsRespVO.setProcessGroupName(name);
plateDetailsRespVO.setProcessGroupName(name.toString());
}
@@ -743,13 +684,21 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Transactional(rollbackFor = Exception.class)
public void saveOptimizationResults(SavePlanPlateResultReqVO req) {
AssertUtils.notEmpty(req.getOptimizeBoardModelDOS(),ORDER_PLAN_OPTIMIZE_ERROR);
// 先根据排单查找是否有优化数据,如果有,删除
List<Long> planIds = req.getOptimizeBoardModelDOS().stream().map(OptimizeBoardModelDO::getPlanId).toList();
List<Long> planIds = req.getOptimizeBoardModelDOS().stream().map(OptimizeBoardModelDO::getPlanId).distinct().toList();
// todo 目前只解决非混单的情况下,
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, planIds.size());
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
AssertUtils.notEmpty(goodsDOS,CREATE_PLAN_DATA_ERROR);
List<Long> ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList();
List<Long> orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList();
List<String> goodsIds = goodsDOS.stream().map(GoodsDO::getGoodsId).distinct().toList();
// todo 目前只解决非混单的情况下 (目前已解决混单的情况,数据正确性待校验)
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, goodsIds.size());
if(!optimizeBoardModelDOS.isEmpty()){
deleteByPlanId(planIds,ORDER_REMAIN_PLATE_MODEL);
@@ -759,86 +708,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 保存优化后的大板数据
batchSaveBoardModel(req.getOptimizeBoardModelDOS());
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
List<Long> ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList();
List<Long> orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList();
plateMapper.updatePlateOptimized(orderIds,ids,getUserOrganId());
// // 保存余料板的数据
// if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) {
//
// List<RemainPlateDO> remainPlateDoS = BeanUtils.toBean(req.getOptimizeRemainPlates(), RemainPlateDO.class)
// .stream()
// .map(m -> m.setUseType(1))
// .map(m -> m.setOutLineJson("")).toList();
//
//
// List<RemainPlateDO> insertPlateDoS = remainPlateDoS.stream().filter(f -> f.getId() == null).toList();
//
// List<RemainPlateDO> updatePlateDoS = remainPlateDoS.stream().filter(f -> f.getId() != null).toList();
//
// Boolean aBoolean = insertPlateDoS.isEmpty() ? null : remainPlateMapper.insertBatch(insertPlateDoS);
//
// Boolean bBoolean = updatePlateDoS.isEmpty() ? null : remainPlateMapper.updateBatch(updatePlateDoS);
//
//
// }
// 有新增小板,往数据库新增小板
// todo 目前新增小板在界面就已经走接口了,这个逻辑应该用不到了
// if (CollectionUtil.isNotEmpty(req.getAddPlateIds())) {
//
// List<PlateDetialRespVO> addPlates = req.getPlateList().stream()
// .filter(m -> req.getAddPlateIds().contains(m.getPlateId()))
// .map(m -> m.setPlateId(null))
// .collect(Collectors.toList());
//
// // 批量新增小板信息
// List<PlateDO> plateDOS = BeanUtils.toBean(addPlates, PlateDO.class);
//
// plateMapper.insertBatch(plateDOS);
//
// // 批量新增生产单明细表信息
// ArrayList<OrderItemDO> orderItemDOS = new ArrayList<>();
//
// for (PlateDetialRespVO plateDetialRespVO : req.getPlateList()) {
// orderItemDOS.add(OrderItemDO.builder()
//// .id(plateDetialRespVO.getItemId())
// .bodyId(plateDetialRespVO.getBodyId())
// .roomId(plateDetialRespVO.getRoomId())
//// .groupId(Long.valueOf(plateDetialRespVO.getProcessGroupId()))
// .orderId(plateDetialRespVO.getOrderId())
// .type(1)
// .plateId(plateDetialRespVO.getPlateId())
// .build());
// }
//
//
// orderItemMapper.insertBatch(orderItemDOS);
//
// }
//
// // 有删除的小板ID,删除小板
// if (CollectionUtil.isNotEmpty(req.getDeletePlateIds())) {
//
// // 删除生产单板件表的小板
// plateMapper.deleteBatchIds(req.getDeletePlateIds());
//
// // 删除生产单明细表中对应的小板数据
// orderItemMapper.deleteByPlateId(req.getDeletePlateIds());
//
//
// }
}
@Override
@@ -847,7 +721,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<PlateDO> plateDOS = plateMapper.selectPlateNum(orderId, getUserOrganId());
if(plateDOS.isEmpty()){
return null;
return new ArrayList<>();
}
return buildRespByOrderId(orderId, plateDOS.size());
@@ -865,7 +739,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
List<Hit<OrderModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
@@ -883,7 +757,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
List<Hit<OrderModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
@@ -898,7 +772,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
*
* @param optimizeBoardModelDOS
*/
@Transactional(rollbackFor = Exception.class)
public void batchSaveBoardModel(List<OptimizeBoardModelDO> optimizeBoardModelDOS) {
try {
BulkResponse bulkResponse = esDocumentService.bulkCreate(ORDER_REMAIN_PLATE_MODEL, optimizeBoardModelDOS);
@@ -925,11 +798,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
log.error("优化生产ES文档查询异常: "+e.getMessage());
log.error(ES_SELECT_DATA_ERROR+e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
}
@@ -944,11 +817,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
log.error("优化生产ES文档查询异常: "+e.getMessage());
log.error(ES_SELECT_DATA_ERROR+e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
}
@@ -965,11 +838,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
log.error("优化生产ES文档查询异常: "+e.getMessage());
log.error(ES_SELECT_DATA_ERROR+e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
}
@@ -985,11 +858,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
log.error("优化生产ES文档查询异常: "+e.getMessage());
log.error(ES_SELECT_DATA_ERROR+e.getMessage());
throw new ServiceException(DATA_DATA_ERROR);
}
}
@@ -1005,7 +878,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
SearchResponse<OrderPartsRemark> search = elasticsearchClient.search(builder.build(), OrderPartsRemark.class);
List<Hit<OrderPartsRemark>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
@@ -56,6 +56,7 @@ import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataA
import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize;
import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.ExcelTypeRealize;
import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlTypeRealize;
import org.springframework.aop.framework.AopContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
@@ -261,202 +262,97 @@ public class OrderServiceImpl implements OrderService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDeleteBody(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
// 判断生产单的状态和生产单柜体对应的板擦是否已开料
List<Long> planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId());
List<Long> bodyIds = new ArrayList<>();
Integer index = status == 1 ? 0 : 1;
if (roomIds != null && roomIds.size() != 0) {
bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index);
} else if (bodyId != null && bodyId != 0) {
validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index);
bodyIds.add(bodyId);
}
if (bodyIds.size() != 0){
List<PlateDO> plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index);
List<Long> bodyIds = validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds, OrderDeletedEnum.NOT_DELETED.getStatus());
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
if (!bodyIds.isEmpty()){
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
// List<Long> groupIds = orderGroupMapper.selectListByBodyId(bodyIds, orderId, getUserOrganId(), index);
orderBodyMapper.updateDeletedBody(bodyIds, getUserOrganId(), orderId);// 柜体
orderGroupMapper.updateDeletedGroup(bodyIds, getUserOrganId(), orderId);// 加工组
List<PlateDO> plateDOList = plateMapper.selectNoDeletedPlate(orderId, bodyIds, getUserOrganId());
orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体
orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);// 删小板
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
// 删除小板,大板,包裹,排单信息
OrderServiceImpl o = (OrderServiceImpl) AopContext.currentProxy();
o.updateDeletePlate(plateDOList, orderId, bodyIds, planIds);
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId, getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
if (orderPackageDOS.isEmpty()) {
OrderDO orderDO = orderMapper.selectById(orderId);
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderMapper.updateById(orderDO);
}
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(orderId,goodsIdDeleted, status, getUserOrganId());
}
if (!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
// 一样,同时删除排单的信息
if (goodsDOS.isEmpty()) {
planService.deletePlan(planIds);
} else {
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
}
}
// 删除配件信息
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
if (!partsList.isEmpty()){
orderPartsMapper.updateDeletedParts(partsList, getUserOrganId(),orderId);
}
}
int bodyCount = orderBodyMapper.selectNoDeletedBodyCount(orderId, getUserOrganId());
// 生产单柜体数量判断
if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0 ) {
if ( bodyCount == 0 ) {
orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), getUserOrganId());
}else {
orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRestoreBody(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
// 校验存在
OrderDO orderDO = orderMapper.selectOrderOne(orderId, getUserOrganId());
if (orderDO == null)
throw exception(ORDER_NOT_EXISTS);
List<Long> bodyIds = new ArrayList<>();
Integer index = status == 1 ? 0 : 1;
AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS);
if (roomIds != null && roomIds.size() != 0) {
bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index);
} else if (bodyId != null && bodyId != 0) {
validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index);
bodyIds.add(bodyId);
}
// List<Long> bodyIds = new ArrayList<>();
//
// Integer index = status == 1 ? 0 : 1;
//
// if (roomIds != null && !roomIds.isEmpty()) {
// bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index);
// } else if (bodyId != null && bodyId != 0) {
// validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds,index);
// bodyIds.add(bodyId);
// }
if (bodyIds.size() != 0){
List<Long> bodyIds = validateOrderBodyExists(orderId, bodyId, getUserOrganId(), roomIds, OrderDeletedEnum.DELETED.getStatus());
List<PlateDO> plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index);
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
if (!bodyIds.isEmpty()){
orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体
orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组
orderBodyMapper.updateNoDeletedBody(bodyIds, getUserOrganId(), orderId);// 柜体
orderGroupMapper.updateNoDeletedGroup(bodyIds, getUserOrganId(), orderId);// 加工组
List<PlateDO> plateDOList = plateMapper.selectDeletedPlate(orderId, bodyIds, getUserOrganId());
// 小板还原
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);
// 还原小板,小板对应的大板信息
OrderServiceImpl o = (OrderServiceImpl) AopContext.currentProxy();
o.updateRestorePlate(orderId,plateDOList);
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if (!goodsDOS.isEmpty()) {
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
if (!goodsDOList.isEmpty()) {
// 新增的大板信息
List<GoodsDO> list = goodsDOList.stream()
.peek(m -> {
m.setId(null);
m.setPlanId(0L);
m.setCreateTime(LocalDateTime.now());
m.setUpdateTime(LocalDateTime.now());
})
.toList();
goodsMapper.insertBatch(list);
// 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息
List<OrderGoodsIds> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> orderGoodsIdsList = new ArrayList<>();
for (GoodsDO goodsDO : goodsList) {
orderGoodsIdsList.addAll(orderGoodsIds.stream()
.filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId()))
// .filter(a -> a.getOldId() == null)
.map(m -> m.setOldId(goodsDO.getId())).toList());
}
// 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改
List<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> plateList = new ArrayList<>();
for (OrderGoodsIds ids : orderGoodsIdsList) {
plateList.addAll(plateDOS.stream()
.filter(f -> f.getGoodsId().equals(ids.getOldId()))
.peek(m -> {
m.setGoodsId(ids.getId());
})
.toList());
}
plateMapper.updateBatch(plateList);
}
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
if (partsList != null && !partsList.isEmpty()){
orderPartsMapper.updateNoDeletedParts(partsList, getUserOrganId(),orderId);
}
}
@@ -467,10 +363,10 @@ public class OrderServiceImpl implements OrderService {
return;
}
int bodyCount = orderBodyMapper.selectDeletedBodyCount(orderId, getUserOrganId());
// 生产单柜体数量判断
if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) {
orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), getUserOrganId());
}else {
if ( bodyCount == 0 ) {
orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId());
}
@@ -776,14 +672,29 @@ public class OrderServiceImpl implements OrderService {
}
// 验证柜体是否存在
private void validateOrderBodyExists(Long orderId, Long bodyId, Long organId, Integer deleted) {
if (orderBodyMapper.selectCount(new LambdaQueryWrapperX<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eqIfPresent(OrderBodyDO::getOrderId, orderId)
.eqIfPresent(OrderBodyDO::getId, bodyId)
.eqIfPresent(OrderBodyDO::getDeleted, deleted)) == 0) {
throw exception(ORDER_BODY_NOT_EXISTS);
private List<Long> validateOrderBodyExists(Long orderId, Long bodyId, Long organId, Set<Long> roomIds, Integer deleted) {
List<Long> bodyIds = new ArrayList<>();
if (roomIds != null && !roomIds.isEmpty()) {
bodyIds.addAll(orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(),deleted));
}
if (bodyId != null && bodyId != 0) {
Long bodyCount = orderBodyMapper.selectCount(new LambdaQueryWrapperX<OrderBodyDO>()
.eq(OrderBodyDO::getOrganId, organId)
.eqIfPresent(OrderBodyDO::getDeleted, deleted)
.eqIfPresent(OrderBodyDO::getOrderId, orderId)
.eqIfPresent(OrderBodyDO::getId, bodyId));
if (bodyCount == 0) {
throw exception(ORDER_BODY_NOT_EXISTS);
}
bodyIds.add(bodyId);
}
return bodyIds;
}
private Map<String, List<?>> getPlateGoods(List<GoodsDO> goodsLists) {
@@ -941,11 +852,156 @@ public class OrderServiceImpl implements OrderService {
AssertUtils.empty(planDOS, ORDER_PLAN_ERROR);
// planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
return planIds;
}
// 删除小板,大板,包裹,排单信息
@Transactional(rollbackFor = Exception.class)
public void updateDeletePlate(List<PlateDO> plateDOList, Long orderId ,List<Long> bodyIds,List<Long> planIds) {
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
plateMapper.updateDeletedPlate(plateIds, getUserOrganId(), orderId);// 删小板
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId, getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
if (orderPackageDOS.isEmpty()) {
OrderDO orderDO = orderMapper.selectById(orderId);
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderMapper.updateById(orderDO);
}
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (!goodsIdDeleted.isEmpty()) {
goodsMapper.updateDeletedById(orderId,goodsIdDeleted, getUserOrganId());
}
if (!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
// 一样,同时删除排单的信息
if (goodsDOS.isEmpty()) {
planService.deletePlan(planIds);
} else {
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
}
}
// 还原小板,小板对应的大板信息
@Transactional(rollbackFor = Exception.class)
public void updateRestorePlate(Long orderId, List<PlateDO> plateDOList){
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
plateMapper.updateNoDeletedPlate(plateIds, getUserOrganId(), orderId);
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if (!goodsDOS.isEmpty()) {
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
if (!goodsDOList.isEmpty()) {
// 新增的大板信息
List<GoodsDO> list = goodsDOList.stream()
.peek(m -> {
m.setId(null);
m.setPlanId(0L);
m.setCreateTime(LocalDateTime.now());
m.setUpdateTime(LocalDateTime.now());
})
.toList();
goodsMapper.insertBatch(list);
// 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息
List<OrderGoodsIds> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> orderGoodsIdsList = new ArrayList<>();
for (GoodsDO goodsDO : goodsList) {
orderGoodsIdsList.addAll(orderGoodsIds.stream()
.filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId()))
.map(m -> m.setOldId(goodsDO.getId())).toList());
}
// 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改
List<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> plateList = new ArrayList<>();
for (OrderGoodsIds ids : orderGoodsIdsList) {
plateList.addAll(plateDOS.stream()
.filter(f -> f.getGoodsId().equals(ids.getOldId()))
.peek(m -> {
m.setGoodsId(ids.getId());
})
.toList());
}
plateMapper.updateBatch(plateList);
}
}
}
@@ -200,7 +200,6 @@ public class PlanServiceImpl implements PlanService {
.map(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus()))
.toList();
// orderDOList.forEach(m -> m.setStatus(OrderStatusEnum.SORTED.getStatus()));
if(!orderDOS.isEmpty()) {
orderMapper.updateBatch(orderDOS);
@@ -227,13 +226,13 @@ public class PlanServiceImpl implements PlanService {
PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class);
// 校验新增的板材是否和排单为统一类型的
if(!(updateReqVO.getItemList() == null)){
if(updateReqVO.getItemList() != null){
// todo 目前之解决非混单的情况,混单的情况待解决
// TODO 目前之解决非混单的情况,混单的情况待解决
String goodsId = updateReqVO.getItemList().stream().map(PlanSaveReqVO.Item::getGoodsId).distinct().toList().get(0);
// todo 目前只解决非混单的情况
// TODO 目前只解决非混单的情况
String goodsIds = goodsMapper.selectPlanGoods(plan.getId(), getUserOrganId()).stream().map(GoodsDO::getGoodsId).toList().get(0);
if(!goodsId.equals(goodsIds)){
@@ -417,32 +416,6 @@ public class PlanServiceImpl implements PlanService {
.toList();
// List<Long> orderIdList = new ArrayList<>();
//
// List<Long> diff = new ArrayList<>();
//
// // 根据生产单ID查询ES的优化数据
// List<OptimizeBoardModelDO> optimizeBoardModelDOS = optimizePlanService.buildBoardByOrderIds(orderIds, ORDER_REMAIN_PLATE_MODEL, 100);
//
// if(optimizeBoardModelDOS.isEmpty()){
//
// List<OrderDO> orderList = orderMapper.selectBatchIds(orderIds);
//
// List<OrderDO> orderDOList = orderList.stream().map(m -> m.setStatus(OrderStatusEnum.NEW_ORDER.getStatus())).toList();
//
// orderMapper.updateBatch(orderDOList);
//
// }else {
// optimizeBoardModelDOS.forEach(f -> orderIdList.addAll(f.getOrderId()));
//
// // 已经删除的排单的生产单号和新查找的生生产单号对比,找出不同的部分
//// diff = orderIds.stream().filter(f -> !orderIdList.contains(f)).toList();
// diff = Stream.concat(
// orderIds.stream().filter(str -> !orderIdList.contains(str)),
// orderIdList.stream().filter(str -> !orderIds.contains(str)))
// .toList();
// }
//
if(!diff.isEmpty()){
List<OrderDO> orderList = orderMapper.selectBatchIds(diff);
@@ -510,15 +483,12 @@ public class PlanServiceImpl implements PlanService {
Set<Long> machineIds = planDOPageResult.getList().stream().map(PlanDO::getMachineId).collect(Collectors.toSet());
List<Long> planIds = planDOPageResult.getList().stream().map(PlanDO::getId).collect(Collectors.toList());
List<Long> planIds = planDOPageResult.getList().stream().map(PlanDO::getId).toList();
List<CuttingRespDTO> machines = machineApi.list(machineIds).getCheckedData();
// List<PlateInfoVO> plateInfoVOS = planItemMapper.selectGoodsList(planIds,getUserOrganId());
// 查询排单对应的大板板材信息
List<PlateInfoVO> plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId());
@@ -534,26 +504,6 @@ public class PlanServiceImpl implements PlanService {
}).toList();
// List<OrderIds> orderIdsList = new ArrayList<>();
//
// plateInfoVOS.forEach(f->
// orderIdsList.addAll(f.getOrderIdList()));
//
//
// List<PlateInfoVO> plateInfoVOList = plateMapper.selectPlateArea(orderIdsList, getUserOrganId());
//
//
//
// // todo 目前这种情况只解决没有混单的情况,混单情况待解决 (目前解决,数据正确性待测试)
// for (PlateInfoVO plateInfoVO : plateInfoVOS) {
// plateInfoVO.setArea(plateInfoVOList.stream()
// .filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId()))
// .map(PlateInfoVO::getArea)
// .reduce(BigDecimal.ZERO,BigDecimal::add));
//
//// plateInfoVO.setOptimizeGoodsCount(plateInfoVOList.stream().filter(s->s.getGoodsId().equals(plateInfoVO.getGoodsId())).mapToLong(PlateInfoVO::getOptimizeGoodsCount).sum());
// }
// 根据排单ID查询ES中的优化数据 todo 目前只解决无混单的情况,混单情况待解决
List<OptimizeBoardModelDO> optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, infoVOList.size());
@@ -566,52 +516,31 @@ public class PlanServiceImpl implements PlanService {
PageResult<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class);
planRespVOPageResult.getList().forEach(e -> {
// 机台信息
e.setMachineName(machines.stream()
.filter(f -> Objects.equals(f.getId(), e.getMachineId()))
.map(CuttingRespDTO::getName)
.findAny()
.orElse(null));
e.setMachineName(getMachineName(e.getMachineId(), machines));
// 板材信息列表
e.setPlateInfoList(infoVOList.stream()
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
.collect(Collectors.toList()));
e.setPlateInfoList(getPlateInfoList(e.getId(), infoVOList));
// todo 小板总数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试)
e.setPlateNum(infoVOList.stream()
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
.mapToLong(PlateInfoVO::getCount)
.sum());
e.setPlateNum(getPlateNum(e.getId(), infoVOList));
// todo 大板优化数量目前只解决没有混单的情况时的小板数量,后续待加入混单情况 (目前解决,数据正确性待测试)
e.setOptimizeGoodsCount(optimizeBoardModelDOS.stream()
.filter(f -> Objects.equals(f.getPlanId(), e.getId()))
// todo 目前兼容修改,新的需求不需要这个校验
.mapToLong(m -> m.getBoardCount() == null ? 0 : m.getBoardCount())
.sum());
e.setOptimizeGoodsCount(getOptimizeGoodsCount(e.getId(), optimizeBoardModelDOS));
// 大板开料数
e.setCutGoodsCount(optimizeBoardModelDOS.stream()
.filter(f->Objects.equals(f.getPlanId(), e.getId()))
.mapToLong(m-> m.getCutedBoardInfo() == null ? 0 : m.getCutedBoardInfo().getCutedBoardNumber())
.sum());
e.setCutGoodsCount(getCutGoodsCount(e.getId(), optimizeBoardModelDOS));
// 小板优化数量
e.setOptimizePlateCount(optimizeBoardModelDOS.stream()
.filter(f->Objects.equals(f.getPlanId(), e.getId()))
.mapToLong(m-> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber())
.sum());
e.setOptimizePlateCount(getOptimizePlateCount(e.getId(), optimizeBoardModelDOS));
// 未优化小板数量
e.setUnOptimizePlateCount(e.getPlateNum() - optimizeBoardModelDOS.stream()
.filter(f->Objects.equals(f.getPlanId(), e.getId()))
.mapToLong(m-> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber())
.sum());
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizePlateCount());
// 生产单信息
e.setOrderList(planOrderRespVOS.stream()
.filter( f-> Objects.equals(f.getPlanId(), e.getId()))
.collect(Collectors.toList()));
e.setOrderList(getOrderList(e.getId(), planOrderRespVOS));
});
return planRespVOPageResult;
}
@Override
public PageResult<OrderRespVOCopy> getOrderPage(OrderPageReqVOCopy pageReqVO) {
PageDTO<OrderRespVOCopy> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
@@ -633,10 +562,7 @@ public class PlanServiceImpl implements PlanService {
.eq("o.organ_id",getUserOrganId())
.eq("o.deleted",false)
.in("o.status",statusList)
// .eq("og.organ_id",getUserOrganId())
// .eq("og.plan_id",0)
// .eq("og.deleted",false)
// .isNull("opi.item_id")
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
.inIfPresent(FIELD_OG_ID,goodsIds)
.inIfPresent("o.id",pageReqVO.getOrderIds())
@@ -668,7 +594,6 @@ public class PlanServiceImpl implements PlanService {
queryWrapperX.likeIfPresent(FIELD_OP_FILTER_TYPE, insertSeparator(filterTypes));
// todo 目前修改一半,速度无法再进行特别的优化,需等后面修改表结构再进行优化
IPage<OrderRespVOCopy> orderRespVOCopies = orderMapper.selectOrderPage(page,queryWrapperX);
if (CollUtil.isEmpty(orderRespVOCopies.getRecords())) {
@@ -741,8 +666,6 @@ public class PlanServiceImpl implements PlanService {
queryWrapperX.likeIfPresent("a.filter_type", insertSeparator(filterTypes));
// List<NotPlanOrderPlateRespVO> platePages = plateMapper.selectGoodsPage(pageReqVO.getOrderIds(),getUserOrganId()/*, orderRespVOCopy.getGoodsId()*/);
List<NotPlanOrderPlateRespVO> notPlanOrderPlateRespVOS = plateMapper.selectGoodsPage(queryWrapperX);
// todo 目前数据筛选只考虑了非混单的情况,混单情况待解决
@@ -754,30 +677,6 @@ public class PlanServiceImpl implements PlanService {
// List<OrderRespVOCopy> filteredRecords = records.stream()
// .filter(record -> {
// List<PlatePage> filteredPages = platePages.stream()
// .filter(f -> Objects.equals(f.getOrderId(), record.getOrderId()))
// .collect(Collectors.toList());
// if (filteredPages.isEmpty()) {
// return false; // 移除该记录
// } else {
// record.setPlatePages(filteredPages);
// return true; // 保留该记录
// }
// })
// .collect(Collectors.toList());
//
// // 处理后的 filteredRecords 将不包含过滤后的数据为空的 record
// orderRespVOCopies.setRecords(filteredRecords);
//
//// orderRespVOCopies.setTotal(orderRespVOCopies.getRecords().size());
//
//
// return new PageResult<>(orderRespVOCopies.getRecords(), orderRespVOCopies.getTotal());
}
@Override
@@ -798,19 +697,6 @@ public class PlanServiceImpl implements PlanService {
.groupBy(GoodsDO::getGoodsId, GoodsDO::getHeight, GoodsDO::getWidth, GoodsDO::getColor, GoodsDO::getGoodsName, GoodsDO::getThickness,GoodsDO::getSpec,GoodsDO::getMaterial,GoodsDO::getTexture));
// // 生产单对应的大板ID
// List<Long> goodIds = reqVO.getOrderIdList().stream().map(OrderIds::getId).toList();
//
// // 查询板材库的大板信息
// List<NotPlanGoodsRespVO> notPlanGoodsRespVOS = goodsMapper.selectGoodsPlateList(plateGoodIds, getUserOrganId());
// 查询小板数量
// List<PlateDO> plateDOS = plateMapper.selectGoodsPlateNum(goodIds, getUserOrganId());
// List<NotPlanGoodsRespVO> notPlanGoodsRespVOS = BeanUtils.toBean(goodsDOS, NotPlanGoodsRespVO.class);
for (NotPlanGoodsRespVO notPlanGoodsRespVO : notPlanGoodsRespVOS) {
notPlanGoodsRespVO.setOrderIdList(reqVO.getOrderIdList()
.stream()
@@ -837,11 +723,6 @@ public class PlanServiceImpl implements PlanService {
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
statusList.add(OrderStatusEnum.SORTED.getStatus());
// List<Long> orderIds = orderMapper.selectOrderIdsList(pageReqVO, statusList, getUserOrganId())
// .stream().map(OrderDO::getId).distinct().toList();
//
// List<Long> goodsIds = plateMapper.selectPlateIds(pageReqVO, getUserOrganId())
// .stream().map(PlateDO::getGoodsId).distinct().toList();
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
@@ -849,9 +730,7 @@ public class PlanServiceImpl implements PlanService {
.eq("o.organ_id",getUserOrganId())
.eq("o.deleted",false)
.in("o.status",statusList)
// .eq("og.organ_id",getUserOrganId())
// .eq("og.plan_id",0)
// .eq("og.deleted",false)
.inIfPresent("og.order_id", pageReqVO.getOrderIds())
.inIfPresent(FIELD_OG_ID, pageReqVO.getIds())
// todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决
@@ -901,11 +780,11 @@ public class PlanServiceImpl implements PlanService {
List<OrderGoodsResp> goodsResp = orderMapper.selectGoodsListByGoodsId(queryWrapperX);
for (OrderGoodsResp record : records) {
for (OrderGoodsResp vosRecords : records) {
List<OrderIds> orderIdsList = new ArrayList<>();
List<List<OrderIds>> list = goodsResp.stream().filter(f -> f.getGoodsId().equals(record.getGoodsId())).map(OrderGoodsResp::getOrderIds).toList();
List<List<OrderIds>> list = goodsResp.stream().filter(f -> f.getGoodsId().equals(vosRecords.getGoodsId())).map(OrderGoodsResp::getOrderIds).toList();
if(!list.isEmpty()){
@@ -913,7 +792,7 @@ public class PlanServiceImpl implements PlanService {
}
record.setOrderIds(orderIdsList);
vosRecords.setOrderIds(orderIdsList);
}
@@ -986,8 +865,6 @@ public class PlanServiceImpl implements PlanService {
PageDTO<PlateResList> page = new PageDTO<>(vo.getPageNo(), vo.getPageSize());
// IPage<PlateResList> pageResult = plateMapper.selectPlateByPlanId(page, queryWrapperX);
IPage<PlateResList> pageResult = goodsMapper.selectPlanGoodsListByPlanId(page, queryWrapperX);
if (CollUtil.isEmpty(pageResult.getRecords())) {
@@ -1069,7 +946,7 @@ public class PlanServiceImpl implements PlanService {
List<PlateResList> plateResLists = goodsMapper.selectPlateListByPlanId(planIds, getUserOrganId());
if(plateResLists.isEmpty()){
return null;
return new ArrayList<>();
}
Set<Long> bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet());
@@ -1131,7 +1008,7 @@ public class PlanServiceImpl implements PlanService {
SearchResponse<OptimizeBoardModelDO> search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class);
List<Hit<OptimizeBoardModelDO>> hits = search.hits().hits();
if (CollUtil.isNotEmpty(hits)) {
return hits.stream().map(Hit::source).collect(Collectors.toList());
return hits.stream().map(Hit::source).toList();
}
return new ArrayList<>();
} catch (Exception e) {
@@ -1169,9 +1046,9 @@ public class PlanServiceImpl implements PlanService {
List<PlanDO> planDOS = planMapper.selectBatchIds(ids);
for (PlanDO planDO : planDOS) {
AssertUtils.notEmpty(planDOS,PLAN_NOT_EXISTS);
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
for (PlanDO planDO : planDOS) {
if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) {
throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId());
@@ -1182,4 +1059,63 @@ public class PlanServiceImpl implements PlanService {
}
// 机台信息
private String getMachineName(Long machineId, List<CuttingRespDTO> machines) {
return machines.stream()
.filter(f -> Objects.equals(f.getId(), machineId))
.map(CuttingRespDTO::getName)
.findAny()
.orElse(null);
}
// 板材信息列表
private List<PlateInfoVO> getPlateInfoList(Long planId, List<PlateInfoVO> infoVOList) {
return infoVOList.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.toList();
}
// 小板总数量
private long getPlateNum(Long planId, List<PlateInfoVO> infoVOList) {
return infoVOList.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.mapToLong(PlateInfoVO::getCount)
.sum();
}
// 大板优化数量
private long getOptimizeGoodsCount(Long planId, List<OptimizeBoardModelDO> optimizeBoardModelDos) {
return optimizeBoardModelDos.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.mapToLong(OptimizeBoardModelDO::getBoardCount)
.sum();
}
// 大板开料数
private long getCutGoodsCount(Long planId, List<OptimizeBoardModelDO> optimizeBoardModelDos) {
return optimizeBoardModelDos.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.mapToLong(m -> m.getCutedBoardInfo() == null ? 0 : m.getCutedBoardInfo().getCutedBoardNumber())
.sum();
}
// 小板优化数量
private long getOptimizePlateCount(Long planId, List<OptimizeBoardModelDO> optimizeBoardModelDos) {
return optimizeBoardModelDos.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.mapToLong(m -> m.getPlaceBlockNumber() == null ? 0 : m.getPlaceBlockNumber())
.sum();
}
// 生产单信息
private List<PlanOrderRespVO> getOrderList(Long planId, List<PlanOrderRespVO> planOrderRespVos) {
return planOrderRespVos.stream()
.filter(f -> Objects.equals(f.getPlanId(), planId))
.toList();
}
}
@@ -337,14 +337,6 @@ public class PlateServiceImpl implements PlateService {
public List<String> createNewPlate(OptimizationSavePlateReqVO reqVO) {
// AssertUtils.notEmpty(reqVO.getRoomId(),ORDER_ROOM_ERROR);
// AssertUtils.notEmpty(reqVO.getBodyId(),ORDER_BODY_ERROR);
// AssertUtils.notEmpty(reqVO.getOrderId(),ORDER_ERROR);
// if(reqVO.getMultiple() < 1 ){
// throw exception(PLATE_MULTIPLE_ERROR);
// }
GoodsDO goodsDO = goodsMapper.selectGoodsId(reqVO.getOrderId(), reqVO.getGoodsId(), getUserOrganId());
AssertUtils.notEmpty(goodsDO,ORDER_PLAN_ERROR);
@@ -41,7 +41,7 @@
<update id="updateDeletedById">
UPDATE order_goods
SET deleted = #{deleted},plan_id = 0
SET deleted = true,plan_id = 0
WHERE organ_id = #{organId}
and order_id = #{orderId}
and id IN
@@ -77,7 +77,39 @@
</foreach>
AND
organ_id = #{organId}
and order_id = #{orderId}
</update>
<update id="updateDeletedParts">
UPDATE order_parts
SET deleted = true
WHERE
organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach collection="partsIds" item="partsId" open="(" separator="," close=")">
#{partsId}
</foreach>
</update>
<update id="updateNoDeletedParts">
UPDATE order_parts
SET deleted = false
WHERE
organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach collection="partsIds" item="partsId" open="(" separator="," close=")">
#{partsId}
</foreach>
</update>
<delete id="deletedById">
DELETE FROM order_parts
WHERE id IN
@@ -291,6 +291,31 @@
</update>
<update id="updateDeletedPlate">
UPDATE order_plate
SET deleted = true,is_optimized = false
WHERE organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach item="plateId" collection="plateIds" open="(" separator="," close=")">
#{plateId}
</foreach>
</update>
<update id="updateNoDeletedPlate">
UPDATE order_plate
SET deleted = false,is_optimized = false
WHERE organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach item="plateId" collection="plateIds" open="(" separator="," close=")">
#{plateId}
</foreach>
</update>
<delete id="deletedById">
DELETE FROM order_plate
WHERE id IN
@@ -426,17 +451,50 @@
SELECT distinct p.*
FROM order_plate p
LEFT JOIN order_item i ON p.id = i.plate_id
LEFT JOIN order_item i ON p.organ_id = i.organ_id and p.order_id = i.order_id and p.id = i.plate_id
WHERE i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted}
<if test="bodyIds != null and bodyIds.size() > 0">
AND i.body_id IN
<foreach item="roomIdItem" collection="bodyIds" open="(" separator="," close=")">
#{roomIdItem}
</foreach>
</if>
</select>
<select id="selectNoDeletedPlate"
resultType="com.cf.imes.module.executor.dal.dataobject.plate.PlateDO" parameterType="java.lang.Long">
SELECT distinct p.*
FROM order_plate p
LEFT JOIN order_item i ON p.organ_id = i.organ_id and p.order_id = i.order_id and p.id = i.plate_id
WHERE i.organ_id = #{organId}
AND i.order_id = #{orderId}
AND i.body_id IN
<foreach item="roomIdItem" collection="bodyIds" open="(" separator="," close=")">
#{roomIdItem}
</foreach>
AND p.deleted = false
</select>
<select id="selectDeletedPlate"
resultType="com.cf.imes.module.executor.dal.dataobject.plate.PlateDO" parameterType="java.lang.Long">
SELECT distinct p.*
FROM order_plate p
LEFT JOIN order_item i ON p.organ_id = i.organ_id and p.order_id = i.order_id and p.id = i.plate_id
WHERE i.organ_id = #{organId}
AND i.order_id = #{orderId}
AND i.body_id IN
<foreach item="roomIdItem" collection="bodyIds" open="(" separator="," close=")">
#{roomIdItem}
</foreach>
AND p.deleted = true
</select>
<select id="selectPlanPlateListDataSource" resultType="java.util.Map">
@@ -3,12 +3,14 @@ package com.cf.imes.module.manage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* @author there
*/
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true) // add config
@EnableFeignClients
@EnableAsync
public class ManageServerApplication {
@@ -315,6 +315,7 @@ public class ErrorCodeConstants {
public static final ErrorCode ORDER_PACK_ERROR = new ErrorCode(1_002_041_018, "当前生产单信息有误,请重新选择包裹");
public static final ErrorCode ORDER_PACK_DATA_ERROR = new ErrorCode(1_002_041_019, "当前包裹信息有误,请重新选择包裹");
public static final ErrorCode PLAN_BODY_DATA_ERROR = new ErrorCode(1_002_041_019, "当前排单的生产单对应的柜体数据异常,请查看柜体数据或联系客服");
public static final ErrorCode CREATE_PLAN_DATA_ERROR = new ErrorCode(1_002_041_020, "排单优化数据异常,请重新进行优化或者删除排单然后重新创建排单");
@@ -93,6 +93,10 @@ public class MachineServiceImpl implements MachineService {
@Resource
private OrganMapper organMapper;
private static final String FIELD_ADVANCED_CONFIGS_REF = "advancedConfigsRef";
private static final String FIELD_AUTO_LABEL_MODEL = "autoLabelModel";
private static final String FIELD_CUTTING_MODULE_REF = "cuttingModuleRef";
private static final String FIELD_DRILL_MODEL = "drillModel";
@Override
@Transactional(rollbackFor = Exception.class)
@@ -180,18 +184,18 @@ public class MachineServiceImpl implements MachineService {
JsonNode cuttingSetting = JsonUtils.parseTree(unzipMachineSetting);
JsonNode advancedConfigsRef = cuttingSetting.get("advancedConfigsRef");
JsonNode advancedConfigsRef = cuttingSetting.get(FIELD_ADVANCED_CONFIGS_REF);
boolean isAutoLabelEnabled = advancedConfigsRef.get("isAutoLabelEnabled") != null && advancedConfigsRef.get("isAutoLabelEnabled").asBoolean();
if (isAutoLabelEnabled && advancedConfigsRef.has("autoLabelModel")) {
Integer autoLabelModelId = advancedConfigsRef.get("autoLabelModel").asInt();
if (isAutoLabelEnabled && advancedConfigsRef.has(FIELD_AUTO_LABEL_MODEL)) {
Integer autoLabelModelId = advancedConfigsRef.get(FIELD_AUTO_LABEL_MODEL).asInt();
MachineDO newMachine;
if (isMachine) {
if (Boolean.TRUE.equals(isMachine)) {
MachineDO machine = machineMapper.selectById(autoLabelModelId);
if (machine != null) {
@@ -212,8 +216,8 @@ public class MachineServiceImpl implements MachineService {
Map map = mapper.readValue(unzipMachineSetting, Map.class);
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("advancedConfigsRef");
advancedConfigs.put("autoLabelModel", newMachine.getId());
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get(FIELD_ADVANCED_CONFIGS_REF);
advancedConfigs.put(FIELD_AUTO_LABEL_MODEL, newMachine.getId());
// 将 Map 转换为 JSON 字符串
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
@@ -241,8 +245,8 @@ public class MachineServiceImpl implements MachineService {
Map map = mapper.readValue(unzipMachineSetting, Map.class);
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("advancedConfigsRef");
advancedConfigs.put("autoLabelModel", newMachine.getId());
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get(FIELD_ADVANCED_CONFIGS_REF);
advancedConfigs.put(FIELD_AUTO_LABEL_MODEL, newMachine.getId());
// 将 Map 转换为 JSON 字符串
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
@@ -261,17 +265,17 @@ public class MachineServiceImpl implements MachineService {
JsonNode drillSetting = JsonUtils.parseTree(unzipMachineSetting);
JsonNode cuttingModuleRef = drillSetting.get("cuttingModuleRef");
JsonNode cuttingModuleRef = drillSetting.get(FIELD_CUTTING_MODULE_REF);
boolean isDrillEnabled = cuttingModuleRef.get("isDrillEnabled") != null && cuttingModuleRef.get("isDrillEnabled").asBoolean();
if (isDrillEnabled && cuttingModuleRef.has("drillModel")) {
Integer drillModelId = cuttingModuleRef.get("drillModel").asInt();
if (isDrillEnabled && cuttingModuleRef.has(FIELD_DRILL_MODEL)) {
Integer drillModelId = cuttingModuleRef.get(FIELD_DRILL_MODEL).asInt();
MachineDO newMachine;
if (isMachine) {
if (Boolean.TRUE.equals(isMachine)) {
MachineDO machine = machineMapper.selectById(drillModelId);
if (machine != null) {
@@ -292,8 +296,8 @@ public class MachineServiceImpl implements MachineService {
Map map = mapper.readValue(unzipMachineSetting, Map.class);
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("cuttingModuleRef");
advancedConfigs.put("drillModel", newMachine.getId());
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get(FIELD_CUTTING_MODULE_REF);
advancedConfigs.put(FIELD_DRILL_MODEL, newMachine.getId());
// 将 Map 转换为 JSON 字符串并打印输出
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
@@ -322,8 +326,8 @@ public class MachineServiceImpl implements MachineService {
Map map = mapper.readValue(unzipMachineSetting, Map.class);
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("cuttingModuleRef");
advancedConfigs.put("drillModel", newMachine.getId());
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get(FIELD_CUTTING_MODULE_REF);
advancedConfigs.put(FIELD_DRILL_MODEL, newMachine.getId());
// 将 Map 转换为 JSON 字符串并打印输出
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
@@ -341,7 +345,6 @@ public class MachineServiceImpl implements MachineService {
validateExists(updateReqVO.getId(), updateReqVO.getName(), updateReqVO.getMachineType(), updateReqVO.getId());
// 更新
MachineDO updateObj = MachineConvert.convert(updateReqVO);
//MachineDO updateObj = BeanUtils.toBean(updateReqVO, MachineDO.class);
// 判断传入的机台配置是否存在,如果存在,压缩数据后更新
@@ -68,6 +68,8 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
@Resource
private OrganMapper organMapper;
private static final String FIELD_AUTO_LABEL_MODEL = "autoLabelModel";
private static final String FIELD_DRILL_MODEL = "drillModel";
@Override
@Transactional(rollbackFor = Exception.class)
@@ -514,9 +516,9 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
boolean isAutoLabelEnabled = advancedConfigsRef.get("isAutoLabelEnabled") != null && advancedConfigsRef.get("isAutoLabelEnabled").asBoolean();
if (isAutoLabelEnabled && advancedConfigsRef.get("autoLabelBrand") != null && advancedConfigsRef.get("autoLabelModel") != null) {
if (isAutoLabelEnabled && advancedConfigsRef.get("autoLabelBrand") != null && advancedConfigsRef.get(FIELD_AUTO_LABEL_MODEL) != null) {
Integer autoLabelModelId = advancedConfigsRef.get("autoLabelModel").asInt();
Integer autoLabelModelId = advancedConfigsRef.get(FIELD_AUTO_LABEL_MODEL).asInt();
try {
@@ -539,7 +541,7 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("advancedConfigsRef");
advancedConfigs.put("autoLabelModel", labelingMachineDO.getId());
advancedConfigs.put(FIELD_AUTO_LABEL_MODEL, labelingMachineDO.getId());
// 将 Map 转换为 JSON 字符串
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
@@ -565,9 +567,9 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
boolean isDrillEnabled = cuttingModuleRef.get("isDrillEnabled") != null && cuttingModuleRef.get("isDrillEnabled").asBoolean();
if (isDrillEnabled && cuttingModuleRef.get("drillBrand") != null && cuttingModuleRef.get("drillModel") != null) {
if (isDrillEnabled && cuttingModuleRef.get("drillBrand") != null && cuttingModuleRef.get(FIELD_DRILL_MODEL) != null) {
Integer drillModelId = cuttingModuleRef.get("drillModel").asInt();
Integer drillModelId = cuttingModuleRef.get(FIELD_DRILL_MODEL).asInt();
try {
@@ -590,7 +592,7 @@ public class MachineTemplateServiceImpl implements MachineTemplateService {
// 修改值
Map<String, Object> advancedConfigs = (Map<String, Object>) map.get("cuttingModuleRef");
advancedConfigs.put("drillModel", drillMachineDO.getId());
advancedConfigs.put(FIELD_DRILL_MODEL, drillMachineDO.getId());
// 将 Map 转换为 JSON 字符串
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);