生产管理接口开发

liweidong
李涛 2 months ago
parent f8f20293c7
commit 2bce33fe02
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  2. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TaskCompleteDTO.java
  3. 29
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/OrderDeclare.java
  4. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/CacheWorkOrderVO.java
  5. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/TaskCompleteVO.java
  6. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkOrderVO.java
  7. 19
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/WorkPlanRunVO.java
  8. 18
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java
  9. 12
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java
  10. 2
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/ReworkProcessVO.java
  11. 5
      blade-service/blade-desk/pom.xml
  12. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  13. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DeductionPreserveController.java
  14. 36
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java
  15. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  16. 57
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ReworkProcessController.java
  17. 63
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/WorkProcessController.java
  18. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DisTaskingMapper.xml
  19. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java
  20. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  21. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  22. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java
  23. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java
  24. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  25. 37
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java
  26. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java
  27. 29
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/OrderCacheService.java
  28. 178
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  29. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java
  30. 12
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java
  31. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.java
  32. 8
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataProduceMapper.xml
  33. 6
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java
  34. 12
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java

@ -147,7 +147,7 @@ public class YieldOrder extends BaseEntity {
* todo 只有字段没有动 mapper
* 零件号版本号
*/
@TableField(value = "PART_VERSION")
@TableField(value = "PART_VERSION", exist = false)
private String partVersion;
/**

@ -44,5 +44,11 @@ public class TaskCompleteDTO {
@Schema(description = "调度员")
private Long disAssignMan;
@Schema(description = "调度处理人")
private Long dispatchMan;
@Schema(description = "转派备注")
private String resolution;
}

@ -1,5 +1,6 @@
package org.springblade.desk.produce.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -21,6 +22,28 @@ import java.util.Map;
@EqualsAndHashCode(callSuper = true)
public class OrderDeclare extends BaseEntity {
/**
* 已申报
*/
public static Short NEW_DATA = 1;
/**
* 申报完成
*/
public static Short DATA_OK = 2;
/**
* 已创建订单
*/
public static Short DATA_CREATE_OK = 3;
public static Map<Short, String> podStatusMap = new HashMap<>(5);
static {
podStatusMap.put(NEW_DATA, "已申报");
podStatusMap.put(DATA_OK, "申报完成");
podStatusMap.put(DATA_CREATE_OK, "已创建订单");
}
@Schema(description = "领用单号")
private String useCode;
@ -51,9 +74,13 @@ public class OrderDeclare extends BaseEntity {
@Schema(description = "计划员")
private String planMan;
@Schema(description = "状态 1、新建")
@Schema(description = "状态 1-已申报 2-申报完成 3-已创建订单")
private Short podStatus;
@Schema(description = "库位")
private String locationNo;
@TableField(exist = false)
@Schema(description = "状态名称")
private String podStatusName;
}

@ -95,6 +95,9 @@ public class CacheWorkOrderVO {
@Schema(description = "接收人员")
private Integer receiveUserNamr;
@Schema(description = "状态")
private Integer runStatus;
@Schema(description = "工序集合")
private List<CacheWorkPlanVO> processList;

@ -52,4 +52,12 @@ public class TaskCompleteVO {
@Schema(description = "任务时间")
private Date taskTime;
@Schema(description = "态度")
private String status;
private Long dispatchMan;
@Schema(description = "调度处理人")
private String dispatchManName;
}

@ -100,4 +100,10 @@ public class WorkOrderVO extends WorkOrder {
@Schema(description = "接收人员")
private Integer receiveUserNamr;
@Schema(description = "状态")
private String runStatusName;
@Schema(description = "优先级;1.正常,2.项目要求日期急件,3.合同急件,4.绩效零件,5.调度标注急件")
private String priorityName;
}

@ -25,4 +25,23 @@ public class WorkPlanRunVO extends WorkPlanRun {
@Schema(description = "工艺能力")
private ProcessAbility processAbility;
// @Schema(description = "工序号")
// private String orders;
//
// @Schema(description = "工序代码")
// private String ppsCode;
//
// @Schema(description = "工序名称")
// private String ppsName;
//
// @Schema(description = "工艺能力")
// private String caName;
//
// @Schema(description = "工序描述")
// private String makeMemo;
//
// @Schema(description = "不可转外协原因")
// private String reason;
}

@ -10,6 +10,8 @@ import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Map;
/**
* Feign接口类
*
@ -24,6 +26,8 @@ public interface IErpDataProduceClient {
String API_PREFIX = "/feign/erpdata/produce";
String QUERY_BATCH = API_PREFIX + "/queryBatch";
String REWORK_ORDER = API_PREFIX + "/loadReworkOrder";
String PRODUCT_APP_AREA = API_PREFIX + "/productAppArea";
String VERSION = API_PREFIX + "/version";
/**
* 缺件申报-通过零件号获取批次号
@ -31,7 +35,21 @@ public interface IErpDataProduceClient {
@GetMapping(QUERY_BATCH)
R<QueryBatchVO> queryBatch(String partCode);
/**
* 返工订单
*/
@GetMapping(REWORK_ORDER)
R<IPage<ReworkProcessVO>> loadReworkOrder(ReworkProcessDTO query);
/**
* 获取产品区域
*/
@GetMapping(PRODUCT_APP_AREA)
R<Map<String, String>> getProductAppareaByPartCode(String partCode);
/**
* 获取产品版本
*/
@GetMapping(VERSION)
R<String> getVersionByPartCode(String partCode);
}

@ -7,6 +7,8 @@ import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* Feign失败配置
*
@ -25,4 +27,14 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient {
public R<IPage<ReworkProcessVO>> loadReworkOrder(ReworkProcessDTO query) {
return R.fail("获取数据失败");
}
@Override
public R<Map<String, String>> getProductAppareaByPartCode(String partCode) {
return R.fail("获取数据失败");
}
@Override
public R<String> getVersionByPartCode(String partCode) {
return R.fail("获取数据失败");
}
}

@ -35,7 +35,7 @@ public class ReworkProcessVO {
* 执行状态
*/
@Schema(description = "执行状态")
private Short excstatus;
private Integer excstatus;
/**
* 加工数量
*/

@ -124,6 +124,11 @@
<!-- <version>4.6.0.RELEASE</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>net.sourceforge.barbecue</groupId>
<artifactId>barbecue</artifactId>
<version>1.5-beta1</version>
</dependency>
</dependencies>
<build>

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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 lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
@ -644,12 +645,12 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
@Override
public YieldOrder getYoByCardNo(String cardNo) {
LambdaQueryWrapper<YieldOrder> queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo);
YieldOrder yieldOrder = baseMapper.selectOne(queryWrapper);
List<YieldOrder> yieldOrders = baseMapper.selectList(queryWrapper);
// TODO : 待完善
if (yieldOrder == null) {
if (CollectionUtils.isEmpty(yieldOrders)) {
throw new ServiceException("生产订单未同步,请稍后操作");
}
return yieldOrder;
return yieldOrders.get(0);
}
@Override

@ -23,6 +23,8 @@ import org.springblade.desk.produce.service.IOrderDeclareService;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 扣数维护
*
@ -69,7 +71,11 @@ public class DeductionPreserveController extends BladeController {
wrapper.like(orderDeclareDto.getPartCode() != null, OrderDeclare::getPartCode, orderDeclareDto.getPartCode());
wrapper.like(orderDeclareDto.getBatchNo() != null, OrderDeclare::getBatchNo, orderDeclareDto.getBatchNo());
wrapper.like(orderDeclareDto.getQuaLevel() != null, OrderDeclare::getQuaLevel, orderDeclareDto.getQuaLevel());
return R.data(orderDeclareService.page(Condition.getPage(query), wrapper));
IPage<OrderDeclare> page = orderDeclareService.page(Condition.getPage(query), wrapper);
for (OrderDeclare pageRecord : page.getRecords()) {
pageRecord.setPodStatusName(OrderDeclare.podStatusMap.get(pageRecord.getPodStatus()));
}
return R.data(page);
}
@PostMapping("/signDelete")

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.utils.CommonUtil;
@ -14,14 +15,17 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO;
import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO;
import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO;
import org.springblade.desk.produce.pojo.entity.DisTasking;
import org.springblade.desk.produce.pojo.entity.MakeRec;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.entity.WorkPlanLog;
import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO;
import org.springblade.desk.produce.pojo.vo.TaskCompleteVO;
import org.springblade.desk.produce.service.IDisTaskingService;
import org.springblade.desk.produce.service.IPdaSaveService;
import org.springblade.desk.produce.service.IWorkPlanLogService;
import org.springframework.web.bind.annotation.*;
@ -43,6 +47,8 @@ public class DisTaskingController extends BladeController {
private final IWorkPlanLogService workPlanLogService;
private final IPdaSaveService pdaSaveService;
@GetMapping("/disTaskHandle")
@ApiOperationSupport(order = 1)
@Operation(summary = "调度任务分派", description = "传入taskCompleteDTO")
@ -57,7 +63,7 @@ public class DisTaskingController extends BladeController {
@PostMapping("/taskComplete")
@ApiOperationSupport(order = 2)
@Operation(summary = "任务完成", description = "传入taskCompleteDTO")
@Operation(summary = "任务处理", description = "传入taskCompleteDTO")
public R taskComplete(@RequestBody TaskCompleteDTO taskCompleteDTO) {
List<Long> ddtIdList = taskCompleteDTO.getDdtIdList();
String rsCode = taskCompleteDTO.getRsCode();
@ -111,5 +117,33 @@ public class DisTaskingController extends BladeController {
return R.success();
}
@PostMapping("/disTechnician")
@ApiOperationSupport(order = 7)
@Operation(summary = "转派", description = "")
public R disTechnician(@RequestBody TaskCompleteDTO taskCompleteDTO) {
List<Long> ddtIdList = taskCompleteDTO.getDdtIdList();
Long dispatchMan = taskCompleteDTO.getDispatchMan();
String resolution = taskCompleteDTO.getResolution();
if (CollectionUtils.isEmpty(ddtIdList) || dispatchMan == null || StringUtils.isBlank(resolution)) {
return R.fail("参数错误");
}
return R.data(disTaskingService.disTechnician(taskCompleteDTO));
}
@PostMapping("/uploadPlan")
@ApiOperationSupport(order = 8)
@Operation(summary = "报工调整-保存", description = "传入workPlanList")
public R uploadPlan(@Valid @RequestBody List<WorkPlan> workPlanList) {
pdaSaveService.uploadPlan(workPlanList);
return R.success();
}
@PostMapping("/shiftTransfer")
@ApiOperationSupport(order = 9)
@Operation(summary = "报工调整-转班", description = "传入shiftTransferDTO")
public R shiftTransfer(@Valid @RequestBody ShiftTransferDTO shiftTransferDTO) {
pdaSaveService.shiftTransfer(shiftTransferDTO);
return R.success();
}
}

@ -19,12 +19,15 @@ import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.service.impl.OrderCacheService;
import org.springblade.desk.produce.wrapper.WorkOrderWrapper;
import org.springblade.desk.quality.util.CodeUtil;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 热表生产管理
*
* @author litao
*/
@RestController
@ -39,7 +42,7 @@ public class RbProduceManageController extends BladeController {
@GetMapping("/page")
@ApiOperationSupport(order = 1)
@Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO")
@Operation(summary = "车间订单列表分页", description = "传入WorkOrderVO")
public R<IPage<WorkOrderVO>> page(WorkOrderDTO workOrder, Query query) {
IPage<WorkOrderVO> pages = workOrderService.selectWorkOrderPage(Condition.getPage(query), workOrder);
return R.data(WorkOrderWrapper.build().listWorkOrderVO(pages));
@ -47,14 +50,14 @@ public class RbProduceManageController extends BladeController {
@GetMapping(value = "/batchesPrepare/{woId}")
@ApiOperationSupport(order = 2)
@Operation(summary = "分批准备数据", description = "传入车间订单ID")
@Operation(summary = "分批准备数据", description = "传入车间订单ID")
public R<BatchPrepareVO> batchesPrepare(@PathVariable Long woId) {
return R.data(workOrderService.batchesPrepare(woId));
}
@PostMapping(value = "/inBatches")
@ApiOperationSupport(order = 3)
@Operation(summary = "分批", description = "传入WorkOrder")
@Operation(summary = "分批", description = "传入WorkOrder")
public R inBatches(@RequestBody InBatchesDTO inBatchesDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.inBatches(inBatchesDTO.getId(), inBatchesDTO, userId));
@ -62,7 +65,7 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/turnType")
@ApiOperationSupport(order = 4)
@Operation(summary = "转烧结", description = "传入YieldOrder")
@Operation(summary = "转烧结", description = "传入YieldOrder")
public R turnType(@RequestBody TurnTypeDTO turnTypeDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.turnType(turnTypeDTO.getYoId(), turnTypeDTO.getYieldType(), userId));
@ -70,7 +73,7 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/updateStatus")
@ApiOperationSupport(order = 5)
@Operation(summary = "关闭", description = "传入UpdateStatusDTO")
@Operation(summary = "关闭", description = "传入UpdateStatusDTO")
public R updateStatus(@RequestBody UpdateStatusDTO updateStatusDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.updateStatus(updateStatusDTO.getIdArr(), updateStatusDTO.getStatus(), userId, updateStatusDTO.getMemo()));
@ -78,14 +81,14 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/listProProcess")
@ApiOperationSupport(order = 6)
@Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO")
@Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO")
public R<List<WorkPlanRunVO>> listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) {
return R.data(workOrderService.listProProcess(listProProcessDTO));
}
@PostMapping(value = "/transferBill")
@ApiOperationSupport(order = 7)
@Operation(summary = "转外协(单个/批量)", description = "传入produceManageDTO")
@Operation(summary = "转外协(单个/批量)", description = "传入produceManageDTO")
public R transferBill(@RequestBody TransferBillDTO transferBillDTO) {
Long userId = AuthUtil.getUserId();
return R.data(workOrderService.transferBill(transferBillDTO.getWorkOrderRuns(), transferBillDTO.getWorkPlanRuns()));
@ -93,7 +96,7 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/updatePriority")
@ApiOperationSupport(order = 8)
@Operation(summary = "更改车间订单优先级", description = "传入WorkOrder")
@Operation(summary = "更改车间订单优先级", description = "传入WorkOrder")
public R updatePriority(@RequestBody UpdatePriorityDTO updatePriorityDTO) {
WorkOrder wo = workOrderService.getById(updatePriorityDTO.getWoId());
// wo.setPriority(WorkOrder.PRIORITY_SCH_IMP);
@ -104,9 +107,29 @@ public class RbProduceManageController extends BladeController {
@GetMapping(value = "/getWorkOrderCache/{woId}")
@ApiOperationSupport(order = 9)
@Operation(summary = "缓存获取订单相关数据", description = "传入车间订单ID")
@Operation(summary = "缓存获取订单相关数据", description = "传入车间订单ID")
public R<CacheWorkOrderVO> getWorkOrderCache(@PathVariable Long woId) {
return R.data(orderCacheService.getOrderFromCache(woId));
}
@GetMapping(value = "/getWorkOrderCachePage")
@ApiOperationSupport(order = 10)
@Operation(summary = "缓存获取订单相关数据", description = "传入车间订单ID")
public R<IPage<CacheWorkOrderVO>> getWorkOrderCachePage(Query query) {
return R.data(orderCacheService.listRunningOrderByCache(Condition.getPage(query)));
}
@GetMapping("/getBarCode")
@Operation(summary = "工艺流程卡获取条形码", description = "传入车间订单ID")
public Map<String, Object> getBarCode(Long woId) {
return workOrderService.getBarCode(woId);
}
@GetMapping("/getPartSubSj")
@Operation(summary = "工艺流程卡获取烧结子件信息", description = "传入车间订单ID")
public Map<String, Object> getPartSubSj(Long woId) {
return workOrderService.getPartSubSj(woId);
}
}

@ -4,18 +4,24 @@ 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.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.service.IPrReworkProcessService;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.service.IPdaSaveService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* 返工订单
*
@ -29,6 +35,8 @@ public class ReworkProcessController extends BladeController {
private final IErpDataProduceClient erpDataProduceClient;
private final IPdaSaveService pdaSaveService;
private final IPrReworkProcessService reworkProcessService;
@GetMapping("/loadReworkOrder")
@ -36,7 +44,36 @@ public class ReworkProcessController extends BladeController {
@Operation(summary = "erp查询返工订单", description = "传入ReworkProcessDTO")
public R<IPage<ReworkProcessVO>> page(ReworkProcessDTO prReworkProcess, Query query) {
prReworkProcess.setQuery(query);
return erpDataProduceClient.loadReworkOrder(prReworkProcess);
IPage<ReworkProcessVO> page = Condition.getPage(query);
List<ReworkProcessVO> records = new ArrayList<>();
ReworkProcessVO reworkProcessVO = new ReworkProcessVO();
reworkProcessVO.setRedono("返修单号");
reworkProcessVO.setSeqno(1);
reworkProcessVO.setSeqdept("处理单位");
reworkProcessVO.setPrtno("物料号");
reworkProcessVO.setExcstatus(1);
reworkProcessVO.setAmount(1.0);
reworkProcessVO.setReqdate("2026-02-04");
reworkProcessVO.setReqqty("需求数量");
reworkProcessVO.setRecdate("2026-02-04");
reworkProcessVO.setRecman("接收人");
reworkProcessVO.setRecqty("接收数量");
reworkProcessVO.setEnddat("2026-02-04");
reworkProcessVO.setEndman("完成人");
reworkProcessVO.setEndqty("完成数量");
reworkProcessVO.setSplcode("批次号");
reworkProcessVO.setRemark("备注");
reworkProcessVO.setHrecdate("2026-02-04");
reworkProcessVO.setBfqty(1);
reworkProcessVO.setUsedept("发生单位");
reworkProcessVO.setDetail("处理意见");
reworkProcessVO.setPrtlotno("生产标识");
reworkProcessVO.setDeptcode("工艺路线");
reworkProcessVO.setSono("开单车间订单号");
records.add(reworkProcessVO);
page.setRecords(records);
return R.data(page);
// return erpDataProduceClient.loadReworkOrder(prReworkProcess);
}
// @GetMapping("/treeProcess")
@ -46,4 +83,20 @@ public class ReworkProcessController extends BladeController {
// return R.data(reworkProcessService.treeProcess(prReworkProcess));
// }
@PostMapping("/receiveOrder")
@ApiOperationSupport(order = 2)
@Operation(summary = "订单接收", description = "传入prReworkProcess")
public R receiveOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.receiveOrder(mesRbRedoRoutDTO);
return R.success();
}
@PostMapping("/completeOrder")
@ApiOperationSupport(order = 3)
@Operation(summary = "订单完成", description = "传入mesRbRedoRoutDTO")
public R completeOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.completeOrder(mesRbRedoRoutDTO, AuthUtil.getUser().getUserName());
return R.success();
}
}

@ -3,34 +3,18 @@ package org.springblade.desk.produce.controller;
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 io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity;
import org.springblade.desk.dashboard.pojo.vo.PrReworkProcessVO;
import org.springblade.desk.dashboard.service.IPrReworkProcessService;
import org.springblade.desk.dashboard.wrapper.PrReworkProcessWrapper;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO;
import org.springblade.desk.produce.pojo.entity.MacToolUse;
import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
import org.springblade.desk.produce.service.IMacToolUseService;
import org.springblade.desk.produce.service.IPdaSaveService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 返工任务表 控制器
* 同炉查询 控制器
*
* @author BladeX
* @since 2025-12-03
@ -38,57 +22,16 @@ import java.util.Map;
@RestController
@AllArgsConstructor
@RequestMapping("/workProcess")
@Tag(name = "返工任务表", description = "返工任务表接口")
@Tag(name = "同炉(槽)查询", description = "同炉(槽)查询接口")
public class WorkProcessController extends BladeController {
private final IPdaSaveService pdaSaveService;
private final IMacToolUseService macToolUseService;
/**
*订单接收
*/
@PostMapping("/receiveOrder")
@ApiOperationSupport(order = 1)
@Operation(summary = "订单接收", description = "传入prReworkProcess")
public R receiveOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.receiveOrder(mesRbRedoRoutDTO);
return R.success();
}
/**
*订单接收
*/
@PostMapping("/completeOrder")
@ApiOperationSupport(order = 2)
@Operation(summary = "订单完成", description = "传入mesRbRedoRoutDTO")
public R completeOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) {
pdaSaveService.completeOrder(mesRbRedoRoutDTO,AuthUtil.getUser().getUserName());
return R.success();
}
/**
*订单接收
*/
@PostMapping("/uploadPlan")
@ApiOperationSupport(order = 3)
@Operation(summary = "更新车间作业计划", description = "传入workPlanList")
public R uploadPlan(@Valid @RequestBody List<WorkPlan> workPlanList) {
pdaSaveService.uploadPlan(workPlanList);
return R.success();
}
@PostMapping("/shiftTransfer")
@ApiOperationSupport(order = 4)
@Operation(summary = "转班", description = "传入shiftTransferDTO")
public R shiftTransfer(@Valid @RequestBody ShiftTransferDTO shiftTransferDTO) {
pdaSaveService.shiftTransfer(shiftTransferDTO);
return R.success();
}
@GetMapping("/queryData")
@ApiOperationSupport(order = 5)
@ApiOperationSupport(order = 1)
@Operation(summary = "分页", description = "传入macToolUse")
public R<IPage<MacToolUse>> page(MacToolUse macToolUse, Query query) {
IPage<MacToolUse> pages = macToolUseService.queryMacToolUse(Condition.getPage(query), macToolUse);
return R.data(pages);
}
}

@ -16,11 +16,11 @@
b.wip_take as wipTake,
b.change_no as changeNo,
b.craft_time as craftTime,
a.DIS_ASSIGN_TIME as taskTime
a.DIS_ASSIGN_TIME as taskTime,
case a.DIS_TASK_STATUS when 0 then '待分派' when 1 then '已分派' when 2 then '已处理' when 3 then '待质量处理' end as status
FROM
MES_DIS_TASKING a INNER JOIN DS_TASKING b ON a.DT_ID = b.ID
<where>
a.DISPATCH_MAN = #{query.loginUser} AND
a.DIS_TASK_STATUS != 3
<if test="query.isDefault == 1">
AND a.DIS_TASK_STATUS = 1

@ -13,5 +13,6 @@ import java.util.List;
*/
public interface MacToolUseMapper extends BaseMapper<MacToolUse> {
MacToolUse getTcDataByWoId(Long woId);
List<MacToolUse> queryMacToolUse(IPage<MacToolUse> page, MacToolUse macToolUse);
}

@ -12,6 +12,7 @@ import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import java.util.List;
import java.util.Map;
/**
* 车间订单表 Mapper 接口
@ -47,4 +48,8 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
YieldOrder selectByPartCOdeAndBatchNo(@Param("partCode") String partCode,@Param("batchNo") String batchNo);
WorkOrderEntity selectByYoId(@Param("yoId") Long yoId);
List<WorkOrder> findCubByYoId(Long id);
List<WorkOrder> findByPartCodeAndMemo(String partCode, String ypCode);
}

@ -54,7 +54,7 @@
mwo.MES_CARD_NO mesCardNo,
myo.PLATE plate,
myo.PRODUCT_TYPE productType,
mwo.PRIORITY priority,
myo.PRIORITY_ERP priority,
myo.USE_DEPT useDept,
ROUND(myo.YP_AREA * mwo.MAKE_QTY,10) totalArea,
myo.YP_AREA area,
@ -170,7 +170,7 @@
AND b.PRODUCT_IDENT LIKE concat(concat('%', #{query.productIdent}),'%')
</if>
<if test="query.priority != null">
AND b.priority = #{query.priority}
AND b.PRIORITY_ERP = #{query.priority}
</if>
<if test="query.demandDateStart != null and query.demandDateEnd != null">
AND b.DEMAND_DATE BETWEEN #{query.demandDateStart} AND #{query.demandDateEnd}
@ -191,5 +191,18 @@
<select id="selectByYoId" resultType="org.springblade.scheduling.pojo.entity.WorkOrderEntity">
select * from MES_WORK_ORDER where IS_DELETED = 0 and YO_ID = #{yoId}
</select>
<select id="getProductAppareaByPartCode" resultType="java.util.Map">
</select>
<select id="findCubByYoId" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT mwo.*
FROM MES_WORK_ORDER mwo INNER JOIN MES_YIELD_ORDER myo ON mwo.YO_ID = myo.ID
WHERE myo.FATHER_YO_ID = #{id}
</select>
<select id="findByPartCodeAndMemo" resultType="org.springblade.desk.produce.pojo.entity.WorkOrder">
SELECT mwo.*
FROM MES_WORK_ORDER mwo INNER JOIN MES_YIELD_ORDER myo ON mwo.YO_ID = myo.ID
WHERE myo.PART_CODE = #{partCode} AND myo.MEMO = #{ypCode}
</select>
</mapper>

@ -25,4 +25,6 @@ public interface IDisTaskingService extends BaseService<DisTasking> {
List<MakeRec> queryByWpIdlLst(Long wpId);
void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO);
boolean disTechnician(TaskCompleteDTO taskCompleteDTO);
}

@ -29,4 +29,6 @@ public interface IMacToolUseService extends BaseService<MacToolUse> {
void unMacToolUseBind(List<MacToolUse> mtuList);
IPage<MacToolUse> queryMacToolUse(IPage<MacToolUse> page, MacToolUse macToolUse);
MacToolUse getTcDataByWoId(Long woId);
}

@ -16,6 +16,7 @@ import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.desk.produce.pojo.vo.*;
import java.util.List;
import java.util.Map;
/**
* 车间订单表 服务类
@ -69,4 +70,7 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
List<CacheWorkPlanVO> selectProcessByOrderIds(List<Long> orderIds);
Map<String, Object> getBarCode(Long woId);
Map<String, Object> getPartSubSj(Long woId);
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
@ -54,7 +55,14 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
@Override
public IPage<TaskCompleteVO> disTaskHandle(IPage<TaskCompleteVO> page, TaskCompleteDTO taskCompleteDTO) {
return page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO));
IPage<TaskCompleteVO> iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO));
iPage.getRecords().forEach(taskCompleteVO -> {
User user = UserCache.getUser(taskCompleteVO.getDispatchMan());
if (user != null) {
taskCompleteVO.setDispatchManName(user.getRealName());
}
});
return iPage;
}
@Override
@ -89,7 +97,7 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
@Override
public void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO) {
List<Long> ddtIds=taskCompleteDTO.getDdtIdList();
List<Long> ddtIds = taskCompleteDTO.getDdtIdList();
for (Long ddtId : ddtIds) {
DisTasking dsDisTasking = baseMapper.selectById(ddtId);
dsDisTasking.setDispatchTime(new Date());
@ -99,19 +107,19 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED);
DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId());
// 通过零件号查询所有工艺变更的单子
if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null ) {
if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null) {
String partCode = dsTaskingEntity.getPartCode();
if (StringUtils.isNotBlank(partCode) && dsTaskingEntity.getTaskStatus().equals(DisTasking.TASK_STATUS_COMPLETED)) {
List<WorkOrder> prWorkOrderList=workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getPartCode, partCode).eq(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_CRAFT_CHANGE));
List<WorkOrder> prWorkOrderList = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getPartCode, partCode).eq(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_CRAFT_CHANGE));
for (WorkOrder prWorkOrder : prWorkOrderList) {
if (prWorkOrder != null && prWorkOrder.getId() != null) {
prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE);
//zxh 20250522 增加记录订单变更为加工中日志
// syDockingLogService.sendDockingLog("修改订单执行状态为加工中",prWorkOrder.getWoCode(),"taskCompleteOrder()");
// syDockingLogService.sendDockingLog("修改订单执行状态为加工中",prWorkOrder.getWoCode(),"taskCompleteOrder()");
//判定是否是检验项目,并且还有未检验
WorkPlan wp=workPlanService.getById(prWorkOrder.getWpId());
List<WorkPlanItem> list =workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class)
.eq(WorkPlanItem::getWpId,wp.getId()).eq(WorkPlanItem::getCheckResult, -1));
WorkPlan wp = workPlanService.getById(prWorkOrder.getWpId());
List<WorkPlanItem> list = workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class)
.eq(WorkPlanItem::getWpId, wp.getId()).eq(WorkPlanItem::getCheckResult, -1));
if (list != null && list.size() > 0) {
prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK);
}
@ -122,4 +130,17 @@ public class DisTaskingServiceImpl extends BaseServiceImpl<DisTaskingMapper, Dis
}
}
}
@Override
public boolean disTechnician(TaskCompleteDTO taskCompleteDTO) {
List<DisTasking> disTaskings = this.list(Wrappers.lambdaQuery(DisTasking.class).in(DisTasking::getId, taskCompleteDTO.getDdtIdList()));
disTaskings.forEach(disTasking -> {
disTasking.setDisTaskStatus(DisTasking.TASK_STATUS_ALREADY);
disTasking.setMemo(taskCompleteDTO.getResolution());
disTasking.setDispatchMan(taskCompleteDTO.getDispatchMan());
disTasking.setDisAssignTime(new Date());
disTasking.setDisAssignMan(AuthUtil.getUserId());
});
return this.updateBatchById(disTaskings);
}
}

@ -79,6 +79,11 @@ public class MacToolUseServiceImpl extends BaseServiceImpl<MacToolUseMapper, Mac
return page.setRecords(baseMapper.queryMacToolUse(page, macToolUse));
}
@Override
public MacToolUse getTcDataByWoId(Long woId) {
return baseMapper.getTcDataByWoId(woId);
}
public static final int time2Integer(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);

@ -1,5 +1,6 @@
package org.springblade.desk.produce.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -40,6 +41,7 @@ public class OrderCacheService {
// 声明订单缓存实例(初始化后赋值,避免多次获取)
private Cache runningOrderCache;
private final Map<Long, CacheWorkOrderVO> cacheOrderLocalMap = new ConcurrentHashMap<>();
// 初始化缓存实例(项目启动后执行,仅一次)
@PostConstruct
@ -73,7 +75,13 @@ public class OrderCacheService {
lock.lock();
try {
// 查库获取最新数据,更新到缓存
return loadOrderFromDB(orderId);
CacheWorkOrderVO cacheWorkOrderVO = loadOrderFromDB(orderId);
if (Objects.nonNull(cacheWorkOrderVO)) {
cacheOrderLocalMap.put(orderId, cacheWorkOrderVO);
} else {
cacheOrderLocalMap.remove(orderId);
}
return cacheWorkOrderVO;
} finally {
// 必须释放锁,避免死锁
lock.unlock();
@ -88,6 +96,7 @@ public class OrderCacheService {
public void removeOrderCache(Long orderId) {
// 方法体可留空,注解自动完成删除
log.info("订单[{}]已变为非运行中状态,从本地缓存移除", orderId);
cacheOrderLocalMap.remove(orderId);
}
/**
@ -125,6 +134,7 @@ public class OrderCacheService {
// updateOrderCache(orderId);
// 手动存入缓存:直接用缓存实例put,无二次查库(核心优化)
runningOrderCache.put(orderId, cacheVO);
cacheOrderLocalMap.put(orderId, cacheVO);
} finally {
lock.unlock();
}
@ -170,4 +180,21 @@ public class OrderCacheService {
// 不存在则创建新锁,存在则返回已有锁
return orderLockMap.computeIfAbsent(orderId, k -> new ReentrantLock());
}
public IPage<CacheWorkOrderVO> listRunningOrderByCache(IPage<CacheWorkOrderVO> page) {
// 1. 分页参数校验(不变)
int currentPage = (int) page.getCurrent();
int pageSizeVal = (int) page.getSize();
// 直接从本地副本获取所有VO,过滤【仅进行中(状态1)】的订单
List<CacheWorkOrderVO> runningOrderList = cacheOrderLocalMap.values().stream()
.filter(vo -> Objects.equals(vo.getRunStatus(), WorkOrder.RUN_STATUS_RECEIVE))
.collect(Collectors.toList());
log.info("本地副本中总运行中订单={},过滤后进行中(状态1)订单={}", cacheOrderLocalMap.size(), runningOrderList.size());
int total = runningOrderList.size();
page.setTotal(runningOrderList.size());
int startIndex = (currentPage - 1) * pageSizeVal;
int endIndex = Math.min(startIndex + pageSizeVal, runningOrderList.size());
List<CacheWorkOrderVO> pageList = runningOrderList.subList(startIndex, endIndex);
return page.setRecords(pageList);
}
}

@ -1,19 +1,26 @@
package org.springblade.desk.produce.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.service.IProcessAbilityService;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.service.IYieldOrderService;
@ -32,10 +39,15 @@ import org.springblade.desk.quality.service.IInspectionTaskService;
import org.springblade.desk.quality.service.IPlanTestService;
import org.springblade.desk.quality.service.IWorkPlanItemService;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.cache.DictCache;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
@ -77,6 +89,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final IProcessAbilityService processAbilityService;
private final IErpDataProduceClient erpDataProduceClient;
private final IDsPartService dsPartService;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -92,7 +108,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
batchPrepareVO.setWoCode(this.nextCode(yieldOrder.getYpCode()));
batchPrepareVO.setCardNo(this.nextCardNo(yieldOrder.getYpCode(),workOrder.getCardNo()));
batchPrepareVO.setBatchNo(this.nextBatchNo(yieldOrder.getYpCode(),workOrder.getBatchNo()));
batchPrepareVO.setMesCardNo(this.nextMesCardNo(workOrder.getMesCardNo()));
if (workOrder.getMesCardNo() != null) {
batchPrepareVO.setMesCardNo(this.nextMesCardNo(workOrder.getMesCardNo()));
}
return batchPrepareVO;
}
@ -122,7 +140,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
newWo.setOemType(-1);
newWo.setCardNo(inBatchesDTO.getCardNo());
newWo.setMemo(inBatchesDTO.getMemo());
newWo.setMesCardNo(this.nextMesCardNo(oldWo.getMesCardNo()));
newWo.setMesCardNo(oldWo.getMesCardNo() != null ? this.nextMesCardNo(oldWo.getMesCardNo()) : "");
oldWo.setMakeQty(oldWo.getMakeQty() - newWo.getMakeQty());
@ -147,7 +165,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
wp.setQualifiedQty(0d);
}
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (!"镀后接收".equals(processSet.getName())) {
if (processSet != null && !"镀后接收".equals(processSet.getName())) {
wp.setFactEndTime(oldWp.getFactEndTime());
}
@ -483,6 +501,160 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return workPlanList;
}
@Override
public Map<String, Object> getBarCode(Long woId) {
Map<String, Object> data = new HashMap<>(1);
List<Map<String, String>> list = new ArrayList<>();
Map<String, String> map = new HashMap<>();
// 查询车间订单
WorkOrder prWorkOrder = this.getById(woId);
// 流程卡号
map.put("cardNo", StringUtils.isNotBlank(prWorkOrder.getCardNo()) ? prWorkOrder.getCardNo() : "");
map.put("cardNoBar", generateBarcodeAsBase64(StringUtils.isNotBlank(prWorkOrder.getCardNo()) ? prWorkOrder.getCardNo() : "/", 200, 50));
// 热表流程卡号
map.put("mesCardNo", StringUtils.isNotBlank(prWorkOrder.getMesCardNo()) ? prWorkOrder.getMesCardNo() : "");
map.put("mesCardNoBar", generateBarcodeAsBase64(StringUtils.isNotBlank(prWorkOrder.getMesCardNo()) ? prWorkOrder.getMesCardNo() : "/", 200, 25));
// 同槽编号
MacToolUse prMacToolUse = macToolUseService.getTcDataByWoId(woId);
map.put("mtnCode", prMacToolUse != null && prMacToolUse.getMtnCode() != null ? prMacToolUse.getMtnCode() : "");
map.put("mtnCodeBar", generateBarcodeAsBase64(prMacToolUse != null && prMacToolUse.getMtnCode() != null ? prMacToolUse.getMtnCode() : "/", 200, 25));
map.put("clmc", "/");
map.put("clzt", "/");
map.put("clgg", "/");
map.put("clph", "/");
map.put("cljybh", "/");
map.put("productApparea", "/");
map.put("version", "/");
// 获取生产订单
YieldOrder yo = yieldOrderService.getById(prWorkOrder.getYoId());
if (yo != null) {
// 获取材料名称、材料牌号、材料规格、材料状态、材料检验编号
List<JSONObject> newErpClData = new ArrayList<>();
// if (yo.getBatchNo().startsWith("A") || yo.getBatchNo().startsWith("E")) {
// newErpClData = baseMapper.getNewErpClData(yo.getPartCode(), yo.getBatchNo());
// } else if (yo.getNewLevFlag() != null && "采购".equals(yo.getNewLevFlag())) {
// newErpClData = baseMapper.getErpClData(yo.getPartCode(), yo.getBatchNo());
// }
if (CollectionUtils.isNotEmpty(newErpClData)) {
map.put("clmc", newErpClData.get(0).getString("clmc"));
map.put("clzt", newErpClData.get(0).getString("clzt"));
map.put("clgg", newErpClData.get(0).getString("clgg"));
map.put("clph", newErpClData.get(0).getString("clph"));
map.put("cljybh", newErpClData.get(0).getString("cljybh"));
}
// 产品应用领域
if (yo.getPartCode() != null) {
Map<String, String> productInfo = this.getProductAppareaByPartCode(yo.getPartCode());
map.put("productApparea", StringUtils.isNotBlank(productInfo.get("productapparea")) ? productInfo.get("productapparea") : "/");
}
// 图纸版次
if (yo.getPartCode() != null) {
String version = this.getVersionByPartCode(yo.getPartCode());
map.put("version", StringUtils.isNotBlank(version) ? version : "/");
}
}
list.add(map);
data.put("data", list);
return data;
}
@Override
public Map<String, Object> getPartSubSj(Long woId) {
Map<String, Object> data = new HashMap<>(1);
List<Map<String, String>> list = new ArrayList<>();
WorkOrder wo = this.getById(woId);
YieldOrder yieldOrder = yieldOrderService.getById(wo.getYoId());
List<WorkOrder> prWorkOrderList = this.checkOrderSj(wo, yieldOrder);
List<DsPartEntity> dsPartSubList = dsPartService.selectDsPartByPatCode(yieldOrder.getPartCode(), null);
if (dsPartSubList != null && !dsPartSubList.isEmpty()) {
for (DsPartEntity dsPartSub : dsPartSubList) {
Map<String, String> sub = new HashMap<>();
sub.put("partCode", dsPartSub.getPartCode());//零件号
sub.put("partType", (DictCache.getValue("processTemplateType", dsPartSub.getSinTerType())));//零件类型
sub.put("partName", (dsPartSub.getMaterial() != null) ? dsPartSub.getMaterial() : "/");//材料
sub.put("plate", (dsPartSub.getPlate() != null) ? dsPartSub.getPlate() : "/");//镀种
if (dsPartSub.getArea() != null && dsPartSub.getQuota() != null) {
sub.put("poArea", String.valueOf(dsPartSub.getArea() * dsPartSub.getQuota()));//面积
} else {
sub.put("poArea", "/");
}
if (prWorkOrderList != null && !prWorkOrderList.isEmpty()) {
for (WorkOrder prWorkOrder : prWorkOrderList) {
if (yieldOrder.getPartCode().equals(dsPartSub.getPartCode())) {
sub.put("cardNo", prWorkOrder.getCardNo());//流程卡号
sub.put("cardNoBar", generateBarcodeAsBase64(StringUtils.isNotBlank(prWorkOrder.getCardNo()) ? prWorkOrder.getCardNo() : "/", 200, 50));
}
}
}
list.add(sub);
}
}
data.put("data", list);
return data;
}
private List<WorkOrder> checkOrderSj(WorkOrder wo, YieldOrder yieldOrder) {
//B号为空则直接跳过
if (StringUtils.isBlank(yieldOrder.getRoamNo())) {
return null;
}
//非烧结零件跳过子件验证
if (!yieldOrder.getYieldType().equals(YieldOrder.YIELD_TYPE_2)) {
return null;
}
List<WorkOrder> subList = this.findCubByYoId(yieldOrder.getId());
//获取到部件下面的玻璃饼信息
List<DsPartEntity> dpsList = dsPartService.selectDsPartByPatCode(yieldOrder.getPartCode(), 3);
if (dpsList != null && !dpsList.isEmpty()) {
List<WorkOrder> blbList;
for (DsPartEntity dps : dpsList) {
blbList = this.findByPartCodeAndMemo(dps.getPartCode(), yieldOrder.getYpCode());
subList.addAll(blbList);
}
}
return subList;
}
private List<WorkOrder> findByPartCodeAndMemo(String partCode, String ypCode) {
return baseMapper.findByPartCodeAndMemo(partCode, ypCode);
}
private List<WorkOrder> findCubByYoId(Long id) {
return baseMapper.findCubByYoId(id);
}
private String getVersionByPartCode(String partCode) {
return erpDataProduceClient.getVersionByPartCode(partCode).getData();
}
private Map<String, String> getProductAppareaByPartCode(String partCode) {
R<Map<String, String>> byPartCode = erpDataProduceClient.getProductAppareaByPartCode(partCode);
return byPartCode.getData();
}
private String generateBarcodeAsBase64(String content, int width, int height) {
try {
// 1. 创建条形码(Code128 类型)
Barcode barcode = BarcodeFactory.createCode128(content);
// 2. 生成 BufferedImage(关键:使用 BarcodeImageHandler)
BufferedImage image = BarcodeImageHandler.getImage(barcode);
// 3. 转换为 PNG 字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
byte[] imageBytes = baos.toByteArray();
// 4. 转换为 Base64 字符串(添加 data URL 前缀)
return "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes);
} catch (Exception e) {
throw new ServiceException("生成条形码失败: " + e.getMessage());
}
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());

@ -3,7 +3,9 @@ package org.springblade.desk.produce.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
@ -37,6 +39,8 @@ public class WorkOrderWrapper extends BaseEntityWrapper<WorkOrder, WorkOrderVO>
for (WorkOrderVO workOrderVo : workOrderVos) {
User user = UserCache.getUser(workOrderVo.getDispatcher());
workOrderVo.setDispatcherName(user.getRealName());
workOrderVo.setRunStatusName(WorkOrderEnum.getName(workOrderVo.getRunStatus()));
workOrderVo.setPriorityName(WorkOrder.priorityMap.get(workOrderVo.getPriority()));
}
pages.setRecords(workOrderVos);
return pages;

@ -13,6 +13,8 @@ import org.springblade.erpdata.service.IErpDataProduceService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* 字典服务Feign实现类
@ -38,4 +40,14 @@ public class ErpDataProduceClient implements IErpDataProduceClient {
public R<IPage<ReworkProcessVO>> loadReworkOrder(ReworkProcessDTO query) {
return R.data(erpDataProduceService.loadReworkOrder(Condition.getPage(query.getQuery()), query));
}
@Override
public R<Map<String, String>> getProductAppareaByPartCode(String partCode) {
return R.data(erpDataProduceService.getProductAppareaByPartCode(partCode));
}
@Override
public R<String> getVersionByPartCode(String partCode) {
return R.data(erpDataProduceService.getVersionByPartCode(partCode));
}
}

@ -7,6 +7,7 @@ import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import java.util.List;
import java.util.Map;
/**
* Mapper 接口
@ -18,4 +19,8 @@ public interface ErpDataProduceMapper extends Mapper {
QueryBatchVO queryBatch(String partCode);
List<ReworkProcessVO> loadReworkOrder(IPage<ReworkProcessVO> page, ReworkProcessDTO query);
Map<String, String> getProductAppareaByPartCode(String partCode);
String getVersionByPartCode(String partCode);
}

@ -62,4 +62,12 @@
</where>
ORDER BY a.reqdate DESC
</select>
<select id="getProductAppareaByPartCode" resultType="java.util.Map">
select b.productapparea, b.cgzmark from ( select a.* from dba_mgr.t_prtbasdef@erp_mes_link a
where a.prtno = #{partCode}) b where rownum = 1
</select>
<select id="getVersionByPartCode" resultType="java.lang.String">
select b.version from (select version from dba_mgr.drwversion@erp_mes_link a where a.drwpartno in (
select drwpartno from dba_mgr.t_prtbasdef@erp_mes_link where prtno = #{partCode})) b where rownum=1
</select>
</mapper>

@ -5,6 +5,8 @@ import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import java.util.Map;
/**
* ERP数据查询service
*
@ -16,4 +18,8 @@ public interface IErpDataProduceService {
QueryBatchVO queryBatch(String partCode);
IPage<ReworkProcessVO> loadReworkOrder(IPage<ReworkProcessVO> page, ReworkProcessDTO query);
Map<String, String> getProductAppareaByPartCode(String partCode);
String getVersionByPartCode(String partCode);
}

@ -10,6 +10,8 @@ import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springblade.erpdata.service.IErpDataProduceService;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author litao
* @date 2026-1-31
@ -29,4 +31,14 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService {
public IPage<ReworkProcessVO> loadReworkOrder(IPage<ReworkProcessVO> page, ReworkProcessDTO query) {
return page.setRecords(erpDataProduceMapper.loadReworkOrder(page, query));
}
@Override
public Map<String, String> getProductAppareaByPartCode(String partCode) {
return erpDataProduceMapper.getProductAppareaByPartCode(partCode);
}
@Override
public String getVersionByPartCode(String partCode) {
return erpDataProduceMapper.getVersionByPartCode(partCode);
}
}

Loading…
Cancel
Save