liweidong
liweidong-hj 2 weeks ago
commit 153d761374
  1. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  2. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/LoadSubOrderVO.java
  3. 10
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/SaveSubOrderVo.java
  4. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java
  5. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  6. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaSaveController.java
  7. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ReworkProcessController.java
  8. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/ApsProduceClient.java
  9. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java
  10. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java
  11. 96
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java
  12. 32
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  13. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.java
  14. 7
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml
  15. 53
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml
  16. 77
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGlassCakeOutServiceImpl.java

@ -361,6 +361,12 @@ public class YieldOrder extends BaseEntity {
@TableField(value = "PRODUCE_BOOL") @TableField(value = "PRODUCE_BOOL")
private Boolean produceBool; private Boolean produceBool;
/**
* 子件齐套时间
*/
// @TableField(value = "PRODUCE_BOOL_DATE")
private Date produceBoolDate;
/** /**
* 使用部门代码 * 使用部门代码
*/ */

@ -4,12 +4,12 @@ import lombok.Data;
@Data @Data
public class LoadSubOrderVO { public class LoadSubOrderVO {
private String wpId; private Long wpId;
private String woCode; private String woCode;
private String partCode; private String partCode;
private String cardNo; private String cardNo;
private String batchNo; private String batchNo;
private String makeQty; private Double makeQty;
private String ppsName; private String ppsName;
private String tsName; private String tsName;

@ -0,0 +1,10 @@
package org.springblade.desk.produce.pojo.vo;
import lombok.Data;
@Data
public class SaveSubOrderVo {
private Long wpId;
private Long shId;
private Long cslId;
}

@ -394,6 +394,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
yieldOrder.setGoodsDemand(BigDecimal.valueOf(demand)); yieldOrder.setGoodsDemand(BigDecimal.valueOf(demand));
} }
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(""); yieldOrder.setValidationMomo("");
yieldOrder.setPlateGoodsCode(dsPart.getPlateGoodsCode()); yieldOrder.setPlateGoodsCode(dsPart.getPlateGoodsCode());
yieldOrderMapper.updateById(yieldOrder); yieldOrderMapper.updateById(yieldOrder);

@ -246,6 +246,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
// this.verifyYieldOrderDelivery(yieldOrder); // this.verifyYieldOrderDelivery(yieldOrder);
} }
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()); yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode());
yieldOrder.setValidationTime(DateUtil.now());
this.updateById(yieldOrder); this.updateById(yieldOrder);
if (yieldOrder.getReceiveStatus() != null && if (yieldOrder.getReceiveStatus() != null &&

@ -17,10 +17,7 @@ import org.springblade.desk.energy.pojo.entity.BsEpciuPatrolInspectionEntity;
import org.springblade.desk.oldv1.constant.Constant; import org.springblade.desk.oldv1.constant.Constant;
import org.springblade.desk.oldv1.pojo.ResultInfo; import org.springblade.desk.oldv1.pojo.ResultInfo;
import org.springblade.desk.produce.pojo.dto.DeviceBindDTO; import org.springblade.desk.produce.pojo.dto.DeviceBindDTO;
import org.springblade.desk.produce.pojo.vo.MacToolUseVO; import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo;
import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo;
import org.springblade.desk.produce.pojo.vo.UnBingVo;
import org.springblade.desk.produce.service.IPdaSaveService; import org.springblade.desk.produce.service.IPdaSaveService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -178,4 +175,11 @@ public class PdaSaveController {
pdaSaveService.saveEpDosingRec(epDosingRec); pdaSaveService.saveEpDosingRec(epDosingRec);
return R.success(); return R.success();
} }
@Operation(summary = "子件入库保存")
@PostMapping("/saveSubOrder")
public R saveSubOrder(@RequestBody SaveSubOrderVo subOrder) {
pdaSaveService.saveSubOrder(subOrder);
return R.success();
}
} }

@ -44,6 +44,7 @@ public class ReworkProcessController extends BladeController {
public R<IPage<ReworkProcessVO>> page(ReworkProcessDTO prReworkProcess, Query query) { public R<IPage<ReworkProcessVO>> page(ReworkProcessDTO prReworkProcess, Query query) {
IPage<ReworkProcessVO> iPage = Condition.getPage(query); IPage<ReworkProcessVO> iPage = Condition.getPage(query);
List<ReworkProcessVO> process = erpDataProduceClient.loadReworkOrder(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo(), query.getCurrent(), query.getSize()).getData(); List<ReworkProcessVO> process = erpDataProduceClient.loadReworkOrder(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo(), query.getCurrent(), query.getSize()).getData();
process.forEach(processVO -> processVO.setReqqty(processVO.getAmount().toString()));
iPage.setRecords(process); iPage.setRecords(process);
int size = erpDataProduceClient.loadReworkOrderSize(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo()).getData(); int size = erpDataProduceClient.loadReworkOrderSize(prReworkProcess.getReworkCode(), prReworkProcess.getPartCode(), prReworkProcess.getBatchNo()).getData();
iPage.setTotal(size); iPage.setTotal(size);

@ -48,7 +48,7 @@ public class ApsProduceClient implements IApsProduceClient {
// 获取上1小时开始、结束时间 // 获取上1小时开始、结束时间
Date startTime = Date.from(LocalDateTime.now().minusHours(1).withMinute(0).withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant()); Date startTime = Date.from(LocalDateTime.now().minusHours(1).withMinute(0).withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
Date endTime = Date.from(LocalDateTime.now().minusHours(1).withMinute(59).withSecond(59).withNano(999_999_999).atZone(ZoneId.systemDefault()).toInstant()); Date endTime = Date.from(LocalDateTime.now().minusHours(1).withMinute(59).withSecond(59).withNano(999_999_999).atZone(ZoneId.systemDefault()).toInstant());
List<YieldOrder> orders = yieldOrderService.list(Wrappers.<YieldOrder>lambdaQuery().eq(YieldOrder::getValidationResult, YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()).between(YieldOrder::getUpdateTime, startTime, endTime)); List<YieldOrder> orders = yieldOrderService.list(Wrappers.<YieldOrder>lambdaQuery().eq(YieldOrder::getValidationResult, YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()).between(YieldOrder::getValidationTime, startTime, endTime));
log.info("待自动接收订单数量:{}", orders.size()); log.info("待自动接收订单数量:{}", orders.size());
for (YieldOrder yieldOrder : orders) { for (YieldOrder yieldOrder : orders) {
try { try {

@ -7,10 +7,7 @@ import org.springblade.desk.produce.pojo.dto.DeviceBindDTO;
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO;
import org.springblade.desk.produce.pojo.entity.WorkPlan; import org.springblade.desk.produce.pojo.entity.WorkPlan;
import org.springblade.desk.produce.pojo.vo.MacToolUseVO; import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo;
import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo;
import org.springblade.desk.produce.pojo.vo.UnBingVo;
import java.util.List; import java.util.List;
@ -72,4 +69,5 @@ public interface IPdaSaveService extends BaseService<WorkPlan> {
void saveEpDosingRec(BsDosingRecEntity epDosingRec); void saveEpDosingRec(BsDosingRecEntity epDosingRec);
void saveSubOrder(SaveSubOrderVo subOrder);
} }

@ -182,30 +182,32 @@ public class PdaLoadServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
LoadSubOrderVO jsonObj = new LoadSubOrderVO(); LoadSubOrderVO jsonObj = new LoadSubOrderVO();
WorkOrder workOrder = workOrderService.getWorkOrderByCardNo(cardNo); WorkOrder workOrder = workOrderService.getWorkOrderByCardNo(cardNo);
if (workOrder == null) { if (workOrder == null) {
throw new ServiceException("pda.prWorkOrder.absent"); throw new ServiceException("车间订单不存在!");
} }
YieldOrder yieldOrder = yieldOrderService.getYoByCardNo(cardNo); YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
WorkPlan wp = workPlanService.getById(workOrder.getWpId());
WorkPlan wp = baseMapper.selectOne(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, workOrder.getWpId()));
//不是最后一道不允许入库 //不是最后一道不允许入库
if (wp.getNextWpId() != null) { if (wp.getNextWpId() != null) {
throw new ServiceException("pda.cur.work.not.last.one"); throw new ServiceException("当前工序不是最后一道,不能进行入库操作!");
} }
//工序未报工完成,不允许入库 //工序未报工完成,不允许入库
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { if (!WorkPlan.STATUS_WORK_OK.equals(wp.getStatus())) {
throw new ServiceException("pda.sub.work.in.isNot.ok"); throw new ServiceException("当前工序未报工完成,不能进行入库操作!");
} }
//不是子件车间订单不允许从此处入库 //不是子件车间订单不允许从此处入库
if (yieldOrder.getFatherYoId() == null && (StringUtils.isBlank(yieldOrder.getMemo()) if (yieldOrder.getFatherYoId() == null && (StringUtils.isBlank(yieldOrder.getMemo()) || !yieldOrder.getMemo().contains("WO-"))) {
|| !yieldOrder.getMemo().contains("WO-"))) { throw new ServiceException("不是子件车间订单,不允许在此入库!");
throw new ServiceException("pda.not.sub.order");
} }
jsonObj.setWpId(String.valueOf(wp.getId())); BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
BsTeamSetEntity team = bsTeamSetService.getById(wp.getSubsidiaryTeam() != null ? wp.getSubsidiaryTeam() : wp.getMakeTeam());
jsonObj.setWpId(wp.getId());
jsonObj.setWoCode(workOrder.getWoCode()); jsonObj.setWoCode(workOrder.getWoCode());
jsonObj.setPartCode(yieldOrder.getPartCode()); jsonObj.setPartCode(yieldOrder.getPartCode());
jsonObj.setCardNo(workOrder.getCardNo()); jsonObj.setCardNo(workOrder.getCardNo());
jsonObj.setBatchNo(workOrder.getBatchNo()); jsonObj.setBatchNo(workOrder.getBatchNo());
jsonObj.setMakeQty(String.valueOf(workOrder.getMakeQty())); jsonObj.setMakeQty(workOrder.getMakeQty());
jsonObj.setPpsName(processSet != null ? processSet.getName() : null);
jsonObj.setTsName(team != null ? team.getTsName() : null);
return jsonObj; return jsonObj;
} }

@ -44,10 +44,7 @@ import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO;
import org.springblade.desk.produce.pojo.dto.PrMacTooUseSpec; import org.springblade.desk.produce.pojo.dto.PrMacTooUseSpec;
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO;
import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.MacToolUseVO; import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo;
import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo;
import org.springblade.desk.produce.pojo.vo.UnBingVo;
import org.springblade.desk.produce.service.*; import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask; import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.ReviewSheet; import org.springblade.desk.quality.pojo.entity.ReviewSheet;
@ -57,6 +54,7 @@ import org.springblade.erpdata.feign.IErpDataProduceClient;
import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO; import org.springblade.erpdata.pojo.vo.PpmReportDetailModelVO;
import org.springblade.system.feign.IUserClient; import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User; import org.springblade.system.pojo.entity.User;
import org.springblade.wms.pojo.entity.StClassRequest;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -536,7 +534,7 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
List<PrReworkProcessEntity> rpList = dsPartService.selectReworkPartCraft(rr.getPrtno(), rr.getRedono(), rr.getSplcode(), String.valueOf(rr.getSeqno())); List<PrReworkProcessEntity> rpList = dsPartService.selectReworkPartCraft(rr.getPrtno(), rr.getRedono(), rr.getSplcode(), String.valueOf(rr.getSeqno()));
if (CollectionUtils.isEmpty(rpList)) { if (CollectionUtils.isEmpty(rpList)) {
//修改erp返工单工艺状态为无工艺 // 修改erp返工单工艺状态为无工艺
log.info("修改erp返工单工艺状态为无工艺,返工单号{}", rr.getRedono()); log.info("修改erp返工单工艺状态为无工艺,返工单号{}", rr.getRedono());
return erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 0).getData(); return erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 0).getData();
} else { } else {
@ -620,7 +618,8 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
boolean saveResult = yieldOrderCraftService.saveBatch(ycList); boolean saveResult = yieldOrderCraftService.saveBatch(ycList);
if (saveResult) { if (saveResult) {
// 修改erp返工单状态 // 修改erp返工单状态
erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 1).getData(); log.info("返工订单接收成功,通知erp");
erpDataProduceClient.receiveOrder(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode(), rr.getAmount(), rr.getReqqty(), AuthUtil.getUserName(), 1);
} }
return saveResult; return saveResult;
} }
@ -967,4 +966,89 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan
epDosingRec.setHandleResult(Long.valueOf(BsDosingRecEntity.HANDLE_RESULT_PDA)); epDosingRec.setHandleResult(Long.valueOf(BsDosingRecEntity.HANDLE_RESULT_PDA));
bsDosingRecService.updateById(epDosingRec); bsDosingRecService.updateById(epDosingRec);
} }
@Override
public void saveSubOrder(SaveSubOrderVo subOrder) {
Long wpId = subOrder.getWpId();
Long shId = subOrder.getWpId();
Long cslId = subOrder.getWpId();
if (wpId == null || shId == null || cslId == null) {
throw new ServiceException("参数异常!");
}
WorkPlan wp = this.getById(wpId);
if (wp == null) {
throw new ServiceException("车间订单不存在!");
}
//不是最后一道不允许入库
if (wp.getNextWpId() != null) {
throw new ServiceException("当前工序不是最后一道,不能进行入库操作!");
}
//工序未报工完成,不允许入库
if (!Objects.equals(wp.getStatus(), WorkPlan.STATUS_WORK_OK)) {
throw new ServiceException("当前工序未报工完成,不能进行入库操作!");
}
WorkOrder wo = workOrderService.getById(wp.getWoId());
YieldOrder yo = yieldOrderService.getById(wo.getYoId());
//不是子件车间订单不允许从此处入库
if (yo.getFatherYoId() == null && (StringUtils.isBlank(yo.getMemo())
|| !yo.getMemo().contains("WO-"))) {
throw new ServiceException("不是子件车间订单,不允许在此入库!");
}
Date nowDate = new Date();
//进行入库
// stRealtimeStockWebService.saveSubOrderWarehousing(yo.getPartCode(), wo.getBatchNo(), wo.getMakeQty(), shId, cslId, nowDate, AuthUtil.getUserId());
//当前工序完工
wp.setFactEndTime(nowDate);
wp.setStatus(WorkPlan.STATUS_COMPLETE);
this.updateById(wp);
//更改车间订单状态
workOrderService.updateStatus(Collections.singletonList(wo.getId()), WorkOrder.RUN_STATUS_COMPLETED, AuthUtil.getUserId(), null);
//查询父级订单下的所有子件订单是否已全部完成
List<YieldOrder> yoList = yieldOrderService.listByFatherYoId(yo.getFatherYoId());
boolean bool = true;
if (yoList != null && !yoList.isEmpty()) {
for (YieldOrder item : yoList) {
if (item.getStatus() < YieldOrder.CUR_STATUS_COMPLETED) {
bool = false;
break;
}
}
}
//此处标记父级订单已齐套
if (yo.getFatherYoId() != null) {
YieldOrder fatherYo = yieldOrderService.getById(yo.getFatherYoId());
if (fatherYo != null) {
if (bool) {
fatherYo.setProduceBool(Boolean.TRUE);
fatherYo.setProduceBoolDate(new Date());
yieldOrderService.updateById(fatherYo);
}
}
}
//获取到订单入库的库存
// Object[] obj = stRealtimeStockWebService.queryByShIdAndCslId(yo.getPartCode(), yo.getYpQty(), shId, cslId);
// if (obj != null) {
// //像仓库发起班组提请
// List<StClassRequest> list = new ArrayList<>();
// StClassRequest stClassRequest = new StClassRequest();
// stClassRequest.setRlsId(Long.valueOf(obj[0].toString()));
// stClassRequest.setGoodsId(Long.valueOf(obj[1].toString()));
// stClassRequest.setGoodsCode(obj[2].toString());
// stClassRequest.setGoodsName(obj[3].toString());
// stClassRequest.setMemo(wo.getWoCode());
// stClassRequest.setQuantity(Double.valueOf(wo.getMakeQty()));
// stClassRequest.setCrCode(stClassRequestService.nextCode(null));
// stClassRequest.setCrMan(curUserInfo);
// stClassRequest.setCrDate(new Date());
// stClassRequest.setPfDepartment(curUserInfo.getPfDepartment());
// stClassRequest.setApprovalStatus(IFlowBusinessBean.STATUS_CHECKED);
// stClassRequest.setCreateMan(curUserInfo);
// stClassRequest.setCreateTime(new Date());
// stClassRequest.setCurStatus(StClassRequest.CURSTATUS_RELEASED);
// stClassRequest.setSpecial(Boolean.FALSE);
// list.add(stClassRequest);
// stClassRequestService.addOrEdit(list, null, curUserInfo);
// }
}
} }

@ -1315,8 +1315,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlan.setPlanWorkMan(""); workPlan.setPlanWorkMan("");
User workMan = UserCache.getUser(workPlan.getWorkMan()); User workMan = UserCache.getUser(workPlan.getWorkMan());
workPlan.setWorkManName(workMan != null ? workMan.getRealName() : ""); workPlan.setWorkManName(workMan != null ? workMan.getRealName() : "");
if (workPlan.getPlanStartTime() != null && workPlan.getPlanEndTime() != null) { if (workPlan.getFactStartTime() != null && workPlan.getFactEndTime() != null) {
workPlan.setHourActual(Duration.between(workPlan.getPlanStartTime(), workPlan.getPlanEndTime()).toMinutes()); workPlan.setHourActual(Duration.between(workPlan.getFactStartTime(), workPlan.getFactEndTime()).toMinutes());
} }
workPlan.setRate(workPlan.getRate()); workPlan.setRate(workPlan.getRate());
workPlan.setWorkPlanColor(workPlan.getWorkPlanColor()); workPlan.setWorkPlanColor(workPlan.getWorkPlanColor());
@ -2051,18 +2051,6 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workOrder.setOem("1"); workOrder.setOem("1");
workOrder.setOemOut("0"); workOrder.setOemOut("0");
this.updateById(workOrder); this.updateById(workOrder);
try {
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
// 玻璃封接退火
if (yieldOrder.getYieldType() == YieldOrderEnum.YIELD_TYPE_4.getCode() && frontWorkPlan != null && 63 == frontWorkPlan.getPpsId()) {
StGlassCakeOutDTO stGlassCakeOutDTO = new StGlassCakeOutDTO();
stGlassCakeOutDTO.setYoCode(yieldOrder.getYoCode());
stGlassCakeOutClient.callGeneratePreOutOrder(stGlassCakeOutDTO);
}
} catch (Exception e) {
log.error("调用玻璃饼出库接口失败", e);
}
} }
@Override @Override
@ -2181,6 +2169,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
// 如果下工序是外协:生成外协订单,完成本序,接收下序 // 如果下工序是外协:生成外协订单,完成本序,接收下序
this.oemHandle(wp.getNextWpId(), 1); this.oemHandle(wp.getNextWpId(), 1);
try {
WorkOrder workOrder = this.getById(wp.getWoId());
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
if (yieldOrder.getFatherYoId() != null) {
YieldOrder fatherYieldOrder = yieldOrderService.getById(yieldOrder.getFatherYoId());
// 玻璃封接退火
if (yieldOrder.getYieldType() == YieldOrderEnum.YIELD_TYPE_4.getCode() && 63 == wp.getPpsId()) {
StGlassCakeOutDTO stGlassCakeOutDTO = new StGlassCakeOutDTO();
stGlassCakeOutDTO.setYoCode(fatherYieldOrder.getYoCode());
stGlassCakeOutClient.callGeneratePreOutOrder(stGlassCakeOutDTO);
}
}
} catch (Exception e) {
log.error("调用玻璃饼出库接口失败", e);
}
return true; return true;
} }

@ -51,5 +51,7 @@ public interface StGlassCakeOutMapper extends BaseMapper<StGlassCakeOut> {
YieldOrder getByYoCode(String cardNo); YieldOrder getByYoCode(String cardNo);
YieldOrder getByYieldOrder(String yoCode); YieldOrder getByYieldOrder(String yoCode);
List<YieldOrder> getYieldOrderList(Long id, String yieldType);
} }

@ -216,4 +216,11 @@
WHERE YO_CODE = #{yoCode} WHERE YO_CODE = #{yoCode}
</select> </select>
<select id="getYieldOrderList" resultType="org.springblade.desk.order.pojo.entity.YieldOrder">
SELECT *
FROM MES_YIELD_ORDER
WHERE FATHER_YO_ID = #{id}
AND YIELD_TYPE = #{yieldType}
</select>
</mapper> </mapper>

@ -609,11 +609,34 @@
-- 原有:左连接锁料表,保留工单关联(必须加,否则查错锁料量) -- 原有:左连接锁料表,保留工单关联(必须加,否则查错锁料量)
LEFT JOIN ST_REALTIME_STOCK_LOCK l ON s.id = l.rls_id LEFT JOIN ST_REALTIME_STOCK_LOCK l ON s.id = l.rls_id
-- 调整:goods_code从关联的STGOODS表匹配,而非库存表 -- 调整:goods_code从关联的STGOODS表匹配,而非库存表
WHERE s.print_mark = #{isPrint} WHERE g.goods_code = #{goodsCode}
AND s.powder_weight = #{powderWeight} <if test="materialNo == null">
AND s.material_no = #{materialNo} AND s.material_no IS NULL
AND s.thickness = #{thickness} </if>
AND g.goods_code = #{goodsCode} <if test="materialNo != null">
AND s.material_no = #{materialNo}
</if>
<if test="powderWeight == null">
AND s.powder_weight IS NULL
</if>
<if test="powderWeight != null">
AND s.powder_weight = #{powderWeight}
</if>
<if test="thickness == null">
AND s.thickness IS NULL
</if>
<if test="thickness != null">
AND s.thickness = #{thickness}
</if>
<if test="isPrint == null">
AND s.print_mark IS NULL
</if>
<if test="isPrint != null">
AND s.print_mark = #{isPrint}
</if>
-- 原有:按可用量(库存数量-已占用数量)倒序,空占用按0计算 -- 原有:按可用量(库存数量-已占用数量)倒序,空占用按0计算
ORDER BY (s.quantity - NVL(l.occupy_quantity, 0)) DESC ORDER BY (s.quantity - NVL(l.occupy_quantity, 0)) DESC
) t ) t
@ -648,5 +671,25 @@
AND s.is_deleted = 0 AND s.is_deleted = 0
AND g.is_deleted = 0 AND g.is_deleted = 0
</select> </select>
<!-- <select id="queryByShIdAndSlId" resultType="java.lang.Object">-->
<!-- SELECT-->
<!-- a.ID,-->
<!-- b.GOODS_ID,-->
<!-- b.GOODS_CODE,-->
<!-- b.GOODS_NAME-->
<!-- FROM ST_REALTIME_STOCK a-->
<!-- INNER JOIN ST_GOODS b ON a.GOODS_ID = b.ID-->
<!-- INNER JOIN ST_STORAGE_LOCATION c ON a.SL_ID = c.ID-->
<!-- WHERE-->
<!-- a.QUANTITY = #{quantity}-->
<!-- AND b.GOODS_CODE = #{goodsCode}-->
<!-- AND a.SH_ID = #{shId}-->
<!-- AND a.SL_ID = #{slId}-->
<!-- AND a.IS_DELETED = 0-->
<!-- AND b.IS_DELETED = 0-->
<!-- AND c.IS_DELETED = 0-->
<!-- AND ROWNUM = 1-->
<!-- </select>-->
</mapper> </mapper>

@ -10,7 +10,6 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.BladeUser;
import org.springblade.desk.dashboard.feign.IPartClient; import org.springblade.desk.dashboard.feign.IPartClient;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity;
import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.wms.excel.StGlassCakeOutExcel; import org.springblade.wms.excel.StGlassCakeOutExcel;
import org.springblade.wms.mapper.StGlassCakeOutMapper; import org.springblade.wms.mapper.StGlassCakeOutMapper;
@ -26,7 +25,6 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @version 1.0 * @version 1.0
@ -86,41 +84,47 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
// throw new RuntimeException("工单【" + dto.getWoCode() + "】未查到生产订单ID"); // throw new RuntimeException("工单【" + dto.getWoCode() + "】未查到生产订单ID");
// } // }
YieldOrder yieldOrder = baseMapper.getByYieldOrder(dto.getYoCode()); YieldOrder faYieldOrder = baseMapper.getByYieldOrder(dto.getYoCode());
if (yieldOrder == null) { if (faYieldOrder == null) {
throw new RuntimeException("根据生产订单ID【" + dto.getYoCode() + "】未查询到生产订单信息"); throw new RuntimeException("根据生产订单ID【" + dto.getYoCode() + "】未查询到生产订单信息");
} }
DsPartEntity partOne = partClient.getPart(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); List<YieldOrder> yieldOrderList = baseMapper.getYieldOrderList(faYieldOrder.getId(),"12003");
if (partOne == null) {
throw new RuntimeException("根据零件编号【" + yieldOrder.getPartCode() + "】未查询到零件信息");
}
List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId());
List<DsPartEntity> glassCakePartList = new ArrayList<>(); List<DsPartEntity> glassCakePartList = new ArrayList<>();
if (!CollectionUtils.isEmpty(partRelationEntityList)) { for (YieldOrder order : yieldOrderList) {
// 步骤1:提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力) DsPartEntity partOne = partClient.getPart(order.getPartCode(),order.getPartVersion());
List<Long> childPartIdList = partRelationEntityList.stream() if (partOne == null) {
.map(DsPartRelationEntity::getChildPartId) // 提取子件ID throw new RuntimeException("根据零件编号【" + order.getPartCode() + "】未查询到零件信息");
.filter(Objects::nonNull) // 过滤null的ID
.distinct() // 去重,避免重复查询
.collect(Collectors.toList());
// 步骤2:批量查询DS_PART表(一次SQL,性能最优)
if (!CollectionUtils.isEmpty(childPartIdList)) {
// 调用dsPartService的批量查询方法(根据ID列表查DS_PART)
List<DsPartEntity> allChildPartList = partClient.batchParts(childPartIdList);
// 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
if (!CollectionUtils.isEmpty(allChildPartList)) {
glassCakePartList = allChildPartList.stream()
.filter(part -> "1".equals(part.getIsGlassCake()))
.collect(Collectors.toList());
}
} }
glassCakePartList.add(partOne);
} }
// List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId());
//
// List<DsPartEntity> glassCakePartList = new ArrayList<>();
// if (!CollectionUtils.isEmpty(partRelationEntityList)) {
// // 步骤1:提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力)
// List<Long> childPartIdList = partRelationEntityList.stream()
// .map(DsPartRelationEntity::getChildPartId) // 提取子件ID
// .filter(Objects::nonNull) // 过滤null的ID
// .distinct() // 去重,避免重复查询
// .collect(Collectors.toList());
//
// // 步骤2:批量查询DS_PART表(一次SQL,性能最优)
// if (!CollectionUtils.isEmpty(childPartIdList)) {
// // 调用dsPartService的批量查询方法(根据ID列表查DS_PART)
// List<DsPartEntity> allChildPartList = partClient.batchParts(childPartIdList);
//
// // 步骤3:筛选出IS_CLASS_CAKE为"玻璃饼"的记录(核心过滤)
// if (!CollectionUtils.isEmpty(allChildPartList)) {
// glassCakePartList = allChildPartList.stream()
// .filter(part -> "1".equals(part.getIsGlassCake()))
// .collect(Collectors.toList());
// }
// }
// }
// WorkOrder workOrder = new WorkOrder(); // WorkOrder workOrder = new WorkOrder();
// workOrder.setCardNo(dto.getCardNo()); // 卡号(与DTO的cardNo一致) // workOrder.setCardNo(dto.getCardNo()); // 卡号(与DTO的cardNo一致)
// workOrder.setWoCode("WO-202602110001"); // 工单号 // workOrder.setWoCode("WO-202602110001"); // 工单号
@ -162,9 +166,8 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
Double quota = glassCake.getQuota(); Double quota = glassCake.getQuota();
// 空值校验:核心属性为空则无法匹配库存,直接跳过 // 空值校验:核心属性为空则无法匹配库存,直接跳过
if (isPrint == null || powderWeight == null || materialNo == null if (goodsCode == null) {
|| thickness == null || goodsCode == null) { System.out.println("玻璃饼[工艺ID:" + glassCake.getId() + ",编码:" + goodsCode + "]核心属性为空,跳过库存匹配");
System.out.println("玻璃饼[ID:" + glassCake.getId() + ",编码:" + goodsCode + "]核心属性为空,跳过库存匹配");
continue; continue;
} }
@ -189,7 +192,7 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
// continue; // continue;
// } // }
Double requireQty = yieldOrder.getYpQty()*glassCake.getQuota(); Double requireQty = faYieldOrder.getYpQty()*glassCake.getQuota();
System.out.println("玻璃饼编码:" + goodsCode + ",总需求:" + requireQty); System.out.println("玻璃饼编码:" + goodsCode + ",总需求:" + requireQty);
// =====================【校验】总可用库存是否足够 ===================== // =====================【校验】总可用库存是否足够 =====================
@ -253,11 +256,11 @@ public class StGlassCakeOutServiceImpl extends BaseServiceImpl<StGlassCakeOutMap
StGlassCakeOut preOutStock = new StGlassCakeOut(); StGlassCakeOut preOutStock = new StGlassCakeOut();
// 关联玻璃饼信息 // 关联玻璃饼信息
// preOutStock.setWoCode(workOrder.getWoCode()); // preOutStock.setWoCode(workOrder.getWoCode());
preOutStock.setYoCode(yieldOrder.getYoCode()); preOutStock.setYoCode(faYieldOrder.getYoCode());
preOutStock.setCardNo(dto.getCardNo()); preOutStock.setCardNo(dto.getCardNo());
preOutStock.setQuantity(yieldOrder.getYpQty()); preOutStock.setQuantity(faYieldOrder.getYpQty());
preOutStock.setPartCode(partOne.getPartCode()); preOutStock.setPartCode(faYieldOrder.getPartCode());
preOutStock.setPartName(partOne.getPartName()); preOutStock.setPartName(faYieldOrder.getPartName());
preOutStock.setOutCode(stStockInoutRecordService.generateCode()); preOutStock.setOutCode(stStockInoutRecordService.generateCode());
preOutStock.setRequireQty(requireQty); preOutStock.setRequireQty(requireQty);

Loading…
Cancel
Save