1/9 码校验代码优化1.0

dev_fifo_z
wangwei 6 months ago
parent 1bbb57dd78
commit 9845a541a2

@ -32,6 +32,7 @@ import com.glxp.api.util.udi.FilterUdiUtils;
import org.apache.bcel.classfile.Code;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
@ -81,6 +82,7 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
public BaseResponse scanCheckCode(IoCollectCodeRequest filterCodeRequest) {
// 先根据单据编号获取订单备份信息
IoCollectOrderBackup orderBackup = ioCollectOrderBackupService.getByBillNo(filterCodeRequest.getBillNo());
if (orderBackup == null) {
return ResultVOUtils.error(500, "订单不存在");
@ -89,117 +91,134 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
return ResultVOUtils.error(500, "该单据已校验完成");
}
//判断
CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest();
collectOrderBizRequest.setOrderIdFk(filterCodeRequest.getBillNo());
List<CollectOrderBizResponse> collectOrderBizResponses = ioCollectOrderBizBackupService.filterList(collectOrderBizRequest);
// 判断传入的校验码情况
if (StringUtils.hasText(filterCodeRequest.getCode())) {
return handleSingleCode(filterCodeRequest);
} else {
return handleCodeList(filterCodeRequest);
}
}
if (StrUtil.isNotEmpty(filterCodeRequest.getCode())) {
IoCollectOrderCheckCode one = ioCollectOrderCheckCodeService.getOne(new LambdaQueryWrapper<IoCollectOrderCheckCode>().eq(IoCollectOrderCheckCode::getCode, filterCodeRequest.getCode()));
if (one != null) {
return ResultVOUtils.error(500, "该追溯码已被其他单据校验");
}
for (CollectOrderBizResponse collectOrderBizResponse : collectOrderBizResponses) {
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(collectOrderBizResponse.getNameCode());
Integer checkCount = ioCollectOrderCheckCodeService.getCountByRelIdAndBillNo(udiRelevanceResponse.getId(), filterCodeRequest.getBillNo());
if (checkCount == collectOrderBizResponse.getScanActCount()) {
BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode());
response.setCode(500);
response.setMessage("追溯码校验校验超出");
return response;
}
private BaseResponse handleSingleCode(IoCollectCodeRequest filterCodeRequest) {
// 检查校验码是否已被其他单据校验
IoCollectOrderCheckCode existingCode = getExistingCheckCode(filterCodeRequest.getCode());
if (existingCode!= null) {
return ResultVOUtils.error(500, "该追溯码已被其他单据校验");
}
// 校验是否本单产品
UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeRequest.getCode());
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
if (collectOrderBizBackup == null) {
BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode());
response.setCode(500);
response.setMessage("非此单产品");
return response;
}
// 校验扫码次数是否超出
Integer checkCount = ioCollectOrderCheckCodeService.getCountByRelIdAndBillNo(udiRelevanceResponse.getId(), filterCodeRequest.getBillNo());
if (checkCount >= collectOrderBizBackup.getScanCount()) {
return ResultVOUtils.error(500, "追溯码数量超出");
}
IoCollectCodeBackup ioCollectCodeBackup = getIoCollectCodeBackup(filterCodeRequest.getBillNo(), filterCodeRequest.getCode());
if (ioCollectCodeBackup == null) {
BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode());
response.setCode(503);
response.setMessage("追溯码不存在");
return response;
}
udiEntity.setCode(filterCodeRequest.getCode());
AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse);
setOrderCheckStatus(ioCollectCodeBackup);
return ResultVOUtils.success(addEnterCodeResponse);
}
private BaseResponse handleCodeList(IoCollectCodeRequest filterCodeRequest) {
List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>();
for (String code : filterCodeRequest.getCodeList()) {
VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse();
vailCodeResultResponse.setCode(code);
// 检查校验码是否已被其他单据校验
IoCollectOrderCheckCode existingCode = getExistingCheckCode(code);
if (existingCode!= null) {
vailCodeResultResponse.setStatus(2);
vailCodeResultResponse.setErrMsg("该追溯码已被单据校验");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
//校验是否本单产品
UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeRequest.getCode());
UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
// 校验是否本单产品
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
if (collectOrderBizBackup == null) {
BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode());
response.setCode(500);
response.setMessage("非此单产品");
return response;
}
IoCollectCodeBackup ioCollectCodeBackup = ioCollectCodeBackMapper.selectOne(new LambdaQueryWrapper<IoCollectCodeBackup>()
.eq(IoCollectCodeBackup::getBillNo, filterCodeRequest.getBillNo())
.eq(IoCollectCodeBackup::getCode, filterCodeRequest.getCode()));
if (ioCollectCodeBackup == null) {
BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode());
response.setCode(503);
response.setMessage("追溯码不存在");
return response;
vailCodeResultResponse.setStatus(4);
vailCodeResultResponse.setErrMsg("非此单产品");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
// 校验扫码次数相关逻辑
boolean isScanCountExceeded = checkScanCountExceeded(filterCodeRequest, udiRelevanceResponse, code);
if (isScanCountExceeded) {
vailCodeResultResponse.setStatus(3);
vailCodeResultResponse.setErrMsg("追溯码校验校验超出");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
udiEntity.setCode(filterCodeRequest.getCode());
AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse);
setOrderCheckStatus(ioCollectCodeBackup);
return ResultVOUtils.success(addEnterCodeResponse);
} else {
List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>();
for (String code : filterCodeRequest.getCodeList()) {
VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse();
IoCollectOrderCheckCode one = ioCollectOrderCheckCodeService.getOne(new LambdaQueryWrapper<IoCollectOrderCheckCode>().eq(IoCollectOrderCheckCode::getCode, code));
if (one != null) {
vailCodeResultResponse.setStatus(2);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("该追溯码已被单据校验");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
boolean shouldContinue = false;
//扫入的校验码全是没有没有的 导致 checkCount 一直为0
for (CollectOrderBizResponse collectOrderBizResponse : collectOrderBizResponses) {
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(collectOrderBizResponse.getNameCode());
Integer checkCount = ioCollectOrderCheckCodeService.getCountByRelIdAndBillNo(udiRelevanceResponse.getId(), filterCodeRequest.getBillNo());
if (checkCount == collectOrderBizResponse.getScanCount()) {
vailCodeResultResponse.setStatus(3);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("追溯码校验校验超出");
vailCodeResultResponses.add(vailCodeResultResponse);
shouldContinue = true;
break; // 跳出内部循环
}
}
if (shouldContinue) {
continue;
}
//校验是否本单产品
UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
if (collectOrderBizBackup == null) {
vailCodeResultResponse.setStatus(4);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("非此单产品");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
IoCollectCodeBackup ioCollectCodeBackup = ioCollectCodeBackMapper.selectOne(new LambdaQueryWrapper<IoCollectCodeBackup>()
.eq(IoCollectCodeBackup::getBillNo, filterCodeRequest.getBillNo())
.eq(IoCollectCodeBackup::getCode, code));
if (ioCollectCodeBackup != null) {
vailCodeResultResponse.setStatus(1);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setSucMsg("校验成功");
vailCodeResultResponses.add(vailCodeResultResponse);
//校验成功 加入校验表
setOrderCheckStatus(ioCollectCodeBackup);
} else {
vailCodeResultResponse.setStatus(5);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("追溯码不存在");
vailCodeResultResponses.add(vailCodeResultResponse);
}
IoCollectCodeBackup ioCollectCodeBackup = getIoCollectCodeBackup(filterCodeRequest.getBillNo(), code);
if (ioCollectCodeBackup!= null) {
vailCodeResultResponse.setStatus(1);
vailCodeResultResponse.setSucMsg("校验成功");
vailCodeResultResponses.add(vailCodeResultResponse);
// 校验成功 加入校验表
setOrderCheckStatus(ioCollectCodeBackup);
} else {
vailCodeResultResponse.setStatus(5);
vailCodeResultResponse.setErrMsg("追溯码不存在");
vailCodeResultResponses.add(vailCodeResultResponse);
}
return ResultVOUtils.success(vailCodeResultResponses);
}
return ResultVOUtils.success(vailCodeResultResponses);
}
private IoCollectOrderCheckCode getExistingCheckCode(String code) {
return ioCollectOrderCheckCodeService.getOne(new LambdaQueryWrapper<IoCollectOrderCheckCode>().eq(IoCollectOrderCheckCode::getCode, code));
}
private IoCollectCodeBackup getIoCollectCodeBackup(String billNo, String code) {
return ioCollectCodeBackMapper.selectOne(new LambdaQueryWrapper<IoCollectCodeBackup>()
.eq(IoCollectCodeBackup::getBillNo, billNo)
.eq(IoCollectCodeBackup::getCode, code));
}
private boolean checkScanCountExceeded(IoCollectCodeRequest filterCodeRequest, UdiRelevanceResponse udiRelevanceResponse, String code) {
CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest();
collectOrderBizRequest.setOrderIdFk(filterCodeRequest.getBillNo());
collectOrderBizRequest.setRelId(udiRelevanceResponse.getId());
List<CollectOrderBizResponse> collectOrderBizResponses = ioCollectOrderBizBackupService.filterList(collectOrderBizRequest);
if (collectOrderBizResponses.isEmpty()) {
return false;
}
CollectOrderBizResponse collectOrderBizResponse = collectOrderBizResponses.get(0);
if (udiRelevanceResponse.getId().equals(collectOrderBizResponse.getRelId())){
if ( filterCodeRequest.getCodeList().size() > collectOrderBizResponse.getScanCount()){
throw new JsonException(500,"追溯码数量超出");
}
}
Integer checkCount = ioCollectOrderCheckCodeService.getCountByRelIdAndBillNo(udiRelevanceResponse.getId(), filterCodeRequest.getBillNo());
return checkCount == collectOrderBizResponse.getScanCount();
}
public AddEnterCodeResponse setAddEnterCodeResponse(UdiEntity udiEntity, UdiRelevanceResponse checkUdi) {
AddEnterCodeResponse addEnterCodeResponse = new AddEnterCodeResponse();
BeanUtils.copyProperties(udiEntity, addEnterCodeResponse);

Loading…
Cancel
Save