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.apache.bcel.classfile.Code;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
@ -81,6 +82,7 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
public BaseResponse scanCheckCode(IoCollectCodeRequest filterCodeRequest) { public BaseResponse scanCheckCode(IoCollectCodeRequest filterCodeRequest) {
// 先根据单据编号获取订单备份信息
IoCollectOrderBackup orderBackup = ioCollectOrderBackupService.getByBillNo(filterCodeRequest.getBillNo()); IoCollectOrderBackup orderBackup = ioCollectOrderBackupService.getByBillNo(filterCodeRequest.getBillNo());
if (orderBackup == null) { if (orderBackup == null) {
return ResultVOUtils.error(500, "订单不存在"); return ResultVOUtils.error(500, "订单不存在");
@ -89,29 +91,27 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
return ResultVOUtils.error(500, "该单据已校验完成"); return ResultVOUtils.error(500, "该单据已校验完成");
} }
//判断 // 判断传入的校验码情况
CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest(); if (StringUtils.hasText(filterCodeRequest.getCode())) {
collectOrderBizRequest.setOrderIdFk(filterCodeRequest.getBillNo()); return handleSingleCode(filterCodeRequest);
List<CollectOrderBizResponse> collectOrderBizResponses = ioCollectOrderBizBackupService.filterList(collectOrderBizRequest); } 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()); UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeRequest.getCode());
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity); IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
if (collectOrderBizBackup == null) { if (collectOrderBizBackup == null) {
BaseResponse response = new BaseResponse(); BaseResponse response = new BaseResponse();
@ -120,9 +120,13 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
response.setMessage("非此单产品"); response.setMessage("非此单产品");
return response; return response;
} }
IoCollectCodeBackup ioCollectCodeBackup = ioCollectCodeBackMapper.selectOne(new LambdaQueryWrapper<IoCollectCodeBackup>()
.eq(IoCollectCodeBackup::getBillNo, filterCodeRequest.getBillNo()) // 校验扫码次数是否超出
.eq(IoCollectCodeBackup::getCode, filterCodeRequest.getCode())); 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) { if (ioCollectCodeBackup == null) {
BaseResponse response = new BaseResponse(); BaseResponse response = new BaseResponse();
response.setData(filterCodeRequest.getCode()); response.setData(filterCodeRequest.getCode());
@ -131,65 +135,55 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
return response; return response;
} }
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
udiEntity.setCode(filterCodeRequest.getCode()); udiEntity.setCode(filterCodeRequest.getCode());
AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse); AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse);
setOrderCheckStatus(ioCollectCodeBackup); setOrderCheckStatus(ioCollectCodeBackup);
return ResultVOUtils.success(addEnterCodeResponse); return ResultVOUtils.success(addEnterCodeResponse);
} else { }
private BaseResponse handleCodeList(IoCollectCodeRequest filterCodeRequest) {
List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>(); List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>();
for (String code : filterCodeRequest.getCodeList()) { for (String code : filterCodeRequest.getCodeList()) {
VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); 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.setCode(code);
// 检查校验码是否已被其他单据校验
IoCollectOrderCheckCode existingCode = getExistingCheckCode(code);
if (existingCode!= null) {
vailCodeResultResponse.setStatus(2);
vailCodeResultResponse.setErrMsg("该追溯码已被单据校验"); vailCodeResultResponse.setErrMsg("该追溯码已被单据校验");
vailCodeResultResponses.add(vailCodeResultResponse); vailCodeResultResponses.add(vailCodeResultResponse);
continue; 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); UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
// 校验是否本单产品
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity); IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
if (collectOrderBizBackup == null) { if (collectOrderBizBackup == null) {
vailCodeResultResponse.setStatus(4); vailCodeResultResponse.setStatus(4);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("非此单产品"); vailCodeResultResponse.setErrMsg("非此单产品");
vailCodeResultResponses.add(vailCodeResultResponse); vailCodeResultResponses.add(vailCodeResultResponse);
continue; continue;
} }
IoCollectCodeBackup ioCollectCodeBackup = ioCollectCodeBackMapper.selectOne(new LambdaQueryWrapper<IoCollectCodeBackup>()
.eq(IoCollectCodeBackup::getBillNo, filterCodeRequest.getBillNo()) // 校验扫码次数相关逻辑
.eq(IoCollectCodeBackup::getCode, code)); boolean isScanCountExceeded = checkScanCountExceeded(filterCodeRequest, udiRelevanceResponse, code);
if (ioCollectCodeBackup != null) { if (isScanCountExceeded) {
vailCodeResultResponse.setStatus(3);
vailCodeResultResponse.setErrMsg("追溯码校验校验超出");
vailCodeResultResponses.add(vailCodeResultResponse);
continue;
}
IoCollectCodeBackup ioCollectCodeBackup = getIoCollectCodeBackup(filterCodeRequest.getBillNo(), code);
if (ioCollectCodeBackup!= null) {
vailCodeResultResponse.setStatus(1); vailCodeResultResponse.setStatus(1);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setSucMsg("校验成功"); vailCodeResultResponse.setSucMsg("校验成功");
vailCodeResultResponses.add(vailCodeResultResponse); vailCodeResultResponses.add(vailCodeResultResponse);
//校验成功 加入校验表 // 校验成功 加入校验表
setOrderCheckStatus(ioCollectCodeBackup); setOrderCheckStatus(ioCollectCodeBackup);
} else { } else {
vailCodeResultResponse.setStatus(5); vailCodeResultResponse.setStatus(5);
vailCodeResultResponse.setCode(code);
vailCodeResultResponse.setErrMsg("追溯码不存在"); vailCodeResultResponse.setErrMsg("追溯码不存在");
vailCodeResultResponses.add(vailCodeResultResponse); vailCodeResultResponses.add(vailCodeResultResponse);
} }
@ -197,9 +191,34 @@ public class IoCollectCodeBackService extends ServiceImpl<IoCollectCodeBackMappe
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) { public AddEnterCodeResponse setAddEnterCodeResponse(UdiEntity udiEntity, UdiRelevanceResponse checkUdi) {
AddEnterCodeResponse addEnterCodeResponse = new AddEnterCodeResponse(); AddEnterCodeResponse addEnterCodeResponse = new AddEnterCodeResponse();
BeanUtils.copyProperties(udiEntity, addEnterCodeResponse); BeanUtils.copyProperties(udiEntity, addEnterCodeResponse);

Loading…
Cancel
Save