ArgRecipeServiceImpl.java
package com.mycim.server.rcp.service;
import com.alipay.sofa.runtime.api.annotation.SofaService;
import com.alipay.sofa.runtime.api.annotation.SofaServiceBinding;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.server.base.manager.TransactionLogManager;
import com.mycim.server.rcp.manager.ArgRecipeManager;
import com.mycim.server.wip.manager.ArgRecipeQueryManager;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.prp.ArgRecipeInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Diff Arg功能
*
* @author finatice.yang
* @date 2021/6/23
**/
@Service
@SofaService(interfaceType = ArgRecipeService.class, bindings = {@SofaServiceBinding(bindingType = "bolt")})
@Transactional
public class ArgRecipeServiceImpl implements ArgRecipeService {
@Autowired
TransactionLogManager transactionLogManager;
@Autowired
ArgRecipeManager argRecipeManager;
@Autowired
ArgRecipeQueryManager argRecipeQueryManager;
@Override
public void addArgInfo(ArgRecipeInfo argInfo) {
List<ArgRecipeInfo> argBaseList = argRecipeQueryManager.getArgInfoList(argInfo);
Long sequence = NumberUtils.LONG_ZERO;
if (CollectionUtils.isNotEmpty(argBaseList)) {
for (ArgRecipeInfo argBaseRecipeInfo : argBaseList) {
if (argBaseRecipeInfo.getSequence().longValue() > sequence.longValue()) {
sequence = argBaseRecipeInfo.getSequence();
}
Assert.isFalse(checkOverLapping(argBaseRecipeInfo, argInfo),
Errors.create().content("Wafer count had overLapping").build());
}
}
argInfo.setSequence(sequence + 1);
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), TransactionNames.CREATE_KEY);
argRecipeManager.addArgInfo(transactionLog, argInfo);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public void modifyArgInfo(ArgRecipeInfo argInfo) {
List<ArgRecipeInfo> argBaseList = argRecipeQueryManager.getArgInfoList(argInfo);
if (CollectionUtils.isNotEmpty(argBaseList)) {
for (ArgRecipeInfo argBaseRecipeInfo : argBaseList) {
if (argBaseRecipeInfo.getSequence().longValue() == argInfo.getSequence().longValue()) {
continue;
}
Assert.isFalse(checkOverLapping(argBaseRecipeInfo, argInfo),
Errors.create().content("Wafer count had overLapping").build());
}
}
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), TransactionNames.MODIFY_KEY);
argRecipeManager.updateArgInfo(transactionLog, argInfo);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public void deleteArgInfos(List<ArgRecipeInfo> argInfoList) {
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), TransactionNames.DELETE_KEY);
argRecipeManager.deleteArgInfos(transactionLog, argInfoList);
transactionLogManager.markTransactionLog(transactionLog);
}
private boolean checkOverLapping(ArgRecipeInfo argBaseInfo, ArgRecipeInfo argSetupInfo) {
Integer lowerWaferCount = argSetupInfo.getLowerWaferCount();
Integer upperWaferCount = argSetupInfo.getUpperWaferCount();
boolean hadOverLapping = false;
int startCount = 0;
int endCount = 0;
if (lowerWaferCount != null) {
startCount = lowerWaferCount.intValue();
}
if (upperWaferCount != null) {
endCount = upperWaferCount.intValue();
}
if (endCount == 0) {
if (argBaseInfo.getUpperWaferCount() == null) {
hadOverLapping = true;
} else if (startCount < argBaseInfo.getUpperWaferCount().intValue()) {
hadOverLapping = true;
}
} else {
if (argBaseInfo.getLowerWaferCount() == null) {
hadOverLapping = true;
} else {
for (int i = startCount + 1; i <= endCount; i++) {
if (argBaseInfo.getUpperWaferCount() == null) {
if (i > argBaseInfo.getLowerWaferCount().intValue()) {
hadOverLapping = true;
break;
}
} else {
if (i > argBaseInfo.getLowerWaferCount().intValue()
&& i <= argBaseInfo.getUpperWaferCount().intValue()) {
hadOverLapping = true;
break;
}
}
}
}
}
return hadOverLapping;
}
}