mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
排单添加小板过滤,添加小板,删除小板Bug修改
This commit is contained in:
+3
@@ -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;
|
||||
|
||||
|
||||
+3
@@ -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;
|
||||
|
||||
|
||||
+8
@@ -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;
|
||||
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ public class PlanDO extends BaseDO {
|
||||
/**
|
||||
* 板材过滤条件
|
||||
*/
|
||||
private String filter;
|
||||
private Integer filter;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
+12
@@ -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);
|
||||
}
|
||||
+1
@@ -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);
|
||||
|
||||
+132
-99
@@ -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)
|
||||
|
||||
+143
-50
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+57
-3
@@ -102,9 +102,10 @@
|
||||
FROM order_plan
|
||||
|
||||
WHERE organ_id = #{organId}
|
||||
AND deleted = false
|
||||
and is_top = false
|
||||
and sort < #{sort}
|
||||
and deleted = false
|
||||
and is_top = false
|
||||
and status in (0,1)
|
||||
and sort < #{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 > #{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 > #{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 < #{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>
|
||||
+2
-1
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user