|
|
|
|
@ -25,8 +25,9 @@ |
|
|
|
|
*/ |
|
|
|
|
package org.springblade.scheduling.scheduling.service.impl; |
|
|
|
|
|
|
|
|
|
import cn.hutool.http.HttpUtil; |
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
|
|
|
|
@ -42,6 +43,7 @@ import org.springblade.scheduling.scheduling.excel.WorkOrderExcel; |
|
|
|
|
import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper; |
|
|
|
|
import org.springblade.scheduling.scheduling.service.*; |
|
|
|
|
import org.springblade.scheduling.scheduling.vo.WorkOrderVO; |
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
@ -76,7 +78,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
private final IEquipResourceService equipResourceService; |
|
|
|
|
private final IPersonResourceService personResourceService; |
|
|
|
|
|
|
|
|
|
// 定义细粒度锁容器(全局单例)
|
|
|
|
|
@Value("${business.oldMes.url}") |
|
|
|
|
private String oldMesUrl; |
|
|
|
|
@Value("${business.oldMes.pushApsResult}") |
|
|
|
|
private String pushApsResult; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 定义细粒度锁容器(全局单例)
|
|
|
|
|
private static final Map<Long, Lock> CRAFT_LOCK_MAP = new ConcurrentHashMap<>(); |
|
|
|
|
|
|
|
|
|
// 获取工艺ID对应的锁(不存在则创建)
|
|
|
|
|
@ -343,23 +351,47 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void calculateCr(List<YieldOrderEntity> list) { |
|
|
|
|
//查询订单下的工序,计算cr值
|
|
|
|
|
for (YieldOrderEntity entity : list) { |
|
|
|
|
List<YieldOrderCraftEntity> craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, entity.getId())); |
|
|
|
|
//定义订单总工时
|
|
|
|
|
BigDecimal total = new BigDecimal(0); |
|
|
|
|
for (YieldOrderCraftEntity craftEntity : craftList) { |
|
|
|
|
total = total.add(craftEntity.getHourQuota()); |
|
|
|
|
} |
|
|
|
|
//换算成天
|
|
|
|
|
total = total.divide(BigDecimal.valueOf(1440), 2, RoundingMode.HALF_UP); |
|
|
|
|
//获取交期剩余天数
|
|
|
|
|
BigDecimal restDays = new BigDecimal(TimeUnit.DAYS.convert(entity.getDemandDate().getTime() - DateUtil.now().getTime(), TimeUnit.MILLISECONDS)); |
|
|
|
|
//计算cr值剩余交期天数/生产所需额定时长
|
|
|
|
|
entity.setCrValue(restDays.divide(total, 2, RoundingMode.HALF_UP)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@Override |
|
|
|
|
public void sendWorkOrderToOldMes(List<WorkOrderEntity> workOrderEntityList) { |
|
|
|
|
List<JSONObject> requestList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (WorkOrderEntity workOrderEntity : workOrderEntityList) { |
|
|
|
|
JSONObject requestJson = new JSONObject(); |
|
|
|
|
|
|
|
|
|
List<WorkPlanEntity> workPlanList = workPlanService.list(Wrappers.<WorkPlanEntity>lambdaQuery() |
|
|
|
|
.eq(WorkPlanEntity::getWoId, workOrderEntity.getId())); |
|
|
|
|
|
|
|
|
|
requestJson.put("workOrder", workOrderEntity); |
|
|
|
|
requestJson.put("workPlanList", workPlanList); |
|
|
|
|
requestList.add(requestJson); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 向旧MES推送排产结果数据
|
|
|
|
|
String url = oldMesUrl + pushApsResult; |
|
|
|
|
try { |
|
|
|
|
HttpUtil.post(url, JSONObject.toJSONString(requestList)); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void calculateCr(List<YieldOrderEntity> list) { |
|
|
|
|
//查询订单下的工序,计算cr值
|
|
|
|
|
for (YieldOrderEntity entity : list) { |
|
|
|
|
List<YieldOrderCraftEntity> craftList = yieldOrderCraftService.list(Wrappers.<YieldOrderCraftEntity>lambdaQuery().eq(YieldOrderCraftEntity::getYoId, entity.getId())); |
|
|
|
|
//定义订单总工时
|
|
|
|
|
BigDecimal total = new BigDecimal(0); |
|
|
|
|
for (YieldOrderCraftEntity craftEntity : craftList) { |
|
|
|
|
total = total.add(craftEntity.getHourQuota()); |
|
|
|
|
} |
|
|
|
|
//换算成天
|
|
|
|
|
total = total.divide(BigDecimal.valueOf(1440), 2, RoundingMode.HALF_UP); |
|
|
|
|
//获取交期剩余天数
|
|
|
|
|
BigDecimal restDays = new BigDecimal(TimeUnit.DAYS.convert(entity.getDemandDate().getTime() - DateUtil.now().getTime(), TimeUnit.MILLISECONDS)); |
|
|
|
|
//计算cr值剩余交期天数/生产所需额定时长
|
|
|
|
|
entity.setCrValue(restDays.divide(total, 2, RoundingMode.HALF_UP)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 处理有前置公共工序的分组(WC=镀金大批量,镀金小批量,镀银):轮流每次取指定数量进行资源匹配 |
|
|
|
|
@ -425,7 +457,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO |
|
|
|
|
* @author sjx |
|
|
|
|
* @since 2025/12/1 18:08 |
|
|
|
|
**/ |
|
|
|
|
@Transactional |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public void allocateResources(List<YieldOrderEntity> list,Map<String, PersonAbilityEntity> personAbilityMap,Map<Long, String> mainProducerMap) { |
|
|
|
|
|
|
|
|
|
for (YieldOrderEntity order : list) { |
|
|
|
|
|