添加同步排产结果相关接口

master
liuqingkun 2 days ago
parent 92ae768abc
commit 8e2a922f5b
  1. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  2. 9
      blade-service/blade-scheduling/pom.xml
  3. 34
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkPlanController.java
  4. 12
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java
  5. 9
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkPlanService.java
  6. 72
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
  7. 16
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java
  8. 4
      blade-service/blade-scheduling/src/main/resources/application-dev.yml

@ -275,7 +275,18 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
yieldOrder.setReceiveUser(yieldJson.getLong("failureMan"));
yieldOrder.setReceiveTime(yieldJson.getDate("failureTime"));
yieldOrder.setStatus(YieldOrderConst.STATUS_APS);
this.save(yieldOrder);
// 先根据流程卡号验证订单是否重复,如果重复则不保存
List<YieldOrder> orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, yieldOrder.getCardNo()));
if(orderList.size() == 0) {
this.save(yieldOrder);
} else {
yieldOrder.setId(orderList.get(0).getId());
this.updateById(yieldOrder);
// 先删除原有的订单工艺信息
yieldOrderCraftService.remove(Wrappers.lambdaQuery(YieldOrderCraft.class).eq(YieldOrderCraft::getYoId, yieldOrder.getId()));
}
// 构建生产订单工艺信息并保存
JSONArray craftArray = jsonItem.getJSONArray("craftList");

@ -39,7 +39,12 @@
<groupId>org.springblade</groupId>
<artifactId>blade-starter-excel</artifactId>
</dependency>
<!-- 添加Hutool依赖-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
</dependencies>
</project>
</project>

@ -25,18 +25,23 @@
*/
package org.springblade.scheduling.scheduling.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.scheduling.scheduling.entity.WorkPlanEntity;
import org.springblade.scheduling.scheduling.excel.WorkPlanExcel;
@ -44,15 +49,9 @@ import org.springblade.scheduling.scheduling.service.IWorkPlanService;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import org.springblade.scheduling.scheduling.wrapper.WorkPlanWrapper;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import java.util.Map;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 车间作业计划 控制器
@ -158,4 +157,13 @@ public class WorkPlanController extends BladeController {
ExcelUtil.export(response, "车间作业计划数据" + DateUtil.time(), "车间作业计划数据表", list, WorkPlanExcel.class);
}
/**
* 车间作业计划 更新实际开始结束时间
*/
@PostMapping("/updateWorkPlan")
@Operation(summary = "更新作业计划", description = "")
public R updateWorkPlan(@RequestBody WorkPlanEntity entity) {
workPlanService.updateWorkPlan(entity.getId(), entity.getFactStartTime(), entity.getFactEndTime());
return R.success();
}
}

@ -63,11 +63,19 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
/**
* TODO:排产
*
* @return null
* @author sjx
* @since 2025/11/28 13:30
* @return null
**/
void scheduling();
Map<String,List<WorkOrderDto>> schedulingBoard(WorkOrderDto workOrder);
Map<String, List<WorkOrderDto>> schedulingBoard(WorkOrderDto workOrder);
/**
* 向旧mes发送排产结果数据
*
* @param workOrderEntityList
*/
void sendWorkOrderToOldMes(List<WorkOrderEntity> workOrderEntityList);
}

@ -32,6 +32,7 @@ import org.springblade.scheduling.scheduling.entity.WorkPlanEntity;
import org.springblade.scheduling.scheduling.excel.WorkPlanExcel;
import org.springblade.scheduling.scheduling.vo.WorkPlanVO;
import java.util.Date;
import java.util.List;
/**
@ -59,4 +60,12 @@ public interface IWorkPlanService extends BaseService<WorkPlanEntity> {
*/
List<WorkPlanExcel> export(Wrapper<WorkPlanEntity> queryWrapper);
/**
* 更新作业计划
*
* @param id
* @param factStartTime
* @param factEndTime
*/
void updateWorkPlan(Long id, Date factStartTime, Date factEndTime);
}

@ -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) {

@ -25,6 +25,7 @@
*/
package org.springblade.scheduling.scheduling.service.impl;
import org.apache.commons.lang3.ObjectUtils;
import org.springblade.scheduling.scheduling.entity.WorkPlanEntity;
import org.springblade.scheduling.scheduling.excel.WorkPlanExcel;
import org.springblade.scheduling.scheduling.mapper.WorkPlanMapper;
@ -34,6 +35,8 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import java.util.Date;
import java.util.List;
/**
@ -50,7 +53,6 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
return page.setRecords(baseMapper.selectWorkPlanPage(page, workPlan));
}
@Override
public List<WorkPlanExcel> export(Wrapper<WorkPlanEntity> queryWrapper) {
List<WorkPlanExcel> workPlanList = baseMapper.export(queryWrapper);
@ -60,4 +62,16 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
return workPlanList;
}
@Override
public void updateWorkPlan(Long id, Date factStartTime, Date factEndTime) {
WorkPlanEntity workPlanUpdate = new WorkPlanEntity();
workPlanUpdate.setId(id);
if (ObjectUtils.isNotEmpty(factStartTime)) {
workPlanUpdate.setFactStartTime(factStartTime);
}
if (ObjectUtils.isNotEmpty(factEndTime)) {
workPlanUpdate.setFactEndTime(factEndTime);
}
this.updateById(workPlanUpdate);
}
}

@ -9,3 +9,7 @@ spring:
username: ${blade.datasource.dev.username}
password: ${blade.datasource.dev.password}
business:
oldMes:
url: 192.168.169.172:9000
pushApsResult: /zhgd-rb/aiWebapi/pushApsResult

Loading…
Cancel
Save