生产监控接口开发:打印标签、车间订单生成

liweidong
李涛 1 month ago
parent 037c019df6
commit 9daa0151d9
  1. 30
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/PrintParentWoLabelVO.java
  2. 24
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/PrintWoLabelVO.java
  3. 24
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorFileSlotVO.java
  4. 32
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorMakeRecVO.java
  5. 29
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorMtuListVO.java
  6. 51
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java
  7. 47
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanItemVO.java
  8. 48
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorSlotListVO.java
  9. 38
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorWorkCheckVO.java
  10. 23
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java
  11. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  12. 69
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -0,0 +1,30 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.quality.pojo.entity.PlanTest;
import java.util.List;
/**
* 标签打印 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class PrintParentWoLabelVO {
@Schema(description = "第一列")
private PrintWoLabelVO plOne;
@Schema(description = "第二列")
private PrintWoLabelVO plTwo;
@Schema(description = "第三列")
private PrintWoLabelVO plThree;
@Schema(description = "第四列")
private PrintWoLabelVO plFour;
}

@ -0,0 +1,24 @@
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 PrintWoLabelVO {
@Schema(description = "零件号")
private String partCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "数量")
private String makeQty;
}

@ -0,0 +1,24 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.produce.pojo.entity.MesRbFilePreserveDetailEntity;
import java.util.List;
/**
* 设备使用详情 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorFileSlotVO {
@Schema(description = "槽位/工步")
private String slotName;
@Schema(description = "明细")
private List<MesRbFilePreserveDetailEntity> childrenList;
}

@ -0,0 +1,32 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 加工记录 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorMakeRecVO {
@Schema(description = "操作工")
private String worker;
@Schema(description = "加工时间")
private Date makeTime;
@Schema(description = "合格数量")
private Double workQty;
@Schema(description = "报废数量")
private Double scrapQty;
@Schema(description = "备注")
private String memo;
}

@ -0,0 +1,29 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 设备使用详情 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorMtuListVO {
@Schema(description = "挂具编号")
private String rsCode;
@Schema(description = "飞靶编号")
private String fsCode;
@Schema(description = "设备编号")
private String deviceCode;
@Schema(description = "挂次号")
private String hangNum;
}

@ -0,0 +1,51 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.quality.pojo.entity.PlanTest;
import java.util.List;
/**
* 生产监控工序相关信息 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorPlanDataVO {
@Schema(description = "接收数量")
private Double qualifiedQty;
@Schema(description = "试验数量")
private Double testQty;
@Schema(description = "消耗数量")
private Double lossQty;
@Schema(description = "报废数量")
private Double scrapQty;
@Schema(description = "加工记录")
private List<ProduceMonitorMakeRecVO> mrList;
@Schema(description = "同槽信息")
private List<ProduceMonitorSlotListVO> slotList;
@Schema(description = "设备使用详情")
private List<ProduceMonitorMtuListVO> mtuList;
@Schema(description = "过程质量记录")
private List<ProduceMonitorFileSlotVO> dsRbFilePreserveSlotList;
@Schema(description = "检验记录")
private List<ProduceMonitorWorkCheckVO> prWorkCheck;
@Schema(description = "转试记录")
private List<PlanTest> trialItemList;
@Schema(description = "检验项目")
private List<ProduceMonitorPlanItemVO> itemList;
}

@ -0,0 +1,47 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 检验项目 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorPlanItemVO {
@Schema(description = "项目编号")
private String trialNo;
@Schema(description = "项目名称")
private String trialItem;
@Schema(description = "标准")
private String trialStandard;
@Schema(description = "测试值")
private String scrapQty;
@Schema(description = "试验数量")
private Double testQty = 0d;
@Schema(description = "消耗数量")
private Double lossQty = 0d;
@Schema(description = "检验数量")
private Double checkQty = 0d;
@Schema(description = "检验结果")
private String checkValue;
@Schema(description = "检验人")
private String checkMan;
@Schema(description = "检验时间")
private Date checkDate;
}

@ -0,0 +1,48 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 同槽信息 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorSlotListVO {
@Schema(description = "同槽编号")
private String mtuCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "数量")
private String qua;
@Schema(description = "生产标识")
private String prodIdent;
@Schema(description = "面积")
private String area;
@Schema(description = "总面积")
private String totalArea;
// @Schema(description = "订单编号")
// private String woCode;
//
// @Schema(description = "材料")
// private String material;
//
// @Schema(description = "订单类型")
// private String yieldType;;
}

@ -0,0 +1,38 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 检验记录 视图实体类
*
* @author litao
* @since 2026-2-27
*/
@Data
public class ProduceMonitorWorkCheckVO {
@Schema(description = "检验数量")
private Double checkQty = 0d;
@Schema(description = "消耗数量")
private Double lossQty = 0d;
@Schema(description = "合格数量")
private Double qualifiedQty = 0d;
@Schema(description = "报废数量")
private Double scrapQty = 0d;
@Schema(description = "不合格数量")
private Double unqualifiedQty = 0d;
@Schema(description = "返工数量")
private Double reworkQty = 0d;
@Schema(description = "检验备注")
private String checkMemo;
}

@ -6,10 +6,15 @@ 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.core.tool.utils.Func;
import org.springblade.desk.produce.pojo.vo.PrintParentWoLabelVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorOrderDataVO;
import org.springblade.desk.produce.pojo.vo.ProduceMonitorPlanDataVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 生产监控
* @author litao
@ -32,8 +37,22 @@ public class ProduceMonitorController extends BladeController {
@GetMapping("/getPlanDetail")
@ApiOperationSupport(order = 2)
@Operation(summary = "获取工序详情", description = "")
public R getPlanDetail(@RequestParam Long wpId) {
return R.data(null);
public R<ProduceMonitorPlanDataVO> getPlanDetail(@RequestParam Long wpId) {
return R.data(workOrderService.getPlanDetail(wpId));
}
@PostMapping("/printWoLabel")
@ApiOperationSupport(order = 3)
@Operation(summary = "打印标签")
public R<List<PrintParentWoLabelVO>> printWoLabel(@RequestParam String woIds, @RequestParam Short quantity) {
return R.data(workOrderService.printWoLabel(Func.toLongList(woIds), quantity));
}
@PostMapping("/generateWorkOrder")
@ApiOperationSupport(order = 4)
@Operation(summary = "车间订单生成")
public R generateWorkOrder(@RequestParam Long id) {
return R.data(workOrderService.generateWorkOrder(id));
}
}

@ -138,9 +138,31 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
*
* @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);
/**
* <p>方法名: printWoLabel </p>
* <p>方法描述: 打印标签 </p>
*
* @param woIds 订单id
* @param quantity 数量
*/
List<PrintParentWoLabelVO> printWoLabel(List<Long> woIds, Short quantity);
/**
* <p>方法名: generateWorkOrder </p>
* <p>方法描述: 车间订单生成 </p>
*
* @param id 工单id
*/
boolean generateWorkOrder(Long id);
/**
* <p>方法名: getPlanDetail </p>
* <p>方法描述: 获取工序详情 </p>
*
* @param wpId 工单id
*/
ProduceMonitorPlanDataVO getPlanDetail(Long wpId);
}

@ -61,6 +61,7 @@ import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.alibaba.fastjson2.util.DateUtils.DEFAULT_ZONE_ID;
@ -1116,6 +1117,74 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return orderDataVO;
}
@Override
public List<PrintParentWoLabelVO> printWoLabel(List<Long> woIds, Short quantity) {
if (CollectionUtils.isEmpty(woIds)) {
return null;
}
List<Long> woIdListAll = new ArrayList<>();
for (int i = 0; i < quantity; i++) {
woIdListAll.addAll(woIds);
}
Map<Integer, List<Long>> map = new HashMap<>(1);
List<Long> list = null;
Integer num = 0;
int i = 1;
PrintWoLabelVO printWoLabel;
PrintParentWoLabelVO printParentWoLabel = null;
WorkOrder workOrder;
List<PrintParentWoLabelVO> plList = new ArrayList<>();
// 批量查询车间订单
List<WorkOrder> woList = this.listByIds(woIdListAll);
// 根据id转换为map,一个id对应一个对象
Map<Long, WorkOrder> idMap = woList.stream().collect(Collectors.toMap(WorkOrder::getId, wo -> wo));
List<YieldOrder> yieldOrders = yieldOrderService.listByIds(woList.stream().map(WorkOrder::getYoId).toList());
Map<Long, YieldOrder> yieldOrderMap = yieldOrders.stream().collect(Collectors.toMap(YieldOrder::getId, wo -> wo));
for (Long woId : woIdListAll) {
if (!map.containsKey(num)) {
list = new ArrayList<>();
map.put(num, list);
printParentWoLabel = new PrintParentWoLabelVO();
}
list.add(woId);
printWoLabel = new PrintWoLabelVO();
workOrder = idMap.get(woId);
printWoLabel.setPartCode(yieldOrderMap.get(workOrder.getYoId()).getPartCode());
printWoLabel.setBatchNo(workOrder.getBatchNo());
printWoLabel.setMakeQty(workOrder.getMakeQty().toString());
if (list.size() == 1) {
printParentWoLabel.setPlOne(printWoLabel);
}
if (list.size() == 2) {
printParentWoLabel.setPlTwo(printWoLabel);
}
if (list.size() == 3) {
printParentWoLabel.setPlThree(printWoLabel);
}
if (list.size() == 4) {
printParentWoLabel.setPlFour(printWoLabel);
plList.add(printParentWoLabel);
num++;
} else if (i == woIdListAll.size()) {
plList.add(printParentWoLabel);
}
i++;
}
return plList;
}
@Override
public boolean generateWorkOrder(Long id) {
YieldOrder yieldOrder = yieldOrderService.getById(id);
yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode());
return yieldOrderService.updateById(yieldOrder);
}
@Override
public ProduceMonitorPlanDataVO getPlanDetail(Long wpId) {
return null;
}
public String prefix(String stringToFix, String fixChar, int targetLen) {
int len = stringToFix.length();
for(int i = 0; i < targetLen - len; i += fixChar.length()) {

Loading…
Cancel
Save