镀前出入库,镀后入库接口修改

master
李涛 4 weeks ago
parent 7e9cbb0248
commit 658908adb8
  1. 9
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/PlateAround.java
  2. 12
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  3. 14
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java
  4. 10
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java
  5. 35
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrMakeRecController.java
  7. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java
  8. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMakeRecService.java
  9. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  10. 109
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/HandoverRecordServiceImpl.java
  11. 133
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java
  12. 149
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  13. 176
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  15. 10
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataProduceClient.java
  16. 4
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java
  17. 131
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java

@ -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;
@ -74,4 +75,12 @@ public class PlateAround extends BaseEntity {
@Schema(description = "状态")
private Short curStatus = 1;
@TableField(exist = false)
@Schema(description = "0-转工 1-入库")
private Integer hrTypeBool;
@TableField(exist = false)
@Schema(description = "移交部门")
private String useDept;
}

@ -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;
@ -424,5 +425,16 @@ public class WorkOrder extends BaseEntity {
@Schema(description = "零件号")
private String partCode;
/**
* 移交部门
*/
@TableField(exist = false)
private String useDept;
/**
* 移交类型0-转工 1-入库
*/
@TableField(exist = false)
private Integer hrTypeBool;
}

@ -30,6 +30,8 @@ public interface IErpDataProduceClient {
String PRODUCT_APP_AREA = API_PREFIX + "/productAppArea";
String VERSION = API_PREFIX + "/version";
String CUSTODIAN = API_PREFIX + "/getCustodian";
String CHK_SJJD = API_PREFIX + "/chkSjjd";
String CHK_SHJH = API_PREFIX + "/chkShjh";
/**
* 缺件申报-通过零件号获取批次号
@ -60,4 +62,16 @@ public interface IErpDataProduceClient {
*/
@GetMapping(CUSTODIAN)
R<String> getCustodianByRecDept(@RequestParam("partCode") String partCode, @RequestParam("recDept") String recDept);
/**
* 验证是订单是否通过首件鉴定
*/
@GetMapping(CHK_SJJD)
R<String> chkSjjd(@RequestParam("ypCode")String ypCode, @RequestParam("batchNo")String batchNo);
/**
* 验证是订单是否通过首件审核
*/
@GetMapping(CHK_SHJH)
R<String> chkShjh(@RequestParam("woCode")String woCode, @RequestParam("ypCode")String ypCode, @RequestParam("partCode")String partCode, @RequestParam("productIdent")String productIdent, @RequestParam("makeQty")Double makeQty, @RequestParam("memo")String memo);
}

@ -42,4 +42,14 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient {
public R<String> getCustodianByRecDept(String partCode, String recDept) {
return R.fail("获取数据失败");
}
@Override
public R<String> chkSjjd(String ypCode, String batchNo) {
return R.fail("获取数据失败");
}
@Override
public R<String> chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) {
return R.fail("获取数据失败");
}
}

@ -98,44 +98,53 @@ public class PlateAroundController extends BladeController {
return R.data(plateAroundService.getAfterPlatInCardNo(cardNo, tsIds));
}
@PostMapping(value = "/savePlateAround")
@ApiOperationSupport(order = 5)
@Operation(summary = "镀前镀后保存", description = "")
public R savePlateAround(@RequestBody SavePlateAroundDto plateAroundDto) {
return R.data(plateAroundService.savePlateAround(plateAroundDto));
}
@PostMapping(value = "/deleteById")
@ApiOperationSupport(order = 6)
@ApiOperationSupport(order = 5)
@Operation(summary = "删除镀后入库", description = "")
public R deleteById(@RequestParam Long id) {
return R.data(plateAroundService.deletePlateAround(id));
}
@GetMapping("/queryDelLogRecord")
@ApiOperationSupport(order = 7)
@ApiOperationSupport(order = 6)
@Operation(summary = "加载镀后入库记录", description = "传入cardNo")
public R queryDelLogRecord(PlateAroundDto plateAroundDto, Query query) {
return R.data(plateAroundService.queryDelLogRecord(Condition.getPage(query), plateAroundDto));
}
@PostMapping(value = "/savePlateFrontEnter")
@ApiOperationSupport(order = 8)
@ApiOperationSupport(order = 7)
@Operation(summary = "保存镀前入库", description = "")
public R savePlateFrontEnter(@RequestBody List<PlateAround> plateArounds) {
plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.BEFORE_PLAT_IN);
return R.success();
}
@PostMapping(value = "/getByPartCode")
@PostMapping(value = "/savePlateFrontIssue")
@ApiOperationSupport(order = 8)
@Operation(summary = "保存镀前出库", description = "")
public R savePlateFrontIssue(@RequestBody List<PlateAround> plateArounds) {
plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.BEFORE_PLAN_OUT);
return R.success();
}
@PostMapping(value = "/savePlateAfterEnter")
@ApiOperationSupport(order = 9)
@Operation(summary = "保存镀后入库", description = "")
public R savePlateAfterEnter(@RequestBody List<PlateAround> plateArounds) {
plateAroundService.savePlateFrontEnter(plateArounds, PlateAround.AFTER_PLAN_IN);
return R.success();
}
@PostMapping(value = "/getByPartCode")
@ApiOperationSupport(order = 101)
@Operation(summary = "获取零件信息", description = "")
public R getByPartCode(@RequestParam String partCode) {
return R.data(plateAroundService.getByPartCode(partCode));
}
@GetMapping("/queryNewRecord")
@ApiOperationSupport(order = 10)
@ApiOperationSupport(order = 11)
@Operation(summary = "入库单列表", description = "")
public R<IPage<HandoverRecord>> queryNewRecord(HandoverRecord handoverRecord, Query query) {
LambdaQueryWrapper<HandoverRecord> wrapper = Wrappers.lambdaQuery(handoverRecord);
@ -148,7 +157,7 @@ public class PlateAroundController extends BladeController {
}
@PostMapping(value = "/handoverRecordPrint")
@ApiOperationSupport(order = 11)
@ApiOperationSupport(order = 12)
@Operation(summary = "入库单打印", description = "")
public R<List<PrintWarehousingVO>> handoverRecordPrint(@RequestParam String hrIds) {
return R.data(handoverRecordService.handoverRecordPrint(Func.toLongList(hrIds)));

@ -47,7 +47,7 @@ public class PrMakeRecController extends BladeController {
@Operation(summary = "报工提交")
@PostMapping("/saveMakeRec")
public R saveMakeRec(@RequestBody MakeRecDTO makeRecDTO) {
return R.status(makeRecService.saveMakeRec(makeRecDTO));
return R.status(workOrderService.saveMakeRec(makeRecDTO));
}
@GetMapping("/queryMakeRec")

@ -2,6 +2,7 @@ package org.springblade.desk.produce.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO;
import java.util.List;
@ -14,4 +15,11 @@ import java.util.List;
public interface IHandoverRecordService extends BaseService<HandoverRecord> {
List<PrintWarehousingVO> handoverRecordPrint(List<Long> longList);
/**
* 保存移交记录
*/
void saveHandoverRecord(List<WorkOrder> woList);
String nextCode(String codePattern);
}

@ -22,11 +22,8 @@ public interface IMakeRecService extends BaseService<MakeRec> {
WorkPlanDto loadCurrentWp(String cardNo);
/**
* 增加工序记录
* @param makeRecDTO
*/
boolean saveMakeRec(MakeRecDTO makeRecDTO);
boolean chkRfpDetail(Long wpId);
IPage<MesMakeRecVO> selectMesMakeRecPage(IPage<MesMakeRecVO> page, MesMakeRecVO mesMakeRec);

@ -194,4 +194,19 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
void dataValidation(Long wpId);
R inOemBatches(Long oldWoId, InBatchesDTO inBatchesDTO, Long userId);
/**
* <p>方法名: oemHandle </p>
* <p>方法描述: OEM处理 </p>
*
* @param nextWpId 下一个工序id如果不是第一个工序传下工序ID
* @param type 类型1-工序报工 2-第一个工序为外协 3-转外协审批通过
*/
void oemHandle(Long nextWpId, int type);
/**
* 增加工序记录
* @param makeRecDTO
*/
boolean saveMakeRec(MakeRecDTO makeRecDTO);
}

@ -1,33 +1,35 @@
package org.springblade.desk.produce.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
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.core.tool.utils.StringUtil;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.HandoverRecordMapper;
import org.springblade.desk.produce.pojo.entity.HandoverRecord;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.vo.PrintWarehousingVO;
import org.springblade.desk.produce.service.IHandoverRecordService;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.system.cache.UserCache;
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 移交记录 服务实现类
@ -48,6 +50,8 @@ public class HandoverRecordServiceImpl extends BaseServiceImpl<HandoverRecordMap
private final IErpDataProduceClient erpDataProduceClient;
private final IWorkOrderRunService workOrderRunService;
@Override
@Transactional(rollbackFor = Exception.class)
public List<PrintWarehousingVO> handoverRecordPrint(List<Long> longList) {
@ -127,6 +131,97 @@ public class HandoverRecordServiceImpl extends BaseServiceImpl<HandoverRecordMap
return list;
}
@Override
public void saveHandoverRecord(List<WorkOrder> woList) {
if (CollectionUtils.isEmpty(woList)) {
return;
}
YieldOrder yo;
HandoverRecord hr;
String woCode;
String excflag = "1";
String shjhflag = "1";
// 获取当前时间YYMM格式字符串
String now = DateFormatUtils.format(new Date(), "yyMM");
List<YieldOrder> yieldOrders = yieldOrderService.list(Wrappers.lambdaQuery(YieldOrder.class).in(YieldOrder::getId, woList.stream().map(WorkOrder::getYoId).distinct().collect(Collectors.toList())));
// yieldOrders转map
Map<Long, YieldOrder> yieldOrderMap = yieldOrders.stream().collect(Collectors.toMap(YieldOrder::getId, v -> v));
for (WorkOrder workOrder : woList) {
yo = yieldOrderMap.get(workOrder.getYoId());
hr = new HandoverRecord();
hr.setHandoverUnit("3400");
hr.setProdIdent(yo.getProductIdent());
hr.setPartCode(yo.getPartCode());
hr.setWoId(workOrder.getId());
woCode = workOrder.getWoCode();
if ("1".equals(workOrder.getOem())) {
WorkOrderRun workOrderRun = workOrderRunService.getById(workOrder.getWorId());
if (workOrderRun != null) {
woCode = workOrderRun.getWoCode();
hr.setDeliverKey(workOrderRun.getDeliverKey());
}
}
hr.setHrType(workOrder.getHrTypeBool() == 1 ? HandoverRecord.HR_TYPE_TRANSFER : HandoverRecord.HR_TYPE_IN_WAREHOUSE);
//如果是返工描述类则需要判定责任部门
if (StringUtils.isNotBlank(workOrder.getReworkMemo()) && "1".equals(workOrder.getReInStore()) && workOrder.getHrTypeBool() == 1) {
hr.setRoamNo("3400");
} else {
hr.setRoamNo(yo.getRoamNo());
}
String prefix = "ZG";
if (HandoverRecord.HR_TYPE_IN_WAREHOUSE.equals(hr.getHrType())) {
// 入库单
prefix = "RB";
}
String codePattern = prefix + now + AuthUtil.getUserAccount();
hr.setHrCode(this.nextCode(codePattern));
hr.setWoCode(woCode);
hr.setCardNo(workOrder.getCardNo());
hr.setBatchNo(workOrder.getBatchNo());
hr.setHandoverQty(workOrder.getMakeQty());
hr.setMemo(woCode);
hr.setRecDept(workOrder.getUseDept());
hr.setStatus(HandoverRecord.RUN_STATUS_WAIT);
excflag = erpDataProduceClient.chkSjjd(yo.getYpCode(), yo.getBatchNo()).getData();
if ("3500".equals(yo.getUseDeptCode()) || "3502".equals(yo.getUseDeptCode()) || "3507".equals(yo.getUseDeptCode()) || "3512".equals(yo.getUseDeptCode())) {
shjhflag = erpDataProduceClient.chkShjh(woCode, yo.getYpCode(), yo.getPartCode(), yo.getProductIdent(), workOrder.getMakeQty(), woCode).getData();
}
//zxh 20250721 首件鉴定仅限制入库单
if ("0".equals(excflag) && hr.getHrType().equals(HandoverRecord.HR_TYPE_IN_WAREHOUSE)) {
throw new ServiceException("订单存在首件鉴定未审核,不允许入库");
} else if ("0".equals(shjhflag) && hr.getHrType().equals(HandoverRecord.HR_TYPE_IN_WAREHOUSE)) {
throw new ServiceException("订单不满足入库制造一部送货计划校验,不允许入库");
} else {
this.save(hr);
}
}
}
@Override
public String nextCode(String codePattern) {
// 自增总长度
int len = 5;
// 自增值
int num = 0;
// 编码模式
// 当前模式下最大编码
List<HandoverRecord> list = this.list(Wrappers.lambdaQuery(HandoverRecord.class).eq(HandoverRecord::getHrCode, codePattern + "%").orderByDesc(HandoverRecord::getHrCode));
if (CollectionUtils.isNotEmpty(list)) {
num = Integer.parseInt(list.get(0).getHrCode().substring(codePattern.length()));
}
num++;
return codePattern + StrUtil.padPre(String.valueOf(num), len, '0');
}
private String getCustodianByRecDept(String partCode, String recDept) {
R<String> byPartCode = erpDataProduceClient.getCustodianByRecDept(partCode, recDept);
return byPartCode.getData();

@ -11,14 +11,11 @@ import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.pojo.entity.UserRight;
import org.springblade.desk.basic.service.IRelTeamSetUserService;
import org.springblade.desk.basic.service.IUserRightService;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.MakeRecMapper;
@ -32,7 +29,6 @@ import org.springblade.desk.produce.pojo.enums.WorkOrderEnum;
import org.springblade.desk.produce.pojo.vo.MesMakeRecVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanLoadVO;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.service.IAuditFileService;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.User;
import org.springframework.beans.BeanUtils;
@ -71,8 +67,6 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
private final IMesEquipmentCardService mesEquipmentCardService;
private final IUserRightService userRightService;
private final IMesRbFilePreserveSlotService mesRbFilePreserveSlotService;
private final IMesRbFilePreserveDetailService mesRbFilePreserveDetailService;
@ -128,132 +122,7 @@ public class MakeRecServiceImpl extends BaseServiceImpl<MakeRecMapper, MakeRec>
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean saveMakeRec(MakeRecDTO makeRecDTO) {
WorkPlan wp = workPlanMapper.selectById(makeRecDTO.getWpId());
if (!WorkPlan.STATUS_START.equals(wp.getStatus())) {
throw new ServiceException("当前工序已报工完成!");
}
MacToolUse mtu;
BsProcessSetEntity dsProcess = bsProcessSetService.getById(wp.getPpsId());
WorkPlan frontWp = workPlanMapper.selectById(wp.getFrontWpId());
BsProcessSetEntity frontProcess = null;
if (frontWp != null) {
frontProcess = bsProcessSetService.getById(wp.getFrontWpId());
}
//如果是上挂工序,需判定是否绑定挂具
if ("上挂".equals(dsProcess.getName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 0, 0);
if (mtu == null) {
throw new ServiceException("上挂工序未绑定挂具!");
}
// 如果上序是上挂工序、并且本序是主工序,则代表本序是 需要绑定飞靶及设备的工序 或者手动维护生产追溯信息
} else if (frontProcess != null && "上挂".equals(frontProcess.getName()) && "1".equals(wp.getCruxProcess())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
} else if (dsProcess.getName().contains("镀金")) {
mtu = macToolUseService.queryByParams(wp.getId(), 0, 1, 0);
if (mtu == null) {
throw new ServiceException("此工序未绑定飞跋,请绑定飞跋!!!");
}
//验证是否绑定设备
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
List<MesQcProduceRunEntity> produceRunList = null;
produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 1, Boolean.FALSE);
if (produceRunList == null || produceRunList.isEmpty()) {
produceRunList = mesQcProduceRunService.listPrByWpIdIndex(wp.getId(), 2, Boolean.FALSE);
}
if (!(produceRunList != null && !produceRunList.isEmpty())) {
throw new ServiceException("未绑定飞跋和设备或未维护生产追溯信息!!!");
}
}
} else if ("玻璃封接清洗".equals(dsProcess.getName()) || "玻璃封接退火".equals(dsProcess.getName()) ||
"玻璃封接预氧化(箱式炉)".equals(dsProcess.getName()) || "玻璃封接预氧化(链式炉)".equals(dsProcess.getName()) ||
"玻璃封接(链式炉)".equals(dsProcess.getName()) || "玻璃封接(真空炉)".equals(dsProcess.getName()) ||
"玻璃封接灌胶".equals(dsProcess.getName()) || "玻璃饼压制".equals(dsProcess.getName()) ||
"玻璃饼排蜡玻化".equals(dsProcess.getName()) || "玻璃饼振光".equals(dsProcess.getName()) ||
"石墨模烘干".equals(dsProcess.getName()) || "石墨模焙烧".equals(dsProcess.getName()) ||
"真空炉灌胶".equals(dsProcess.getName()) || "玻璃封接电镀去氧化皮".equals(dsProcess.getName()) ||
"玻璃封接电化学抛光".equals(dsProcess.getName()) || "玻璃封接湿喷砂".equals(dsProcess.getName()) ||
"玻璃封接电镀".equals(dsProcess.getName()) || "玻璃封接插针电镀".equals(dsProcess.getName()) ||
"玻璃封接壳体电镀".equals(dsProcess.getName()) || "玻璃封接电镀下挂".equals(dsProcess.getName()) ||
"烧结浸保护剂".equals(dsProcess.getName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<MesQcProduceRunEntity> qcProduceRunList = mesQcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
}
boolean aBoolean = this.chkRfpDetail(wp.getId());
if (!aBoolean) {
throw new ServiceException("生产记录未填写完整,不允许报工!!!!");
}
MakeRec mr = new MakeRec();
BeanUtils.copyProperties(makeRecDTO, mr);
mr.setWorker(AuthUtil.getUserId());
mr.setMakeTime(new Date());
this.save(mr);
if (mr.getScrapQty() > 0) {
wp.setScrapQty(wp.getScrapQty() + mr.getScrapQty());
WorkOrder wo = workOrderMapper.selectById(wp.getWoId());
wo.setMakeQty(wo.getMakeQty() - mr.getScrapQty());
workOrderMapper.updateById(wo);
}
wp.setWorkQty(wp.getWorkQty() + mr.getWorkQty());
if (wp.getQualifiedQty().equals(wp.getScrapQty() + wp.getWorkQty())) {
wp.setStatus(WorkPlan.STATUS_WORK_OK);
}
if ("热处理".equals(dsProcess.getName())) {
wp.setPrintType((short) 1);
String code = macToolUseService.nextCode(2);
MacToolUse prMacToolUse = new MacToolUse();
prMacToolUse.setWpId(wp.getId());
prMacToolUse.setFinished(1);
prMacToolUse.setCreateTime(new Date());
prMacToolUse.setCreateMan(makeRecDTO.getWorker());
prMacToolUse.setMtnCode(code);
prMacToolUse.setMtuIndex(String.valueOf(0));
macToolUseService.save(prMacToolUse);
String deviceCode = prMacToolUse.getEquipmentCard() != null ? prMacToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, prMacToolUse.getHangNum(), prMacToolUse.getMtnCode(), prMacToolUse.getFinished());
MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity();
qcProduceRun.setMtnCode(code);
qcProduceRun.setWorkSlot("热处理自检");
qcProduceRun.setInDate(DateUtil.now());
qcProduceRun.setDataOne(makeRecDTO.getResource());
qcProduceRun.setDataTwo(makeRecDTO.getNum());
qcProduceRun.setDataThree(makeRecDTO.getThickness());
qcProduceRun.setDataFour(makeRecDTO.getCode());
qcProduceRun.setDataFive(makeRecDTO.getInspectCode());
qcProduceRun.setDataSix(String.valueOf(makeRecDTO.getStatus()));
qcProduceRun.setDataSeven(makeRecDTO.getShape());
mesQcProduceRunService.save(qcProduceRun);
}
workPlanMapper.updateById(wp);
// 2025-07-23 线上迁移修改
MacToolUse macToolUse = macToolUseService.getDataByWpIdAndIndex(wp.getId(), "2");
if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) {
macToolUse.setFinished(1);
String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished());
macToolUseService.updateById(macToolUse);
}
return true;
}
private boolean chkRfpDetail(Long wpId) {
public boolean chkRfpDetail(Long wpId) {
List<MacToolUse> macToolUses = macToolUseService.list(Wrappers.lambdaQuery(MacToolUse.class).isNotNull(MacToolUse::getRfpId).ne(MacToolUse::getMtuIndex, "2").eq(MacToolUse::getWpId, wpId));
if (CollectionUtils.isNotEmpty(macToolUses)) {
for (MacToolUse macToolUs : macToolUses) {

@ -19,6 +19,7 @@ import org.springblade.desk.basic.service.ITeamSetService;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.oem.service.IOemStatementService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.PlateAroundMapper;
@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
@ -55,10 +57,6 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
private final IPlateAroundDelLogService plateAroundDelLogService;
private final IPdaLoadService pdaLoadService;
private final IWorkOrderRunService workOrderRunService;
private final IDsPartService dsPartService;
private final WorkPlanMapper workPlanMapper;
@ -67,6 +65,10 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
private final IOemService oemService;
private final IHandoverRecordService handoverRecordService;
private final IOemStatementService oemStatementService;
@Override
public IPage<PlateAroundVO> queryByReadStatus(IPage<PlateAroundVO> page, PlateAroundDto plateAroundDto) {
return page.setRecords(baseMapper.queryByReadStatus(page, plateAroundDto));
@ -78,7 +80,12 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
if (wo == null) {
throw new ServiceException("车间订单不存在!");
}
return baseMapper.getBeforePlatInCardNo(wo.getId(), tsIds, AuthUtil.getUserId());
WorkPlan beforePlatInCardNo = baseMapper.getBeforePlatInCardNo(wo.getId(), tsIds, AuthUtil.getUserId());
long count = this.count(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, beforePlatInCardNo.getId()).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAT_IN));
if (count > 0) {
throw new ServiceException("此订单已存在镀前入库记录!");
}
return beforePlatInCardNo;
}
@Override
@ -87,7 +94,12 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
if (wo == null) {
throw new ServiceException("车间订单不存在!");
}
return baseMapper.getBeforePlatOutCardNo(wo.getId(), tsIds, AuthUtil.getUserId());
PlateAround plateAround = baseMapper.getBeforePlatOutCardNo(wo.getId(), tsIds, AuthUtil.getUserId());
long count = this.count(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, plateAround.getWpId()).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAN_OUT));
if (count > 0) {
throw new ServiceException("此订单已存在镀前出库记录!");
}
return plateAround;
}
@Override
@ -127,6 +139,10 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
// if (pjYieldOrder.getNextRoam()!=null) {
// pjYieldOrder.setNextRoamName(dsPartService.findNameByRoamNo(pjYieldOrder.getPartCode(), pjYieldOrder.getNextRoam()));
// }
long count = this.count(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, afterPlateInVO.getId()).eq(PlateAround::getPaType, PlateAround.AFTER_PLAN_IN));
if (count > 0) {
throw new ServiceException("此订单已存在镀后入库记录!");
}
return afterPlateInVO;
}
@ -191,20 +207,24 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
int next = 0;
List<WorkOrder> woList = new ArrayList<>(list.size());
WorkOrder wo;
Date date = new Date();
LocalDate now = LocalDate.now();
for (PlateAround plateAround : list) {
this.savePlateAround(AuthUtil.getUser(), plateAround, paType, next, Boolean.FALSE);
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
WorkPlan prWorkPlan = workPlanMapper.selectById(plateAround.getWpId());
wo = workOrderService.getById(prWorkPlan.getWoId());
wo.setHandoverTime(date);
wo.setUseDept(plateAround.getUseDept());
wo.setHrTypeBool(plateAround.getHrTypeBool());
woList.add(wo);
// 计算主工序对应的金额
//bsTeamWagesLevelService.countTeamSalary(wo.getWoId());
// todo 计算主工序对应的金额
// bsTeamWagesLevelService.countTeamSalary(wo.getWoId());
// 调用外协结算
oemStatementService.autoSettlement(wo.getWoCode(), now);
}
}
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
// prHandoverRecordService.saveHandoverRecord(woList, AuthUtil.getUser());
// 保存移交记录
handoverRecordService.saveHandoverRecord(woList);
}
}
@ -238,136 +258,47 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
private void savePlateAround(BladeUser user, PlateAround plateAround, Short paType, int next, Boolean aTure) {
PlateAround newPa = null;
PlateAround oldPa = null;
PlateAround oldPa;
Date date = new Date();
WorkPlan wp = workPlanMapper.selectById(plateAround.getWpId());
if (paType.equals(PlateAround.BEFORE_PLAT_IN) || paType.equals(PlateAround.AFTER_PLAN_IN)) {
plateAround.setPaType(paType);
plateAround.setCreateUser(user.getUserId());
plateAround.setCreateTime(date);
if (aTure) {
plateAround.setPaCode(this.nextCode(paType, next));
plateAround.setMakeTime(new Date());
plateAround.setMakeMan(user.getUserId());
}
plateAround = this.updatePrPlateAround(plateAround);
this.updatePrPlateAround(plateAround);
baseMapper.insert(plateAround);
if (paType.equals(PlateAround.BEFORE_PLAT_IN)) {
WorkPlan nextWorkPlan = workPlanMapper.selectById(wp.getNextWpId());
if (nextWorkPlan != null && nextWorkPlan.getNextWpId() == null) {
throw new ServiceException("工序已是最后一道!");
}
WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId());
pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo());
//下序不能为空,并且下序班组或者供应商都没有值的情况下再进行自动分派
if (nextWorkPlan != null && nextWorkPlan.getMakeTeam() == null && nextWorkPlan.getOcId() == null) {
//调用自动分派处理类
//pjAutomaticDispatchService.beforePlatingAutomatic(prWorkOrder.getCardNo(), pfUserInfo);
} else {
// 如果下序是外协,将订单发外协的标记标为未发送
if (nextWorkPlan != null && nextWorkPlan.getOcId() != null && nextWorkPlan.getMakeTeam() == null) {
prWorkOrder.setOem("1");
prWorkOrder.setOemOut("0");
if (prWorkOrder.getOcId() == null) {
prWorkOrder.setTsId(null);
prWorkOrder.setOcId(nextWorkPlan.getOcId());
}
prWorkOrder.setOemType(WorkOrder.OEM_TYPE_WHOLE);
nextWorkPlan.setPlanEndTime(LocalDateTime.now());
workPlanMapper.updateById(nextWorkPlan);
//产生外协生产进度记录信息
WorkOrderRun wr = new WorkOrderRun();
wr.setWoId(prWorkOrder.getId());
wr.setWoCode(prWorkOrder.getWoCode());
wr.setRunType(WorkOrderRun.RUN_TYPE_1);
wr.setInTeam(wp.getMakeTeam());
wr.setInCustomer(nextWorkPlan.getOcId());
wr.setMemo("入库派外协");
wr.setCreateTime(date);
wr.setCreateUser(user.getUserId());
wr.setUpdateTime(date);
wr.setUpdateUser(user.getUserId());
wr.setStatus(Integer.valueOf(WorkOrderRun.RUN_STATUS_UNDER));
wr.setSystemData("1");
wr.setCollaborate("1");
wr.setRunStatus(WorkOrderRun.RUN_STATUS_UNDER);
workOrderRunService.save(wr);
prWorkOrder.setWorId(wr.getId());
workOrderService.updateById(prWorkOrder);
}
}
wp = workPlanMapper.selectById(wp.getId());
//通知下序进行镀前出库
if (nextWorkPlan.getMakeTeam() != null) {
String str = "流程卡号:【" + prWorkOrder.getCardNo() + "】,零件号:【" + prWorkOrder
.getPartCode() + "】批次号:【" + prWorkOrder.getBatchNo() + "】,已入镀前库,请及时处理!";
// pfMessageService.sendMessage(str, nextWorkPlan.getMakeTeam().getTeamLeader().getUserId(),
// PfMessageType.MTCODE_0200, null, Boolean.FALSE, null);
}
//镀前入库后默认拉满当前工序完成进度
wp.setFactEndTime(date);
workPlanMapper.updateById(wp);
}
if (paType.equals(PlateAround.AFTER_PLAN_IN)) {
WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId());
pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo());
}
} else {
WorkPlan nextWorkPlan = workPlanMapper.selectById(plateAround.getWpId());
if (wp.getNextWpId() != null && nextWorkPlan.getNextWpId() == null) {
throw new ServiceException("pda.nextWorkPlan.noNext");
}
//如果是镀前出库,判定是否下序有班组或者供应商,若没有重新自动分派
if (nextWorkPlan.getNextWpId() != null) {
if (nextWorkPlan.getMakeTeam() == null && nextWorkPlan.getOcId() == null) {
//调用自动分派处理类
WorkOrderRun wor = workOrderRunService.getById(nextWorkPlan.getWoId());
// pjAutomaticDispatchService.beforePlatingAutomatic(wp.getPrWorkOrder().getCardNo(), pfUserInfo);
wp = workPlanMapper.selectById(wp.getId());
//如果当前序是供应商,下序分派至班组(不是检验),或者其他供应商则调用erp关闭订单(待定)
if (nextWorkPlan.getOcId() != null && nextWorkPlan.getNextWpId() != null) {
if (nextWorkPlan.getPpsId() != null) {
if (StringUtils.isNotBlank(wor.getDeliverKey())) {
//调用erp检验接口
// prWorkCheckService.checkCompleteErpBackFill(wor.getWoCode(), wor.getDeliverKey(), wp.getWorkQty(),
// 0, pfUserInfo);
}
}
}
//如果下序供应商不为空,则代表存在原有供应商,则根据此供应商获取最后一个该供应商未关闭的运行记录,并绑定
} else if (wp.getNextWpId() != null && nextWorkPlan.getOcId() != null) {
WorkOrderRun prWorkOrderRun = workOrderRunService.getById(nextWorkPlan.getOcId());
if (prWorkOrderRun != null) {
WorkOrder workOrder = workOrderService.getById(prWorkOrderRun.getWoId());
workOrder.setWorId(prWorkOrderRun.getId());
workOrderService.updateById(workOrder);
//改回下达状态,让调度收回
prWorkOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
workOrderRunService.updateById(prWorkOrderRun);
} else {
throw new ServiceException("pda.dataFormat.error");
}
}
throw new ServiceException("工序已是最后一道!");
}
// 新增镀前出库记录
BeanUtils.copyProperties(plateAround, newPa);
newPa.setPaCode(plateAround.getPaCode());
newPa.setId(null);
newPa.setPaType(paType);
newPa.setCreateUser(user.getUserId());
newPa.setCreateTime(date);
newPa.setPaCode(this.nextCode(paType, next));
if (aTure) {
newPa.setMakeTime(date);
newPa.setMakeMan(user.getUserId());
}
newPa.setWpId(wp.getNextWpId());
newPa = this.updatePrPlateAround(newPa);
newPa.setTsId(wp.getMakeTeam());
this.updatePrPlateAround(newPa);
baseMapper.insert(newPa);
// 修改镀前入库记录状态
oldPa = baseMapper.selectById(plateAround.getId());
oldPa.setCurStatus(PlateAround.CUR_STATUS_OK);
baseMapper.updateById(oldPa);
}
next++;
}
private PlateAround updatePrPlateAround(PlateAround plateAround) {

@ -17,11 +17,8 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.desk.basic.constant.FlowConst;
import org.springblade.desk.basic.feign.WorkCenterClient;
import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity;
import org.springblade.desk.basic.pojo.entity.RelTeamSetUser;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.service.IOemCraftAbilityService;
import org.springblade.desk.basic.service.IOemService;
@ -34,7 +31,6 @@ import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.dashboard.service.IDsProcessProjectService;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity;
import org.springblade.desk.device.pojo.entity.RackSetEntity;
@ -59,7 +55,6 @@ import org.springblade.desk.util.date.DateUtils;
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;
@ -73,7 +68,6 @@ import java.math.BigDecimal;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -1826,6 +1820,176 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return R.success("操作完成");
}
@Override
public void oemHandle(Long nextWpId, int type) {
// 接收工序
WorkPlan workPlan = workPlanService.getById(nextWpId);
// 完成工序
WorkPlan frontWorkPlan = workPlanService.getById(workPlan.getFrontWpId());
WorkOrder workOrder = this.getById(workPlan.getWoId());
Date newDate = new Date();
Long userId = AuthUtil.getUserId();
// 生成外协订单(work_order_run)
if (type != 3) {
WorkOrderRun workOrderRun = new WorkOrderRun();
workOrderRun.setWoId(workOrder.getId());
workOrderRun.setWoCode(workOrder.getWoCode());
workOrderRun.setRunType(WorkOrderRun.RUN_TYPE_1);
workOrderRun.setOutTeam(frontWorkPlan != null ? frontWorkPlan.getMakeTeam() : null);
workOrderRun.setInCustomer(workPlan.getOcId());
workOrderRun.setOemStatus(WorkOrderRun.OEM_STATUS_IN);
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
workOrderRun.setMemo("入库派外协");
workOrderRun.setApprovalMan(userId);
workOrderRun.setApprovalTime(newDate);
workOrderRun.setSystemData("1");
workOrderRun.setCollaborate(workOrder.getCollaborate());
workOrderRunService.save(workOrderRun);
workOrder.setWorId(workOrderRun.getId());
workOrder.setOemType(WorkOrder.OEM_TYPE_WHOLE);
}
// 完成上序
this.workPlanEnd(frontWorkPlan, newDate, workOrder.getMakeQty());
// 开始本序
this.workPlanStart(workPlan, newDate, AuthUtil.getUserId(), workOrder);
// 修改车间订单外协相关字段
workOrder.setOem("1");
workOrder.setOemOut("0");
this.updateById(workOrder);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean saveMakeRec(MakeRecDTO makeRecDTO) {
WorkPlan wp = workPlanService.getById(makeRecDTO.getWpId());
if (!WorkPlan.STATUS_START.equals(wp.getStatus())) {
throw new ServiceException("当前工序已报工完成!");
}
MacToolUse mtu;
BsProcessSetEntity dsProcess = bsProcessSetService.getById(wp.getPpsId());
WorkPlan frontWp = workPlanService.getById(wp.getFrontWpId());
BsProcessSetEntity frontProcess = null;
if (frontWp != null) {
frontProcess = bsProcessSetService.getById(wp.getFrontWpId());
}
//如果是上挂工序,需判定是否绑定挂具
if ("上挂".equals(dsProcess.getName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 0, 0);
if (mtu == null) {
throw new ServiceException("上挂工序未绑定挂具!");
}
// 如果上序是上挂工序、并且本序是主工序,则代表本序是 需要绑定飞靶及设备的工序 或者手动维护生产追溯信息
} else if (frontProcess != null && "上挂".equals(frontProcess.getName()) && "1".equals(wp.getCruxProcess())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<MesQcProduceRunEntity> qcProduceRunList = qcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
} else if (dsProcess.getName().contains("镀金")) {
mtu = macToolUseService.queryByParams(wp.getId(), 0, 1, 0);
if (mtu == null) {
throw new ServiceException("此工序未绑定飞跋,请绑定飞跋!!!");
}
//验证是否绑定设备
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
List<MesQcProduceRunEntity> produceRunList = null;
produceRunList = qcProduceRunService.listPrByWpIdIndex(wp.getId(), 1, Boolean.FALSE);
if (produceRunList == null || produceRunList.isEmpty()) {
produceRunList = qcProduceRunService.listPrByWpIdIndex(wp.getId(), 2, Boolean.FALSE);
}
if (!(produceRunList != null && !produceRunList.isEmpty())) {
throw new ServiceException("未绑定飞跋和设备或未维护生产追溯信息!!!");
}
}
} else if ("玻璃封接清洗".equals(dsProcess.getName()) || "玻璃封接退火".equals(dsProcess.getName()) ||
"玻璃封接预氧化(箱式炉)".equals(dsProcess.getName()) || "玻璃封接预氧化(链式炉)".equals(dsProcess.getName()) ||
"玻璃封接(链式炉)".equals(dsProcess.getName()) || "玻璃封接(真空炉)".equals(dsProcess.getName()) ||
"玻璃封接灌胶".equals(dsProcess.getName()) || "玻璃饼压制".equals(dsProcess.getName()) ||
"玻璃饼排蜡玻化".equals(dsProcess.getName()) || "玻璃饼振光".equals(dsProcess.getName()) ||
"石墨模烘干".equals(dsProcess.getName()) || "石墨模焙烧".equals(dsProcess.getName()) ||
"真空炉灌胶".equals(dsProcess.getName()) || "玻璃封接电镀去氧化皮".equals(dsProcess.getName()) ||
"玻璃封接电化学抛光".equals(dsProcess.getName()) || "玻璃封接湿喷砂".equals(dsProcess.getName()) ||
"玻璃封接电镀".equals(dsProcess.getName()) || "玻璃封接插针电镀".equals(dsProcess.getName()) ||
"玻璃封接壳体电镀".equals(dsProcess.getName()) || "玻璃封接电镀下挂".equals(dsProcess.getName()) ||
"烧结浸保护剂".equals(dsProcess.getName())) {
mtu = macToolUseService.queryByParams(wp.getId(), 1, 1, 1);
if (mtu == null) {
// 验证是否维护了生产追溯信息
List<MesQcProduceRunEntity> qcProduceRunList = qcProduceRunService.listPrByWpId(wp.getId());
if (!(qcProduceRunList != null && !qcProduceRunList.isEmpty())) {
throw new ServiceException("此工序卡未绑定飞靶或设备!");
}
}
}
boolean aBoolean = makeRecService.chkRfpDetail(wp.getId());
if (!aBoolean) {
throw new ServiceException("生产记录未填写完整,不允许报工!!!!");
}
MakeRec mr = new MakeRec();
BeanUtils.copyProperties(makeRecDTO, mr);
mr.setWorker(AuthUtil.getUserId());
mr.setMakeTime(new Date());
makeRecService.save(mr);
if (mr.getScrapQty() > 0) {
wp.setScrapQty(wp.getScrapQty() + mr.getScrapQty());
WorkOrder wo = this.getById(wp.getWoId());
wo.setMakeQty(wo.getMakeQty() - mr.getScrapQty());
this.updateById(wo);
}
wp.setWorkQty(wp.getWorkQty() + mr.getWorkQty());
if (wp.getQualifiedQty().equals(wp.getScrapQty() + wp.getWorkQty())) {
wp.setStatus(WorkPlan.STATUS_WORK_OK);
}
if ("热处理".equals(dsProcess.getName())) {
wp.setPrintType((short) 1);
String code = macToolUseService.nextCode(2);
MacToolUse prMacToolUse = new MacToolUse();
prMacToolUse.setWpId(wp.getId());
prMacToolUse.setFinished(1);
prMacToolUse.setCreateTime(new Date());
prMacToolUse.setCreateMan(makeRecDTO.getWorker());
prMacToolUse.setMtnCode(code);
prMacToolUse.setMtuIndex(String.valueOf(0));
macToolUseService.save(prMacToolUse);
String deviceCode = prMacToolUse.getEquipmentCard() != null ? prMacToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, prMacToolUse.getHangNum(), prMacToolUse.getMtnCode(), prMacToolUse.getFinished());
MesQcProduceRunEntity qcProduceRun = new MesQcProduceRunEntity();
qcProduceRun.setMtnCode(code);
qcProduceRun.setWorkSlot("热处理自检");
qcProduceRun.setInDate(cn.hutool.core.date.DateUtil.now());
qcProduceRun.setDataOne(makeRecDTO.getResource());
qcProduceRun.setDataTwo(makeRecDTO.getNum());
qcProduceRun.setDataThree(makeRecDTO.getThickness());
qcProduceRun.setDataFour(makeRecDTO.getCode());
qcProduceRun.setDataFive(makeRecDTO.getInspectCode());
qcProduceRun.setDataSix(String.valueOf(makeRecDTO.getStatus()));
qcProduceRun.setDataSeven(makeRecDTO.getShape());
qcProduceRunService.save(qcProduceRun);
}
wp.setFactEndTime(new Date());
workPlanService.updateById(wp);
// 线上迁移修改
MacToolUse macToolUse = macToolUseService.getDataByWpIdAndIndex(wp.getId(), "2");
if (macToolUse != null && macToolUse.getRfpId() != null && macToolUse.getFinished() != 1) {
macToolUse.setFinished(1);
String deviceCode = macToolUse.getEquipmentCard() != null ? macToolUse.getMtnCode() : "";
log.info("修改设备绑定状态:设备编号:{},批次号:{},槽号:{},方法名:addMakeRec(),{}", deviceCode, macToolUse.getHangNum(), macToolUse.getMtnCode(), macToolUse.getFinished());
macToolUseService.updateById(macToolUse);
}
// 如果下工序是外协:生成外协订单,完成本序,接收下序
this.oemHandle(wp.getNextWpId(), 1);
return true;
}
private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) {
if (workPlan == null) {
return;

@ -44,8 +44,6 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.fasterxml.jackson.databind.type.LogicalType.DateTime;
/**
* 车间作业计划 服务实现类
*

@ -56,4 +56,14 @@ public class ErpDataProduceClient implements IErpDataProduceClient {
return R.data(erpDataProduceService.getCustodianByRecDept(partCode, recDept));
}
@Override
public R<String> chkSjjd(String ypCode, String batchNo) {
return R.data(erpDataProduceService.chkSjjd(ypCode, batchNo));
}
@Override
public R<String> chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) {
return R.data(erpDataProduceService.chkShjh(woCode, ypCode, partCode, productIdent, makeQty, memo));
}
}

@ -24,4 +24,8 @@ public interface IErpDataProduceService {
String getVersionByPartCode(String partCode);
String getCustodianByRecDept(String partCode, String recDept);
String chkSjjd(String ypCode, String batchNo);
String chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo);
}

@ -8,8 +8,14 @@ import org.springblade.erpdata.pojo.dto.ReworkProcessDTO;
import org.springblade.erpdata.pojo.vo.QueryBatchVO;
import org.springblade.erpdata.pojo.vo.ReworkProcessVO;
import org.springblade.erpdata.service.IErpDataProduceService;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Service;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
/**
@ -21,29 +27,104 @@ import java.util.Map;
@Service
public class ErpDataProduceServiceImpl implements IErpDataProduceService {
private final ErpDataProduceMapper erpDataProduceMapper;
@Override
public QueryBatchVO queryBatch(String partCode) {
return erpDataProduceMapper.queryBatch(partCode);
}
@Override
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);
}
@Override
public String getCustodianByRecDept(String partCode, String recDept) {
return erpDataProduceMapper.getCustodianByRecDept(partCode, recDept);
}
private final ErpDataProduceMapper erpDataProduceMapper;
private final JdbcTemplate jdbcTemplate;
@Override
public QueryBatchVO queryBatch(String partCode) {
return erpDataProduceMapper.queryBatch(partCode);
}
@Override
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);
}
@Override
public String getCustodianByRecDept(String partCode, String recDept) {
return erpDataProduceMapper.getCustodianByRecDept(partCode, recDept);
}
@Override
public String chkSjjd(String ypCode, String batchNo) {
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名(包含 DB Link)
.withProcedureName("pro_rbchksjjd")
// 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题)
.withoutProcedureColumnMetaDataAccess()
// 显式声明参数
.declareParameters(
new SqlParameter("v_wono", Types.VARCHAR), // IN
new SqlParameter("v_splcode", Types.VARCHAR), // IN
new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT
new SqlOutParameter("v_excflag", Types.VARCHAR) // OUT
);
// 2. 封装输入参数
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_wono", ypCode);
inParams.put("v_splcode", batchNo);
// 3. 执行并获取结果 Map
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 4. 提取输出参数
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote");
return excflag;
}
@Override
public String chkShjh(String woCode, String ypCode, String partCode, String productIdent, Double makeQty, String memo) {
// 1. 配置 SimpleJdbcCall
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
// 指定存储过程名称 (包含 DB Link)
.withProcedureName("pro_inchk")
// 【关键】关闭元数据自动获取
// 通过 DB Link 调用时,这能避免权限不足或性能问题,必须手动 declareParameters
.withoutProcedureColumnMetaDataAccess()
// 2. 显式声明所有参数 (顺序建议与存储过程定义一致)
.declareParameters(
// --- 输入参数 (IN) ---
new SqlParameter("v_sono", Types.VARCHAR), // 车间订单号
new SqlParameter("v_wono", Types.VARCHAR), // 工作订单号
new SqlParameter("v_prtno", Types.VARCHAR), // 零件号
new SqlParameter("v_prtlotno", Types.VARCHAR), // 等级
new SqlParameter("v_invysqty", Types.DOUBLE), // 维护数量
new SqlParameter("v_prtsdept", Types.VARCHAR), // 维护车间 (固定值 "3400")
new SqlParameter("v_note", Types.VARCHAR), // 备注
// --- 输出参数 (OUT) ---
new SqlOutParameter("v_excnote", Types.VARCHAR), // 异常信息
new SqlOutParameter("v_excflag", Types.VARCHAR) // 异常标识
);
// 3. 封装输入参数 Map
Map<String, Object> inParams = new HashMap<>();
inParams.put("v_sono", woCode);
inParams.put("v_wono", ypCode);
inParams.put("v_prtno", partCode);
inParams.put("v_prtlotno", productIdent);
inParams.put("v_invysqty", makeQty);
inParams.put("v_prtsdept", "3400"); // 硬编码的固定值
inParams.put("v_note", memo);
// 4. 执行存储过程
Map<String, Object> resultMap = jdbcCall.execute(inParams);
// 5. 获取输出参数 (安全处理:避免 null.toString() 导致空指针异常 NPE)
String excflag = (String) resultMap.get("v_excflag");
String excnote = (String) resultMap.get("v_excnote"); // 如需记录日志可打开
return excflag;
}
}

Loading…
Cancel
Save