|
|
@ -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,117 +91,134 @@ 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, "该追溯码已被其他单据校验");
|
|
|
|
private BaseResponse handleSingleCode(IoCollectCodeRequest filterCodeRequest) {
|
|
|
|
}
|
|
|
|
// 检查校验码是否已被其他单据校验
|
|
|
|
for (CollectOrderBizResponse collectOrderBizResponse : collectOrderBizResponses) {
|
|
|
|
IoCollectOrderCheckCode existingCode = getExistingCheckCode(filterCodeRequest.getCode());
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(collectOrderBizResponse.getNameCode());
|
|
|
|
if (existingCode!= null) {
|
|
|
|
Integer checkCount = ioCollectOrderCheckCodeService.getCountByRelIdAndBillNo(udiRelevanceResponse.getId(), filterCodeRequest.getBillNo());
|
|
|
|
return ResultVOUtils.error(500, "该追溯码已被其他单据校验");
|
|
|
|
if (checkCount == collectOrderBizResponse.getScanActCount()) {
|
|
|
|
}
|
|
|
|
BaseResponse response = new BaseResponse();
|
|
|
|
|
|
|
|
response.setData(filterCodeRequest.getCode());
|
|
|
|
// 校验是否本单产品
|
|
|
|
response.setCode(500);
|
|
|
|
UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeRequest.getCode());
|
|
|
|
response.setMessage("追溯码校验校验超出");
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
|
|
|
|
return response;
|
|
|
|
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);
|
|
|
|
IoCollectOrderBizBackup collectOrderBizBackup = checkProduct(filterCodeRequest.getBillNo(), udiEntity);
|
|
|
|
if (collectOrderBizBackup == null) {
|
|
|
|
if (collectOrderBizBackup == null) {
|
|
|
|
BaseResponse response = new BaseResponse();
|
|
|
|
vailCodeResultResponse.setStatus(4);
|
|
|
|
response.setData(filterCodeRequest.getCode());
|
|
|
|
vailCodeResultResponse.setErrMsg("非此单产品");
|
|
|
|
response.setCode(500);
|
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
|
response.setMessage("非此单产品");
|
|
|
|
continue;
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 校验扫码次数相关逻辑
|
|
|
|
|
|
|
|
boolean isScanCountExceeded = checkScanCountExceeded(filterCodeRequest, udiRelevanceResponse, code);
|
|
|
|
|
|
|
|
if (isScanCountExceeded) {
|
|
|
|
|
|
|
|
vailCodeResultResponse.setStatus(3);
|
|
|
|
|
|
|
|
vailCodeResultResponse.setErrMsg("追溯码校验校验超出");
|
|
|
|
|
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
|
|
|
|
IoCollectCodeBackup ioCollectCodeBackup = getIoCollectCodeBackup(filterCodeRequest.getBillNo(), code);
|
|
|
|
udiEntity.setCode(filterCodeRequest.getCode());
|
|
|
|
if (ioCollectCodeBackup!= null) {
|
|
|
|
AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse);
|
|
|
|
vailCodeResultResponse.setStatus(1);
|
|
|
|
setOrderCheckStatus(ioCollectCodeBackup);
|
|
|
|
vailCodeResultResponse.setSucMsg("校验成功");
|
|
|
|
return ResultVOUtils.success(addEnterCodeResponse);
|
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
|
} else {
|
|
|
|
// 校验成功 加入校验表
|
|
|
|
List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>();
|
|
|
|
setOrderCheckStatus(ioCollectCodeBackup);
|
|
|
|
for (String code : filterCodeRequest.getCodeList()) {
|
|
|
|
} else {
|
|
|
|
VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse();
|
|
|
|
vailCodeResultResponse.setStatus(5);
|
|
|
|
IoCollectOrderCheckCode one = ioCollectOrderCheckCodeService.getOne(new LambdaQueryWrapper<IoCollectOrderCheckCode>().eq(IoCollectOrderCheckCode::getCode, code));
|
|
|
|
vailCodeResultResponse.setErrMsg("追溯码不存在");
|
|
|
|
if (one != null) {
|
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
|
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);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
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);
|
|
|
|