From 9abf3d239625426e2664f6dfc3a4bd40247a8d0d Mon Sep 17 00:00:00 2001
From: Fancy <Fancy.fx@outlook.com>
Date: 星期二, 16 七月 2024 09:08:52 +0800
Subject: [PATCH] add workid in history
---
pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java | 311 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 267 insertions(+), 44 deletions(-)
diff --git a/pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java b/pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java
index 3d40dbf..e2f69a2 100644
--- a/pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java
+++ b/pms-parent/pms-web-station/src/main/java/com/dy/pmsStation/assemblyStep/AssemblyStepSv.java
@@ -1,16 +1,26 @@
package com.dy.pmsStation.assemblyStep;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.dy.pmsGlobal.daoOth.OthFileMapper;
+import com.dy.pmsGlobal.daoPlt.*;
import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper;
import com.dy.pmsGlobal.daoPr.PrProductionNodeMapper;
import com.dy.pmsGlobal.daoSta.*;
+import com.dy.pmsGlobal.dyFile.FileOperate;
+import com.dy.pmsGlobal.dyFile.FileRestVo;
+import com.dy.pmsGlobal.pojoOth.OthFile;
+import com.dy.pmsGlobal.pojoPlt.*;
import com.dy.pmsGlobal.pojoPr.PrAssemblyPlan;
import com.dy.pmsGlobal.pojoPr.PrProductionNode;
+import com.dy.pmsGlobal.pojoPr.PrWorkingInstruction;
import com.dy.pmsGlobal.pojoSta.*;
+import com.dy.pmsGlobal.util.DeviceStatus;
import com.dy.pmsGlobal.util.QrCodeConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -19,20 +29,30 @@
@Slf4j
@Service
public class AssemblyStepSv {
- private static final int STATUS_OK = 1;
- private static final int STATUS_COMPLETE = 2;
- private static final int STATUS_REPAIR = 3;
- private static final int STATUS_WASTE = 4;
+ private static final String WORK_TYPE_ASSEMBLY = "1";
+ private static final String WORK_TYPE_TEST = "2";
+ private static final String WORK_TYPE_INSPECTION = "3";
+ private static final String WORK_TYPE_REPAIR = "4";
private StaDeviceLastMapper deviceLastDao;
private StaDeviceLifeMapper deviceLifeDao;
+ private StaDeviceLifeLastMapper deviceLifeLastDao;
private StaWipSnExMapper wipSnExDao;
private StaDeviceProductionLogMapper deviceProductionLogDao;
private StaAssemblyWorkLastMapper assemblyWorkLastDao;
private PrAssemblyPlanMapper assemblyPlanDao;
-// private PrProductionProcessMapper processDao;
+ // private PrProductionProcessMapper processDao;
private PrProductionNodeMapper nodeDao;
private StaRepairInfoMapper repairInfoDao;
+ private PltProductQualityInspectionItemsMapper qualityItemsDao;
+ private PltProductTestInspectionItemsMapper testItemsDao;
+ private PltProductMapper productDao;
+ private PltProParamsMapper paramsDao;
+ private PltProductFileMapper productFileDao;
+ private FileOperate fileOperate;
+ private OthFileMapper othFileMapper;
+ @Value("${dy.webFile.fmUrl}")
+ private String fmUrl;
@Autowired
public void setDeviceLastDao(StaDeviceLastMapper deviceLastDao) {
this.deviceLastDao = deviceLastDao;
@@ -65,6 +85,42 @@
public void setRepairInfoDao(StaRepairInfoMapper repairInfoDao) {
this.repairInfoDao = repairInfoDao;
}
+ @Autowired
+ public void setQualityItemsDao(PltProductQualityInspectionItemsMapper qualityItemsDao) {
+ this.qualityItemsDao = qualityItemsDao;
+ }
+ @Autowired
+ public void setTestItemsDao(PltProductTestInspectionItemsMapper testItemsDao) {
+ this.testItemsDao = testItemsDao;
+ }
+ @Autowired
+ public void setProductDao(PltProductMapper productDao) {
+ this.productDao = productDao;
+ }
+
+ @Autowired
+ public void setParamsDao(PltProParamsMapper paramsDao) {
+ this.paramsDao = paramsDao;
+ }
+
+ @Autowired
+ public void setProductFileDao(PltProductFileMapper productFileDao) {
+ this.productFileDao = productFileDao;
+ }
+
+ @Autowired
+ public void setFileOperate(FileOperate fileOperate) {
+ this.fileOperate = fileOperate;
+ }
+
+ @Autowired
+ public void setOthFileMapper(OthFileMapper othFileMapper) {
+ this.othFileMapper = othFileMapper;
+ }
+ @Autowired
+ public void setDeviceLifeLastDao(StaDeviceLifeLastMapper deviceLifeLastDao) {
+ this.deviceLifeLastDao = deviceLifeLastDao;
+ }
@Transactional
public int save(QueryVo params) {
@@ -75,21 +131,21 @@
}
PrAssemblyPlan plan = assemblyPlanDao.selectByPrimaryKey(workLast.getPlanId());
// 楠岃瘉骞跺鐞嗚澶囧彿鍜岀墿鏂欏彿
- Set<String> deviceSet = new HashSet<>(Arrays.asList(params.deviceNo.split(",")));
+ Set<String> deviceSet = new HashSet<>(Arrays.asList(params.deviceNo));
// 鍒嗙被璁惧鍙峰拰鐗╂枡鍙�
List<String> deviceList = new ArrayList<>();
List<String> materialList = new ArrayList<>();
-
+ List<PltProduct> productList = productDao.selectAll(null);
deviceSet.forEach(device -> {
if (device.contains(plan.batchNo)) {
deviceList.add(device);
- } else {
+ } else if(isOurProduct(device,productList)){
materialList.add(device);
}
});
if (deviceList.isEmpty()) {
- throw new RuntimeException("璁惧鍙�("+ params.deviceNo +")鍧囦笉灞炰簬褰撳墠浠诲姟璁″垝");
+ throw new RuntimeException("璁惧鍙�(" + Arrays.toString(params.deviceNo) + ")鍧囦笉灞炰簬褰撳墠浠诲姟璁″垝");
}
if (deviceList.size() > 1) {
throw new RuntimeException("璁惧鍙锋湁涓斿彧鑳芥湁涓�涓睘浜庡綋鍓嶄换鍔¤鍒�");
@@ -121,40 +177,61 @@
private void saveDeviceLife(StaDeviceLast deviceLast) {
StaDeviceLife life = new StaDeviceLife();
BeanUtils.copyProperties(deviceLast, life);
+ life.setId(null);
deviceLifeDao.insertSelective(life);
+
+ StaDeviceLifeLast lastLife = new StaDeviceLifeLast();
+ BeanUtils.copyProperties(deviceLast, lastLife);
+ lastLife.setId(null);
+ int count = deviceLifeLastDao.updateByDeviceNo(lastLife);
+ if (count == 0){
+ deviceLifeLastDao.insertSelective(lastLife);
+ }
}
- private StaDeviceLast buildDeviceLast(QueryVo params, StaAssemblyWorkLast workLast, String deviceNo){
+ private StaDeviceLast buildDeviceLast(QueryVo params, StaAssemblyWorkLast workLast,String deviceNo) {
//缁勮鏁版嵁
StaDeviceLast record = new StaDeviceLast();
-
+ //pr_assembly_plan input_number +1 鎶曞叆鏁板姞1
+ PrAssemblyPlan assemblyPlan = assemblyPlanDao.selectByPrimaryKey(workLast.planId);
StaDeviceLast preRecord = deviceLastDao.selectByDeviceNo(deviceNo);
- if(preRecord != null){
+ if (preRecord != null) {
record.id = preRecord.id;
record.inTime = preRecord.outTime;
+ record.outLineTime = preRecord.outLineTime;
+ }else{
+ record.inTime = new Date();
+ record.inLineTime = new Date();
+ assemblyPlan.setInputNumber(assemblyPlan.getInputNumber() + 1);
}
record.outTime = new Date();
record.planId = workLast.planId;
record.workId = Long.parseLong(params.workId);
record.stationId = workLast.stationId;
- record.equipNo = deviceNo;
+ record.deviceNo = deviceNo;
record.currNode = workLast.nodeId;
-// record.setNextNode(getNextNode(params.status,workLast.nodeId));
record.updatedBy = workLast.userId;
- record.assistants = params.assistants;
+ record.assistants = workLast.assistants;
+ record.errorMsg = params.errorMsg;
PrProductionNode node = nodeDao.selectByPrimaryKey(workLast.nodeId);
record.nodeContent = node.content;
- if(node.isRecord){
- record.equipCycleContent = node.equipCycleContent;
+ if (node.isRecord) {
+ record.deviceCycleContent = node.deviceCycleContent;
}
- record.status = getStatus(params.status,node.isEnd);
+ if(node.getIsEnd() && record.outLineTime == null){
+ record.outLineTime = new Date();
+ assemblyPlan.setOutputNumber(assemblyPlan.getOutputNumber() + 1);
+ }
+ assemblyPlanDao.updateByPrimaryKeySelective(assemblyPlan);
+ record.status = getStatus(params.status, node.isEnd,workLast.workType.toString());
return record;
}
- private void saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList,List<String> materialList, PrAssemblyPlan plan){
- for (String material:materialList) {
+
+ private void saveSnEx(StaAssemblyWorkLast workLast, List<String> deviceList, List<String> materialList, PrAssemblyPlan plan) {
+ for (String material : materialList) {
StaWipSnEx snEx = new StaWipSnEx();
snEx.deviceNo = deviceList.get(0);
snEx.productId = plan.process.proId;
@@ -165,56 +242,202 @@
wipSnExDao.insertSelective(snEx);
}
}
+
/**
* 鐘舵��: 1:缁勮涓�,2:瀹屾垚,3:缁翠慨,4:鎶ュ簾
- * @param status 鐘舵��
+ *
+ * @param status 鐘舵��
* @param isEndNode 鏄惁缁撴潫鑺傜偣
* @return 鐘舵��
*/
- private int getStatus(String status,boolean isEndNode){
- return switch (status) {
- case QrCodeConstant.MarkOk -> isEndNode? STATUS_COMPLETE:STATUS_OK;
- case QrCodeConstant.MarkUnqualified -> STATUS_REPAIR;
- case QrCodeConstant.MarkWaste -> STATUS_WASTE;
- default -> throw new RuntimeException("鐘舵�侀敊璇�");
- };
+ private int getStatus(String status, boolean isEndNode,String workType) {
+ //缁勮,缁翠慨
+ if (WORK_TYPE_ASSEMBLY.equals(workType)||WORK_TYPE_REPAIR.equals(workType)) {
+ return switch (status) {
+ case QrCodeConstant.MarkOk -> isEndNode? DeviceStatus.COMPLETED.getCode(): DeviceStatus.ASSEMBLING.getCode();
+ case QrCodeConstant.MarkUnqualified, QrCodeConstant.MarkPreUnqualified -> DeviceStatus.REPAIR.getCode();
+ case QrCodeConstant.MarkWaste -> DeviceStatus.WASTE.getCode();
+ default -> throw new RuntimeException("鐘舵�侀敊璇�");
+ };
+ //鍝佹,娴嬭瘯
+ }else if(WORK_TYPE_INSPECTION.equals(workType)||WORK_TYPE_TEST.equals(workType)){
+ return switch (status) {
+ case QrCodeConstant.MarkOk -> DeviceStatus.COMPLETED.getCode();
+ case QrCodeConstant.MarkUnqualified -> DeviceStatus.TEST_FAILED.getCode();
+ case QrCodeConstant.MarkWaste -> DeviceStatus.WASTE.getCode();
+ default -> throw new RuntimeException("鐘舵�侀敊璇�");
+ };
+ }
+ throw new RuntimeException("鐘舵�侀敊璇紝鏃犳晥鐨勮妭鐐圭被鍨�: " + workType);
}
public int repair(QueryVo vo) {
long workId = Long.parseLong(vo.workId);
StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(workId);
if (workLast == null) {
- throw new RuntimeException("宸ュ崟涓嶅瓨鍦�");
+ throw new RuntimeException("绯荤粺涓病鏈夎鏉$櫥褰曚俊鎭�");
}
- StaDeviceLast preDeviceRecord = deviceLastDao.selectByDeviceNo(vo.deviceNo);
+ StaDeviceLast preDeviceRecord = deviceLastDao.selectByDeviceNo(vo.deviceNo[0]);
StaRepairInfo repairInfo = new StaRepairInfo();
repairInfo.workId = workId;
- repairInfo.equipNo = vo.deviceNo;
+ repairInfo.deviceNo = vo.deviceNo[0];
repairInfo.repairTime = new Date();
repairInfo.repairBy = workLast.userId;
repairInfo.repairReason = vo.errorMsg;
repairInfo.fromNode = preDeviceRecord.currNode;
repairInfoDao.insertSelective(repairInfo);
- StaDeviceLast deviceLast = new StaDeviceLast();
- BeanUtils.copyProperties(preDeviceRecord, deviceLast);
- deviceLast.repairId = repairInfo.id;
- deviceLast.errorCode = vo.errorMsg;
- deviceLast.assistants = vo.assistants;
- //濡傛灉鍘熻妭鐐规槸缁撴潫鑺傜偣鎴栦箣鍚庣殑鑺傜偣锛屾槸鍒欐洿鏂颁负瀹屾垚,鍚﹀垯鏇存柊涓虹粍瑁呬腑(榛樿缁翠慨鑺傜偣鐨勭姸鎬佸彧鑳戒负 纭畾鎴� 鎶ュ簾)
- boolean isEndNode = nodeDao.isEndNode(preDeviceRecord.currNode);
- if(QrCodeConstant.MarkWaste.equals(vo.status)){
- deviceLast.status = STATUS_WASTE;
- }else{
- deviceLast.status = isEndNode? STATUS_COMPLETE:STATUS_OK;
- }
+ StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]);
+
int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) :
deviceLastDao.updateByPrimaryKeySelective(deviceLast);
saveDeviceProductionLog(deviceLast);
-
+ boolean isEndNode = nodeDao.isEndNode(preDeviceRecord.currNode);
if (isEndNode) {
saveDeviceLife(deviceLast);
}
return count;
}
+
+ public int testing(QueryVo vo) {
+ long workId = Long.parseLong(vo.workId);
+ StaAssemblyWorkLast workLast = assemblyWorkLastDao.selectByPrimaryKey(workId);
+ if (workLast == null) {
+ throw new RuntimeException("绯荤粺涓病鏈夎鏉$櫥褰曚俊鎭�");
+ }
+
+ StaDeviceLast deviceLast = buildDeviceLast(vo, workLast, vo.deviceNo[0]);
+ int count = deviceLast.id == null ? deviceLastDao.insertSelective(deviceLast) :
+ deviceLastDao.updateByPrimaryKeySelective(deviceLast);
+ saveDeviceProductionLog(deviceLast);
+ return count;
+ }
+ //鏍规嵁鑺傜偣鏌ュ嚭鑺傜偣浣滀笟鎸囧涔�
+ public PrProductionNode getSopByNodeId(String nodeId) {
+ if(com.alibaba.excel.util.StringUtils.isBlank(nodeId)){
+ throw new RuntimeException("鑺傜偣ID涓嶈兘涓虹┖");
+ }
+ PrProductionNode node = nodeDao.selectByPrimaryKey(Long.parseLong(nodeId));
+ if(node == null){
+ throw new RuntimeException("鑺傜偣ID涓嶅瓨鍦�,璇锋鏌�");
+ }
+ if(node.instruction != null){
+ addUrl(node.instruction);
+ }
+ return node;
+ }
+ //涓昏鎶�鏈弬鏁� 淇╀釜鏂规硶鍚� platform-->product-->productSv
+ public List<PltProductParams> getParamsByProId(String proId) {
+ if(StringUtils.isBlank(proId)){
+ throw new RuntimeException("浜у搧ID涓嶈兘涓虹┖");
+ }
+ List<PltProductParams> proParams = paramsDao.selectParams(Long.parseLong(proId));
+ return proParams;
+ }
+ // 鏍规嵁浜у搧鏌ュ嚭浜у搧鏂囦欢
+ public List<PltProductFile> getFileByProId(String proId) {
+ if(StringUtils.isBlank(proId)){
+ throw new RuntimeException("浜у搧ID涓嶈兘涓虹┖");
+ }
+ List<PltProductFile> proFiles = productFileDao.selectDocuments(Long.parseLong(proId));
+ proFiles.stream().forEach(doc -> {
+ OthFile file = othFileMapper.selectByPrimaryKey(doc.fileId);
+ if (file == null) {
+ return;
+ }
+ FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash);
+ doc.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + doc.fileId;
+ doc.orgName = file.orgName;
+ doc.extName = file.extName;
+ });
+ return proFiles;
+ }
+
+ public List<PltProductQualityInspectionItems> getQualityItems(String proId) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("proId", proId);//item start count
+ //鏌ヨ绗﹀悎鏉′欢鐨勮褰�
+ return qualityItemsDao.selectSome(params);
+ }
+
+ public List<PltProductTestInspectionItems> getTestItems(String proId) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("proId", proId);
+ return testItemsDao.selectSome(params);
+ }
+
+ private boolean isOurProduct(String deviceNo, List<PltProduct> products){
+ if(StringUtils.isNotEmpty(deviceNo) && deviceNo.length() ==22 ){
+ for(PltProduct product:products){
+ if(deviceNo.startsWith(QrCodeConstant.TypeProduct + product.getCode())){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ private void addUrl(PrWorkingInstruction ins) {
+ if (ins == null || ins.fileId == null) {
+ return;
+ }
+ OthFile file = othFileMapper.selectByPrimaryKey(ins.fileId);
+ if (file == null) {
+ return;
+ }
+ FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash);
+ ins.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + ins.fileId;
+ ins.orgName = file.orgName;
+ ins.extName = file.extName;
+ }
+ private PltProduct addWebUrl(PltProduct pro) {
+ if (pro != null) {
+ if (pro.image != null) {
+ String filePathWithWebUrl = getFilePathWithWebUrl(pro.image);
+ pro.imageWebPath = filePathWithWebUrl;
+ pro.imageWebPathZip = fileOperate.getImgFileZipPath(filePathWithWebUrl);
+ }
+
+ pro.proFiles.stream().forEach(doc -> {
+ OthFile file = othFileMapper.selectByPrimaryKey(doc.fileId);
+ if (file == null) {
+ return;
+ }
+ FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash);
+ doc.webUrl = fileRestVo.fileSysRestUrl + fileRestVo.fileWebDownloadPath + doc.fileId;
+ doc.orgName = file.orgName;
+ doc.extName = file.extName;
+ });
+ }
+ return pro;
+ }
+ private String getFilePathWithWebUrl(Long fileId) {
+ OthFile file = othFileMapper.selectByPrimaryKey(fileId);
+ FileRestVo fileRestVo = fileOperate.parseHashcode(fmUrl, file.hash);
+ return fileRestVo.fileWebUrl + file.filePath;
+ }
+
+ public Map<String,String> queryByDeviceNo(String deviceNo) {
+ Map<String,String> map = new HashMap<>();
+ map.put("deviceNo", deviceNo);
+ map.put("proName", "");
+ map.put("proType", "");
+
+ PltProduct product = productDao.selectByCode(deviceNo.substring(3,6));
+ if(product != null){
+ map.put("proName", product.getName());
+ map.put("proType", product.getType());
+ }
+ /*else{
+ throw new RuntimeException("璇ョ紪鐮�("+deviceNo +")涓嶆槸涓昏鐗╂枡(绯荤粺涓鎺х殑鍏朵粬璁惧)");
+ }*/
+ return map;
+ }
+
+ public List<StaDeviceLife> queryLifeByDeviceNo(String deviceNo) {
+ return deviceLifeDao.selectByDeviceNo(deviceNo);
+ }
+
+ public List<StaDeviceProductionLog> queryLogByDeviceNo(String devoiceNo) {
+ return deviceProductionLogDao.selectByDeviceNo(devoiceNo);
+ }
}
--
Gitblit v1.8.0