parent
49f86304f2
commit
5bc2c047fa
@ -3,8 +3,6 @@ package com.foreverwin.iep.qms.service.impl;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.foreverwin.iep.common.utils.ListUtils;
|
||||
@ -17,6 +15,7 @@ import com.foreverwin.iep.qms.dto.QmsInspecResultNccodeDTO;
|
||||
import com.foreverwin.iep.qms.entity.*;
|
||||
import com.foreverwin.iep.qms.mapper.QmsInspecDetailMapper;
|
||||
import com.foreverwin.iep.qms.service.*;
|
||||
import com.foreverwin.iep.qms.utils.Area;
|
||||
import com.foreverwin.mom.common.core.util.I18nUtil;
|
||||
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
|
||||
import com.foreverwin.mom.common.security.util.SecurityUtils;
|
||||
@ -28,7 +27,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -53,8 +51,7 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
private final NcBasisMapper ncBasisMapper;
|
||||
|
||||
private static final String percent = "%";
|
||||
private static final String OK = "1";
|
||||
private static final String NG = "0";
|
||||
|
||||
private static String user;
|
||||
private static LocalDateTime now;
|
||||
|
||||
@ -67,7 +64,7 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
public QmsInspecDetailDTO getDetailResult(String inspecDetailBo) {
|
||||
QmsInspecDetailDTO inspecDetail = baseMapper.selectDetail(inspecDetailBo);
|
||||
String itemType = inspecDetail.getItemType();
|
||||
Map<String, String> area = area(inspecDetail.getAreaInfo());
|
||||
Map<String, String> area = Area.formatter(inspecDetail.getAreaInfo());
|
||||
BigDecimal sampleSize = inspecDetail.getSampleSize();
|
||||
BigDecimal dieQty = inspecDetail.getDieQty();
|
||||
|
||||
@ -149,9 +146,7 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
QmsInspecDetailDTO inspecDetail = baseMapper.selectDetail(inspecDetailBo);
|
||||
String inspecJobBo = inspecDetail.getInspecJobBo();
|
||||
String itemType = inspecDetail.getItemType();
|
||||
BigDecimal max = inspecDetail.getMaxValue();
|
||||
BigDecimal min = inspecDetail.getMinValue();
|
||||
Map<String, String> areaMap = area(inspecDetail.getAreaInfo());
|
||||
Map<String, String> areaMap = Area.formatter(inspecDetail.getAreaInfo());
|
||||
|
||||
remove(inspecDetailBo);
|
||||
updateJobStatus(inspecJobBo);
|
||||
@ -165,7 +160,7 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
inspecResult.setContent(dto.getContentResult().getContent());
|
||||
qmsInspecResultService.save(inspecResult);
|
||||
|
||||
updateResult(inspecDetailBo, OK);
|
||||
updateDetail(inspecDetailBo);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -173,9 +168,6 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
// 計量
|
||||
saveSn(inspecDetailBo, resultList);
|
||||
|
||||
AtomicBoolean flag = new AtomicBoolean(true);
|
||||
List<String> oocRemarkList = new ArrayList<>();
|
||||
|
||||
List<QmsInspecResult> inspecResultList = new ArrayList<>();
|
||||
List<QmsInspecResultNccode> inspecResultNcList = new ArrayList<>();
|
||||
resultList.forEach(objectMap -> {
|
||||
@ -199,65 +191,27 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
inspecResult.setResult(result);
|
||||
inspecResultList.add(inspecResult);
|
||||
|
||||
switch (itemType) {
|
||||
case "0":
|
||||
Object ncValue = objectMap.get(String.format("%s$%s", value, "NC"));
|
||||
if (ObjectUtil.isNotNull(ncValue)) {
|
||||
List<Map<String, String>> resultNcList = (List<Map<String, String>>) ncValue;
|
||||
if (!ListUtils.isEmpty(resultNcList)) {
|
||||
Map<String, Integer> count = new HashMap<>();
|
||||
resultNcList.forEach(resultNc -> {
|
||||
String ncCode = resultNc.get("ncCode");
|
||||
if ("0".equals(itemType)) {
|
||||
Object ncValue = objectMap.get(String.format("%s$%s", value, "NC"));
|
||||
if (ObjectUtil.isNotNull(ncValue)) {
|
||||
List<Map<String, String>> resultNcList = (List<Map<String, String>>) ncValue;
|
||||
if (!ListUtils.isEmpty(resultNcList)) {
|
||||
resultNcList.forEach(resultNc -> {
|
||||
String ncCode = resultNc.get("ncCode");
|
||||
|
||||
QmsInspecResultNccode inspecResultNc = new QmsInspecResultNccodeDTO();
|
||||
inspecResultNc.setSid(SidUtils.genSid());
|
||||
inspecResultNc.setInspecResultSid(inspecResult.getSid());
|
||||
inspecResultNc.setNcBasisBo(NcBasis.genHandle(site, ncCode));
|
||||
inspecResultNcList.add(inspecResultNc);
|
||||
|
||||
Integer qty = count.getOrDefault(ncCode, 0);
|
||||
count.put(ncCode, qty + 1);
|
||||
});
|
||||
|
||||
count.forEach((nc, qty) -> {
|
||||
oocRemarkList.add(String.format("%s:%%nc.description%%, %%nc.judge.qty%% %s", nc, qty));
|
||||
});
|
||||
flag.set(false);
|
||||
}
|
||||
QmsInspecResultNccode inspecResultNc = new QmsInspecResultNccodeDTO();
|
||||
inspecResultNc.setSid(SidUtils.genSid());
|
||||
inspecResultNc.setInspecResultSid(inspecResult.getSid());
|
||||
inspecResultNc.setNcBasisBo(NcBasis.genHandle(site, ncCode));
|
||||
inspecResultNcList.add(inspecResultNc);
|
||||
});
|
||||
}
|
||||
break;
|
||||
case "1":
|
||||
int spec = 0;
|
||||
if (ObjectUtil.isNotNull(min) && min.compareTo(result) > 0) {
|
||||
spec = 1;
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(max) && max.compareTo(result) < 0) {
|
||||
spec = 2;
|
||||
}
|
||||
|
||||
if (spec > 0) {
|
||||
String remark = String.format("OOS: %s", result.stripTrailingZeros().toPlainString());
|
||||
switch (spec) {
|
||||
case 1:
|
||||
remark = String.format("%s %%out.of.spec.min%% %s", remark, min.stripTrailingZeros()
|
||||
.toPlainString());
|
||||
break;
|
||||
case 2:
|
||||
remark = String.format("%s %%out.of.spec.max%% %s", remark, max.stripTrailingZeros()
|
||||
.toPlainString());
|
||||
break;
|
||||
}
|
||||
oocRemarkList.add(remark);
|
||||
flag.set(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
String result = flag.get() ? OK : NG;
|
||||
updateResult(inspecDetailBo, result, String.join("|", oocRemarkList));
|
||||
updateDetail(inspecDetailBo);
|
||||
qmsInspecResultService.saveBatch(inspecResultList);
|
||||
qmsInspecResultNccodeService.saveBatch(inspecResultNcList);
|
||||
}
|
||||
@ -293,16 +247,10 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
.eq(QmsInspecJob::getHandle, inspecJobBo));
|
||||
}
|
||||
|
||||
private void updateResult(String inspecDetailBo, String result) {
|
||||
updateResult(inspecDetailBo, result, null);
|
||||
}
|
||||
|
||||
private void updateResult(String inspecDetailBo, String result, String oocRemark) {
|
||||
private void updateDetail(String inspecDetailBo) {
|
||||
update(Wrappers.lambdaUpdate(QmsInspecDetail.class)
|
||||
.set(QmsInspecDetail::getInspecUser, user)
|
||||
.set(QmsInspecDetail::getInspecDateTime, now)
|
||||
.set(QmsInspecDetail::getResult, result)
|
||||
.set(StrUtil.isNotBlank(oocRemark), QmsInspecDetail::getOocRemark, oocRemark)
|
||||
.eq(QmsInspecDetail::getHandle, inspecDetailBo));
|
||||
}
|
||||
|
||||
@ -350,20 +298,6 @@ public class QmsInspecDetailServiceImpl extends ServiceImpl<QmsInspecDetailMappe
|
||||
qmsInspecSnService.saveBatch(inspecSnList);
|
||||
}
|
||||
|
||||
private Map<String, String> area(String areaInfo) {
|
||||
if (StrUtil.isBlank(areaInfo)) {
|
||||
areaInfo = "{}";
|
||||
}
|
||||
|
||||
JSONObject object = JSONObject.parseObject(areaInfo);
|
||||
if (object.isEmpty()) {
|
||||
object.put("1", "");
|
||||
areaInfo = object.toJSONString();
|
||||
}
|
||||
return JSONObject.parseObject(areaInfo, new TypeReference<Map<String, String>>() {
|
||||
});
|
||||
}
|
||||
|
||||
private void init() {
|
||||
user = SecurityUtils.getUserName();
|
||||
now = LocalDateTime.now();
|
||||
|
||||
@ -2,7 +2,6 @@ package com.foreverwin.iep.qms.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
@ -21,11 +20,9 @@ import com.foreverwin.iep.common.spc.QcDataSync;
|
||||
import com.foreverwin.iep.common.utils.HandleBoProcessor;
|
||||
import com.foreverwin.iep.common.utils.ListUtils;
|
||||
import com.foreverwin.iep.common.utils.SidUtils;
|
||||
import com.foreverwin.iep.prd.entity.NcBasis;
|
||||
import com.foreverwin.iep.prd.entity.Operation;
|
||||
import com.foreverwin.iep.prd.entity.ReasonCode;
|
||||
import com.foreverwin.iep.prd.entity.RouterStep;
|
||||
import com.foreverwin.iep.prd.mapper.NcBasisMapper;
|
||||
import com.foreverwin.iep.production.dto.GenerateNextNumberRequest;
|
||||
import com.foreverwin.iep.production.dto.GenerateNextNumberResponse;
|
||||
import com.foreverwin.iep.production.dto.NextNumberRetrieveRequest;
|
||||
@ -41,6 +38,7 @@ import com.foreverwin.iep.qms.dto.*;
|
||||
import com.foreverwin.iep.qms.entity.*;
|
||||
import com.foreverwin.iep.qms.mapper.QmsInspecJobMapper;
|
||||
import com.foreverwin.iep.qms.service.*;
|
||||
import com.foreverwin.iep.qms.utils.Area;
|
||||
import com.foreverwin.iep.smd.entity.Resrce;
|
||||
import com.foreverwin.iep.sys.entity.SystemTransactionLog;
|
||||
import com.foreverwin.iep.sys.feign.RemoteSystemTransactionLogService;
|
||||
@ -65,6 +63,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -94,6 +93,9 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
private final RemoteParamService remoteParamService;
|
||||
private final RemoteSystemTransactionLogService remoteSystemTransactionLogService;
|
||||
|
||||
private static final String OK = "1";
|
||||
private static final String NG = "0";
|
||||
|
||||
@Override
|
||||
public IPage<Item> getItem(FrontPage page, String item) {
|
||||
String site = TenantContextHolder.getTenantId();
|
||||
@ -276,6 +278,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
.set(QmsInspecJob::getCompleteUser, user)
|
||||
.set(QmsInspecJob::getCompleteDateTime, LocalDateTime.now())
|
||||
.eq(QmsInspecJob::getHandle, inspecJobBo));
|
||||
updateDetail(qmsInspecJob);
|
||||
toSpc(qmsInspecJob);
|
||||
break;
|
||||
case "judge":
|
||||
@ -364,7 +367,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
String url = remoteParamService.getByKey("SPC_RESTFUL_URL", SecurityConstants.FROM_IN).getData();
|
||||
QmsQcPlan qcPlan = qmsQcPlanService.getById(job.getQcPlanBo());
|
||||
|
||||
if(StrUtil.isNotBlank(url) && "1".equals(qcPlan.getToSpc())){
|
||||
if (StrUtil.isNotBlank(url) && "1".equals(qcPlan.getToSpc())) {
|
||||
//itemType, targetId, qcItem. row
|
||||
Map<String, Map<String, Map<String, List<QmsInspecResult>>>> map = new HashMap<>();
|
||||
|
||||
@ -381,20 +384,21 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
List<QmsInspecResult> resultList = qmsInspecResultService.list(Wrappers.<QmsInspecResult>query()
|
||||
.eq("inspec_detail_bo", detail.getHandle())
|
||||
.orderByAsc("CONVERT(seq,SIGNED), series, area"));
|
||||
if("0".equals(detail.getItemType())){
|
||||
if ("0".equals(detail.getItemType())) {
|
||||
//计数
|
||||
qcItemSampleSizeMap.put(detail.getQcItem(), detail.getSampleSize());
|
||||
|
||||
if(!map.containsKey("0")){
|
||||
if (!map.containsKey("0")) {
|
||||
Map<String, Map<String, List<QmsInspecResult>>> targetMap = new HashMap<>();
|
||||
targetMap.put(HandleBoProcessor.trimHandle(job.getTargetBo()), new HashMap<>());
|
||||
map.put("0", targetMap);
|
||||
}
|
||||
map.get("0").get(HandleBoProcessor.trimHandle(job.getTargetBo())).put(detail.getQcItem(), resultList);
|
||||
map.get("0").get(HandleBoProcessor.trimHandle(job.getTargetBo()))
|
||||
.put(detail.getQcItem(), resultList);
|
||||
|
||||
}else if("1".equals(detail.getItemType())){
|
||||
} else if ("1".equals(detail.getItemType())) {
|
||||
//计量
|
||||
if(!map.containsKey("1")){
|
||||
if (!map.containsKey("1")) {
|
||||
Map<String, Map<String, List<QmsInspecResult>>> targetMap = new HashMap<>();
|
||||
map.put("1", targetMap);
|
||||
}
|
||||
@ -404,17 +408,18 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
.orderByAsc("CONVERT(seq,SIGNED)"));
|
||||
boolean haveSn = StrUtil.isNotBlank(snList.get(0).getSn());
|
||||
|
||||
if(haveSn){
|
||||
snList.forEach(qmsInspecSn ->{
|
||||
if (haveSn) {
|
||||
snList.forEach(qmsInspecSn -> {
|
||||
String sn = qmsInspecSn.getSn();
|
||||
if(!map.get("1").containsKey(sn)){
|
||||
if (!map.get("1").containsKey(sn)) {
|
||||
map.get("1").put(sn, new HashMap<>());
|
||||
}
|
||||
map.get("1").get(sn).put(detail.getQcItem(), resultList.stream()
|
||||
.filter(qmsInspecResult -> qmsInspecSn.getSeq().equals(qmsInspecResult.getSeq()))
|
||||
.collect(Collectors.toList()));
|
||||
.filter(qmsInspecResult -> qmsInspecSn.getSeq()
|
||||
.equals(qmsInspecResult.getSeq()))
|
||||
.collect(Collectors.toList()));
|
||||
});
|
||||
}else {
|
||||
} else {
|
||||
if(!map.get("1").containsKey(HandleBoProcessor.trimHandle(job.getTargetBo()))){
|
||||
map.get("1").put(HandleBoProcessor.trimHandle(job.getTargetBo()), new HashMap<>());
|
||||
}
|
||||
@ -429,8 +434,8 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
request.setUrl(url);
|
||||
request.setRequests(new ArrayList<>());
|
||||
|
||||
for(String itemType : map.keySet()){
|
||||
for(String targetId : map.get(itemType).keySet()){
|
||||
for (String itemType : map.keySet()) {
|
||||
for (String targetId : map.get(itemType).keySet()) {
|
||||
SpcExecuteRequest spcExecuteRequest = new SpcExecuteRequest();
|
||||
spcExecuteRequest.setQcPlan(qcPlan.getQcPlan());
|
||||
spcExecuteRequest.setRevision(qcPlan.getRevision());
|
||||
@ -439,7 +444,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
spcExecuteRequest.setOperation(HandleBoProcessor.trimHandle(job.getOperationBo()));
|
||||
spcExecuteRequest.setTargetId(targetId);
|
||||
spcExecuteRequest.setQcItems(new ArrayList<>());
|
||||
for(String qcItemS : map.get(itemType).get(targetId).keySet()){
|
||||
for (String qcItemS : map.get(itemType).get(targetId).keySet()) {
|
||||
QmsQcItem qmsQcItem = qmsQcItemService.getOne(site, qcItemS);
|
||||
QcItem qcItem = new QcItem();
|
||||
qcItem.setQcItem(qcItemS);
|
||||
@ -449,7 +454,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
qcItem.setSampleSize("0".equals(itemType) ? qcItemSampleSizeMap.get(qcItemS) : qmsQcItem.getSampleSize());
|
||||
|
||||
qcItem.setFactors(new ArrayList<>());
|
||||
detailFactorMap.get(qcItemS).forEach(qmsInspecFactorDTO->{
|
||||
detailFactorMap.get(qcItemS).forEach(qmsInspecFactorDTO -> {
|
||||
com.foreverwin.iep.common.model.spc.dc.Factor factor = new com.foreverwin.iep.common.model.spc.dc.Factor();
|
||||
factor.setFactor(qmsInspecFactorDTO.getFactor());
|
||||
factor.setValue(qmsInspecFactorDTO.getValue());
|
||||
@ -472,9 +477,9 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
nc.setNcCode(qmsInspecResultNccode.getNcCode());
|
||||
nc.setNcType(qmsInspecResultNccode.getType());
|
||||
result.getNcList().add(nc);
|
||||
if("0".equals(qmsInspecResultNccode.getType())){
|
||||
if ("0".equals(qmsInspecResultNccode.getType())) {
|
||||
qcItem.setScrapQty(qcItem.getScrapQty().add(BigDecimal.ONE));
|
||||
}else {
|
||||
} else {
|
||||
qcItem.setDefectQty(qcItem.getDefectQty().add(BigDecimal.ONE));
|
||||
}
|
||||
});
|
||||
@ -489,7 +494,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
HttpResponse response = QcDataSync.execute(request);
|
||||
|
||||
saveSystemTransactionLog(job.getJobNo(), response);
|
||||
if(response.getStatusCode() != 200){
|
||||
if (response.getStatusCode() != 200) {
|
||||
throw BusinessException.build(I18nUtil.getI18nText("qms.spc.sync.msg", response.getResponse()));
|
||||
}
|
||||
|
||||
@ -502,10 +507,10 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
if ("1".equals(detail.getResult())) {
|
||||
String[] snMsgList = resultMark.split("SN: ");
|
||||
boolean isOK = true;
|
||||
for(String snMsg : snMsgList){
|
||||
if(StrUtil.isNotBlank(snMsg)){
|
||||
for (String snMsg : snMsgList) {
|
||||
if (StrUtil.isNotBlank(snMsg)) {
|
||||
String[] resultSplit = snMsg.split("\\|");
|
||||
if(!"OK".equals(resultSplit[1])){
|
||||
if (!"OK".equals(resultSplit[1])) {
|
||||
isOK = false;
|
||||
break;
|
||||
}
|
||||
@ -523,7 +528,7 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
}
|
||||
}
|
||||
|
||||
private void saveSystemTransactionLog(String jobNo, HttpResponse response){
|
||||
private void saveSystemTransactionLog(String jobNo, HttpResponse response) {
|
||||
SystemTransactionLog log = new SystemTransactionLog();
|
||||
log.setSid(SidUtils.genSid());
|
||||
log.setFromSystem("IEP");
|
||||
@ -536,21 +541,21 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
|
||||
if (response != null) {
|
||||
log.setRequest(response.getRequest());
|
||||
if(StrUtil.isBlank(response.getResponse())){
|
||||
if (StrUtil.isBlank(response.getResponse())) {
|
||||
log.setResponse("N/A");
|
||||
}else {
|
||||
} else {
|
||||
log.setResponse(response.getResponse());
|
||||
}
|
||||
if (response.getStatusCode() == 200) {
|
||||
log.setResult("Success");
|
||||
log.setMessage("作业成功");
|
||||
}else {
|
||||
} else {
|
||||
log.setResult("Fail");
|
||||
log.setMessage(response.getResponse());
|
||||
}
|
||||
remoteSystemTransactionLogService.save(log);
|
||||
|
||||
if("Fail".equals(log.getResult())){
|
||||
if ("Fail".equals(log.getResult())) {
|
||||
throw BusinessException.build(I18nUtil.getI18nText("qms.spc.sync.msg", response.getResponse()));
|
||||
}
|
||||
}
|
||||
@ -685,4 +690,104 @@ public class QmsInspecJobServiceImpl extends ServiceImpl<QmsInspecJobMapper, Qms
|
||||
abnMaster.setDetails(abnDetails);
|
||||
remoteAbnService.create(abnMaster);
|
||||
}
|
||||
|
||||
private void updateDetail(QmsInspecJob qmsInspecJob) {
|
||||
String jobBo = qmsInspecJob.getHandle();
|
||||
List<QmsInspecDetailDTO> details = qmsInspecDetailService.selectAll(jobBo);
|
||||
|
||||
details.forEach(detail -> {
|
||||
String detailBo = detail.getHandle();
|
||||
String itemType = detail.getItemType();
|
||||
BigDecimal max = detail.getMaxValue();
|
||||
BigDecimal min = detail.getMinValue();
|
||||
Map<String, String> areaMap = Area.formatter(detail.getAreaInfo());
|
||||
QmsInspecDetailDTO inspecDetail = qmsInspecDetailService.getDetailResult(detailBo);
|
||||
List<Map<String, Object>> resultList = inspecDetail.getResultList();
|
||||
|
||||
AtomicBoolean flag = new AtomicBoolean(true);
|
||||
List<String> oocRemarkList = new ArrayList<>();
|
||||
|
||||
switch (itemType) {
|
||||
default:
|
||||
resultList.forEach(objectMap -> areaMap.forEach((k, v) -> {
|
||||
String value = v;
|
||||
if (StrUtil.isBlank(value)) {
|
||||
value = k;
|
||||
}
|
||||
|
||||
BigDecimal result = new BigDecimal((String) objectMap.get(value));
|
||||
switch (itemType) {
|
||||
case "0":
|
||||
// 計數
|
||||
Object ncValue = objectMap.get(String.format("%s$%s", value, "NC"));
|
||||
if (ObjectUtil.isNotNull(ncValue)) {
|
||||
List<Map<String, String>> resultNcList = (List<Map<String, String>>) ncValue;
|
||||
if (!ListUtils.isEmpty(resultNcList)) {
|
||||
Map<String, Integer> count = new HashMap<>();
|
||||
resultNcList.forEach(resultNc -> {
|
||||
String ncCode = resultNc.get("ncCode");
|
||||
|
||||
Integer qty = count.getOrDefault(ncCode, 0);
|
||||
count.put(ncCode, qty + 1);
|
||||
});
|
||||
|
||||
count.forEach((nc, qty) -> {
|
||||
oocRemarkList.add(String.format("%s:%%nc.description%%, %%nc.judge.qty%% %s", nc, qty));
|
||||
});
|
||||
flag.set(false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "1":
|
||||
// 計量
|
||||
int spec = 0;
|
||||
if (ObjectUtil.isNotNull(min) && min.compareTo(result) > 0) {
|
||||
spec = 1;
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(max) && max.compareTo(result) < 0) {
|
||||
spec = 2;
|
||||
}
|
||||
|
||||
if (spec > 0) {
|
||||
String remark = String.format("OOS: %s", result.stripTrailingZeros()
|
||||
.toPlainString());
|
||||
switch (spec) {
|
||||
case 1:
|
||||
remark = String.format("%s %%out.of.spec.min%% %s", remark, min.stripTrailingZeros()
|
||||
.toPlainString());
|
||||
break;
|
||||
case 2:
|
||||
remark = String.format("%s %%out.of.spec.max%% %s", remark, max.stripTrailingZeros()
|
||||
.toPlainString());
|
||||
break;
|
||||
}
|
||||
oocRemarkList.add(remark);
|
||||
flag.set(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}));
|
||||
|
||||
String result = flag.get() ? OK : NG;
|
||||
updateDetailResult(detailBo, result, String.join("|", oocRemarkList));
|
||||
break;
|
||||
case "2":
|
||||
// 內文
|
||||
updateDetailResult(detailBo);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateDetailResult(String inspecDetailBo) {
|
||||
updateDetailResult(inspecDetailBo, OK, null);
|
||||
}
|
||||
|
||||
private void updateDetailResult(String inspecDetailBo, String result, String oocRemark) {
|
||||
qmsInspecDetailService.update(Wrappers.lambdaUpdate(QmsInspecDetail.class)
|
||||
.set(QmsInspecDetail::getResult, result)
|
||||
.set(StrUtil.isNotBlank(oocRemark), QmsInspecDetail::getOocRemark, oocRemark)
|
||||
.eq(QmsInspecDetail::getHandle, inspecDetailBo));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
package com.foreverwin.iep.qms.utils;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class Area {
|
||||
|
||||
public static Map<String, String> formatter(String areaInfo) {
|
||||
if (StrUtil.isBlank(areaInfo)) {
|
||||
areaInfo = "{}";
|
||||
}
|
||||
|
||||
JSONObject object = JSONObject.parseObject(areaInfo);
|
||||
if (object.isEmpty()) {
|
||||
object.put("1", "");
|
||||
areaInfo = object.toJSONString();
|
||||
}
|
||||
return JSONObject.parseObject(areaInfo, new TypeReference<Map<String, String>>() {
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user