|
|
|
|
@ -1,6 +1,8 @@ |
|
|
|
|
package org.springblade.desk.produce.service.impl; |
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.BeanUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import com.google.common.collect.Lists; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
@ -10,13 +12,20 @@ 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.service.IRelTeamSetUserService; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity; |
|
|
|
|
import org.springblade.desk.dashboard.service.*; |
|
|
|
|
import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; |
|
|
|
|
import org.springblade.desk.device.pojo.entity.RackSetEntity; |
|
|
|
|
import org.springblade.desk.device.service.IFeiBaSetService; |
|
|
|
|
import org.springblade.desk.device.service.IRackSetService; |
|
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
|
import org.springblade.desk.order.service.IYieldOrderService; |
|
|
|
|
import org.springblade.desk.produce.mapper.WorkPlanMapper; |
|
|
|
|
import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; |
|
|
|
|
import org.springblade.desk.produce.pojo.dto.PrMacTooUseSpec; |
|
|
|
|
import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.*; |
|
|
|
|
import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo; |
|
|
|
|
import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo; |
|
|
|
|
@ -25,8 +34,10 @@ import org.springblade.desk.produce.service.*; |
|
|
|
|
import org.springblade.desk.quality.service.IInspectionTaskService; |
|
|
|
|
import org.springblade.desk.quality.service.IPlanTestService; |
|
|
|
|
import org.springblade.desk.quality.service.IWorkPlanItemService; |
|
|
|
|
import org.springblade.scheduling.pojo.entity.ProcessSetEntity; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.time.ZoneId; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
@ -79,6 +90,10 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan |
|
|
|
|
|
|
|
|
|
private final IMesQcProduceRunService mesQcProduceRunService; |
|
|
|
|
|
|
|
|
|
private final IYieldOrderService yieldOrderService; |
|
|
|
|
|
|
|
|
|
private final IWorkPlanLogService workPlanLogService; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void bindingCard(Long rsId, Long fsId, Long ecId, String planListIds) { |
|
|
|
|
RackSetEntity rackSet = rackSetService.getById(rsId); |
|
|
|
|
@ -393,6 +408,247 @@ public class PdaSaveServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPlan |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void receiveOrder(MesRbRedoRoutDTO rr) { |
|
|
|
|
// 如果路线编号为 1 ,自动完成订单
|
|
|
|
|
if ("1".equals(rr.getSeqno().toString())) { |
|
|
|
|
this.completeOrder(rr, AuthUtil.getUserName()); |
|
|
|
|
} |
|
|
|
|
String memo = ""; |
|
|
|
|
List<PrReworkProcessEntity> rpList = listByReworkCode(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode()); |
|
|
|
|
if (rpList == null && rpList.size() == 0) { |
|
|
|
|
//修改erp返工单工艺状态为无工艺
|
|
|
|
|
//prReworkProcessDao.receiveOrder(rr, user.getLdapName(), 0);
|
|
|
|
|
}else { |
|
|
|
|
//查询原订单
|
|
|
|
|
// WorkOrder wo = prWorkOrderService.getWorkOrderUniqueRec(rr.getPrtno(), rr.getSplcode(), rr.getSono());
|
|
|
|
|
WorkOrder wo =workOrderService.getOne(Wrappers.<WorkOrder>lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode())); |
|
|
|
|
//syDockingLogService.sendDockingLog("查询原单", rr.getRedono(), rr.getPrtno()+","+rr.getSplcode()+","+rr.getSono());
|
|
|
|
|
if (wo == null) { |
|
|
|
|
wo = workOrderService.getOne(Wrappers.<WorkOrder>lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode())); |
|
|
|
|
//syDockingLogService.sendDockingLog("查询原单", rr.getRedono(), rr.getPrtno()+","+rr.getSplcode());
|
|
|
|
|
} |
|
|
|
|
memo = memo + "物料号:" + rr.getPrtno() + "批次号:" + rr.getSplcode() + " 订单号:" + rr.getSono() + " ---- "; |
|
|
|
|
YieldOrder yieldOrder; |
|
|
|
|
WorkOrder newWo = new WorkOrder(); |
|
|
|
|
//zxh 20250820 返修发现部门为3400的才进行原单覆盖
|
|
|
|
|
if (wo != null && rr.getUsedept().equals("3400")) { |
|
|
|
|
memo = memo + "找到原单,woId:" + wo.getId() + " ---- "; |
|
|
|
|
yieldOrder = yieldOrderService.getYoByCardNo(wo.getCardNo()); |
|
|
|
|
List<WorkPlan> wpList = null; |
|
|
|
|
//返工路线是3400-3400内部返工的,需要COPY原订单且不更新上账时间和上账人,反之则走非车间内部返工处理
|
|
|
|
|
if (StringUtils.isNotBlank(rr.getDeptcode()) && rr.getDeptcode().trim().equals("3400-3400")) { |
|
|
|
|
//顺延原WO号
|
|
|
|
|
//newWo.setWoCode(prWorkOrderCodeService.nextCode(yieldOrder.getPoCode()));
|
|
|
|
|
newWo.setWpId(wo.getWpId()); |
|
|
|
|
//zxh 20250520 返修路线为3400-3400的返修订单在车间订单级记录返修订单接收人
|
|
|
|
|
newWo.setMemo("返工路线是3400-3400,记录返修接收人为" + rr.getRecman()); |
|
|
|
|
//非3400返工
|
|
|
|
|
memo = memo + "返工路线是3400-3400 ---- "; |
|
|
|
|
log.info("3400-3400新车间订单:woCode:{},oldYoCode:{}", newWo.getWoCode(), yieldOrder.getYoCode()); |
|
|
|
|
}else { |
|
|
|
|
//copy原生产订单,更新单号和关键信息
|
|
|
|
|
YieldOrder newYieldOrder = yieldOrder; |
|
|
|
|
newYieldOrder.setYoCode(null); |
|
|
|
|
newYieldOrder.setDemandDate(new Date()); |
|
|
|
|
//如果接收人不为空,则默认此接收人和接收时间
|
|
|
|
|
if (StringUtils.isNotBlank(rr.getRecman())) { |
|
|
|
|
//user = epDosingRecDao.getUserByLdapName(rr.getRecman().trim());
|
|
|
|
|
} |
|
|
|
|
//zxh 20241128 接收人赋值为返修订单接收人
|
|
|
|
|
newYieldOrder.setReceiveUser(Long.valueOf(rr.getRecman())); |
|
|
|
|
// newYieldOrder.setFailureTime(StringUtils.isNotBlank(rr.getRecdate()) ?
|
|
|
|
|
// DateTime.parse(rr.getRecdate()) : new Date());
|
|
|
|
|
newYieldOrder.setMemo(rr.getRemark()); |
|
|
|
|
newYieldOrder.setReworkMemo(rr.getDetail()); |
|
|
|
|
//newYieldOrder.setPoQty(Double.valueOf(rr.getAmount()));
|
|
|
|
|
newYieldOrder.setPrimaryCraft(rr.getDeptcode()); |
|
|
|
|
//newYieldOrder.setSyncTime(new Date());
|
|
|
|
|
newYieldOrder.setReworkCode(rr.getRedono()); |
|
|
|
|
newYieldOrder.setReworkNo(Long.valueOf(rr.getSeqno())); |
|
|
|
|
newYieldOrder.setYoCode(rr.getRedono()); |
|
|
|
|
//zxh 20250522 找到原单,非3400-3400,复制pj后不再更改pocode
|
|
|
|
|
//newYieldOrder.setPoCode(rr.getRedono());
|
|
|
|
|
newYieldOrder.setProduceBool(Boolean.TRUE); |
|
|
|
|
// newYieldOrder.setCurStatus(PjYieldOrder.CUR_STATUS_PROCESSING);
|
|
|
|
|
//周新昊 20240912 返修订单找到原单复制pj后为使用部门代码赋值
|
|
|
|
|
//newYieldOrder.setUseDeptcode(rr.getUsedept());
|
|
|
|
|
yieldOrderService.save(newYieldOrder); |
|
|
|
|
log.info("不是厂内,保存新生产订单:yoId{},yoCode{}", newYieldOrder.getId(), newYieldOrder.getYoCode()); |
|
|
|
|
//原订单已经入库,则更新接收人、接收时间并且车间订单号不顺延原订单号,反之则需要顺延原订单号
|
|
|
|
|
if (wo.getPutStoreTime() != null) { |
|
|
|
|
//newWo.setWoCode(prWorkOrderCodeService.nextCode(rr.getRedono()));
|
|
|
|
|
newWo.setReInStore("1"); |
|
|
|
|
//newYieldOrder.setPoCode(rr.getRedono());
|
|
|
|
|
} else { |
|
|
|
|
// newWo.setWoCode(prWorkOrderCodeService.nextCode(yieldOrder.getPoCode()));
|
|
|
|
|
} |
|
|
|
|
//绑定新车间订单的接收信息
|
|
|
|
|
//newWo.setPjYieldOrder(newYieldOrder);
|
|
|
|
|
|
|
|
|
|
//更新原生产订单状态为已关闭
|
|
|
|
|
YieldOrder oldYo = yieldOrderService.getById(wo.getYoId()); |
|
|
|
|
if (oldYo != null) { |
|
|
|
|
// oldYo.setCurStatus(PjYieldOrder.CUR_STATUS_VOIDED);
|
|
|
|
|
oldYo.setCustodian(rr.getRecman()); |
|
|
|
|
yieldOrderService.updateById(oldYo); |
|
|
|
|
} |
|
|
|
|
memo = memo + "新生产订单,yoId:" + newYieldOrder.getId() + " ---- "; |
|
|
|
|
} |
|
|
|
|
//返工订单流程卡号重新生成
|
|
|
|
|
//newWo.setCardNo(prWorkOrderService.nextCardNo(wo.getPjYieldOrder().getPoCode(), wo.getCardNo()));
|
|
|
|
|
newWo.setBatchNo(rr.getSplcode()); |
|
|
|
|
newWo.setMakeQty(Double.valueOf(rr.getAmount())); |
|
|
|
|
newWo.setRunStatus(WorkOrder.RUN_STATUS_NORMAL); |
|
|
|
|
newWo.setPriority(wo.getPriority()); |
|
|
|
|
newWo.setReworkCode(rr.getRedono()); |
|
|
|
|
newWo.setReworkNo(rr.getSeqno().intValue()); |
|
|
|
|
newWo.setOem("0"); |
|
|
|
|
newWo.setOemOut("1"); |
|
|
|
|
//newWo.setOemType(FlowBusinessBean.STATUS_NEW);
|
|
|
|
|
newWo.setPlanner(wo.getPlanner()); |
|
|
|
|
newWo.setDispatcher(wo.getDispatcher()); |
|
|
|
|
newWo.setReworkMemo(rr.getDetail()); |
|
|
|
|
newWo.setDemandDate(new Date()); |
|
|
|
|
workOrderService.save(newWo); |
|
|
|
|
log.info("保存新车间订单:woId{},woCode{}", newWo.getId(), newWo.getWoCode()); |
|
|
|
|
//组装生产工序
|
|
|
|
|
wpList = new ArrayList<>(rpList.size()); |
|
|
|
|
WorkPlan wp; |
|
|
|
|
for (PrReworkProcessEntity rp : rpList) { |
|
|
|
|
wp = new WorkPlan(); |
|
|
|
|
wp.setOrders(rp.getProcessNo()); |
|
|
|
|
wp.setHourQuota(rp.getHourQuota()); |
|
|
|
|
wp.setMakeMemo(rp.getMakeMemo()); |
|
|
|
|
wp.setStatus(WorkPlan.STATUS_NO_START); |
|
|
|
|
wp.setStartTime(rp.getStartTime().toInstant() |
|
|
|
|
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
|
|
|
|
|
.toLocalDateTime()); |
|
|
|
|
wp.setEndTime(rp.getEndTime().toInstant() |
|
|
|
|
.atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认)
|
|
|
|
|
.toLocalDateTime()); |
|
|
|
|
wp.setRpId(rp.getId()); |
|
|
|
|
if (rp.getMakeTeam() != null) { |
|
|
|
|
wp.setMakeTeam(rp.getMakeTeam()); |
|
|
|
|
wp.setOem("0"); |
|
|
|
|
} else { |
|
|
|
|
wp.setOem(rp.getOcName()); |
|
|
|
|
wp.setOem("1"); |
|
|
|
|
} |
|
|
|
|
wpList.add(wp); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<PrReworkProcessEntity> listByReworkCode(String redono, Integer seqno, String prtno, String splcode) { |
|
|
|
|
List<PrReworkProcessEntity> prReworkProcessList = new ArrayList<>(); |
|
|
|
|
// 首先根据返工单号+零件号——批次号去查
|
|
|
|
|
prReworkProcessList = null; //prReworkProcessDao.listByReworkCode(reworkCode, reworkNo, partCode, batchNo);
|
|
|
|
|
if (prReworkProcessList != null && prReworkProcessList.size() > 0) { |
|
|
|
|
return prReworkProcessList; |
|
|
|
|
} |
|
|
|
|
return prReworkProcessList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void completeOrder(MesRbRedoRoutDTO rr, String userName) { |
|
|
|
|
WorkOrder wo =workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class) |
|
|
|
|
.eq(WorkOrder::getBatchNo, rr.getSplcode())); |
|
|
|
|
if (wo != null) { |
|
|
|
|
//记录返工单号
|
|
|
|
|
wo.setQcReworkCode(rr.getRedono()); |
|
|
|
|
//如果原车间订单状态小于已交接,就更改原订单状态为返工,否则不更改
|
|
|
|
|
if (wo.getRunStatus() < WorkOrder.RUN_STATUS_HANDOVER) { |
|
|
|
|
//修改旧订单状态
|
|
|
|
|
workOrderService.updateStatus(null,WorkOrder.RUN_STATUS_REWORK,wo.getId(), null); |
|
|
|
|
} |
|
|
|
|
// 如果有 FatherYoId 有值,则代表他是子件 修改部件状态为返工
|
|
|
|
|
YieldOrder pjYieldOrder = yieldOrderService.getById(wo.getYoId()); |
|
|
|
|
if (pjYieldOrder.getFatherYoId() != null) { |
|
|
|
|
List<WorkOrder> fatherPrWorkOrderList = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, pjYieldOrder.getFatherYoId())); |
|
|
|
|
if (fatherPrWorkOrderList != null && fatherPrWorkOrderList.size() > 0) { |
|
|
|
|
for (WorkOrder fatherPrWorkOrder : fatherPrWorkOrderList) { |
|
|
|
|
// 记录原状态
|
|
|
|
|
fatherPrWorkOrder.setOldRunStatus(fatherPrWorkOrder.getRunStatus()); |
|
|
|
|
// 修改为返工
|
|
|
|
|
fatherPrWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_REWORK); |
|
|
|
|
workOrderService.updateById(fatherPrWorkOrder); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}else { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
this.completeOrder(rr, userName); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void uploadPlan(List<WorkPlan> list) { |
|
|
|
|
if (list.size() == 0) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
WorkPlan prWorkPlan; |
|
|
|
|
List<BsProcedureTeam> ptLst; |
|
|
|
|
Long woId = null; |
|
|
|
|
for (WorkPlan item : list) { |
|
|
|
|
|
|
|
|
|
if (item.getMakeTeam() == null || item.getId() == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//获取车间订单Id
|
|
|
|
|
woId = item.getWoId(); |
|
|
|
|
|
|
|
|
|
prWorkPlan = baseMapper.selectById(item.getWoId()); |
|
|
|
|
if (item.getReceiveMan() != null) { |
|
|
|
|
prWorkPlan.setReceiveMan(item.getReceiveMan()); |
|
|
|
|
} else { |
|
|
|
|
prWorkPlan.setReceiveMan(null); |
|
|
|
|
} |
|
|
|
|
//判定工序是否特殊工序,如果是,则附属班组存在值
|
|
|
|
|
if (prWorkPlan.getOcId() == null && prWorkPlan.getSubsidiaryTeam() == null && prWorkPlan.getOcId() == null) { |
|
|
|
|
ptLst = bsProcedureTeamService.findBsProcedureTeamByPpsId(prWorkPlan.getPpsId()); |
|
|
|
|
if (ptLst != null && ptLst.size() > 0) { |
|
|
|
|
prWorkPlan.setSubsidiaryTeam(ptLst.get(0).getPpsId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (prWorkPlan.getOem().equals("1")) { |
|
|
|
|
prWorkPlan.setOem("0"); |
|
|
|
|
prWorkPlan.setOem(null); |
|
|
|
|
} |
|
|
|
|
prWorkPlan.setMakeTeam(item.getMakeTeam()); |
|
|
|
|
// 2025-07-23 线上迁移修改注释掉代码
|
|
|
|
|
if(item.getPapers() != null && (item.getMakeTeam() != null || item.getReceiveMan() != null)){ |
|
|
|
|
WorkPlanLog log = new WorkPlanLog(); |
|
|
|
|
log.setUpdateUser(AuthUtil.getUser().getUserId()); |
|
|
|
|
log.setUpdateTime(new Date()); |
|
|
|
|
log.setWoId(woId); |
|
|
|
|
workPlanLogService.save(log); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void shiftTransfer(ShiftTransferDTO shiftTransferDTO) { |
|
|
|
|
List<WorkPlan> wpList = baseMapper.selectList(new QueryWrapper<WorkPlan>().eq("wo_id", shiftTransferDTO.getWoId())); |
|
|
|
|
|
|
|
|
|
BsTeamSetEntity makeTeam = new BsTeamSetEntity(); |
|
|
|
|
makeTeam.setId(shiftTransferDTO.getNewTsId()); |
|
|
|
|
BsProcessSetEntity processSet = bsProcessSetService.getOne(Wrappers.lambdaQuery(BsProcessSetEntity.class).eq(BsProcessSetEntity::getId, shiftTransferDTO.getNewTsId())); |
|
|
|
|
wpList.forEach(wp -> { |
|
|
|
|
if (processSet.getIsSpecial() == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (WorkPlan.STATUS_NO_START.equals(wp.getStatus())) { |
|
|
|
|
wp.setMakeTeam(makeTeam.getId()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
// prWorkOrderAdjustService.saveAdjust(woId, oldTsId, newTsId, userInfo);
|
|
|
|
|
//更新订单主加工单位
|
|
|
|
|
// prWorkOrderService.updateHostWorkUnit(woId);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void unBindBsRackSet(RackSetEntity bsRackSet) { |
|
|
|
|
if (bsRackSet != null) { |
|
|
|
|
bsRackSet.setBindQty((short) 0); |
|
|
|
|
|