Merge remote-tracking branch 'origin/master'

liweidong
绫Umbrella 2 weeks ago
commit b33ccbe10c
  1. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java
  2. 2
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbWoClient.java
  3. 2
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/dto/StPdmPartDTO.java
  4. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
  5. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  6. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  7. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/RemindMsgServiceImpl.java
  8. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  9. 4
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/EquipAbilityMapper.xml
  10. 4
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/SameTroughMapper.xml
  11. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
  12. 93
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -23,8 +23,8 @@ public class WorkPlanItemDetailVO extends WorkPlanItemDetail {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Schema(description = "[量具]名称") @Schema(description = "[量具]名称")
private String mtName = "标尺1"; private String mtName ;
@Schema(description = "实际[量具]名称") @Schema(description = "实际[量具]名称")
private String actMtName = "游标卡尺QW"; private String actMtName ;
} }

@ -22,7 +22,7 @@ import java.util.List;
) )
public interface IErpMesRbWoClient { public interface IErpMesRbWoClient {
String API_PREFIX = "/feign/client/mesrbwo"; String API_PREFIX = "/feign/erpdata/mesrbwo";
String GET_LIST = API_PREFIX + "/getList"; String GET_LIST = API_PREFIX + "/getList";
String GET_WO = API_PREFIX + "/getWoOne"; String GET_WO = API_PREFIX + "/getWoOne";
String SYN_MES_WO = API_PREFIX + "/synMesRbWo"; String SYN_MES_WO = API_PREFIX + "/synMesRbWo";

@ -1,6 +1,7 @@
package org.springblade.wms.pojo.dto; package org.springblade.wms.pojo.dto;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
import java.io.Serial; import java.io.Serial;
@ -16,6 +17,7 @@ import java.util.Date;
* @create 2025-12-16 13:09 * @create 2025-12-16 13:09
**/ **/
@Data @Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class StPdmPartDTO implements Serializable { public class StPdmPartDTO implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -8392387759431929168L; private static final long serialVersionUID = -8392387759431929168L;

@ -110,6 +110,18 @@ public class DsPartController extends BladeController {
return R.data(pages); return R.data(pages);
} }
@GetMapping("/listNew")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入dsPart")
public R<IPage<DsPartVO>> listNew(@Parameter(hidden = true) @RequestParam Map<String, Object> reviewSheet, Query query) {
QueryWrapper<DsPartEntity> qw = Condition.getQueryWrapper(reviewSheet, DsPartEntity.class);
IPage<DsPartEntity> pages = dsPartService.page(Condition.getPage(query), qw);
IPage<DsPartVO> pagesVO = DsPartWrapper.build().pageVO(pages);
return R.data(pagesVO);
}
/** /**
* 零件信息表 同步零件信息 * 零件信息表 同步零件信息
*/ */
@ -267,11 +279,9 @@ public class DsPartController extends BladeController {
*/ */
@GetMapping("/test") @GetMapping("/test")
public R test(@RequestParam String partCode, public R test(@RequestParam String partCode,
@RequestParam String roamNo,
@RequestParam String rank,
@RequestParam String partVersion) { @RequestParam String partVersion) {
return R.data(dsPartService.selectPartCraft(partCode,roamNo,rank,partVersion)); return R.data(dsPartService.getPartSubList(partCode,partVersion));
} }

@ -269,4 +269,22 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
* @return * @return
*/ */
DsPartVersionEntity getNewPartVersion(String partCode); DsPartVersionEntity getNewPartVersion(String partCode);
/**
* 获取子件
* @param partCode
* @param partVersion
* @return
*/
List<DsPartEntity> getPartSubList(String partCode,String partVersion);
/**
* 玻璃饼查询工序下的工装
* @param partCode
* @param roamNo
* @param partVersion
* @return
*/
List<DsPartEntity> getClassCake(String partCode,String roamNo,String partVersion);
} }

@ -714,6 +714,38 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
return null; return null;
} }
@Override
public List<DsPartEntity> getPartSubList(String partCode, String partVersion) {
//校验零件号
if(StringUtils.isEmpty(partCode)){
throw new ServiceException("零件号不能为空");
}
//查询零件是否存在
List<DsPartEntity> dsPartEntityList = this.selectDsPartByPatCode(partCode);
if(CollectionUtils.isEmpty(dsPartEntityList)){
throw new ServiceException("零件不存在");
}
//查询零件
DsPartEntity partEntity = this.selectDsPartByPatCodeAndVersion(partCode, partVersion);
List<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId());
List<Long> validChildPartIds = partRelationEntityList.stream()
.map(DsPartRelationEntity::getChildPartId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
List<DsPartEntity> dsPartEntityList1 = this.selectDsPartByIds(validChildPartIds);
return dsPartEntityList1;
}
@Override
public List<DsPartEntity> getClassCake(String partCode, String roamNo, String partVersion) {
return null;
}
/** /**
* 创建维护任务 * 创建维护任务
*/ */

@ -66,6 +66,7 @@ public class RemindMsgServiceImpl extends BaseServiceImpl<RemindMsgMapper, Remin
DsPartEntity part = dsPartService.getById(vo.getPartId()); DsPartEntity part = dsPartService.getById(vo.getPartId());
if (part != null) { if (part != null) {
vo.setPartName(part.getPartName()); vo.setPartName(part.getPartName());
vo.setPartCode(part.getPartCode());
vo.setMatName(part.getMaterial()); vo.setMatName(part.getMaterial());
vo.setPlatingName(part.getPlate()); vo.setPlatingName(part.getPlate());
vo.setProcessClazz1Name(part.getCraftWay()); vo.setProcessClazz1Name(part.getCraftWay());

@ -168,7 +168,7 @@ public class WorkOrderController extends BladeController {
/** /**
* 车间订单表 排产 * 车间订单表 排产
*/ */
@PostMapping("/scheduling") @GetMapping("/scheduling")
@ApiOperationSupport(order = 6) @ApiOperationSupport(order = 6)
@Operation(summary = "排产", description = "传入WorkOrder") @Operation(summary = "排产", description = "传入WorkOrder")
public void scheduling() { public void scheduling() {

@ -31,8 +31,8 @@
select * from MES_EQUIP_ABILITY select * from MES_EQUIP_ABILITY
<where> <where>
is_deleted = 0 is_deleted = 0
<if test="param2.workCenterId !=null"> <if test="param2.workCenterName !=null and param2.workCenterName != ''">
and work_center_id = #{param2.workCenterId} and work_center_name LIKE CONCAT('%', CONCAT(#{param2.workCenterName}, '%'))
</if> </if>
<if test="param2.equipCode !=null and param2.equipCode !=''"> <if test="param2.equipCode !=null and param2.equipCode !=''">
and equip_code = #{param2.equipCode} and equip_code = #{param2.equipCode}

@ -55,8 +55,8 @@
FROM FROM
MES_YIELD_ORDER a MES_YIELD_ORDER a
LEFT JOIN DS_PART b ON a.PART_CODE = b.PART_CODE LEFT JOIN DS_PART b ON a.PART_CODE = b.PART_CODE
LEFT JOIN DS_PART_VERSION d ON b.ID = d.PART_ID AND a.PART_VERSION = d.PART_VERSION AND a.PART_CODE = d.PART_CODE INNER JOIN DS_PART_VERSION d ON b.ID = d.PART_ID AND a.PART_VERSION = d.PART_VERSION AND a.PART_CODE = d.PART_CODE
LEFT JOIN MES_YIELD_ORDER_CRAFT c ON a.id = c.yo_id INNER JOIN MES_YIELD_ORDER_CRAFT c ON a.id = c.yo_id
<where> <where>
a.is_deleted = 0 AND c.WORK_CENTER_ID IS NOT NULL a.is_deleted = 0 AND c.WORK_CENTER_ID IS NOT NULL
<if test="id != null"> <if test="id != null">

@ -291,7 +291,7 @@
AND cm.is_deleted = 0 AND cm.is_deleted = 0
LEFT JOIN MES_CERTIFICATE_TYPE ct ON cm.certificate_id = ct.id LEFT JOIN MES_CERTIFICATE_TYPE ct ON cm.certificate_id = ct.id
AND ct.is_deleted = 0 AND ct.is_deleted = 0
LEFT JOIN BA_REL_TEAM_SET_USER tu ON ph.user_id = tu.user_id LEFT JOIN BS_REL_TEAM_SET_USER tu ON ph.user_id = tu.user_id
LEFT JOIN BS_TEAM_SET ts ON tu.team_set_id = ts.id LEFT JOIN BS_TEAM_SET ts ON tu.team_set_id = ts.id
WHERE WHERE
ph.is_deleted = 0 AND ph.staff_type != 1 ph.is_deleted = 0 AND ph.staff_type != 1

@ -63,6 +63,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.ParseException; import java.text.ParseException;
@ -206,7 +208,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
Map<Long, List<SintTempCurveEntity>> sintMap = sintList.stream().collect(Collectors.groupingBy(SintTempCurveEntity::getProcessId)); Map<Long, List<SintTempCurveEntity>> sintMap = sintList.stream().collect(Collectors.groupingBy(SintTempCurveEntity::getProcessId));
//计算cr值 //计算cr值
calculateCr(list); //calculateCr(list);
//根据作业中心将订单分组,并根据优先级、cr值、订单需求数量、计划下达时间4个维度进行组内排序 //根据作业中心将订单分组,并根据优先级、cr值、订单需求数量、计划下达时间4个维度进行组内排序
Map<Long, List<YieldOrderEntity>> map = Map<Long, List<YieldOrderEntity>> map =
list.stream() list.stream()
@ -218,7 +220,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
list1 -> { list1 -> {
// 排序逻辑:优先级升序 → CR值降序 → 数量降序 → 时间升序 // 排序逻辑:优先级升序 → CR值降序 → 数量降序 → 时间升序
list1.sort(Comparator.comparingInt(YieldOrderEntity::getPriorityAps).reversed() list1.sort(Comparator.comparingInt(YieldOrderEntity::getPriorityAps).reversed()
.thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue())) //.thenComparing((e1, e2) -> e2.getCrValue().compareTo(e1.getCrValue()))
.thenComparingInt(YieldOrderEntity::getYpQty).reversed() .thenComparingInt(YieldOrderEntity::getYpQty).reversed()
.thenComparing(YieldOrderEntity::getReleaseDate)); .thenComparing(YieldOrderEntity::getReleaseDate));
return list1; return list1;
@ -226,7 +228,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
) )
)); ));
//处理带有公共前置工序的订单 //处理带有公共前置工序的订单
Map<String, List<WorkPlanEntity>> planMap = dealCommonCraftOrders(); Map<Long, List<WorkPlanEntity>> planMap = dealCommonCraftOrders();
//多线程排产 //多线程排产
ExecutorService threadPool = new ThreadPoolExecutor( ExecutorService threadPool = new ThreadPoolExecutor(
map.size(), map.size(), 0L, TimeUnit.MILLISECONDS, map.size(), map.size(), 0L, TimeUnit.MILLISECONDS,
@ -420,7 +422,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
public void allocateResources(List<YieldOrderEntity> list, public void allocateResources(List<YieldOrderEntity> list,
Map<String, PersonAbilityEntity> personAbilityMap, Map<String, PersonAbilityEntity> personAbilityMap,
Map<Long, String> mainProducerMap, Map<Long, String> mainProducerMap,
Map<String, List<WorkPlanEntity>> planMap, Map<Long, List<WorkPlanEntity>> planMap,
Map<Long, String> processMap, Map<Long, String> processMap,
Map<Long, List<SintTempCurveEntity>> sintMap, Map<Long, List<SintTempCurveEntity>> sintMap,
Map<Long, String> workCenterMap, Map<Long, String> workCenterMap,
@ -471,8 +473,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//上一道工序结束时间 //上一道工序结束时间
LocalDateTime prevProcessEnd = LocalDateTime.now(); LocalDateTime prevProcessEnd = LocalDateTime.now();
//判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间 //判断是否有公共工序已经处理了,如果有则重新定义workPlanList,获取公共工序的最后结束时间和当前时间做比较,取大的作为上一道工序结束时间
if (planMap.containsKey(order.getYoCode())) { if (planMap.containsKey(order.getId())) {
workPlanList = planMap.get(order.getYoCode()); workPlanList = planMap.get(order.getId());
prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size() - 1).getPlanEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getPlanEndTime(); prevProcessEnd = prevProcessEnd.compareTo(workPlanList.get(workPlanList.size() - 1).getPlanEndTime()) > 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getPlanEndTime();
} }
@ -494,7 +496,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setWoId(order.getId()); workPlan.setWoId(order.getId());
workPlan.setCaId(craft.getCaId()); workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId()); workPlan.setPpsId(craft.getPpsId());
workPlan.setWorkQty(order.getYpQty()); workPlan.setWorkQty(0);
workPlan.setHourQuota(totalTime); workPlan.setHourQuota(totalTime);
workPlan.setWorkCenterId(craft.getWorkCenterId()); workPlan.setWorkCenterId(craft.getWorkCenterId());
workPlan.setOrders(craft.getProcessNo()); workPlan.setOrders(craft.getProcessNo());
@ -516,7 +518,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//同炉同槽 //同炉同槽
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){
//热表同槽 //热表同槽
Boolean isSameTrough = sameTrough(order, craft, prevProcessEnd, workPlanList); Boolean isSameTrough = sameTrough(order, craft, localDateTime, workPlanList);
//同槽就不需要继续匹配了 //同槽就不需要继续匹配了
if (isSameTrough) { if (isSameTrough) {
continue; continue;
@ -554,17 +556,17 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//获取下一个整数点 //获取下一个整数点
LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd); LocalDateTime dateTime = getNextIntegerTime(prevProcessEnd);
for (Map.Entry<Integer, List<EquipAbilityEntity>> entry : equipAbilityMap.entrySet()) { for (Map.Entry<Integer, List<EquipAbilityEntity>> entry : equipAbilityMap.entrySet()) {
int partType = entry.getValue().get(0).getPartType();
//根据时间点获取所有设备资源 //根据时间点获取所有设备资源
List<EquipResourceEntity> equipResourceList = new ArrayList<>(); List<EquipResourceEntity> equipResourceList = new ArrayList<>();
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ if(partType == 0){
equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery() equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery()
.eq(EquipResourceEntity::getCraftId, craft.getCaId()) .eq(EquipResourceEntity::getCraftId, craft.getCaId())
.eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId())
.ge(EquipResourceEntity::getStartTime, dateTime) .ge(EquipResourceEntity::getStartTime, dateTime)
.eq(EquipResourceEntity::getIsUsed, 0) .eq(EquipResourceEntity::getIsUsed, 0)
.in(EquipResourceEntity::getEquipOrder, entry.getKey())); .in(EquipResourceEntity::getEquipOrder, entry.getKey()));
}else{ }else if(partType == 1){
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){
equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery() equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery()
.eq(EquipResourceEntity::getCraftId, craft.getCaId()) .eq(EquipResourceEntity::getCraftId, craft.getCaId())
.eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId())
@ -572,9 +574,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
.ge(EquipResourceEntity::getStartTime, dateTime) .ge(EquipResourceEntity::getStartTime, dateTime)
.eq(EquipResourceEntity::getIsUsed, 0) .eq(EquipResourceEntity::getIsUsed, 0)
.in(EquipResourceEntity::getEquipOrder, entry.getKey()) .in(EquipResourceEntity::getEquipOrder, entry.getKey())
.lt(EquipResourceEntity::getStartNum,part.getBlbDiameter()) .lt(EquipResourceEntity::getStartNum,part.getExternalDiameter())
.ge(EquipResourceEntity::getEndNum,part.getBlbDiameter())); .ge(EquipResourceEntity::getEndNum,part.getExternalDiameter()));
}else{ }else if(partType == 2){
equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery() equipResourceList = equipResourceService.list(Wrappers.<EquipResourceEntity>lambdaQuery()
.eq(EquipResourceEntity::getCraftId, craft.getCaId()) .eq(EquipResourceEntity::getCraftId, craft.getCaId())
.eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId())
@ -582,10 +584,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
.ge(EquipResourceEntity::getStartTime, dateTime) .ge(EquipResourceEntity::getStartTime, dateTime)
.eq(EquipResourceEntity::getIsUsed, 0) .eq(EquipResourceEntity::getIsUsed, 0)
.in(EquipResourceEntity::getEquipOrder, entry.getKey()) .in(EquipResourceEntity::getEquipOrder, entry.getKey())
.lt(EquipResourceEntity::getStartNum,part.getExternalDiameter()) .lt(EquipResourceEntity::getStartNum,part.getBlbDiameter())
.ge(EquipResourceEntity::getEndNum,part.getExternalDiameter())); .ge(EquipResourceEntity::getEndNum,part.getBlbDiameter()));
}
} }
if (CollectionUtils.isEmpty(equipResourceList)) { if (CollectionUtils.isEmpty(equipResourceList)) {
@ -766,6 +766,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
totalTime = calPersonHoursByZklgj(order,part); totalTime = calPersonHoursByZklgj(order,part);
}else if("单侧折针".equals(processMap.get(craft.getPpsId())) || "双侧折针".equals(processMap.get(craft.getPpsId()))){ }else if("单侧折针".equals(processMap.get(craft.getPpsId())) || "双侧折针".equals(processMap.get(craft.getPpsId()))){
totalTime = calPersonHoursByZz(order,part,processMap.get(craft.getPpsId())); totalTime = calPersonHoursByZz(order,part,processMap.get(craft.getPpsId()));
}else if("玻璃封接电镀上挂".equals(processMap.get(craft.getPpsId()))){
totalTime = calPersonHoursByBlfjddsg(order,part);
}else{ }else{
totalTime = calPersonHours(order,craft,part); totalTime = calPersonHours(order,craft,part);
} }
@ -800,7 +802,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setWoId(order.getId()); workPlan.setWoId(order.getId());
workPlan.setCaId(craft.getCaId()); workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId()); workPlan.setPpsId(craft.getPpsId());
workPlan.setWorkQty(order.getYpQty()); workPlan.setWorkQty(0);
workPlan.setHourQuota(totalTime); workPlan.setHourQuota(totalTime);
workPlan.setWorkCenterId(craft.getWorkCenterId()); workPlan.setWorkCenterId(craft.getWorkCenterId());
workPlan.setOrders(craft.getProcessNo()); workPlan.setOrders(craft.getProcessNo());
@ -904,8 +906,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} catch (Exception e) { } catch (Exception e) {
log.error("报错订单是:" + order.getId() + ",报错信息是:" + e.getMessage()); StringWriter sw = new StringWriter();
throw new RuntimeException(e); PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
log.error("报错订单是:" + order.getId() + ",报错信息是:" + sw.toString());
continue;
} }
log.info("当前订单:" + order.getId() + "结束!"); log.info("当前订单:" + order.getId() + "结束!");
} }
@ -1252,10 +1257,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return batches; return batches;
} }
public Map<String, List<WorkPlanEntity>> dealCommonCraftOrders() { public Map<Long, List<WorkPlanEntity>> dealCommonCraftOrders() {
log.info("处理前置公共工序开始!"); log.info("处理前置公共工序开始!");
List<YieldOrderEntity> commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList(); List<YieldOrderEntity> commonCraftOrderList = yieldOrderService.selectCommonCraftOrderList();
Map<String, List<WorkPlanEntity>> planMap = new HashMap<>(); Map<Long, List<WorkPlanEntity>> planMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(commonCraftOrderList)) { if (CollectionUtils.isNotEmpty(commonCraftOrderList)) {
//对订单进行排序,每5个相同workCenterId的为一组,实现负载均衡 //对订单进行排序,每5个相同workCenterId的为一组,实现负载均衡
commonCraftOrderList = sortByWorkcenterIdPer5Group(commonCraftOrderList); commonCraftOrderList = sortByWorkcenterIdPer5Group(commonCraftOrderList);
@ -1263,8 +1268,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//获取公共工序设备能力,根据工艺能力查询,写死ID是27 //获取公共工序设备能力,根据工艺能力查询,写死ID是27
EquipAbilityEntity equipAbility = equipAbilityService.getOne(Wrappers.<EquipAbilityEntity>lambdaQuery().eq(EquipAbilityEntity::getCraftId, 27)); EquipAbilityEntity equipAbility = equipAbilityService.getOne(Wrappers.<EquipAbilityEntity>lambdaQuery().eq(EquipAbilityEntity::getCraftId, 27));
BigDecimal standardProcessAbility = BigDecimal.valueOf(Integer.parseInt(equipAbility.getStandardProcessAbility())); BigDecimal standardProcessAbility = BigDecimal.valueOf(Integer.parseInt(equipAbility.getStandardProcessAbility()));
//获取所有空闲的公共工序资源
List<EquipResourceEntity> equipResourceList = equipResourceService.selectCommonCraftList();
for (YieldOrderEntity order : commonCraftOrderList) { for (YieldOrderEntity order : commonCraftOrderList) {
List<WorkPlanEntity> workPlanList = new ArrayList<>(); List<WorkPlanEntity> workPlanList = new ArrayList<>();
//获取相关工序 //获取相关工序
@ -1278,6 +1282,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
int period = sumCapacity.divide(standardProcessAbility, 0, RoundingMode.CEILING).intValue(); int period = sumCapacity.divide(standardProcessAbility, 0, RoundingMode.CEILING).intValue();
for (int i = 0; i < period; i++) { for (int i = 0; i < period; i++) {
//获取所有空闲的公共工序资源
List<EquipResourceEntity> equipResourceList = equipResourceService.selectCommonCraftList();
for (int j = 0; j < equipResourceList.size(); j++) { for (int j = 0; j < equipResourceList.size(); j++) {
if (i == j) { if (i == j) {
EquipResourceEntity equipResource = equipResourceList.get(j); EquipResourceEntity equipResource = equipResourceList.get(j);
@ -1286,7 +1292,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
WorkPlanEntity workPlan = new WorkPlanEntity(); WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setPlanStartTime(equipResource.getStartTime()); workPlan.setPlanStartTime(equipResource.getStartTime());
workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().setScale(0, RoundingMode.CEILING).longValue())); workPlan.setPlanEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().setScale(0, RoundingMode.CEILING).longValue()));
workPlan.setWorkQty(order.getYpQty()); workPlan.setWorkQty(0);
workPlan.setCaId(craft.getCaId()); workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId()); workPlan.setPpsId(craft.getPpsId());
workPlan.setMakeTeam(equipResource.getTeamId()); workPlan.setMakeTeam(equipResource.getTeamId());
@ -1307,7 +1313,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
} }
planMap.put(order.getYoCode(), workPlanList); planMap.put(order.getId(), workPlanList);
} }
@ -1395,12 +1401,16 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//可能有多个订单符合要求,按照车间订单、时间分组排序 //可能有多个订单符合要求,按照车间订单、时间分组排序
Map<Long, List<WorkPlanEntity>> workPlanMap = workPlanOldList.stream().collect(Collectors.groupingBy(WorkPlanEntity::getWoId)); Map<Long, List<WorkPlanEntity>> workPlanMap = workPlanOldList.stream().collect(Collectors.groupingBy(WorkPlanEntity::getWoId));
for (Map.Entry<Long, List<WorkPlanEntity>> entry : workPlanMap.entrySet()) { for (Map.Entry<Long, List<WorkPlanEntity>> entry : workPlanMap.entrySet()) {
Long woId = entry.getKey();
List<WorkPlanEntity> planList = entry.getValue(); List<WorkPlanEntity> planList = entry.getValue();
Boolean isEnough = true; Boolean isEnough = true;
List<Long> resourceList = new ArrayList<>(); List<Long> resourceList = new ArrayList<>();
for (WorkPlanEntity workPlan : planList) { for (WorkPlanEntity workPlan : planList) {
if (workPlan.getEquipResourceId() != null) { if (workPlan.getEquipResourceId() != null) {
EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId());
if(equipResource == null){
continue;
}
//判断剩余产能是否满足总产能 //判断剩余产能是否满足总产能
if (sumCapacity.compareTo(equipResource.getRestCapacity()) > 0) { if (sumCapacity.compareTo(equipResource.getRestCapacity()) > 0) {
isEnough = false; isEnough = false;
@ -1413,7 +1423,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
//如果产能满足,再判断是否满足同槽条件 //如果产能满足,再判断是否满足同槽条件
if (isEnough) { if (isEnough) {
WorkOrderEntity workOrder = this.getById(workPlanOldList.get(0).getWoId()); WorkOrderEntity workOrder = this.getById(woId);
YieldOrderEntity yieldOrderEntity = yieldOrderService.getById(workOrder.getYoId()); YieldOrderEntity yieldOrderEntity = yieldOrderService.getById(workOrder.getYoId());
List<YieldOrderCraftEntity> orderCraftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery() List<YieldOrderCraftEntity> orderCraftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery()
.eq(YieldOrderCraftEntity::getYoId, yieldOrderEntity.getId()) .eq(YieldOrderCraftEntity::getYoId, yieldOrderEntity.getId())
@ -1422,6 +1432,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
.eq(YieldOrderCraftEntity::getWorkCenterId, craft.getWorkCenterId())); .eq(YieldOrderCraftEntity::getWorkCenterId, craft.getWorkCenterId()));
SameTroughVO voNew = sameTroughService.selectSameTroughInfo(craft.getId()); SameTroughVO voNew = sameTroughService.selectSameTroughInfo(craft.getId());
SameTroughVO voOld = sameTroughService.selectSameTroughInfo(orderCraftList.get(0).getId()); SameTroughVO voOld = sameTroughService.selectSameTroughInfo(orderCraftList.get(0).getId());
if(voNew != null && voOld != null){
//根据同槽因素进行比对 //根据同槽因素进行比对
Boolean isSameTrough2 = true; Boolean isSameTrough2 = true;
//键位 //键位
@ -1474,7 +1485,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
if (isSameTrough2) { if (isSameTrough2) {
for (Long resourceId : resourceList) { for(Long resourceId : resourceList){
EquipResourceEntity equipResource = equipResourceService.getById(resourceId); EquipResourceEntity equipResource = equipResourceService.getById(resourceId);
//生成车间订单 //生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity(); WorkPlanEntity workPlan = new WorkPlanEntity();
@ -1484,7 +1495,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} else { } else {
workPlan.setPlanEndTime(equipResource.getEndTime()); workPlan.setPlanEndTime(equipResource.getEndTime());
} }
workPlan.setWorkQty(order.getYpQty()); workPlan.setWorkQty(0);
workPlan.setCaId(craft.getCaId()); workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId()); workPlan.setPpsId(craft.getPpsId());
workPlan.setMakeTeam(equipResource.getTeamId()); workPlan.setMakeTeam(equipResource.getTeamId());
@ -1506,9 +1517,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipResourceService.updateById(equipResource); equipResourceService.updateById(equipResource);
isSameTrough = true; isSameTrough = true;
} }
}
} }
} }
} }
} }
@ -1602,7 +1614,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
personHours = calPersonHours(order,craft,part); personHours = calPersonHours(order,craft,part);
} }
workPlan.setPlanEndTime(workPlan.getPlanEndTime().plusMinutes(personHours.longValue())); workPlan.setPlanEndTime(workPlan.getPlanEndTime().plusMinutes(personHours.longValue()));
workPlan.setWorkQty(order.getYpQty()); workPlan.setWorkQty(0);
workPlan.setCaId(craft.getCaId()); workPlan.setCaId(craft.getCaId());
workPlan.setPpsId(craft.getPpsId()); workPlan.setPpsId(craft.getPpsId());
workPlan.setMakeTeam(equipResource.getTeamId()); workPlan.setMakeTeam(equipResource.getTeamId());
@ -2172,6 +2184,23 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return Math.ceil(result * order.getYpQty() + 2); return Math.ceil(result * order.getYpQty() + 2);
} }
//玻璃封接电镀上挂
public Double calPersonHoursByBlfjddsg(YieldOrderEntity order,PartEntity part){
Double result = 0.0;
if (part != null && part.getId() != null) {
List<PartRelationEntity> partRelationList = partRelationService.list(Wrappers.<PartRelationEntity>lambdaQuery().eq(PartRelationEntity::getPartId,part.getId()));
List<Long> childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList());
List<PartEntity> partCz = partService.list(Wrappers.<PartEntity>lambdaQuery().in(BaseEntity::getId,childIds).eq(PartEntity::getSinTerType,DsPartConstant.SIN_TER_TYPE_CZ));
if (partCz != null && partCz.size() > 0) {
double sumOfQuota = partCz.stream()
.mapToDouble(PartEntity::getQuota) // 调用 getQuota() 方法
.sum();
result = (38 + 3 * sumOfQuota) / 60;
}
}
return Math.ceil(result * order.getYpQty() + 2);
}
public static List<YieldOrderEntity> mergeYieldOrderList(List<YieldOrderEntity> originalList) { public static List<YieldOrderEntity> mergeYieldOrderList(List<YieldOrderEntity> originalList) {
// 空值校验 // 空值校验
if (originalList == null || originalList.isEmpty()) { if (originalList == null || originalList.isEmpty()) {

Loading…
Cancel
Save