This commit is contained in:
lym
2025-02-21 16:36:06 +08:00
41 changed files with 897 additions and 294 deletions
@@ -0,0 +1,26 @@
package com.cf.imes.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum MixConfigTypeEnum {
SAMEMATERIALANDTHICKNESS(1,"相同材质和厚度"),
SAMETHICKNESS(2,"相同厚度");
private Integer type;
private String filterName;
public boolean equals(Integer type) {
return this.type .equals(type) ;
}
public boolean equals(MixConfigTypeEnum enableStatusEnum) {
return enableStatusEnum != null && enableStatusEnum.type .equals(this.getType()) ;
}
}
@@ -140,7 +140,7 @@ public class OrderPlanApiImpl implements OrderPlanApi{
List<Long> planIds = planItemDOS.stream().map(PlanItemDO::getPlanId).distinct().toList(); List<Long> planIds = planItemDOS.stream().map(PlanItemDO::getPlanId).distinct().toList();
List<Long> planDOS = planMapper.selectPLanList(planIds,getUserOrganId()); List<Long> planDOS = planMapper.selectPlanList(planIds,getUserOrganId());
if(CollUtil.isEmpty(planDOS)){ if(CollUtil.isEmpty(planDOS)){
return CommonResult.success(true); return CommonResult.success(true);
@@ -111,8 +111,11 @@ public class PlanController {
@PostMapping("/setSort") @PostMapping("/setSort")
@Operation(summary = "设置排单优先级") @Operation(summary = "设置排单优先级")
@PreAuthorize("@ss.hasPermission('placeorder:priority')") @PreAuthorize("@ss.hasPermission('placeorder:priority')")
public CommonResult<Boolean> setSort(@Valid @NotEmpty(message = "参数不能空") @RequestBody List<SortVO> sortVos) { public CommonResult<Boolean> setSort(@Valid @NotEmpty(message = "参数不能空") @Size(max = 2,message = "做多两条数据") @RequestBody List<SortVO> sortVos) {
return success(planService.setSort(sortVos));
planService.setSort(sortVos);
return success(Boolean.TRUE);
} }
@@ -1,19 +0,0 @@
package com.cf.imes.module.executor.controller.admin.plan.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class GoodsNum {
@Schema(description = "生产单ID")
private Long orderId;
@Schema(description = "商品数量")
private Long goodsNum;
}
@@ -7,6 +7,7 @@ import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrder
import com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateDetailRespVO;
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO; import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
@@ -64,11 +65,13 @@ public class OrderSource {
private List<OrderPartsRemark> orderPartsRemarks; private List<OrderPartsRemark> orderPartsRemarks;
@Schema(description = "生产单包裹信息") @Schema(description = "生产单包裹信息")
private List<PrintOrderPackReqVO> orderPackReqVOS; private List<PrintOrderPackReqVO> orderPackReqVOS;
@Schema(description = "混单时选择的实际的大板信息")
private PlanActualGoodsModelDO planActualGoodsModelDO;
} }
@@ -0,0 +1,18 @@
package com.cf.imes.module.executor.controller.admin.plan.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class MixConfig {
@Schema(description = "是否开启混单,true 开启 false 关闭")
private Boolean isMixed;
@Schema(description = "混单方式 1 相同材质和厚度 2 相同厚度")
private Integer mixedType;
}
@@ -0,0 +1,27 @@
package com.cf.imes.module.executor.controller.admin.plan.vo;
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PlanActualGoodsList {
@Schema(description = "大板的分类ID")
private List<Long> ids;
@Schema(description = "混单时选择的实际的大板信息")
private PlanActualGoodsModelDO planActualGoodsModelDO;
}
@@ -0,0 +1,29 @@
package com.cf.imes.module.executor.controller.admin.plan.vo;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PlanActualGoodsResp {
@Schema(description = "大板的分类ID")
private List<Long> ids;
@Schema(description = "页面显示的大板信息")
private List<GoodsRespVO> goodsRespVOS;
}
@@ -26,7 +26,8 @@ public class PlanSaveReqVO {
@Schema(description = "是否已投产") @Schema(description = "是否已投产")
private Boolean isScheduled; private Boolean isScheduled;
@Schema(description = "需要进行排单的板材信息")
@Schema(description = "需要进行排单的板材信息-数据不改变")
private SavePlanPlateList savePlanPlateList; private SavePlanPlateList savePlanPlateList;
@@ -42,4 +43,8 @@ public class PlanSaveReqVO {
private List<OrderPlateIds> deleteOrderPlateIds; private List<OrderPlateIds> deleteOrderPlateIds;
@Schema(description = "混单创建排单时选择的实际的大板信息")
private List<PlanActualGoodsList> planActualGoodsListList;
} }
@@ -60,6 +60,8 @@ public class PlateResList {
private String material; private String material;
@Schema(description = "纹路") @Schema(description = "纹路")
private Integer texture; private Integer texture;
@Schema(description = "品牌")
private String brand;
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
} }
@@ -16,6 +16,9 @@ import java.util.List;
public class SavePlanPlateList { public class SavePlanPlateList {
@Schema(description = "混单的配置项",requiredMode = Schema.RequiredMode.REQUIRED)
private MixConfig mixConfig;
@Schema(description = "小板的信息列表",requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "小板的信息列表",requiredMode = Schema.RequiredMode.REQUIRED)
@Valid @Valid
@@ -74,6 +77,9 @@ public class SavePlanPlateList {
private String color; private String color;
@Schema(description = "大板的品牌")
private String brand;
} }
} }
@@ -12,6 +12,8 @@ import javax.validation.constraints.NotNull;
@Data @Data
@Valid @Valid
public class SortVO { public class SortVO {
@Schema(description = "排单id", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "排单id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "排单id 不能空") @NotNull(message = "排单id 不能空")
private Long planId; private Long planId;
@@ -20,8 +22,13 @@ public class SortVO {
@NotNull(message = "排序不能空") @NotNull(message = "排序不能空")
private Long sort; private Long sort;
@Schema(description = "是否置顶", requiredMode = Schema.RequiredMode.REQUIRED,example = "false") @Schema(description = "是否置顶", requiredMode = Schema.RequiredMode.REQUIRED,example = "false")
// @NotNull(message = "是否置顶不能空")
private Boolean isTopUp; private Boolean isTopUp;
@Schema(description = "是否第一条数据",example = "false")
private Boolean isOnePlan;
} }
@@ -22,12 +22,12 @@ public class GoodsPlateFilterPageReqVO extends PageParam {
@Schema(description = "排单ID",requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "排单ID",requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "排单ID不能为空") // @NotNull(message = "排单ID不能为空")
private Long planId; private Long planId;
@Schema(description = "厚度",requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "厚度",requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "厚度不能为空") // @NotNull(message = "厚度不能为空")
private BigDecimal thickness; private BigDecimal thickness;
@@ -37,7 +37,7 @@ public class GoodsPlateFilterPageReqVO extends PageParam {
@Schema(description = "颜色",requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "颜色",requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "颜色不能为空") // @NotNull(message = "颜色不能为空")
private String color; private String color;
@@ -0,0 +1,56 @@
package com.cf.imes.module.executor.dal.dataobject.goods;
import com.cf.imes.framework.es.core.dal.ESDocument;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "混单选择的实际的大板信息")
public class PlanActualGoodsModelDO extends ESDocument {
@Schema(description = "排单ID")
private Long planId;
@Schema(description = "商品 ID")
private String goodsId;
@Schema(description = "商品名称")
private String goodsName;
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板")
private String material;
@Schema(description = "颜色")
private String color;
@Schema(description = "品牌")
private String brand;
@Schema(description = "厚度")
private BigDecimal thickness;
// @Schema(description = "纹路")
// private Integer texture;
//
// @Schema(description = "宽度")
// private BigDecimal width;
//
// @Schema(description = "高度")
// private BigDecimal height;
//
// @Schema(description = "规格")
// private String spec;
}
@@ -43,6 +43,11 @@ public class PlanDO extends BaseDO {
*/ */
private Integer status; private Integer status;
/**
* 是否置顶,0 未置顶 1 已置顶
*/
private Boolean isTop;
/** /**
* 是否已投产:0未投产,1已投产 * 是否已投产:0未投产,1已投产
*/ */
@@ -8,6 +8,7 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsPageReqVO; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsPageReqVO;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsPlateIds; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsPlateIds;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList; import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
import com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO;
@@ -200,6 +201,8 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
} }
List<GoodsRespVO> selectNoOrderPlanGoods(@Param("ids") List<Long> ids, @Param("organId") Long organId);
List<Long> selectInsertGoodsIds(@Param("orderIds") List<Long> orderIds,@Param("goodsIds") List<Long> goodsIds,@Param("organId") Long organId); List<Long> selectInsertGoodsIds(@Param("orderIds") List<Long> orderIds,@Param("goodsIds") List<Long> goodsIds,@Param("organId") Long organId);
// 通过orderId查找板材 // 通过orderId查找板材
@@ -1,25 +1,20 @@
package com.cf.imes.module.executor.dal.mysql.plan; package com.cf.imes.module.executor.dal.mysql.plan;
import com.cf.imes.framework.common.pojo.PageResult; 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.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderStatisticsReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsAreaRespVO; 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.OrderPlanStatisticsCountRespVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlanPageReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单开料排单 Mapper * 生产单开料排单 Mapper
* *
@@ -28,48 +23,52 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge
@Mapper @Mapper
public interface PlanMapper extends BaseMapperX<PlanDO> { public interface PlanMapper extends BaseMapperX<PlanDO> {
default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) {
if(StringUtils.isNotBlank(reqVO.getCustomer())) {
return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>()
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getOrganId,getUserOrganId())
.eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled())
.eqIfPresent(PlanDO::getId, reqVO.getId())
.eqIfPresent(PlanDO::getSort, reqVO.getSort())
.eqIfPresent(PlanDO::getType, reqVO.getType())
.inIfPresent(PlanDO::getStatus, reqVO.getStatus())
.eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId())
.betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime())
.likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos())
.eqIfPresent(PlanDO::getRemark, reqVO.getRemark())
.betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(PlanDO::getOperator, reqVO.getOperator())
.betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime())
.leftJoin(PlanItemDO.class, PlanItemDO::getPlanId, PlanDO::getId)
.leftJoin(OrderDO.class, OrderDO::getId, PlanItemDO::getOrderId)
.like(OrderDO::getCustomer, reqVO.getCustomer())
.orderByDesc(PlanDO::getCreateTime)
.distinct()
);
}
return selectPage(reqVO, new LambdaQueryWrapperX<PlanDO>() IPage<PlanDO> selectPlanPageList(@Param("page") IPage page,@Param(Constants.WRAPPER) Wrapper<PlanDO> wrapper);
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getOrganId,getUserOrganId())
.eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled()) // default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) {
.eqIfPresent(PlanDO::getId, reqVO.getId()) // if(StringUtils.isNotBlank(reqVO.getCustomer())) {
.eqIfPresent(PlanDO::getSort, reqVO.getSort()) // return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>()
.eqIfPresent(PlanDO::getType, reqVO.getType()) // .eq(PlanDO::getDeleted,false)
.inIfPresent(PlanDO::getStatus, reqVO.getStatus()) // .eq(PlanDO::getOrganId,getUserOrganId())
.eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId()) // .eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled())
.betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime()) // .eqIfPresent(PlanDO::getId, reqVO.getId())
.likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos()) // .eqIfPresent(PlanDO::getSort, reqVO.getSort())
.eqIfPresent(PlanDO::getRemark, reqVO.getRemark()) // .eqIfPresent(PlanDO::getType, reqVO.getType())
.betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime()) // .inIfPresent(PlanDO::getStatus, reqVO.getStatus())
.eqIfPresent(PlanDO::getOperator, reqVO.getOperator()) // .eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId())
.betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime()) // .betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime())
.orderByDesc(PlanDO::getCreateTime)); // .likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos())
} // .eqIfPresent(PlanDO::getRemark, reqVO.getRemark())
// .betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime())
// .eqIfPresent(PlanDO::getOperator, reqVO.getOperator())
// .betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime())
// .leftJoin(PlanItemDO.class, PlanItemDO::getPlanId, PlanDO::getId)
// .leftJoin(OrderDO.class, OrderDO::getId, PlanItemDO::getOrderId)
// .like(OrderDO::getCustomer, reqVO.getCustomer())
// .orderByDesc(PlanDO::getCreateTime)
// .distinct()
// );
// }
//
// return selectPage(reqVO, new LambdaQueryWrapperX<PlanDO>()
// .eq(PlanDO::getDeleted,false)
// .eq(PlanDO::getOrganId,getUserOrganId())
// .eqIfPresent(PlanDO::getIsScheduled,reqVO.getIsScheduled())
// .eqIfPresent(PlanDO::getId, reqVO.getId())
// .eqIfPresent(PlanDO::getSort, reqVO.getSort())
// .eqIfPresent(PlanDO::getType, reqVO.getType())
// .inIfPresent(PlanDO::getStatus, reqVO.getStatus())
// .eqIfPresent(PlanDO::getMachineId, reqVO.getMachineId())
// .betweenIfPresent(PlanDO::getPlanTime, reqVO.getPlanTime())
// .likeIfPresent(PlanDO::getOrderNos, reqVO.getOrderNos())
// .eqIfPresent(PlanDO::getRemark, reqVO.getRemark())
// .betweenIfPresent(PlanDO::getCreateTime, reqVO.getCreateTime())
// .eqIfPresent(PlanDO::getOperator, reqVO.getOperator())
// .betweenIfPresent(PlanDO::getProduceTime, reqVO.getProduceTime())
// .orderByDesc(PlanDO::getCreateTime));
// }
List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId); List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId);
@@ -103,11 +102,11 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<PlanDO> selectPlanIds(@Param("createTime") String createTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId); List<PlanDO> selectPlanIds(@Param("sort") Long sort,@Param("organId") Long organId);
List<PlanDO> selectPlanIdsFalse(@Param("createTime") String createTime,@Param("sort") Long sort,@Param("organId") Long organId,@Param("planId") Long planId); List<PlanDO> selectPlanIdsFalse(@Param("sort") Long sort,@Param("organId") Long organId);
List<PlanDO> selectPlanStatus(@Param("planIds") List<Long> planIds,@Param("organId") Long organId); List<PlanDO> selectPlanStatus(@Param("planIds") List<Long> planIds,@Param("organId") Long organId);
@@ -116,7 +115,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<Long> selectPLanList(@Param("planIds") List<Long> planIds, @Param("organId") Long organId); List<Long> selectPlanList(@Param("planIds") List<Long> planIds, @Param("organId") Long organId);
@@ -129,13 +128,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
} }
default List<PlanDO> selectPlanSortList(List<Integer> status,Long organId) { List<PlanDO> selectPlanSortList(@Param("status") List<Integer> status,@Param("organId") Long organId);
return selectList( new LambdaQueryWrapperX<PlanDO>()
.eq(PlanDO::getOrganId,organId)
.eq(PlanDO::getDeleted,false)
.in(PlanDO::getStatus,status)
.orderByAsc(PlanDO::getSort));
}
@@ -147,4 +140,18 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.select(PlanDO::getId)); .select(PlanDO::getId));
} }
PlanDO selectSortOnePlan(@Param("sort") Long sort, @Param("organId") Long organId);
PlanDO selectLostPlan(@Param("sort") Long sort, @Param("organId") Long organId);
default List<PlanDO> selectIsTopPlanList(Long organId) {
return selectList( new LambdaQueryWrapperX<PlanDO>()
.eq(PlanDO::getOrganId,organId)
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getIsTop,true)
.orderByAsc(PlanDO::getUpdateTime));
}
} }
@@ -45,11 +45,11 @@ public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
IPage<PlateResList> selectPlateListByPlateIds(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper); IPage<PlateResList> selectPlateListByPlateIds(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper);
IPage<OrderGoodsResp> selectNoPlanGoodsByRoomAndBodyIds(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper); IPage<OrderGoodsResp> selectNoPlanGoodsByRoomAndBodyIds(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper,@Param("organId") Long organId);
IPage<OrderGoodsResp> selectNoPlanGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper); IPage<OrderGoodsResp> selectNoPlanGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper,@Param("organId") Long organId);
List<OrderGoodsResp> selectNoOrderGoodsIdList(@Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper); List<OrderGoodsResp> selectNoOrderGoodsIdList(@Param(Constants.WRAPPER) Wrapper<PlanItemDO> wrapper,@Param("organId") Long organId);
List<OrderPlateIds> selectPlanIncrementPlate(@Param("noPlanIds") List<Long> noPlanIds,@Param("organId") Long organId); List<OrderPlateIds> selectPlanIncrementPlate(@Param("noPlanIds") List<Long> noPlanIds,@Param("organId") Long organId);
@@ -20,6 +20,8 @@ public interface OptimizePlanService {
String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model"; String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model";
String PLAN_ACTUAL_GOODS_MODEL = "imes_plan_actual_goods_model";
List<PlateOptimize> getPlateListByPlanId(Long planId); List<PlateOptimize> getPlateListByPlanId(Long planId);
@@ -37,6 +37,7 @@ import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
import com.cf.imes.module.executor.controller.admin.plan.vo.*; import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.dal.dataobject.goods.CutedBoardInfo; import com.cf.imes.module.executor.dal.dataobject.goods.CutedBoardInfo;
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO; import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
@@ -567,7 +568,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(goodsDOS,PLAN_GOODS_DATA_ERROR); AssertUtils.notEmpty(goodsDOS,PLAN_GOODS_DATA_ERROR);
List<Long> orderIds = goodsDOS.stream().map(GoodsReqVO::getOrderId).distinct().toList(); String orderNos = Optional.ofNullable(planDO.getOrderNos()).orElse("[]");
List<Long> orderIds = JSON.parseArray(orderNos).toJavaList(Long.class).stream().distinct().toList();
// List<Long> orderIds = goodsDOS.stream().map(GoodsReqVO::getOrderId).distinct().toList();
List<Long> ids = goodsDOS.stream().map(GoodsReqVO::getId).toList(); List<Long> ids = goodsDOS.stream().map(GoodsReqVO::getId).toList();
@@ -614,6 +619,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<OptimizeRemainPlate> optimizeRemainPlates = BeanUtils.toBean(remainPlateDOS, OptimizeRemainPlate.class); List<OptimizeRemainPlate> optimizeRemainPlates = BeanUtils.toBean(remainPlateDOS, OptimizeRemainPlate.class);
// 获取混单时选择的实际开料的大板信息
List<PlanActualGoodsModelDO> planActualGoodsModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_ACTUAL_GOODS_MODEL, PlanActualGoodsModelDO.class);
// PlanActualGoodsModelDO planActualGoodsModelDO = new PlanActualGoodsModelDO();
//
// if(CollUtil.isNotEmpty(planActualGoodsModelDOS)){
//
// planActualGoodsModelDO = planActualGoodsModelDOS.get(0);
// }
// 查询生产单对应的配件信息 // 查询生产单对应的配件信息
List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId());
@@ -643,6 +658,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.goodsList(goodsDOS) .goodsList(goodsDOS)
.plateList(plateDetailRespVOS) .plateList(plateDetailRespVOS)
.plateModels(orderModelDOS) .plateModels(orderModelDOS)
.planActualGoodsModelDO(CollUtil.isNotEmpty(planActualGoodsModelDOS) ? planActualGoodsModelDOS.get(0) : null)
.optimizeRemainPlates(optimizeRemainPlates) .optimizeRemainPlates(optimizeRemainPlates)
.orderPartsRespVOS(printOrderPartsRespVOS) .orderPartsRespVOS(printOrderPartsRespVOS)
.orderPartsRemarks(orderPartsRemarks) .orderPartsRemarks(orderPartsRemarks)
@@ -661,9 +677,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
Long processId = req.getProcessId(); Long processId = req.getProcessId();
List<ActualGoodsList> actualGoodsLists = Optional.ofNullable(boardModelDO.getActualGoodsList()).orElse(new ArrayList<>()); // List<ActualGoodsList> actualGoodsLists = Optional.ofNullable(boardModelDO.getActualGoodsList()).orElse(new ArrayList<>());
//
AssertUtils.notEmpty(actualGoodsLists,PLAN_NO_ACTUAL_PLATE); // AssertUtils.notEmpty(actualGoodsLists,PLAN_NO_ACTUAL_PLATE);
Long planId = boardModelDO.getPlanId(); Long planId = boardModelDO.getPlanId();
@@ -64,11 +64,12 @@ public interface PlanService {
PageResult<OrderRespVO> getOrderByPlanId(PlanOrderPageReqVO pageReqVO); PageResult<OrderRespVO> getOrderByPlanId(PlanOrderPageReqVO pageReqVO);
Boolean setSort(List<SortVO> sortVos); void setSort(List<SortVO> sortVos);
List<PlateResList> getPlateList(List<Long> planIds); List<PlateResList> getPlateList(List<Long> planIds);
List<OrderRoomBodyList> getOrderRoomBody(List<Long> orderIds); List<OrderRoomBodyList> getOrderRoomBody(List<Long> orderIds);
List<PlanActualGoodsResp> getPlanGoodsList(SavePlanPlateList savePlanPlateList);
} }
@@ -6,6 +6,7 @@ import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.UpdateByQueryRequest; import co.elastic.clients.elasticsearch.core.UpdateByQueryRequest;
import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonData;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
@@ -19,6 +20,7 @@ import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList; import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PlatePlaceInfo; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PlatePlaceInfo;
@@ -27,6 +29,7 @@ import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds; import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO; import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
@@ -116,6 +119,8 @@ public class PlanServiceImpl implements PlanService {
private static final String PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL = "imes_plan_process_scheme_optimize_model"; 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";
@Resource @Resource
private ElasticsearchClient elasticsearchClient; private ElasticsearchClient elasticsearchClient;
@@ -151,9 +156,7 @@ public class PlanServiceImpl implements PlanService {
Long processId = systemConfigRespDTO.getId(); Long processId = systemConfigRespDTO.getId();
Boolean isMix = systemConfigApi.getMultiColorConfigStatus().getCheckedData(); List<PlanDO> planDOS = new ArrayList<>();
ArrayList<PlanDO> planDOS = new ArrayList<>();
List<Long> ids = new ArrayList<>(); List<Long> ids = new ArrayList<>();
@@ -163,54 +166,56 @@ public class PlanServiceImpl implements PlanService {
List<PlanItemDO> planItemDOS = new ArrayList<>(); List<PlanItemDO> planItemDOS = new ArrayList<>();
List<PlanActualGoodsModelDO> planActualGoodsModelDOS = new ArrayList<>();
SavePlanPlateList savePlanPlateList = Optional.ofNullable(createReqVO.getSavePlanPlateList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR)); SavePlanPlateList savePlanPlateList = Optional.ofNullable(createReqVO.getSavePlanPlateList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
if (Boolean.TRUE.equals(isMix)) { 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.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<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 = groupByMaterialAndThickness(goodsItemList);
// 进行数据处理:value 里为 大板的分类ID Map<String, List<Long>> grouped = new HashMap<>();
grouped.forEach((key, value) -> {
// 查找和大板分类ID相同的小板的数据 if(CollUtil.isNotEmpty(planActualGoodsLists)) {
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> value.contains(p.getId())).toList();
List<Long> orderIdList = plateList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList(); getCreatePlanMultipleGoodsList(planActualGoodsLists,planItemDOS,plateItemList,planActualGoodsModelDOS,planDOS,processId,loginUser);
AtomicLong sort = new AtomicLong(System.currentTimeMillis()); if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
sort.addAndGet(1); // 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThicknessEqualToOne(goodsItemList);
Long planId = (Long) identifierGenerator.nextId(null); }else {
// 创建排单 grouped = groupByThicknessEqualToOne(goodsItemList);
planDOS.add(PlanDO.builder() }
.id(planId)
.sort(sort.get())
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
.processId(processId)
.orderNos(orderIdList.toString())
.produceTime(null)
.status(PlanStatusEnum.NOCUTTING.getStatus())
.operator(loginUser.getNickname())
.planTime(LocalDateTime.now())
.build());
plateList.forEach(i -> if(CollUtil.isNotEmpty(grouped)) {
planItemDOS.add(PlanItemDO.builder() createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
.planId(planId) }
.plateId(i.getPlateId())
.orderId(i.getOrderId())
.goodsId(i.getId())
.build()));
}); }else {
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.equals(mixedType)){
// 筛选出材质和厚度相同的大板
grouped = groupByMaterialAndThickness(goodsItemList);
}else {
// 筛选出厚度相同的大板
grouped = groupByThickness(goodsItemList);
}
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
}
// 获取所有的大板ID // 获取所有的大板ID
ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList()); ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList());
@@ -227,45 +232,9 @@ public class PlanServiceImpl implements PlanService {
List<SavePlanPlateList.GoodsItemList> goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR)); List<SavePlanPlateList.GoodsItemList> goodsItemList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
// 查找材质和厚度和颜色相同的大板 // 查找材质和厚度和颜色相同的大板
Map<String, List<Long>> grouped = groupByMaterialAndThicknessAndColor(goodsItemList); Map<String, List<Long>> grouped = groupByMaterialAndThicknessAndColorAndBrand(goodsItemList);
// 进行数据处理:value 里为 大板的分类ID
grouped.forEach((key, value) -> {
// 查找和大板分类ID相同的小板的数据
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> value.contains(p.getId())).toList();
List<Long> orderIdList = plateList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList();
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
sort.addAndGet(1);
Long planId = (Long) identifierGenerator.nextId(null);
// 创建排单
planDOS.add(PlanDO.builder()
.id(planId)
.sort(sort.get())
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
.processId(processId)
.orderNos(orderIdList.toString())
.produceTime(null)
.status(PlanStatusEnum.NOCUTTING.getStatus())
.operator(loginUser.getNickname())
.planTime(LocalDateTime.now())
.build());
plateList.forEach(i -> {
planItemDOS.add(PlanItemDO.builder()
.planId(planId)
.plateId(i.getPlateId())
.orderId(i.getOrderId())
.goodsId(i.getId())
.build());
});
});
createPlanAndPlateDataList(grouped,planItemDOS,plateItemList,planDOS,processId,loginUser);
// 获取所有的大板ID // 获取所有的大板ID
ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList()); ids.addAll(goodsItemList.stream().map(SavePlanPlateList.GoodsItemList::getId).distinct().toList());
@@ -294,13 +263,13 @@ public class PlanServiceImpl implements PlanService {
planMapper.insertBatch(planDOS); planMapper.insertBatch(planDOS);
// plateMapper.updatePlateIsOptimized(orderIds, ids, plateIds, getUserOrganId());
planItemMapper.insertBatch(planItemDOS, planItemDOS.size()); planItemMapper.insertBatch(planItemDOS, planItemDOS.size());
if(CollUtil.isNotEmpty(planActualGoodsModelDOS)) {
esUtils.saveEsDocument(PLAN_ACTUAL_GOODS_MODEL, planActualGoodsModelDOS);
}
} }
@@ -483,8 +452,9 @@ public class PlanServiceImpl implements PlanService {
@Override @Override
public PageResult<PlanRespVO> getPlanPage(PlanPageReqVO pageReqVO) { public PageResult<PlanRespVO> getPlanPage(PlanPageReqVO pageReqVO) {
PageResult<PlanDO> planDOPageResult = new PageResult<>(); PageDTO<PlanDO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<PlanDO> planDOPageResult = new PageDTO<>();
if(pageReqVO.getIsUp() != null) { if(pageReqVO.getIsUp() != null) {
@@ -492,32 +462,66 @@ public class PlanServiceImpl implements PlanService {
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR);
List<PlanDO> plan = pageReqVO.getIsUp() ?
planMapper.selectPlanIds(planDO.getCreateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()) :
planMapper.selectPlanIdsFalse(planDO.getCreateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()); if(planDO.getIsTop()){
if (plan.isEmpty()) {
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ? "" : "最后");
}
planDOPageResult.setList(plan);
planDOPageResult.setTotal(1L);
}else { }else {
planDOPageResult = planMapper.selectPage(pageReqVO); List<PlanDO> plan = pageReqVO.getIsUp() ?
if (CollUtil.isEmpty(planDOPageResult.getList())) { 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);
}
}else {
QueryWrapperX<PlanDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX
.eq("op.organ_id",getUserOrganId())
.eq(FIELD_OP_DELETED,false)
.eqIfPresent("op.is_scheduled",pageReqVO.getIsScheduled())
.eqIfPresent(FIELD_OP_ID, pageReqVO.getId())
.eqIfPresent("op.sort", pageReqVO.getSort())
.eqIfPresent("op.type", pageReqVO.getType())
.inIfPresent("op.status", pageReqVO.getStatus())
.betweenIfPresent("op.plan_time", pageReqVO.getPlanTime())
.likeIfPresent("op.order_nos", pageReqVO.getOrderNos())
.likeIfPresent(FIELD_CUSTOMER, pageReqVO.getCustomer());
planDOPageResult = planMapper.selectPlanPageList(page,queryWrapperX);
if (CollUtil.isEmpty(planDOPageResult.getRecords())) {
return new PageResult<>(); return new PageResult<>();
} }
} }
List<Long> processIds = planDOPageResult.getList().stream().map(PlanDO::getProcessId).distinct().toList(); List<Long> processIds = planDOPageResult.getRecords().stream().map(PlanDO::getProcessId).distinct().toList();
List<Long> planIds = planDOPageResult.getList().stream().map(PlanDO::getId).toList(); List<Long> planIds = planDOPageResult.getRecords().stream().map(PlanDO::getId).toList();
List<SystemConfigRespDTO> configDOS = systemConfigApi.getProcessByIds(processIds).getData(); List<SystemConfigRespDTO> configDOS = systemConfigApi.getProcessByIds(processIds).getData();
@@ -548,11 +552,10 @@ public class PlanServiceImpl implements PlanService {
List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId()); List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId());
PageResult<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class); List<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult.getRecords(), PlanRespVO.class);
planRespVOPageResult.forEach(e -> {
planRespVOPageResult.getList().forEach(e -> {
// 方案信息 // 方案信息
e.setProcessName(getProcessName(e.getProcessId(), configDOS)); e.setProcessName(getProcessName(e.getProcessId(), configDOS));
// 大板信息列表 // 大板信息列表
@@ -572,7 +575,7 @@ public class PlanServiceImpl implements PlanService {
}); });
return planRespVOPageResult; return new PageResult<>(planRespVOPageResult, planDOPageResult.getTotal());
} }
@@ -762,7 +765,7 @@ public class PlanServiceImpl implements PlanService {
.likeIfPresent(FIELD_ADDRESS, pageReqVO.getConsigneeAddress()) .likeIfPresent(FIELD_ADDRESS, pageReqVO.getConsigneeAddress())
.betweenIfPresent(FIELD_ORDER_DATE, pageReqVO.getCreateTime()); .betweenIfPresent(FIELD_ORDER_DATE, pageReqVO.getCreateTime());
orderGoodsResps = planItemMapper.selectNoPlanGoodsByRoomAndBodyIds(page,queryWrapperX); orderGoodsResps = planItemMapper.selectNoPlanGoodsByRoomAndBodyIds(page,queryWrapperX,getUserOrganId());
}else { }else {
@@ -781,7 +784,7 @@ public class PlanServiceImpl implements PlanService {
.likeIfPresent(FIELD_ADDRESS, pageReqVO.getConsigneeAddress()) .likeIfPresent(FIELD_ADDRESS, pageReqVO.getConsigneeAddress())
.betweenIfPresent(FIELD_ORDER_DATE, pageReqVO.getCreateTime()); .betweenIfPresent(FIELD_ORDER_DATE, pageReqVO.getCreateTime());
orderGoodsResps = planItemMapper.selectNoPlanGoodsList(page,queryWrapperX); orderGoodsResps = planItemMapper.selectNoPlanGoodsList(page,queryWrapperX,getUserOrganId());
} }
@@ -812,7 +815,7 @@ public class PlanServiceImpl implements PlanService {
.inIfPresent("og.thickness",thickness) .inIfPresent("og.thickness",thickness)
.inIfPresent("og.brand",brand); .inIfPresent("og.brand",brand);
List<OrderGoodsResp> orderGoodsIdList = planItemMapper.selectNoOrderGoodsIdList(queryWrapperX); List<OrderGoodsResp> orderGoodsIdList = planItemMapper.selectNoOrderGoodsIdList(queryWrapperX,getUserOrganId());
mergeOrderGoodsLists(records,orderGoodsIdList); mergeOrderGoodsLists(records,orderGoodsIdList);
@@ -889,39 +892,74 @@ public class PlanServiceImpl implements PlanService {
@Override @Override
public Boolean setSort(List<SortVO> sortVos) { @Transactional(rollbackFor = Exception.class)
public void setSort(List<SortVO> sortVos) {
List<Long> planIds = sortVos.stream().map(SortVO::getPlanId).toList();
for (Long planId : planIds) {
PlanDO planDO = planMapper.selectById(planId);
if(planDO == null){
throw exception(PLAN_NOT_DATA_EXISTS,planId);
}
}
if(sortVos.size() == 1){
SortVO sortVO = sortVos.get(0);
if(sortVO.getIsOnePlan() != null){
PlanDO planDO = planMapper.selectById(sortVO.getPlanId());
Long sort = planDO.getSort();
PlanDO plan = Boolean.TRUE.equals(sortVO.getIsOnePlan()) ?
planMapper.selectSortOnePlan(sort, getUserOrganId()) :
planMapper.selectLostPlan(sort, getUserOrganId());
AssertUtils.notEmpty(plan,PLAN_SORT_DATA_ERROR);
planDO.setSort(plan.getSort());
plan.setSort(sort);
planMapper.updateById(planDO);
planMapper.updateById(plan);
return;
}
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
.eq(PlanDO::getOrganId, getUserOrganId())
.eq(PlanDO::getDeleted,false)
.eq(PlanDO::getId,sortVO.getPlanId())
.set(PlanDO::getIsTop,sortVO.getIsTopUp()));
return;
}
ArrayList<PlanDO> planDOS = new ArrayList<>(); ArrayList<PlanDO> planDOS = new ArrayList<>();
Boolean isTopUp = sortVos.get(0).getIsTopUp();
if(Boolean.TRUE.equals(isTopUp)){
List<Integer> status = Arrays.asList(PlanStatusEnum.NOCUTTING.getStatus(),PlanStatusEnum.OPENING.getStatus());
// 后续的查询需要加上 是否置顶 的判断条件
List<PlanDO> planDOList = planMapper.selectPlanSortList(status, getUserOrganId());
if(CollUtil.isNotEmpty(planDOList)) {
// 修改为 未置顶
// planDOList.forEach(f->f);
planDOS.addAll(planDOList);
}
}
sortVos.forEach(e -> { sortVos.forEach(e -> {
planDOS.add(PlanDO.builder() planDOS.add(PlanDO.builder()
.id(e.getPlanId()) .id(e.getPlanId())
.sort(e.getSort()) .sort(e.getSort())
// .isTopUp(e.getIsTopUp())
.build()); .build());
}); });
planMapper.updateBatch(planDOS); planMapper.updateBatch(planDOS);
return Boolean.TRUE;
} }
@@ -968,6 +1006,48 @@ public class PlanServiceImpl implements PlanService {
} }
@Override
public List<PlanActualGoodsResp> getPlanGoodsList(SavePlanPlateList savePlanPlateList) {
if(savePlanPlateList.getMixConfig() == null){
return new ArrayList<>();
}
Integer mixedType = Optional.ofNullable(savePlanPlateList.getMixConfig().getMixedType()).orElse(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType());
List<SavePlanPlateList.GoodsItemList> goodsItemListList = Optional.ofNullable(savePlanPlateList.getGoodsItemList()).orElseThrow(()-> new ServiceException(PLAN_PLATE_DATA_ERROR));
List<PlanActualGoodsResp> planActualGoodsResps = new ArrayList<>();
Map<String, List<Long>> grouped;
if(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType().equals(mixedType)){
grouped = groupByMaterialAndThicknessFilterLessThanOne(goodsItemListList);
}else {
grouped = groupByThicknessFilterLessThanOne(goodsItemListList);
}
grouped.forEach((key,value) ->{
List<GoodsRespVO> goodsRespVOS = goodsMapper.selectNoOrderPlanGoods(value, getUserOrganId());
planActualGoodsResps.add(
PlanActualGoodsResp.builder()
.ids(value)
.goodsRespVOS(goodsRespVOS)
.build()
);
});
return planActualGoodsResps;
}
private PlanDO validatePlan(Long id) { private PlanDO validatePlan(Long id) {
@@ -1311,14 +1391,119 @@ public class PlanServiceImpl implements PlanService {
return groupedItems; return groupedItems;
} }
public static Map<String, List<Long>> groupByThickness(List<SavePlanPlateList.GoodsItemList> items) {
public static Map<String, List<Long>> groupByMaterialAndThicknessAndColor(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>(); Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) { for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键 // 将 material 和 thickness 组合成键
String key = item.getMaterial() + "|" + item.getThickness() + "|" + item.getColor(); String key = item.getThickness().toString();
// 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>());
// 添加当前项的 id 到对应的分组
groupedItems.get(key).add(item.getId());
}
return groupedItems;
}
public static Map<String, List<Long>> groupByMaterialAndThicknessFilterLessThanOne(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键
String key = item.getMaterial() + "|" + item.getThickness();
// 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>());
// 添加当前项的 id 到对应的分组
groupedItems.get(key).add(item.getId());
}
// 过滤掉只包含一个 id 的分组(可选,视需求)
groupedItems.entrySet().removeIf(entry -> entry.getValue().size() < 2);
return groupedItems;
}
public static Map<String, List<Long>> groupByThicknessFilterLessThanOne(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键
String key = item.getThickness().toString();
// 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>());
// 添加当前项的 id 到对应的分组
groupedItems.get(key).add(item.getId());
}
// 过滤掉只包含一个 id 的分组(可选,视需求)
groupedItems.entrySet().removeIf(entry -> entry.getValue().size() < 2);
return groupedItems;
}
public static Map<String, List<Long>> groupByMaterialAndThicknessEqualToOne(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键
String key = item.getMaterial() + "|" + item.getThickness();
// 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>());
// 添加当前项的 id 到对应的分组
groupedItems.get(key).add(item.getId());
}
// 过滤掉只包含一个 id 的分组(可选,视需求)
groupedItems.entrySet().removeIf(entry -> entry.getValue().size() > 1);
return groupedItems;
}
public static Map<String, List<Long>> groupByThicknessEqualToOne(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键
String key = item.getThickness().toString();
// 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>());
// 添加当前项的 id 到对应的分组
groupedItems.get(key).add(item.getId());
}
// 过滤掉只包含一个 id 的分组(可选,视需求)
groupedItems.entrySet().removeIf(entry -> entry.getValue().size() > 1);
return groupedItems;
}
public static Map<String, List<Long>> groupByMaterialAndThicknessAndColorAndBrand(List<SavePlanPlateList.GoodsItemList> items) {
Map<String, List<Long>> groupedItems = new HashMap<>();
for (SavePlanPlateList.GoodsItemList item : items) {
// 将 material 和 thickness 组合成键
String key = item.getMaterial() + "|" + item.getThickness() + "|" + item.getColor()+ "|" + item.getBrand();
// 如果键不存在,初始化一个新的列表 // 如果键不存在,初始化一个新的列表
groupedItems.putIfAbsent(key, new ArrayList<>()); groupedItems.putIfAbsent(key, new ArrayList<>());
@@ -1432,6 +1617,107 @@ 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) {
planActualGoodsLists.forEach(f -> {
// 查找和大板分类ID相同的小板的数据
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> f.getIds().contains(p.getId())).toList();
List<Long> orderIdList = plateList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList();
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
sort.addAndGet(1);
Long planId = (Long) identifierGenerator.nextId(null);
// 创建排单
planDOS.add(PlanDO.builder()
.id(planId)
.sort(sort.get())
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
.processId(processId)
.orderNos(orderIdList.toString())
.produceTime(null)
.status(PlanStatusEnum.NOCUTTING.getStatus())
.operator(loginUser.getNickname())
.planTime(LocalDateTime.now())
.build());
plateList.forEach(i ->
planItemDOS.add(PlanItemDO.builder()
.planId(planId)
.plateId(i.getPlateId())
.orderId(i.getOrderId())
.goodsId(i.getId())
.build()));
if (f.getPlanActualGoodsModelDO() != null) {
planActualGoodsModelDOS.add(f.getPlanActualGoodsModelDO().setPlanId(planId));
}
});
}
private void createPlanAndPlateDataList(Map<String, List<Long>> grouped,
List<PlanItemDO> planItemDOS,
List<SavePlanPlateList.PlateItemList> plateItemList,
List<PlanDO> planDOS,
Long processId,
LoginUser loginUser){
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
// 进行数据处理:value 里为 大板的分类ID
grouped.forEach((key, value) -> {
// 查找和大板分类ID相同的小板的数据
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> value.contains(p.getId())).toList();
List<Long> orderIdList = plateList.stream().map(SavePlanPlateList.PlateItemList::getOrderId).distinct().toList();
sort.addAndGet(1);
Long planId = (Long) identifierGenerator.nextId(null);
// 创建排单
planDOS.add(PlanDO.builder()
.id(planId)
.sort(sort.get())
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
.processId(processId)
.orderNos(orderIdList.toString())
.produceTime(null)
.status(PlanStatusEnum.NOCUTTING.getStatus())
.operator(loginUser.getNickname())
.planTime(LocalDateTime.now())
.build());
plateList.forEach(i ->
planItemDOS.add(PlanItemDO.builder()
.planId(planId)
.plateId(i.getPlateId())
.orderId(i.getOrderId())
.goodsId(i.getId())
.build()));
});
}
} }
@@ -12,8 +12,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum; import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum;
import com.cf.imes.framework.common.enums.OrderPlateTypeEnum; import com.cf.imes.framework.common.enums.OrderPlateTypeEnum;
import com.cf.imes.framework.common.enums.PlanStatusEnum;
import com.cf.imes.framework.common.enums.PlanTypeEnum;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
@@ -67,7 +65,6 @@ 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.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; 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.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.*; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
/** /**
* 生产单板件 Service 实现类 * 生产单板件 Service 实现类
@@ -273,26 +270,26 @@ public class PlateServiceImpl implements PlateService {
@Override @Override
public PageResult<PlateGoodDO> getGoodsPlate(GoodsPlateFilterPageReqVO pageReqVO) { public PageResult<PlateGoodDO> getGoodsPlate(GoodsPlateFilterPageReqVO pageReqVO) {
PlanDO planDO = planMapper.selectById(pageReqVO.getPlanId()); // PlanDO planDO = planMapper.selectById(pageReqVO.getPlanId());
//
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); // AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
//
if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ // if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
throw exception(THIS_PLAN_PLATE_OPTIMIZE_IS_ALL); // throw exception(THIS_PLAN_PLATE_OPTIMIZE_IS_ALL);
} // }
//
//
if (planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())) { // if (planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())) {
//
pageReqVO.setColor(null); // pageReqVO.setColor(null);
//
} // }
//
//
if(planDO.getType().equals(PlanTypeEnum.ORDERPLAN.getType()) && pageReqVO.getFilterColor() != null){ // if(planDO.getType().equals(PlanTypeEnum.ORDERPLAN.getType()) && pageReqVO.getFilterColor() != null){
throw exception(PLAN_GOODS_IS_FILTER_DATA_ERROR); // throw exception(PLAN_GOODS_IS_FILTER_DATA_ERROR);
//
} // }
return plateGoodMapper.selectGoodsPage(pageReqVO, getUserOrganId()); return plateGoodMapper.selectGoodsPage(pageReqVO, getUserOrganId());
@@ -28,18 +28,11 @@
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO"> resultType="com.cf.imes.module.executor.controller.admin.plan.vo.GoodsReqVO">
select distinct select distinct
og.order_id,
og.raw_goods_id,
og.goods_id, og.goods_id,
og.goods_name, og.goods_name,
og.material, og.material,
og.color, og.color,
og.texture,
og.width,
og.height,
og.thickness, og.thickness,
og.price,
og.spec,
og.brand, og.brand,
og.remark, og.remark,
orp.id as remainId orp.id as remainId
@@ -316,9 +309,9 @@
from order_body ob from order_body ob
left join order_item oi on ob.organ_id = oi.organ_id and ob.order_id = oi.order_id and ob.id = oi.body_id left join order_item oi on ob.organ_id = oi.organ_id and ob.order_id = oi.order_id and ob.id = oi.body_id and oi.organ_id = #{organId}
left join order_plate op on oi.organ_id = op.organ_id and oi.order_id = op.order_id and oi.plate_id = op.id left join order_plate op on oi.organ_id = op.organ_id and oi.order_id = op.order_id and oi.plate_id = op.id and op.organ_id = #{organId}
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id and opi.organ_id = #{organId}
where ob.organ_id = #{organId} where ob.organ_id = #{organId}
and ob.order_id in and ob.order_id in
@@ -554,6 +547,29 @@
</select>
<select id="selectNoOrderPlanGoods"
resultType="com.cf.imes.module.executor.controller.admin.goods.vo.GoodsRespVO">
select distinct
goods_name,
material,
color,
thickness,
brand
from order_goods
where organ_id = #{organId}
and deleted = false
and id in
<foreach collection="ids" item="ids" open="(" close=")" separator=",">
#{ids}
</foreach>
</select> </select>
@@ -439,6 +439,7 @@
og.material as material, og.material as material,
og.color as color, og.color as color,
og.goods_id as goodsId, og.goods_id as goodsId,
og.brand as brand,
op.name as plateName, op.name as plateName,
op.height as height, op.height as height,
op.width as width, op.width as width,
@@ -10,6 +10,23 @@
--> -->
<select id="selectPlanPageList" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select distinct op.*
from order_plan op
left join order_plan_item opi on op.organ_id = opi.organ_id and op.id = opi.plan_id
left join orders o on opi.organ_id = o.organ_id and opi.order_id = o.id
${ew.customSqlSegment}
ORDER BY op.is_top DESC,
CASE WHEN op.is_top = true THEN op.update_time END DESC,
CASE WHEN op.is_top = false THEN op.sort END ;
</select>
<select id="selectPlateListByPlanId" <select id="selectPlateListByPlanId"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize"
parameterType="java.lang.Long"> parameterType="java.lang.Long">
@@ -81,13 +98,14 @@
<select id="selectPlanIds" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO"> <select id="selectPlanIds" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select * from order_plan where SELECT *
organ_id = #{organId} FROM order_plan
and deleted = false
and create_time &gt;= #{createTime}
and id != #{planId}
ORDER BY create_time WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and sort &lt; #{sort}
ORDER BY sort desc
limit 1; limit 1;
@@ -96,17 +114,19 @@
<select id="selectPlanIdsFalse" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO"> <select id="selectPlanIdsFalse" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
select * from order_plan where SELECT *
organ_id = #{organId} FROM order_plan
and deleted = false
and create_time &lt;= #{createTime}
and id != #{planId}
ORDER BY create_time desc WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and sort &gt; #{sort}
ORDER BY sort
limit 1; limit 1;
</select> </select>
<select id="selectPlanStatus" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO"> <select id="selectPlanStatus" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
@@ -123,7 +143,7 @@
</select> </select>
<select id="selectPLanList" resultType="java.lang.Long"> <select id="selectPlanList" resultType="java.lang.Long">
select id select id
from order_plan from order_plan
@@ -138,7 +158,6 @@
</select> </select>
<update id="updatePlanStatus"> <update id="updatePlanStatus">
UPDATE order_plan UPDATE order_plan
@@ -154,5 +173,56 @@
</update> </update>
<select id="selectSortOnePlan" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
SELECT *
FROM order_plan
WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and sort &lt; #{sort}
ORDER BY sort desc
limit 1;
</select>
<select id="selectLostPlan" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
SELECT *
FROM order_plan
WHERE organ_id = #{organId}
AND deleted = false
and is_top = false
and sort &gt; #{sort}
ORDER BY sort
limit 1;
</select>
<select id="selectPlanSortList" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO">
SELECT *
FROM order_plan
WHERE organ_id = #{organId}
AND deleted = false
and status in
<foreach item="status" collection="status" open="(" separator="," close=")">
#{status}
</foreach>
ORDER BY is_top DESC,
CASE WHEN is_top = true THEN update_time END DESC,
CASE WHEN is_top = false THEN sort END ;
</select>
</mapper> </mapper>
@@ -168,10 +168,10 @@
og.brand as brand og.brand as brand
from orders o from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.organ_id = #{organId}
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and op.organ_id = #{organId}
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id and oi.organ_id = #{organId}
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id and opi.organ_id = #{organId}
${ew.customSqlSegment} ${ew.customSqlSegment}
@@ -193,9 +193,9 @@
og.brand as brand og.brand as brand
from orders o from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.organ_id = #{organId}
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and op.organ_id = #{organId}
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id and opi.organ_id = #{organId}
${ew.customSqlSegment} ${ew.customSqlSegment}
@@ -221,10 +221,10 @@
og.order_id as orderId og.order_id as orderId
from orders o from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.organ_id = #{organId}
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and op.organ_id = #{organId}
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id and oi.organ_id = #{organId}
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id and opi.organ_id = #{organId}
${ew.customSqlSegment} ${ew.customSqlSegment}
@@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* @author 加工方案组配置 * @author 加工方案组配置
@@ -40,6 +41,10 @@ public class ProcessSchemeDTO implements Serializable {
private String processLineConfigSetting; private String processLineConfigSetting;
@Schema(description = "加工分线的更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime processLineUpdateTime;
@Schema(description = "数据优化配置ID", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "数据优化配置ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long optimizationConfig; private Long optimizationConfig;
@@ -52,6 +57,10 @@ public class ProcessSchemeDTO implements Serializable {
private String optimizationConfigSetting; private String optimizationConfigSetting;
@Schema(description = "数据优化配置的更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime optimizationUpdateTime;
@Schema(description = "解析器配置ID", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "解析器配置ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long analyzer; private Long analyzer;
@@ -63,6 +72,11 @@ public class ProcessSchemeDTO implements Serializable {
@Schema(description = "解析器配置-机台的配置", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "解析器配置-机台的配置", requiredMode = Schema.RequiredMode.REQUIRED)
private String analyzerConfigSetting; private String analyzerConfigSetting;
@Schema(description = "解析器配置-机台的配置的更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime analyzerUpdateTime;
@Schema(description = "机台类型", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "机台类型", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer machineType; private Integer machineType;
@@ -335,10 +335,8 @@ public class ErrorCodeConstants {
public static final ErrorCode THIS_PLAN_PLATE_IS_CUT = new ErrorCode(1_002_041_045, "当前排单已有板材开料,无法修改"); public static final ErrorCode THIS_PLAN_PLATE_IS_CUT = new ErrorCode(1_002_041_045, "当前排单已有板材开料,无法修改");
public static final ErrorCode THIS_ORDER_NOT_PLATE_DATA = new ErrorCode(1_002_041_046, "当前生产单无板材数据,无法进行用板量计算"); public static final ErrorCode THIS_ORDER_NOT_PLATE_DATA = new ErrorCode(1_002_041_046, "当前生产单无板材数据,无法进行用板量计算");
public static final ErrorCode THIS_PLAN_SCHEME_DATA_ERROR = new ErrorCode(1_002_041_047, "当前方案组的优化信息有误,请重新选择方案组或重新导入排单再进行优化"); public static final ErrorCode THIS_PLAN_SCHEME_DATA_ERROR = new ErrorCode(1_002_041_047, "当前方案组的优化信息有误,请重新选择方案组或重新导入排单再进行优化");
public static final ErrorCode PLAN_SORT_DATA_ERROR = new ErrorCode(1_002_041_048, "已无可进行排序的数据,无法进行排序");
public static final ErrorCode THIS_PLATE_IS_OPTIMIZE = new ErrorCode(1_002_041_049, "小板:{},已开料,无法删除,请重新选择小板再删除");
public static final ErrorCode THIS_PLAN_PLATE_OPTIMIZE_IS_ALL = new ErrorCode(1_002_041_046, "当前排单已全部开料,无法进行选择");
public static final ErrorCode THIS_PLATE_IS_OPTIMIZE = new ErrorCode(1_002_041_046, "小板:{},已开料,无法删除,请重新选择小板再删除");
@@ -209,32 +209,46 @@ public class SystemConfigApiImpl implements SystemConfigApi {
f.setProcessLineConfigName(processLineConfigList.stream() f.setProcessLineConfigName(processLineConfigList.stream()
.filter(p->f.getProcessLineConfig().equals(p.getId())) .filter(p->f.getProcessLineConfig().equals(p.getId()))
.map(SystemConfigDO::getName) .map(SystemConfigProcessDO::getName)
.toList().get(0) .toList().get(0)
); );
f.setProcessLineConfigSetting( f.setProcessLineConfigSetting(
processLineConfigList.stream() processLineConfigList.stream()
.filter(p->f.getProcessLineConfig().equals(p.getId())) .filter(p->f.getProcessLineConfig().equals(p.getId()))
.map(SystemConfigDO::getSetting) .map(SystemConfigProcessDO::getSetting)
.toList().get(0)
);
f.setProcessLineUpdateTime(
processLineConfigList.stream()
.filter(p->f.getProcessLineConfig().equals(p.getId()))
.map(SystemConfigProcessDO::getUpdateTime)
.toList().get(0) .toList().get(0)
); );
f.setOptimizationConfigName(processLineConfigList.stream() f.setOptimizationConfigName(optimizationConfigList.stream()
.filter(p->f.getProcessLineConfig().equals(p.getId())) .filter(p->f.getOptimizationConfig().equals(p.getId()))
.map(SystemConfigDO::getName) .map(SystemConfigDataDO::getName)
.toList().get(0) .toList().get(0)
); );
f.setOptimizationConfigSetting( f.setOptimizationConfigSetting(
optimizationConfigList.stream() optimizationConfigList.stream()
.filter(p->f.getOptimizationConfig().equals(p.getId())) .filter(p->f.getOptimizationConfig().equals(p.getId()))
.map(SystemConfigDO::getSetting) .map(SystemConfigDataDO::getSetting)
.toList().get(0) .toList().get(0)
); );
f.setOptimizationUpdateTime(
optimizationConfigList.stream()
.filter(p->f.getOptimizationConfig().equals(p.getId()))
.map(SystemConfigDataDO::getUpdateTime)
.toList().get(0)
);
MachineDO machineDO = analyzerList.stream().filter(p -> f.getAnalyzer().equals(p.getId())).toList().get(0); MachineDO machineDO = analyzerList.stream().filter(p -> f.getAnalyzer().equals(p.getId())).toList().get(0);
f.setAnalyzerConfigName(machineDO.getName()); f.setAnalyzerConfigName(machineDO.getName());
f.setAnalyzerConfigSetting(unzipString(machineDO.getSetting())); f.setAnalyzerConfigSetting(unzipString(machineDO.getSetting()));
f.setAnalyzerUpdateTime(machineDO.getUpdateTime());
f.setMachineType(machineDO.getMachineType()); f.setMachineType(machineDO.getMachineType());
@@ -27,6 +27,7 @@ import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.common.pojo.CommonResult.success;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@@ -98,6 +99,13 @@ public class PostController {
public void export(HttpServletResponse response, @Validated PostPageReqVO reqVO) throws IOException { public void export(HttpServletResponse response, @Validated PostPageReqVO reqVO) throws IOException {
reqVO.setPageSize(PageParam.PAGE_SIZE_NONE); reqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<PostDO> list = postService.getPostPage(reqVO).getList(); List<PostDO> list = postService.getPostPage(reqVO).getList();
AtomicLong sort = new AtomicLong();
list.forEach(f->{
sort.addAndGet(1);
f.setId(sort.get());
});
// 输出 // 输出
ExcelUtils.write(response, "岗位数据.xls", "岗位列表", PostRespVO.class, ExcelUtils.write(response, "岗位数据.xls", "岗位列表", PostRespVO.class,
BeanUtils.toBean(list, PostRespVO.class)); BeanUtils.toBean(list, PostRespVO.class));
@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
public class PostRespVO { public class PostRespVO {
@Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @Schema(description = "岗位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@ExcelProperty("岗位编") @ExcelProperty("")
private Long id; private Long id;
@Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆") @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小土豆")
@@ -7,7 +7,6 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.dept.vo.post.PostPageReqVO; import com.cf.imes.module.system.controller.admin.dept.vo.post.PostPageReqVO;
import com.cf.imes.module.system.dal.dataobject.dept.DeptDO;
import com.cf.imes.module.system.dal.dataobject.dept.PostDO; import com.cf.imes.module.system.dal.dataobject.dept.PostDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -35,19 +34,6 @@ public interface PostMapper extends BaseMapperX<PostDO> {
}else{ }else{
lambdaQueryWrapperX.eqIfPresent(PostDO::getOrganId, loginUser.getOrganId()); lambdaQueryWrapperX.eqIfPresent(PostDO::getOrganId, loginUser.getOrganId());
} }
// 获取分页结果
// PageResult<PostDO> pageResult = selectPage(reqVO, lambdaQueryWrapperX
// .likeIfPresent(PostDO::getCode, reqVO.getCode())
// .likeIfPresent(PostDO::getName, reqVO.getName())
// .eqIfPresent(PostDO::getStatus, reqVO.getStatus())
// .orderByDesc(PostDO::getSort));
// 重新设置 id 值
// List<PostDO> records = pageResult.getList();
// for (int i = 0; i < records.size(); i++) {
// PostDO postDO = records.get(i);
// postDO.setId((long) (i + 1));
// }
lambdaQueryWrapperX.likeIfPresent(PostDO::getCode, reqVO.getCode()) lambdaQueryWrapperX.likeIfPresent(PostDO::getCode, reqVO.getCode())
.likeIfPresent(PostDO::getName, reqVO.getName()) .likeIfPresent(PostDO::getName, reqVO.getName())
@@ -36,7 +36,7 @@ public enum SystemConfigTypeEnum {
/** /**
* 数据处理 * 数据处理
*/ */
DATA_PROCESSING(5, "优化数据配置"), DATA_PROCESSING(5, "数据处理"),
/** /**
* 加工方案 * 加工方案
@@ -343,6 +343,7 @@ public class MachineServiceImpl implements MachineService {
// 更新 // 更新
MachineDO updateObj = MachineConvert.convert(updateReqVO); MachineDO updateObj = MachineConvert.convert(updateReqVO);
updateObj.setUpdateTime(LocalDateTime.now());
// 判断传入的机台配置是否存在,如果存在,压缩数据后更新 // 判断传入的机台配置是否存在,如果存在,压缩数据后更新
if (!updateReqVO.getMachineSettingDO().isEmpty()) { if (!updateReqVO.getMachineSettingDO().isEmpty()) {
@@ -120,7 +120,7 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
// 校验组织的有效性 // 校验组织的有效性
organService.validOrgan(accessTokenDO.getOrganId()); organService.validOrgan(accessTokenDO.getOrganId());
// 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟) // 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟)
oauth2AccessTokenRedisDAO.expire(accessToken, 1800, TimeUnit.SECONDS); oauth2AccessTokenRedisDAO.expire(accessToken, 1, TimeUnit.DAYS);
} }
return accessTokenDO; return accessTokenDO;
} }
@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -135,6 +136,8 @@ public class DataProcessServiceHandler extends AbstractSystemConfigServiceHandle
systemConfigDataDO.setSetting(reqVO.getSetting()); systemConfigDataDO.setSetting(reqVO.getSetting());
// 覆盖名称 // 覆盖名称
systemConfigDataDO.setName(reqVO.getName()); systemConfigDataDO.setName(reqVO.getName());
// 更新时间
systemConfigDataDO.setUpdateTime(LocalDateTime.now());
// 更新 // 更新
systemConfigDataMapper.updateById(systemConfigDataDO); systemConfigDataMapper.updateById(systemConfigDataDO);
} else { } else {
@@ -15,6 +15,7 @@ import com.cf.imes.module.system.service.systemconfig.factory.service.AbstractSy
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -153,6 +154,8 @@ public class IntellectBranchingService extends AbstractSystemConfigServiceHandle
systemConfigFilterDO.setSetting(reqVO.getSetting()); systemConfigFilterDO.setSetting(reqVO.getSetting());
// 覆盖名称 // 覆盖名称
systemConfigFilterDO.setName(reqVO.getName()); systemConfigFilterDO.setName(reqVO.getName());
// 更新时间
systemConfigFilterDO.setUpdateTime(LocalDateTime.now());
// 更新 // 更新
systemConfigFilterMapper.updateById(systemConfigFilterDO); systemConfigFilterMapper.updateById(systemConfigFilterDO);
} else { } else {
@@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -123,6 +124,8 @@ public class MultiColorOrderPlanServiceHandler extends AbstractSystemConfigServi
systemConfigDO.setSetting(reqVO.getSetting()); systemConfigDO.setSetting(reqVO.getSetting());
// 覆盖名称 // 覆盖名称
systemConfigDO.setName(reqVO.getName()); systemConfigDO.setName(reqVO.getName());
// 更新时间
systemConfigDO.setUpdateTime(LocalDateTime.now());
// 更新 // 更新
systemConfigMapper.updateById(systemConfigDO); systemConfigMapper.updateById(systemConfigDO);
} else { } else {
@@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -208,6 +209,8 @@ public class ProcessSchemeServiceHandler extends AbstractSystemConfigServiceHand
systemConfigSchemeDO.setSetting(reqVO.getSetting()); systemConfigSchemeDO.setSetting(reqVO.getSetting());
// 覆盖名称 // 覆盖名称
systemConfigSchemeDO.setName(reqVO.getName()); systemConfigSchemeDO.setName(reqVO.getName());
// 更新时间
systemConfigSchemeDO.setUpdateTime(LocalDateTime.now());
// 更新 // 更新
systemConfigSchemeMapper.updateById(systemConfigSchemeDO); systemConfigSchemeMapper.updateById(systemConfigSchemeDO);
} else { } else {
@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -136,6 +137,8 @@ public class ProcessScreeningServiceHandler extends AbstractSystemConfigServiceH
systemConfigProcessDO.setSetting(reqVO.getSetting()); systemConfigProcessDO.setSetting(reqVO.getSetting());
// 覆盖名称 // 覆盖名称
systemConfigProcessDO.setName(reqVO.getName()); systemConfigProcessDO.setName(reqVO.getName());
// 更新时间
systemConfigProcessDO.setUpdateTime(LocalDateTime.now());
// 更新 // 更新
systemConfigProcessMapper.updateById(systemConfigProcessDO); systemConfigProcessMapper.updateById(systemConfigProcessDO);
} else { } else {