排单添加小板过滤,添加小板,删除小板Bug修改

This commit is contained in:
liuzhaotian
2025-03-07 11:32:26 +08:00
parent e401afc242
commit c6fec72adf
10 changed files with 362 additions and 154 deletions
@@ -29,6 +29,9 @@ public class PlanRespVO {
@ExcelProperty("排单状态:0 新单,1 板材已申请,2 开料中,3 已开料")
private Integer status;
@Schema(description = "是否置顶")
private Boolean isTop;
@Schema(description = "是否已投产")
private Boolean isScheduled;
@@ -32,6 +32,9 @@ public class PlateInfoVO {
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
private String material;
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
private String brand;
@Schema(description = "排单ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long planId;
@@ -26,6 +26,10 @@ public class NoPlanPlatePageReqVO extends PageParam {
private String orderId;
@Schema(description = "排单ID")
private Long planId;
@Schema(description = "板编号")
private String plateNo;
@@ -52,6 +56,10 @@ public class NoPlanPlatePageReqVO extends PageParam {
private Integer thickness;
@Schema(description = "品牌-在排单界面添加板材时为必传的")
private String brand;
@Schema(description = "板名称")
private String plateName;
@@ -56,7 +56,7 @@ public class PlanDO extends BaseDO {
/**
* 板材过滤条件
*/
private String filter;
private Integer filter;
/**
@@ -3,9 +3,11 @@ package com.cf.imes.module.executor.dal.mysql.plan;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.cf.imes.framework.common.enums.PlanStatusEnum;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize;
@@ -13,6 +15,8 @@ import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
/**
@@ -152,6 +156,14 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.eq(PlanDO::getOrganId,organId)
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getIsTop,true)
.in(PlanDO::getStatus, Arrays.asList(PlanStatusEnum.NOCUTTING.getStatus(),PlanStatusEnum.OPENING.getStatus()))
.orderByAsc(PlanDO::getUpdateTime));
}
List<PlanDO> selectIsTopUpPlan(@Param("updateTime") LocalDateTime updateTime,@Param("organId") Long organId);
List<PlanDO> selectIsTopDownPlan(@Param("updateTime") LocalDateTime updateTime,@Param("organId") Long organId);
List<OrderGoodsResp> selectPlanGoodsList(@Param("planId") Long planId, @Param("organId") Long organId);
}
@@ -1650,6 +1650,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType) && !planDO.getStatus().equals(OrderPlateCutStatusEnum.OPENED.getStatus())){
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
planDO.setProduceTime(null);
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR);
@@ -115,8 +115,6 @@ public class PlanServiceImpl implements PlanService {
private static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
private static final String ORDER_PLATE_MODEL = "imes_order_optimize";
private static final String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model";
private static final String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model";
@@ -158,8 +156,6 @@ public class PlanServiceImpl implements PlanService {
List<PlanDO> planDOS = new ArrayList<>();
List<Long> ids = new ArrayList<>();
List<Long> orderIds = new ArrayList<>();
List<Long> plateIds = new ArrayList<>();
@@ -173,58 +169,27 @@ public class PlanServiceImpl implements PlanService {
if (savePlanPlateList.getMixConfig() != null && Boolean.TRUE.equals(savePlanPlateList.getMixConfig().getIsMixed())) {
// 混单时走的逻辑
Integer mixedType = Optional.ofNullable(savePlanPlateList.getMixConfig().getMixedType()).orElse(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType());
// 混单时走的逻辑
List<SavePlanPlateList.PlateItemList> plateItemList = Optional.ofNullable(savePlanPlateList.getPlateItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
List<SavePlanPlateList.GoodsItemList> goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
List<PlanActualGoodsList> planActualGoodsLists = Optional.ofNullable(createReqVO.getPlanActualGoodsListList()).orElse(new ArrayList<>());
Map<String, List<Long>> grouped = new HashMap<>();
if(CollUtil.isNotEmpty(planActualGoodsLists)) {
// 混单时判断是否进行板材对应并创建排单
mixConfigPlateCorresponding(planActualGoodsLists,planActualGoodsModelDOS,planItemDOS,plateItemList,goodsItemList,planDOS,processId,loginUser,mixedType);
getCreatePlanMultipleGoodsList(planActualGoodsLists,planItemDOS,plateItemList,planActualGoodsModelDOS,planDOS,processId,loginUser);
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
// 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThicknessEqualToOne(goodsItemList);
}else {
grouped = groupByThicknessEqualToOne(goodsItemList);
}
if(CollUtil.isNotEmpty(grouped)) {
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
}
}else {
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
// 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThickness(goodsItemList);
}else {
// 筛选出厚度相同的大板
grouped = groupByThickness(goodsItemList);
}
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
}
// 获取所有的大板ID
ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList());
// 获取所有的小板ID
plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).toList());
// 获取所有的生产单ID
orderIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList());
} else {
// 非混单
@@ -234,10 +199,9 @@ public class PlanServiceImpl implements PlanService {
// 查找材质和厚度和颜色相同的大板
Map<String, List<Long>> grouped = groupByMaterialAndThicknessAndColorAndBrand(goodsItemList);
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType());
// 获取所有的大板ID
ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList());
// 获取所有的小板ID
plateIds.addAll(plateItemList.stream().map(SavePlanPlateList.PlateItemList::getPlateId).toList());
// 获取所有的生产单ID
@@ -456,46 +420,13 @@ public class PlanServiceImpl implements PlanService {
IPage<PlanDO> planDOPageResult = new PageDTO<>();
// 是否进行翻页
if(pageReqVO.getIsUp() != null) {
PlanDO planDO = planMapper.selectById(pageReqVO.getId());
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR);
if(planDO.getIsTop()){
}else {
List<PlanDO> plan = pageReqVO.getIsUp() ?
planMapper.selectPlanIds(planDO.getSort(), getUserOrganId()) :
planMapper.selectPlanIdsFalse(planDO.getSort(), getUserOrganId());
if (plan.isEmpty()) {
List<PlanDO> planDOS = planMapper.selectIsTopPlanList(getUserOrganId());
if(CollUtil.isEmpty(planDOS)) {
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ? "" : "最后");
}
plan.add(planDOS.get(0));
}
planDOPageResult.setRecords(plan);
planDOPageResult.setTotal(1L);
}
planPageTurning(pageReqVO,planDOPageResult);
}else {
QueryWrapperX<PlanDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
.eq("op.organ_id",getUserOrganId())
@@ -1135,6 +1066,53 @@ public class PlanServiceImpl implements PlanService {
// 排单翻页
private void planPageTurning(PlanPageReqVO pageReqVO,IPage<PlanDO> planDOPageResult) {
PlanDO planDO = planMapper.selectById(pageReqVO.getId());
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR);
List<PlanDO> plan;
// 置顶时进行翻页
if(Boolean.TRUE.equals(planDO.getIsTop())){
plan = Boolean.TRUE.equals(pageReqVO.getIsUp()) ?
planMapper.selectIsTopUpPlan(planDO.getUpdateTime(), getUserOrganId()) :
planMapper.selectIsTopDownPlan(planDO.getUpdateTime(), getUserOrganId());
}
// 非置顶进行翻页
else {
plan = Boolean.TRUE.equals(pageReqVO.getIsUp()) ?
planMapper.selectPlanIds(planDO.getSort(), getUserOrganId()) :
planMapper.selectPlanIdsFalse(planDO.getSort(), getUserOrganId());
if (plan.isEmpty() && Boolean.TRUE.equals(pageReqVO.getIsUp())) {
List<PlanDO> planDOS = planMapper.selectIsTopPlanList(getUserOrganId());
AssertUtils.notEmpty(planDOS,NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE,Boolean.TRUE.equals(pageReqVO.getIsUp()) ? "" : "最后");
plan.add(planDOS.get(0));
}
}
AssertUtils.notEmpty(plan,NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE,Boolean.TRUE.equals(pageReqVO.getIsUp()) ? "" : "最后");
planDOPageResult.setRecords(plan);
planDOPageResult.setTotal(1L);
}
@Transactional(rollbackFor = Exception.class)
@@ -1168,7 +1146,7 @@ public class PlanServiceImpl implements PlanService {
AssertUtils.notEmpty(deletePlateIds,DELETE_PLAN_PLATE_DATA_ERROR);
List<Long> deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).toList();
List<Long> deleteOrderIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getOrderId).distinct().toList();
AssertUtils.notEmpty(deleteOrderIds,DELETE_PLAN_PLATE_DATA_ERROR);
@@ -1252,7 +1230,7 @@ public class PlanServiceImpl implements PlanService {
// 查询排单对应的小板ID的数量
List<PlanItemDO> planItemDOS = planItemMapper.selectPlanPlateList(deletePlanIds, deleteOrderIds, getUserOrganId());
List<PlanItemDO> planItemDOS = planItemMapper.selectPlanPlateList(deletePlanIds, null, getUserOrganId());
List<Long> planIds = planItemDOS.stream().map(PlanItemDO::getPlanId).distinct().toList();
@@ -1278,17 +1256,14 @@ public class PlanServiceImpl implements PlanService {
List<PlanDO> planDOList = planDOS.stream().filter(f -> planIds.contains(f.getId())).toList();
List<Long> planOrderIds = planItemDOS.stream().map(PlanItemDO::getOrderId).distinct().toList();
if(planOrderIds.size() != deleteOrderIds.size()){
planDOList.forEach(f->{
String string = planItemDOS.stream().filter(p -> f.getId().equals(p.getPlanId())).map(PlanItemDO::getOrderId).distinct().toList().toString();
f.setOrderNos(string);
});
planDOList.forEach(f->{
f.setOrderNos(planItemDOS.stream().filter(p->f.getId().equals(p.getPlanId())).map(PlanItemDO::getOrderId).distinct().toString());
});
planMapper.updateBatch(planDOList);
planMapper.updateBatch(planDOList);
}
}
@@ -1361,6 +1336,8 @@ public class PlanServiceImpl implements PlanService {
planItemMapper.insertBatch(planItemDOS);
planMapper.updateBatch(planDOS);
}
@@ -1518,6 +1495,61 @@ public class PlanServiceImpl implements PlanService {
// 混单时判断是否进行板材对应并创建排单
private void mixConfigPlateCorresponding(List<PlanActualGoodsList> planActualGoodsLists,
List<PlanActualGoodsModelDO> planActualGoodsModelDOS,
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<SavePlanPlateList.GoodsItemList> goodsItemList,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser,
Integer mixedType){
Map<String, List<Long>> grouped;
if(CollUtil.isNotEmpty(planActualGoodsLists)) {
getCreatePlanMultipleGoodsList(planActualGoodsLists,planItemDOS,plateItemList,planActualGoodsModelDOS,planDOS,processId,loginUser);
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
// 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThicknessEqualToOne(goodsItemList);
}else {
grouped = groupByThicknessEqualToOne(goodsItemList);
}
if(CollUtil.isNotEmpty(grouped)) {
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType());
}
}else {
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
// 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThickness(goodsItemList);
}else {
// 筛选出厚度相同的大板
grouped = groupByThickness(goodsItemList);
}
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser,PlanTypeEnum.ORDERPLAN.getType());
}
planDOS.forEach(f->f.setFilter(f.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType()) ? mixedType : 0));
}
private void updateProcessSchemeStatus(List<Long> planIds) {
@@ -1618,12 +1650,12 @@ public class PlanServiceImpl implements PlanService {
private void getCreatePlanMultipleGoodsList(List<PlanActualGoodsList> planActualGoodsLists,
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<PlanActualGoodsModelDO> planActualGoodsModelDOS ,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser) {
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<PlanActualGoodsModelDO> planActualGoodsModelDOS ,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser) {
planActualGoodsLists.forEach(f -> {
@@ -1674,11 +1706,12 @@ public class PlanServiceImpl implements PlanService {
private void createPlanAndPlateDataList(Map<String, List<Long>> grouped,
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser){
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser,
Integer planType){
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
@@ -1698,7 +1731,7 @@ public class PlanServiceImpl implements PlanService {
planDOS.add(PlanDO.builder()
.id(planId)
.sort(sort.get())
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
.type(planType)
.processId(processId)
.orderNos(orderIdList.toString())
.produceTime(null)
@@ -10,8 +10,10 @@ 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.MixConfigTypeEnum;
import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum;
import com.cf.imes.framework.common.enums.OrderPlateTypeEnum;
import com.cf.imes.framework.common.enums.PlanTypeEnum;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult;
@@ -25,6 +27,7 @@ import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList;
import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
@@ -46,6 +49,7 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.executor.enums.OrderItemType;
import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.module.executor.service.order.OrderInputProcessor;
import com.cf.imes.module.executor.service.plan.PlanService;
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
import com.cf.imes.module.system.enums.ErrorCodeConstants;
@@ -65,6 +69,7 @@ import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
/**
* 生产单板件 Service 实现类
@@ -113,6 +118,9 @@ public class PlateServiceImpl implements PlateService {
@Resource
private ESDocumentService esDocumentService;
@Resource
private OrderInputProcessor orderInputProcessor;
@Resource
private EsUtils esUtils;
@@ -124,6 +132,10 @@ public class PlateServiceImpl implements PlateService {
private static final String ORDER_PLATE_MODEL = "imes_order_plate_model";
private static final String FIELD_PLATE_ID = "plateId";
private static final String FIELD_OG_MATERIAL = "og.material";
private static final String FIELD_OG_BRAND = "og.brand";
private static final String FIELD_OG_COLOR = "og.color";
private static final String FIELD_OP_THICKNESS = "op.thickness";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -306,7 +318,6 @@ public class PlateServiceImpl implements PlateService {
statusList.add(OrderStatusEnum.IN_PRODUCTION.getStatus());
statusList.add(OrderStatusEnum.SORTED.getStatus());
Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize();
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
@@ -314,20 +325,84 @@ public class PlateServiceImpl implements PlateService {
.eq("o.deleted",false)
.in("o.status",statusList)
.isNull("opi.plan_id")
.isNotNull("op.id")
.isNotNull("op.id");
if(pageReqVO.getPlanId() != null){
Long planId = pageReqVO.getPlanId();
List<OrderGoodsResp> goodsRespVOS = planMapper.selectPlanGoodsList(planId, getUserOrganId());
AssertUtils.notEmpty(goodsRespVOS,PLAN_NOT_EXISTS);
PlanDO planDO = planMapper.selectById(planId);
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
List<String> material = goodsRespVOS.stream().map(OrderGoodsResp::getMaterial).distinct().toList();
List<String> color = goodsRespVOS.stream().map(OrderGoodsResp::getColor).distinct().toList();
List<String> brand = goodsRespVOS.stream().map(OrderGoodsResp::getBrand).distinct().toList();
List<BigDecimal> thickness = goodsRespVOS.stream().map(OrderGoodsResp::getThickness).distinct().toList();
// 混单
if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){
// 相同材质和厚度
if(planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){
queryWrapperX
.inIfPresent(FIELD_OG_MATERIAL,material)
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor())
.inIfPresent(FIELD_OP_THICKNESS,thickness);
}
// 相同厚度
else {
queryWrapperX
.likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial())
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor())
.inIfPresent(FIELD_OP_THICKNESS,thickness);
}
}
// 非混单
else {
queryWrapperX
.inIfPresent(FIELD_OG_MATERIAL,material)
.inIfPresent(FIELD_OG_BRAND,brand)
.inIfPresent(FIELD_OG_COLOR,color)
.inIfPresent(FIELD_OP_THICKNESS,thickness);
}
}
// 无排单ID时
else {
queryWrapperX
.likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial())
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor())
.eqIfPresent(FIELD_OP_THICKNESS,pageReqVO.getThickness());
}
queryWrapperX
.inIfPresent("op.goods_id",pageReqVO.getGoodsIdList())
.likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null)
.likeIfPresent("op.id",pageReqVO.getPlateId())
.likeIfPresent("op.name",pageReqVO.getPlateName())
.likeIfPresent("op.plate_no",pageReqVO.getPlateNo())
.likeIfPresent("op.custom_plate_no",pageReqVO.getCustomPlateNo())
.likeIfPresent("og.material",pageReqVO.getMaterial())
.likeIfPresent("og.color",pageReqVO.getColor())
.eqIfPresent("op.thickness",pageReqVO.getThickness())
.betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
.betweenIfPresent("op.thickness", new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()})
.betweenIfPresent(FIELD_OP_THICKNESS, new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()})
.eqIfPresent("op.texture",pageReqVO.getTexture())
.eqIfPresent("op.is_special_shaped",pageReqVO.getIsSpecialShaped())
.eqIfPresent("op.is_sculpt",pageReqVO.getIsSculpt())
@@ -336,6 +411,9 @@ public class PlateServiceImpl implements PlateService {
.orderByDesc("o.id");
Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize();
List<PlateResList> plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX,pageNo,pageReqVO.getPageSize());
if(CollUtil.isEmpty(plateResLists)){
@@ -456,6 +534,8 @@ public class PlateServiceImpl implements PlateService {
List<OrderBodyNumVO> orderBodyNumVOS = new ArrayList<>();
List<OrderModelDO> orderPlateModelDOS = new ArrayList<>();
List<String> goodsIds = new ArrayList<>(reqVO.stream().map(OptimizationSavePlateReqVO::getGoodsId).distinct().toList());
List<Long> orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList();
@@ -510,60 +590,71 @@ public class PlateServiceImpl implements PlateService {
.plateNum(f.getMultiple())
.build());
for (int i = 0; i < f.getMultiple(); i++) {
// 生成板编号
long obtainingTime = SnowflakeIdWorker3rd.obtainingTime();
// 生成板编号
long obtainingTime = SnowflakeIdWorker3rd.obtainingTime();
String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2);
String plateNo = (obtainingTime) + Long.toString(idWorker.nextId()).substring(2);
plateNoList.add(plateNo);
plateNoList.add(plateNo);
String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";";
String remake1 = f.getRemake1() == null ? "" : f.getRemake1() + ";";
String remake2 = f.getRemake2() == null ? "" : f.getRemake2();
String remake2 = f.getRemake2() == null ? "" : f.getRemake2();
// 小板ID
Long plateId = (Long) identifierGenerator.nextId(null);
// 小板ID
Long plateId = (Long) identifierGenerator.nextId(null);
plateDOS.add(PlateDO.builder()
.id(plateId)
.orderId(orderId)
.name(f.getName())
.plateNo(plateNo)
.type(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())
.isOptimized(true)
.thickness(goodsDO.getThickness())
.goodsId(goodsDO.getId())
.holeArrange(f.getPlaceHole())
.remark(remake1 + remake2)
.area(f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros())
.width(f.getWidth())
.height(f.getHeight())
.texture(f.getTexture())
.sealLeft(f.getSealLeft())
.sealRight(f.getSealRight())
.sealUp(f.getSealUp())
.sealDown(f.getSealDown())
.build());
// 生产单明细表新增数据
orderItemDOS.add(OrderItemDO.builder()
.orderId(f.getOrderId())
.type(OrderItemType.BOARD.getCode())
.roomId(f.getRoomId())
.bodyId(f.getBodyId())
.plateId(plateId)
.build());
plateDOS.add(PlateDO.builder()
.id(plateId)
.orderId(orderId)
.name(f.getName())
.plateNo(plateNo)
.type(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())
.isOptimized(true)
.thickness(goodsDO.getThickness())
.goodsId(goodsDO.getId())
.holeFace(f.getPlaceHole())
.remark(remake1 + remake2)
.area(f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros())
.width(f.getWidth())
.height(f.getHeight())
.texture(f.getTexture())
.sealLeft(f.getSealLeft())
.sealRight(f.getSealRight())
.sealUp(f.getSealUp())
.sealDown(f.getSealDown())
.build());
planItemDOS.add(PlanItemDO.builder()
.planId(f.getPlanId())
.goodsId(goodsDO.getId())
.orderId(f.getOrderId())
.plateId(plateId)
.build());
}
// 生产单造型数据
orderPlateModelDOS.add(OrderModelDO.builder()
.plateId(plateId)
.orderId(orderId)
.goodsId(goodsDO.getGoodsId())
.plateGoodsId(goodsDO.getId())
.texture(f.getTexture())
.boardType(OrderPlateTypeEnum.SELFINCREASINGBOARD.getDescription())
.build());
// 生产单明细表新增数据
orderItemDOS.add(OrderItemDO.builder()
.orderId(f.getOrderId())
.type(OrderItemType.BOARD.getCode())
.roomId(f.getRoomId())
.bodyId(f.getBodyId())
.plateId(plateId)
.build());
planItemDOS.add(PlanItemDO.builder()
.planId(f.getPlanId())
.goodsId(goodsDO.getId())
.orderId(f.getOrderId())
.plateId(plateId)
.build());
insertPlateRespVOS.add(InsertPlateRespVO.builder()
.blockKey(f.getBlockKey())
@@ -600,6 +691,8 @@ public class PlateServiceImpl implements PlateService {
orderItemMapper.insertBatch(orderItemDOS);
orderInputProcessor.batchSaveModel(orderPlateModelDOS);
return insertPlateRespVOS;
}
@@ -102,9 +102,10 @@
FROM order_plan
WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and sort &lt; #{sort}
and deleted = false
and is_top = false
and status in (0,1)
and sort &lt; #{sort}
ORDER BY sort desc
limit 1;
@@ -120,6 +121,7 @@
WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and status in (0,1)
and sort &gt; #{sort}
ORDER BY sort
limit 1;
@@ -225,4 +227,56 @@
</select>
<select id="selectIsTopUpPlan" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select *
from order_plan
where organ_id = #{organId}
and deleted = false
and is_top = true
and status in (0,1)
and update_time &gt; #{updateTime}
order by update_time
limit 1;
</select>
<select id="selectIsTopDownPlan" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select *
from order_plan
where organ_id = #{organId}
and deleted = false
and status in (0,1)
and update_time &lt; #{updateTime}
ORDER BY is_top DESC,
CASE WHEN is_top = true THEN update_time END DESC,
CASE WHEN is_top = false THEN sort END
limit 1;
</select>
<select id="selectPlanGoodsList"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp">
select distinct og.thickness as thickness,
og.material as material,
og.color as color,
og.brand as brand
from order_plan_item opi
left join order_goods og on opi.goods_id = og.id and og.organ_id = #{organId}
where opi.organ_id = #{organId}
and opi.plan_id = #{planId};
</select>
</mapper>
@@ -49,6 +49,7 @@
<result property="height" column="height"/>
<result property="thickness" column="thickness"/>
<result property="color" column="color"/>
<result property="brand" column="brand"/>
<collection property="platePages" ofType="com.cf.imes.module.executor.controller.admin.plan.vo.PlatePage" resultMap="PlatePageMap"/>
@@ -71,7 +72,7 @@
og.material as material,
og.thickness as thickness ,
og.color as color,
og.brand as brand,
oi.plate_id as plateId,
op.area as plateArea