自动分派逻辑修改

liweidong
李涛 21 hours ago
parent 4682255840
commit 17c71e8aa4
  1. 49
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsCraftAbilityEntity.java
  2. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java

@ -25,13 +25,17 @@
*/
package org.springblade.desk.dashboard.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.List;
/**
* 工艺能力表 实体类
@ -58,17 +62,44 @@ public class BsCraftAbilityEntity extends BaseEntity {
*/
@Schema(description = "名称")
private String caName;
// /**
// * 备注
// */
// @Schema(description = "备注")
// private String remarks;
/**
* 厂内应分比例
* 设备分类
*/
@Schema(description = "能力类型")
private String wtId;
/**
* 镀种小类
*/
@Schema(description = "厂内应分比例")
private Double inFactoryPercent;
@Schema(description = "镀种小类")
private Long bpsId;
@Schema(description = "面积")
@JsonInclude(JsonInclude.Include.NON_NULL)
private BigDecimal area;
@Schema(description = "数量")
private Integer quality;
@Schema(description = "批次")
private String batch;
@Schema(description = "饱和度")
private BigDecimal saturation;
@Schema(description = "计划员")
private Long planner;
@Schema(description = "调度员")
private Long dispatcher;
@Schema(description = "是否大批量 0:是 1:否")
private String isBatch;
private String plannerName;
private String dispatcherName;
@Schema(description = "局部镀订单面积")
private BigDecimal localArea;
@Schema(description = "外协限制")
private String wxLimit;
@Schema(description = "厂内比例")
private String inRate;
@Schema(description = "外协比例")
private String outRate;

@ -252,18 +252,18 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
}
// 如果厂内占比大于已经设置的比列,则直接分派外协
if (rate <= craftAbility.getInFactoryPercent()) {
log.info("{}自动分派按照比例分派给厂内:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(),
workCenter.getWcName(), rate, craftAbility.getInFactoryPercent());
if (rate <= Double.parseDouble(craftAbility.getInRate())) {
log.info("{}自动分派按照比例分派给厂内:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), workCenter.getWcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindWorkCenter(workCenter.getId(), workCenterMap, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
//如果匹配到了作业单位,则直接停止
if (dispatchCraftList != null && dispatchCraftList.size() > 0) {
if (dispatchCraftList != null && !dispatchCraftList.isEmpty()) {
return;
}
// 外协
log.info("{}自动分派按照比例分派给外协:{},分派比例:{} 应分比例:{}", yieldOrder.getCardNo(), oemCustomer.getOcName(), rate, craftAbility.getInRate());
dispatchCraftList = this.bindOem(oemCustomer, hostAbilityId, craftAbilityMap, craftKeys, yieldOrder, null);
}
} else {
@ -373,6 +373,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
//作业中心
WorkCenter workCenter = null;
//如果找到合适的作业中心直接分派,反之如果未找到合适的作业中心(bool 是true的情况下强制厂内,bool是false是优先厂内,不满足的情况下直接返回空)
// todo 待完善
YieldOrderAssignDaily dayAbilityAssignment = dailyAssignService.findMinNum(hostCaId, wcList);
if (Func.isEmpty(dayAbilityAssignment)) {
return null;
@ -466,7 +467,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
BsAssignEntity assign = this.getRules(yieldOrder, hostCaId, BsAssignEntity.OUTSOURCE);
if (assign != null) {
//限制类型是必须(强制按此规则分派)
if (assign.getLimitType().equals(BsAssignEntity.MUST)) {
if (assign.getLimitType().equals(BsAssignEntity.MUST.toString())) {
//如果指定了外协商,则强制分派到此外协商;反之则分派至厂外有同种工艺能力的外协商
if (assign.getOemId() != null) {
//判断规则中配置的外协商是否满足当前工艺能力要求,如果不满足,则此条规则作废
@ -536,7 +537,7 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
// 获取到满足条件的供应商
// 对有能力做这个单子厂家按照偏差因子排序
if (ocList != null && ocList.size() > 0) {
if (!ocList.isEmpty()) {
List<YieldOrderAssignSteer> bsPlanAssignSteerList = assignSteerService.sortDataByFactor(ocList, hostCaId);
CraftAbilityEntity craftAbility = iCraftAbilityService.getById(hostCaId);
for (YieldOrderAssignSteer bsPlanAssignSteer : bsPlanAssignSteerList) {

Loading…
Cancel
Save