|
|
|
|
@ -1,6 +1,3 @@ |
|
|
|
|
/** |
|
|
|
|
* Author: Tom Shuo |
|
|
|
|
*/ |
|
|
|
|
package org.springblade.desk.quality.service.impl; |
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil; |
|
|
|
|
@ -9,14 +6,15 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
|
import lombok.Data; |
|
|
|
|
import lombok.EqualsAndHashCode; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springblade.common.exception.BusinessException; |
|
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
|
import org.springblade.core.secure.BladeUser; |
|
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
@ -27,40 +25,41 @@ import org.springblade.desk.basic.constant.BaseRequest; |
|
|
|
|
import org.springblade.desk.basic.constant.BaseValue; |
|
|
|
|
import org.springblade.desk.basic.service.en.impl.EnBaseServiceImpl; |
|
|
|
|
import org.springblade.desk.basic.util.IdUtil; |
|
|
|
|
import org.springblade.desk.order.mapper.YieldOrderMapper; |
|
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
|
import org.springblade.desk.produce.mapper.WorkOrderRunMapper; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.WorkOrder; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.WorkOrderRun; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.WorkPlan; |
|
|
|
|
import org.springblade.desk.produce.service.IWorkOrderService; |
|
|
|
|
import org.springblade.desk.produce.service.IWorkPlanService; |
|
|
|
|
import org.springblade.desk.quality.constant.InspectionTaskConst; |
|
|
|
|
import org.springblade.desk.quality.constant.ReviewSheetConst; |
|
|
|
|
import org.springblade.desk.quality.excel.ReviewSheetExcel; |
|
|
|
|
import org.springblade.desk.quality.mapper.ReviewSheetMapper; |
|
|
|
|
import org.springblade.desk.quality.pojo.dto.*; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.InspectionTask; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.ReviewDuty; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.ReviewFault; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.ReviewSheet; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.*; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.ReviewSheetErpSearch; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.ReviewSheetInitSearch; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.ReviewSheetRedoScrapSearch; |
|
|
|
|
import org.springblade.desk.quality.pojo.vo.*; |
|
|
|
|
import org.springblade.desk.quality.service.IInspectionTaskService; |
|
|
|
|
import org.springblade.desk.quality.service.IReviewDutyService; |
|
|
|
|
import org.springblade.desk.quality.service.IReviewFaultService; |
|
|
|
|
import org.springblade.desk.quality.service.IReviewSheetService; |
|
|
|
|
import org.springblade.desk.quality.service.*; |
|
|
|
|
import org.springblade.desk.quality.wrapper.ReviewSheetDetailWrapper; |
|
|
|
|
import org.springblade.erpdata.feign.IErpMesRbPkpqryClient; |
|
|
|
|
import org.springblade.system.feign.IDictClient; |
|
|
|
|
import org.springblade.system.feign.ISysClient; |
|
|
|
|
import org.springblade.system.feign.IUserClient; |
|
|
|
|
import org.springblade.system.pojo.entity.User; |
|
|
|
|
import org.springblade.system.pojo.entity.UserInfo; |
|
|
|
|
import org.springblade.wms.pojo.entity.SyDockingLog; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
|
import org.springframework.cloud.context.config.annotation.RefreshScope; |
|
|
|
|
import org.springframework.http.HttpEntity; |
|
|
|
|
import org.springframework.http.ResponseEntity; |
|
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
import org.springframework.context.annotation.Lazy; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.List; |
|
|
|
|
import org.springframework.web.client.RestTemplate; |
|
|
|
|
import org.springframework.http.HttpHeaders; |
|
|
|
|
@ -73,12 +72,9 @@ import org.springframework.http.MediaType; |
|
|
|
|
*/ |
|
|
|
|
@Service |
|
|
|
|
@Data |
|
|
|
|
//@AllArgsConstructor
|
|
|
|
|
@EqualsAndHashCode(callSuper = true) |
|
|
|
|
@Slf4j |
|
|
|
|
//@RefreshScope
|
|
|
|
|
public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper, ReviewSheet> |
|
|
|
|
implements IReviewSheetService { |
|
|
|
|
public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper, ReviewSheet> implements IReviewSheetService { |
|
|
|
|
@Value("${request.newErp.url}") |
|
|
|
|
private String newErpUrl; |
|
|
|
|
@Resource |
|
|
|
|
@ -99,6 +95,18 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper, |
|
|
|
|
@Resource |
|
|
|
|
private IErpMesRbPkpqryClient erpMesRbPkpqryClient; |
|
|
|
|
|
|
|
|
|
@Lazy |
|
|
|
|
@Autowired |
|
|
|
|
private IWorkOrderService workOrderService; |
|
|
|
|
|
|
|
|
|
private final IInspectionTaskService inspectionTaskService; |
|
|
|
|
|
|
|
|
|
private final WorkOrderRunMapper workOrderRunMapper; |
|
|
|
|
|
|
|
|
|
private final YieldOrderMapper yieldOrderMapper; |
|
|
|
|
|
|
|
|
|
private final IWorkPlanItemService workPlanItemService; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public IPage<ReviewSheetDetailVO> selectReviewSheetPage(IPage<ReviewSheetDetailVO> page, ReviewSheetDetailVO reviewSheet) { |
|
|
|
|
return page.setRecords(baseMapper.selectReviewSheetPage(page, reviewSheet)); |
|
|
|
|
@ -283,44 +291,186 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void reviewResult(String trialId, Short resultStatus, String reviewMan, String liabilityPart, |
|
|
|
|
Integer scrapQty, Integer reworkQty, Integer concedeQty, String memo) throws Exception { |
|
|
|
|
public void reviewResult(String trialId, Short resultStatus, String reviewMan, String liabilityPart, Integer scrapQty, Integer reworkQty, Integer concedeQty, String memo) throws Exception { |
|
|
|
|
ReviewSheet rs = getByTrialId(trialId); |
|
|
|
|
if (rs == null) { |
|
|
|
|
throw new BusinessException("审理单信息不存在!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
InspectionTask wc = taskService.getById(rs.getTaskId()); |
|
|
|
|
WorkPlan wp = workPlanService.getById(wc.getWpId()); |
|
|
|
|
WorkOrder wo = workOrderService.getById(wp.getWoId()); |
|
|
|
|
|
|
|
|
|
// rs.setReviewUserId(); "reviewMan"
|
|
|
|
|
if (WorkOrder.RUN_STATUS_HANDOVER.equals(wo.getRunStatus())) { |
|
|
|
|
log.error("车间订单状态为已交接,不处理审理单!{}", wo.getWoCode()); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
List<User> users = userClient.userListByName(reviewMan); |
|
|
|
|
rs.setReviewUserId(CollectionUtils.isNotEmpty(users) ? users.get(0).getId() : null); |
|
|
|
|
rs.setMemo(memo); |
|
|
|
|
rs.setReviewDate(LocalDateTime.now()); |
|
|
|
|
rs.setReviewStatus((int) resultStatus); // todo:
|
|
|
|
|
rs.setReviewStatus(resultStatus); |
|
|
|
|
rs.setStatus(ReviewSheetConst.STATUS.S_COMPLETE); |
|
|
|
|
|
|
|
|
|
// 装配模式
|
|
|
|
|
if (ReviewSheetConst.MODE_ASSEMBLY.equals(rs.getReviewOrderMode())) { |
|
|
|
|
|
|
|
|
|
// 如果相关零件号存在 报废数量直接扣除
|
|
|
|
|
if (StringUtils.isNotBlank(liabilityPart)) { |
|
|
|
|
if (scrapQty != null && scrapQty > 0) { |
|
|
|
|
//20250407 zxh 装配模式有报废且有相关零件时,校验订单加工数需大于报废数后再进行扣数
|
|
|
|
|
if (wo.getMakeQty() >= scrapQty) { |
|
|
|
|
inspectionTaskService.computeOrderQty(wp, wc, wo, 0, 0, 0, scrapQty); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { // 将报废数累加,不扣生产数量
|
|
|
|
|
if (scrapQty != null && scrapQty > 0) { |
|
|
|
|
if (wc != null) { |
|
|
|
|
wc.setScrapQty(wc.getScrapQty() + scrapQty); |
|
|
|
|
} |
|
|
|
|
if (wo != null) { |
|
|
|
|
wo.setScrapQty(wo.getScrapQty() + scrapQty); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 零件模式
|
|
|
|
|
if (ReviewSheetConst.MODE_PART.equals(rs.getReviewOrderMode())) { |
|
|
|
|
else if (ReviewSheetConst.MODE_PART.equals(rs.getReviewOrderMode())) { |
|
|
|
|
// 如果有报废数量直接扣除
|
|
|
|
|
if (scrapQty != null && scrapQty > 0) { |
|
|
|
|
//20250329 zxh 审理单多次归档问题处理
|
|
|
|
|
List<SyDockingLog> queryGdByCode = baseMapper.queryGdByCode(trialId); |
|
|
|
|
if (queryGdByCode != null && !queryGdByCode.isEmpty()) { |
|
|
|
|
wo.setScrapQty(wo.getScrapQty() - wc.getScrapQty()); |
|
|
|
|
wo.setMakeQty(wo.getMakeQty() + wc.getScrapQty()); |
|
|
|
|
wp.setWorkQty(wp.getWorkQty() + wc.getScrapQty()); |
|
|
|
|
wp.setScrapQty(wp.getScrapQty() - wc.getScrapQty()); |
|
|
|
|
wc.setScrapQty(0d); |
|
|
|
|
} |
|
|
|
|
inspectionTaskService.computeOrderQty(wp, wc, wo, 0, 0, 0, scrapQty); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//如果有返工数量,则直接返工
|
|
|
|
|
if (reworkQty != null && reworkQty > 0) { |
|
|
|
|
wc.setUnqualifiedQty(wo.getMakeQty()); |
|
|
|
|
wc.setReworkQty(Double.valueOf(reworkQty)); |
|
|
|
|
wp.setUnqualifiedQty(wo.getMakeQty()); |
|
|
|
|
} else { |
|
|
|
|
//如果全部报废则更改车间订单为全部报废
|
|
|
|
|
if (wo.getMakeQty().intValue() <= 0) { |
|
|
|
|
//检验完成修改车间订单
|
|
|
|
|
workOrderService.updateStatus(Collections.singletonList(wo.getId()), WorkOrder.RUN_STATUS_SCRAP, null, null); |
|
|
|
|
} else { |
|
|
|
|
// 查询此工序是否有试验项目,如果有说明是检验工序
|
|
|
|
|
List<WorkPlanItem> list = workPlanItemService.listByWpId(wp.getId()); |
|
|
|
|
|
|
|
|
|
if (list != null && !list.isEmpty()) { |
|
|
|
|
//修改检验明细为合格
|
|
|
|
|
list = workPlanItemService.listByWpId(wp.getId(), InspectionTask.CHECK_RESULT_NO); |
|
|
|
|
list.forEach(item -> item.setCheckResult(InspectionTask.CHECK_RESULT_OK)); |
|
|
|
|
|
|
|
|
|
//判定是否还有未检验,如果没有,修改检验为合格
|
|
|
|
|
list = workPlanItemService.listByWpId(wp.getId(), InspectionTask.CHECK_RESULT_NOT); |
|
|
|
|
|
|
|
|
|
if (list.isEmpty()) { |
|
|
|
|
// 扣除实验数、消耗数
|
|
|
|
|
List<WorkPlanItem> prWorkPlanItemList = workPlanItemService.listByWpId(wp.getId()); |
|
|
|
|
int sumCheckQ = 0, sumTestQty = 0, sumLossQty = 0; |
|
|
|
|
for (WorkPlanItem wpi : prWorkPlanItemList) { |
|
|
|
|
sumCheckQ += wpi.getCheckQty(); |
|
|
|
|
sumTestQty += wpi.getTestQty(); |
|
|
|
|
sumLossQty += wpi.getLossQty(); |
|
|
|
|
} |
|
|
|
|
List<WorkPlanItem> prWorkPlanItems = workPlanItemService.listByWoId(wo.getId()); |
|
|
|
|
int sumAllTestQty = 0; |
|
|
|
|
int sumAllLostQty = 0; |
|
|
|
|
for (WorkPlanItem prWorkPlanItem : prWorkPlanItems) { |
|
|
|
|
sumAllTestQty += prWorkPlanItem.getTestQty(); |
|
|
|
|
sumAllLostQty += prWorkPlanItem.getLossQty(); |
|
|
|
|
} |
|
|
|
|
//周新昊 20241104 加日志
|
|
|
|
|
//zxh 20241128 审理单归档后扣除实验数前增加校验
|
|
|
|
|
//zxh 20250423 条件增加||损耗数校验
|
|
|
|
|
if (!(wo.getTestQty().equals(sumAllTestQty)) || !(wo.getLossQty().equals(sumAllLostQty))) { |
|
|
|
|
inspectionTaskService.computeOrderQty(wp, wc, wo, sumCheckQ, sumTestQty, sumLossQty, 0); |
|
|
|
|
} |
|
|
|
|
workOrderService.qualified(wp, wc, wo, userClient.userInfoById(wc.getCheckUserId()).getData().getRealName()); |
|
|
|
|
} else { |
|
|
|
|
wc.setCheckResult(InspectionTask.CHECK_RESULT_NOT); |
|
|
|
|
// 如果还有未检验得试验项目、继续检验
|
|
|
|
|
wo.setRunStatus(WorkOrder.RUN_STATUS_CHECK); |
|
|
|
|
log.info("审理结束回调接口修改订单状态为检验中"); |
|
|
|
|
workOrderService.updateById(wo); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
wc.setCheckResult(InspectionTask.CHECK_RESULT_NOT); |
|
|
|
|
wo.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE); |
|
|
|
|
workOrderService.updateById(wo); |
|
|
|
|
} |
|
|
|
|
if (wo.getMakeQty() < 1) { |
|
|
|
|
//检验完成修改车间订单
|
|
|
|
|
workOrderService.updateStatus(Collections.singletonList(wo.getId()), WorkOrder.RUN_STATUS_SCRAP, null, null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//zxh 20250617 审理结论为让步接收时,将检验记录中不合格数清零,检验状态改为合格
|
|
|
|
|
if (resultStatus == 3) { |
|
|
|
|
wc.setUnqualifiedQty(0d); |
|
|
|
|
wc.setCheckResult(InspectionTaskConst.CHECK_RESULT_OK); |
|
|
|
|
} |
|
|
|
|
WorkOrderRun wor = workOrderRunMapper.selectById(wo.getWorId()); |
|
|
|
|
YieldOrder yieldOrder = yieldOrderMapper.selectById(wo.getYoId()); |
|
|
|
|
if (wor != null && wor.getInCustomer() != null && !yieldOrder.getManualIncrease()) { |
|
|
|
|
//外协交件单号为空不调用erp检验接口
|
|
|
|
|
if (StringUtils.isNotBlank(wor.getDeliverKey())) { |
|
|
|
|
//调用erp检验接口
|
|
|
|
|
// erpMesRbPkpqryClient.checkCompleteErpBackFill(wor.getWoCode(), wor.getDeliverKey(), wp.getWorkQty(), 0, userClient.userInfoById(wc.getCheckUserId()).getData().getRealName());
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void deleteReviewOrder(String trialId) throws Exception { |
|
|
|
|
public void deleteReviewOrder(String trialId) { |
|
|
|
|
ReviewSheet reviewSheet = getByTrialId(trialId); |
|
|
|
|
if (reviewSheet == null) { |
|
|
|
|
throw new BusinessException("审理单信息不存在!"); |
|
|
|
|
throw new ServiceException("审理单信息不存在!"); |
|
|
|
|
} |
|
|
|
|
// todo: mes v1
|
|
|
|
|
//责任零件
|
|
|
|
|
dutyService.remove(Wrappers.lambdaQuery(ReviewDuty.class).eq(ReviewDuty::getReviewSheetId, reviewSheet.getId())); |
|
|
|
|
//问题故障
|
|
|
|
|
faultService.remove(Wrappers.lambdaQuery(ReviewFault.class).eq(ReviewFault::getReviewSheetId, reviewSheet.getId())); |
|
|
|
|
InspectionTask prWorkCheck = inspectionTaskService.getById(reviewSheet.getTaskId()); |
|
|
|
|
if (prWorkCheck != null) { |
|
|
|
|
// 将审理状态改为初始值
|
|
|
|
|
prWorkCheck.setReviewStatus((short) 0); |
|
|
|
|
inspectionTaskService.updateById(prWorkCheck); |
|
|
|
|
WorkPlan workPlan = workPlanService.getById(prWorkCheck.getWpId()); |
|
|
|
|
if (workPlan != null) { |
|
|
|
|
WorkOrder workOrder = workOrderService.getById(workPlan.getWoId()); |
|
|
|
|
if (workOrder != null && workOrder.getRunStatus() < WorkOrder.RUN_STATUS_COMPLETED) { |
|
|
|
|
workOrder.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE); |
|
|
|
|
//zxh 20250522 增加记录订单变更为加工中日志
|
|
|
|
|
// 判定当前序是否还有未检验得项目,如果有修改状态未检验中,如果没有修改未加工中
|
|
|
|
|
List<WorkPlanItem> prWorkPlanItems; |
|
|
|
|
prWorkPlanItems = workPlanItemService.listByWpId(prWorkCheck.getWpId(), InspectionTask.CHECK_RESULT_NOT); |
|
|
|
|
if (prWorkPlanItems != null && !prWorkPlanItems.isEmpty()) { |
|
|
|
|
workOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK); |
|
|
|
|
log.info("审理单删除调用接口修改订单状态为检验中1"); |
|
|
|
|
} else if (prWorkPlanItems.isEmpty()) { |
|
|
|
|
// 判断是否有试验项目不合格
|
|
|
|
|
prWorkPlanItems = workPlanItemService.listByWpId(prWorkCheck.getWpId(), InspectionTask.CHECK_RESULT_NO); |
|
|
|
|
if (prWorkPlanItems != null && !prWorkPlanItems.isEmpty()) { |
|
|
|
|
workOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK); |
|
|
|
|
log.info("审理单删除调用接口修改订单状态为检验中2"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
workOrderService.updateById(workOrder); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
this.removeById(reviewSheet); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@ -494,10 +644,10 @@ public class ReviewSheetServiceImpl extends EnBaseServiceImpl<ReviewSheetMapper, |
|
|
|
|
rs.setStatus(ReviewSheetConst.STATUS.S_COMPLETE); |
|
|
|
|
if(1==selfReviewFlag){ |
|
|
|
|
//通过
|
|
|
|
|
rs.setReviewStatus(3); |
|
|
|
|
rs.setReviewStatus((short) 3); |
|
|
|
|
}else{ |
|
|
|
|
//驳回
|
|
|
|
|
rs.setReviewStatus(4); |
|
|
|
|
rs.setReviewStatus((short) 4); |
|
|
|
|
} |
|
|
|
|
BladeUser bu = AuthUtil.getUser(); |
|
|
|
|
log.info("ReviewSheet bu = {}", bu); |
|
|
|
|
|