生产监控接口开发:获取订单基础信息、零件信息、工序信息

liweidong
李涛 2 months ago
parent 2a719a45b4
commit aa595b0cfa
  1. 13
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  2. 1
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  3. 10
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  4. 57
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorDsPartVO.java
  5. 94
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorOrderDataVO.java
  6. 70
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorWorkPlanVO.java
  7. 39
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java
  8. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java
  9. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  10. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  11. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java
  12. 52
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  13. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java

@ -123,24 +123,11 @@ public class WorkOrder extends BaseEntity {
*/
public static Integer PICKING_STATUS_OK = 1;
public static Map<Integer, String> runStatusMap = new HashMap<>(11);
public static Map<Integer, String> priorityMap = new HashMap<Integer, String>(5);
public static Map<Integer, String> approvalStatusMap = new HashMap<Integer, String>(4);
public static Map<Integer, String> pickingStatusMap = new HashMap<Integer, String>(2);
static {
runStatusMap.put(RUN_STATUS_NORMAL, "未下达");
runStatusMap.put(RUN_STATUS_ISSUED, "已下达");
runStatusMap.put(RUN_STATUS_RECEIVE, "加工中");
runStatusMap.put(RUN_STATUS_CHECK, "检验中");
runStatusMap.put(RUN_STATUS_CRAFT_CHANGE, "工艺变更");
runStatusMap.put(RUN_STATUS_HEAR, "审理中");
runStatusMap.put(RUN_STATUS_COMPLETED, "已完工");
runStatusMap.put(RUN_STATUS_HANDOVER, "已交接");
runStatusMap.put(RUN_STATUS_REWORK, "已返工");
runStatusMap.put(RUN_STATUS_SCRAP, "已报废");
runStatusMap.put(RUN_STATUS_VOIDED, "已关闭");
priorityMap.put(PRIORITY_NORMAL, "正常");
priorityMap.put(PRIORITY_PRO_IMP, "项目要求日期急件");
priorityMap.put(PRIORITY_PACT_IMP, "合同急件");

@ -71,7 +71,6 @@ public class WorkOrderRun extends BaseEntity {
runStatusMap.put(RUN_STATUS_DELIVERED, "已交件");
runStatusMap.put(RUN_STATUS_COMPLETED, "已完工");
runStatusMap.put(RUN_STATUS_VOIDED, "已作废");
}
public String getRunStatusTitle() {

@ -60,12 +60,20 @@ public class WorkPlan extends BaseEntity {
* 解绑
*/
public static Short BIND_STATUS_FREE = 3;
public static Map<Short, String> statusMap = new HashMap<Short, String>(3);
public static Map<Integer, String> statusMap = new HashMap<>(5);
/**
* 生产过程
*/
public static Short PRINT_TYPE_PROCESS = 1;
static {
statusMap.put(STATUS_NO_START, "未接收");
statusMap.put(STATUS_START, "加工中");
statusMap.put(STATUS_WORK_OK, "报工完成");
statusMap.put(STATUS_COMPLETE, "已完工");
statusMap.put(STATUS_VOIDED, "返工");
}
@Serial
private static final long serialVersionUID = 1L;

@ -0,0 +1,57 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 生产监控零件信息 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorDsPartVO {
@Schema(description = "零件名称")
private String partName;
@Schema(description = "产品型号")
private String productType;
@Schema(description = "硬度")
private String hardness;
@Schema(description = "镀种")
private String plate;
@Schema(description = "面积")
private Double area;
@Schema(description = "材料")
private String material;
@Schema(description = "标记要求")
private String signMemo;
@Schema(description = "关键信息")
private String keyInfo;
@Schema(description = "工艺路线")
private String craftWay;
@Schema(description = "涂色标个数")
private String tsbNum;
@Schema(description = "涂色带个数")
private String tsdNum;
@Schema(description = "涂箭头个数")
private String tjtNum;
@Schema(description = "产品系列")
private String productSeries;
@Schema(description = "是否印字:1、否,2、单,3、双")
private String isPrint;
}

@ -0,0 +1,94 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.dashboard.pojo.vo.DsPartVO;
import java.util.Date;
import java.util.List;
/**
* 生产监控订单信息 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorOrderDataVO {
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "订单编码")
private String orderCode;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "订单数量")
private Double ypQty;
@Schema(description = "状态")
private String curStatus;
@Schema(description = "优先级")
private String priority;
@Schema(description = "调度员")
private String dispatcher;
@Schema(description = "订单下达时间")
private Date sendDownTime;
@Schema(description = "生产数量")
private Double makeQty;
@Schema(description = "计划完工时间")
private Date planEndDate;
@Schema(description = "需求交期")
private Date demandDate;
@Schema(description = "生产标识")
private String prodIdent;
@Schema(description = "镀后入库时间")
private Date putStoreTime;
@Schema(description = "试验数量")
private Double testQty;
@Schema(description = "消耗数量")
private Double lossQty;
@Schema(description = "报废数量")
private Double scrapQty;
@Schema(description = "工作订单备注")
private String ypMemo;
@Schema(description = "会议要求周期")
private String meetCycle;
@Schema(description = "审理单号")
private String reworkCode;
@Schema(description = "订单类型")
private Integer yieldType;
@Schema(description = "返工单号(仅状态为19的车间订单在生产监控展示)")
private String qcReworkCode;
@Schema(description = "零件信息")
private ProduceMonitorDsPartVO dsPart;
@Schema(description = "工序集合")
private List<ProduceMonitorWorkPlanVO> planList;
}

@ -0,0 +1,70 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 生产监控工序信息 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorWorkPlanVO {
@Schema(description = "工序id")
private Long id;
@Schema(description = "工艺号")
private String orders;
@Schema(description = "工序名称")
private String ppsName;
@Schema(description = "状态")
private Integer status;
@Schema(description = "是否主工序:0-否 1-是")
private String mainProcess;
@Schema(description = "加工班组")
private String makeTeam;
@Schema(description = "接收人ID")
private Long receiveMan;
@Schema(description = "接收人")
private String receiveManName;
@Schema(description = "计划加工人")
private String planWorkMan;
@Schema(description = "报工人ID")
private Long workMan;
@Schema(description = "报工人")
private String workManName;
@Schema(description = "报工数量")
private Double workQty;
@Schema(description = "额定工时")
private Double hourQuota;
@Schema(description = "实际工时")
private Long hourActual;
@Schema(description = "计划开始时间")
private LocalDateTime planStartTime;
@Schema(description = "计划结束时间")
private LocalDateTime planEndTime;
@Schema(description = "实际开始时间")
private LocalDateTime factStartTime;
@Schema(description = "实际结束时间")
private LocalDateTime factEndTime;
}

@ -0,0 +1,39 @@
package org.springblade.desk.produce.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorOrderDataVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springframework.web.bind.annotation.*;
/**
* 生产监控
* @author litao
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/workOrder")
@Tag(name = "生产监控", description = "接口")
public class ProduceMonitorController extends BladeController {
private final IWorkOrderService workOrderService;
@GetMapping("/getOrderDetail")
@ApiOperationSupport(order = 1)
@Operation(summary = "获取订单详情:订单基础信息、零件信息、工序列表信息", description = "")
public R<ProduceMonitorOrderDataVO> getOrderDetail(@RequestParam Long woId, @RequestParam String partCode) {
return R.data(workOrderService.getOrderDetail(woId, partCode));
}
@GetMapping("/getPlanDetail")
@ApiOperationSupport(order = 2)
@Operation(summary = "获取工序详情", description = "")
public R getPlanDetail(@RequestParam Long wpId) {
return R.data(null);
}
}

@ -3,6 +3,7 @@ package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
@ -25,4 +26,6 @@ public interface WorkPlanMapper extends BaseMapper<WorkPlan> {
IPage<WorkPlanVO> queryWorkPlan(IPage<WorkPlanVO> page, String cardNo, List<Long> tsIds);
List<String> loadPrMacToolUseByMtnCode(@Param("mtnCode") String mtnCode);
List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId);
}

@ -68,5 +68,28 @@
</if>
</where>
</select>
<select id="getProduceMonitorWorkPlanList" resultType="org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO">
SELECT
mwp.ID,
mwp.ORDERS,
mwp.STATUS,
bpe.NAME AS ppsName,
bpe.IS_MAIN AS mainProcess,
bte.TS_NAME AS makeTeam,
mwp.RECEIVE_MAN AS receiveMan,
mmr.WORKER AS workMan,
mwp.WORK_QTY AS workQty,
mwp.HOUR_QUOTA AS hourQuota,
mwp.PLAN_START_TIME AS planStartTime,
mwp.PLAN_END_TIME AS planEndTime,
mwp.FACT_START_TIME AS factStartTime,
mwp.FACT_END_TIME AS factEndTime
FROM MES_WORK_PLAN mwp
LEFT JOIN BS_PROCESS_SET bpe ON mwp.PPS_ID = bpe.ID
LEFT JOIN BA_TEAM_SET bte ON mwp.MAKE_TEAM = bte.ID
LEFT JOIN MES_MAKE_REC mmr ON mwp.ID = mmr.WP_ID
WHERE mwp.WO_ID = #{woId}
ORDER BY mwp.ORDERS
</select>
</mapper>

@ -131,4 +131,16 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
*/
void maintainOrder(WorkOrder workOrder, Long planner, Long dispatcher, WorkOrderRun workOrderRun, Boolean oem) throws Exception;
/**
* <p>方法名: getOrderDetail </p>
* <p>方法描述: 获取订单详情订单基础信息零件信息工序列表信息 </p>
*
* @param woId 订单id
* @param partCode 零件号
* @return org.springblade.desk.produce.pojo.vo.ProduceMonitorOrderDataVO
* @author lyj
* @date 2022-10-29 15:13
*/
ProduceMonitorOrderDataVO getOrderDetail(Long woId, String partCode);
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO;
import org.springblade.scheduling.pojo.entity.WorkPlanEntity;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
@ -37,4 +38,5 @@ public interface IWorkPlanService extends BaseService<WorkPlan> {
IPage<WorkPlanVO> queryWorkPlan(IPage<WorkPlanVO> page, String cardNo);
List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId);
}

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.barbecue.Barcode;
@ -36,6 +35,7 @@ import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
@ -47,6 +47,8 @@ import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.cache.DictCache;
import org.springblade.system.pojo.enums.DictEnum;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -54,6 +56,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
@ -1070,6 +1073,53 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
baseMapper.updateById(workOrder);
}
@Override
public ProduceMonitorOrderDataVO getOrderDetail(Long woId, String partCode) {
WorkOrder workOrder = this.getById(woId);
DsPartEntity dsPartEntity = dsPartService.selectDsPartByPatCodeAndVersion(partCode, null);
if (workOrder == null || dsPartEntity == null) {
return null;
}
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
WorkOrderRun workOrderRun = workOrderRunService.getById(woId);
List<ProduceMonitorWorkPlanVO> workPlans = workPlanService.getProduceMonitorWorkPlanList(woId);
if (yieldOrder == null || CollectionUtils.isEmpty(workPlans) || workOrderRun == null) {
return null;
}
ProduceMonitorOrderDataVO orderDataVO = new ProduceMonitorOrderDataVO();
ProduceMonitorDsPartVO dsPartVO = new ProduceMonitorDsPartVO();
// 组装订单基础信息
BeanUtils.copyProperties(workOrder, orderDataVO);
orderDataVO.setOrderCode(workOrderRun.getWoCode());
orderDataVO.setPartCode(partCode);
orderDataVO.setYpQty(yieldOrder.getYpQty());
orderDataVO.setYieldType(yieldOrder.getYieldType());
orderDataVO.setCurStatus(WorkOrderEnum.getName(workOrder.getRunStatus()));
orderDataVO.setPriority(WorkOrder.priorityMap.get(workOrder.getPriority()));
User user = UserCache.getUser(workOrder.getDispatcher());
orderDataVO.setDispatcher(user != null ? user.getRealName() : "");
orderDataVO.setProdIdent(yieldOrder.getProductIdent());
orderDataVO.setYpMemo(yieldOrder.getYpMemo());
// 组装零件信息
BeanUtils.copyProperties(dsPartEntity, dsPartVO);
orderDataVO.setDsPart(dsPartVO);
// 组装工序信息
for (ProduceMonitorWorkPlanVO workPlan : workPlans) {
User receiveMan = UserCache.getUser(workPlan.getReceiveMan());
workPlan.setReceiveManName(receiveMan != null ? receiveMan.getRealName() : "");
workPlan.setPlanWorkMan("");
User workMan = UserCache.getUser(workPlan.getWorkMan());
workPlan.setWorkManName(workMan != null ? workMan.getRealName() : "");
if (workPlan.getPlanStartTime() != null && workPlan.getPlanEndTime() != null) {
workPlan.setHourActual(Duration.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime()).toMinutes());
}
}
orderDataVO.setPlanList(workPlans);
return orderDataVO;
}
public String prefix(String stringToFix, String fixChar, int targetLen) {
int len = stringToFix.length();
for(int i = 0; i < targetLen - len; i += fixChar.length()) {

@ -16,6 +16,7 @@ import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.service.*;
import org.springblade.desk.produce.mapper.WorkPlanMapper;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
@ -238,4 +239,9 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
.stream().map(RelTeamSetUser::getUserId).collect(Collectors.toList());
return baseMapper.queryWorkPlan(page, cardNo, tsIds);
}
@Override
public List<ProduceMonitorWorkPlanVO> getProduceMonitorWorkPlanList(Long woId) {
return baseMapper.getProduceMonitorWorkPlanList(woId);
}
}

Loading…
Cancel
Save