退货扫码冲突

dev_2.5_csconfilt
yewj 3 months ago
parent 172385ad89
commit c59fa07587

@ -1830,12 +1830,16 @@ public class IoCodeTempController extends BaseController {
return ResultVOUtils.error(533, "扫码重复!");
}
} else if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) {
if (fifoCodeEntity == null) {
return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!");
}
if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())
return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!");
IoCollectSet collectSet = collectSetService.getSet();
if (!IntUtil.value(collectSet.getConflictReturn())) {
if (fifoCodeEntity == null) {
return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!");
}
if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())
return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!");
}
}
if (codeTempEntity != null) {
return ResultVOUtils.error(533, "扫码重复!");
}

@ -433,11 +433,11 @@ public class IoOrderController extends BaseController {
if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) {
for (IoCodeTempEntity codeTempEntity : codeTempEntities) {
IoSplitFifoCodeEntity fifoCodeEntity = fifoCodeService.findByCode(codeTempEntity.getCode(), addOrderRequest.getWorkPlaceCode());
if (fifoCodeEntity == null && StrUtil.isEmpty(fifoCodeEntity.getSerialNo())) {
return ResultVOUtils.error(500, "当前追溯码:" + fifoCodeEntity.getCode() + "未上货!");
}
// if (fifoCodeEntity == null) {
// return ResultVOUtils.error(500, "当前追溯码:" + fifoCodeEntity.getCode() + "未上货!");
// }
//校验工位库存
if (fifoCodeEntity.getTotalCount() < codeTempEntity.getReCount()) {
if (fifoCodeEntity!=null && fifoCodeEntity.getTotalCount() < codeTempEntity.getReCount()) {
return ResultVOUtils.error(500, "当前码:" + fifoCodeEntity.getCode() + "库存不足,请更改码明细!");
}
}

@ -130,6 +130,15 @@ public class IoCollectSet implements Serializable {
private Boolean delayTageCode;
@TableField(value = "conflictScan")
@ApiModelProperty(value = "是否启用扫码冲突替换10否")
private Boolean conflictScan;
@TableField(value = "conflictReturn")
@ApiModelProperty(value = "是否启用退货扫码冲突替换10否")
private Boolean conflictReturn;
private static final long serialVersionUID = 1L;
@TableField(exist = false)

@ -919,11 +919,14 @@ public class AddCoodeService {
return ResultVOUtils.error(533, "扫码重复!");
}
} else if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) {
if (fifoCodeEntity == null) {
return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!");
}
if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())
return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!");
IoCollectSet collectSet = collectSetService.getSet();
if (!IntUtil.value(collectSet.getConflictReturn())) {
if (fifoCodeEntity == null) {
return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!");
}
if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())
return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!");
}
}
if (codeTempEntity != null) {
return ResultVOUtils.error(533, "扫码重复!");

@ -1283,7 +1283,7 @@ public class IoCheckInoutService {
} else if (orderEntity.getAction().equals(ConstantType.SPLIT_RETURN)) {
//拆零预出库退回
List<IoCodeEntity> codeList = codeService.findByOrderId(orderEntity.getBillNo());
fifoInvService.removeInv(codeList, orderEntity.getWorkPlaceCode());
fifoInvService.removeInv(codeList, orderEntity);
splitFifoCodeService.updateAllInvAlert(orderEntity.getWorkPlaceCode());
}
}

@ -199,10 +199,12 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
collectOrderBizService.updateById(collectOrderBiz);
}
@Resource
IoCollectSetService collectSetService;
@Transactional(rollbackFor = Exception.class)
public void finishAutoTagCode(IoCollectOrder collectOrder, Boolean isAuto, String queueCode) {
IoCollectSet collectSet = collectSetService.getSet();
SysWorkplacePutRel sysWorkplacePutRel = workplacePutRelService.findPutWorkPlace(collectOrder.getWorkPlaceCode(), collectOrder.getBusType());
Long putWorkPlaceCode = null;
if (sysWorkplacePutRel != null) putWorkPlaceCode = sysWorkplacePutRel.getWorkPlaceCode();
@ -212,7 +214,9 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
List<IoCollectOrderCodeMan> collectOrderCodeMEN = collectOrderCodeManService.listByBillNo(collectOrder.getBillNo());
if (CollUtil.isNotEmpty(collectOrderCodeMEN)) {
//扫码冲突
dealOrderReplace(collectOrderCodeMEN, collectOrder, putWorkPlaceCode);
if (IntUtil.value(collectSet.getConflictScan())) {
dealOrderReplace(collectOrderCodeMEN, collectOrder, putWorkPlaceCode);
}
for (IoCollectOrderCodeMan collectOrderCodeMan : collectOrderCodeMEN) {
if (IntUtil.value(collectOrderCodeMan.getRemoveFlag())) {
continue;
@ -408,7 +412,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
if (splitFifoCodeEntity == null) {
throw new JsonException(500, "工位存量不足!");
}
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(collectOrder.getId() + "").autoCode(splitFifoCodeEntity.getCode()).manuCode(collectOrderCodeMan.getUdiCode()).type(1) //未上传医保替换码
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(collectOrder.getBillNo()).autoCode(splitFifoCodeEntity.getCode()).manuCode(collectOrderCodeMan.getUdiCode()).type(1) //未上传医保替换码
.updateTime(new Date()).build();
collectErrorLogMapper.insert(ioCollectErrorLog);
//替换已完成单据的码
@ -426,66 +430,59 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
*/
public void workReturnReplace(IoCodeEntity codeEntity, Long workPlaceCode) {
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), workPlaceCode);
if (ioSplitFifoCodeEntity == null) {
// 1.判断工位库存是否足够
// 2.工位库存足够的话,判断已完成单是否存在,
// 3.存在的话,判断已完成单是否已上传医保
// 4.已上传医保的话,调用医保删除接口
List<IoSplitFifoCodeEntity> splitFifoCodeEntitys = splitFifoCodeService.findByRelId(workPlaceCode, codeEntity.getRelId(), codeEntity.getBatchNo(), null);
if (CollUtil.isEmpty(splitFifoCodeEntitys)) {
throw new JsonException(500, "工位库存不足!");
}
// ioSplitFifoCodeEntity = splitFifoCodeEntitys.get(0);
// 1.判断工位库存是否足够
// 2.工位库存足够的话,判断已完成单是否存在,
// 3.存在的话,判断已完成单是否已上传医保
// 4.已上传医保的话,调用医保删除接口
List<IoCollectCodeBackup> collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper<IoCollectCodeBackup>().eq(IoCollectCodeBackup::getCode, ioSplitFifoCodeEntity.getCode()));
if (CollUtil.isNotEmpty(collectCodeBackups)) {
IoCollectCodeBackup collectCodeBackup = collectCodeBackups.get(0);
if (IntUtil.value(collectCodeBackup.getFifoSplit()) == 3) {
throw new JsonException(500, collectCodeBackup.getCode() + "重复扫码,请盘查后重试!");
List<IoSplitFifoCodeEntity> splitFifoCodeEntitys = splitFifoCodeService.findByRelId(workPlaceCode, codeEntity.getRelId(), codeEntity.getBatchNo(), null);
if (CollUtil.isEmpty(splitFifoCodeEntitys)) {
throw new JsonException(500, "工位库存不足!");
}
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeEntitys.get(0);
List<IoCollectCodeBackup> collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper<IoCollectCodeBackup>().eq(IoCollectCodeBackup::getCode, codeEntity.getCode()));
if (CollUtil.isNotEmpty(collectCodeBackups)) {
IoCollectCodeBackup collectCodeBackup = collectCodeBackups.get(0);
// if (IntUtil.value(collectCodeBackup.getFifoSplit()) == 3) {
// throw new JsonException(500, collectCodeBackup.getCode() + "重复扫码,请盘查后重试!");
// }
IoCollectOrderBackup collectOrderBackup = collectOrderBackupMapper.selectOne(new LambdaQueryWrapper<IoCollectOrderBackup>().eq(IoCollectOrderBackup::getBillNo, collectCodeBackup.getBillNo()));
if (IntUtil.value(collectOrderBackup.getUploadStatus()) == 2) {
// 单据已被上传至医保 ---- 取当前库存的码替换至已完成单的码,并退库,以当前的码为退库单的码,并生成替换日志
IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity);
if (splitFifoCodeEntity == null) {
throw new JsonException(500, "工位存量不足!");
}
IoCollectOrderBackup collectOrderBackup = collectOrderBackupMapper.selectOne(new LambdaQueryWrapper<IoCollectOrderBackup>().eq(IoCollectOrderBackup::getBillNo, collectCodeBackup.getBillNo()));
if (IntUtil.value(collectOrderBackup.getUploadStatus()) == 2) {
// 单据已被上传至医保 ---- 取当前库存的码替换至已完成单的码,并退库,以当前的码为退库单的码,并生成替换日志
IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity);
if (splitFifoCodeEntity == null) {
throw new JsonException(500, "工位存量不足!");
}
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(4) //退货已上传医保替换码
.updateTime(new Date()).build();
collectErrorLogMapper.insert(ioCollectErrorLog);
collectCodeBackup.setCode(splitFifoCodeEntity.getCode());
collectCodeBackMapper.updateById(collectCodeBackup);
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(ioSplitFifoCodeEntity.getCode()).type(4) //退货已上传医保替换码
.updateTime(new Date()).build();
collectErrorLogMapper.insert(ioCollectErrorLog);
collectCodeBackup.setCode(splitFifoCodeEntity.getCode());
collectCodeBackMapper.updateById(collectCodeBackup);
// 若已完成单已上传医保,则当前已完成单的码就与医保实际已上传的码不匹配;
// 解决方案1 调用医保接口删除当前单据,并重新把最新的单据上传;
// 若已完成单已上传医保,则当前已完成单的码就与医保实际已上传的码不匹配;
// 解决方案1 调用医保接口删除当前单据,并重新把最新的单据上传;
// 解决方案2 不管,保留替换记录
// 解决方案2 不管,保留替换记录
} else {
//单据未上传医保,上传医保失败
IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity);
if (splitFifoCodeEntity == null) {
throw new JsonException(500, "工位存量不足!");
}
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(3) //退货未上传医保替换码
.updateTime(new Date()).build();
collectErrorLogMapper.insert(ioCollectErrorLog);
//替换已完成单据的码
collectCodeBackup.setCode(splitFifoCodeEntity.getCode());
collectCodeBackMapper.updateById(collectCodeBackup);
} else {
//单据未上传医保,上传医保失败
IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity);
if (splitFifoCodeEntity == null) {
throw new JsonException(500, "工位存量不足!");
}
IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(3) //退货未上传医保替换码
.updateTime(new Date()).build();
collectErrorLogMapper.insert(ioCollectErrorLog);
//替换已完成单据的码
collectCodeBackup.setCode(splitFifoCodeEntity.getCode());
collectCodeBackMapper.updateById(collectCodeBackup);
}
}
}

@ -13,10 +13,7 @@ import com.glxp.api.dao.inout.IoSplitFifoInvMapper;
import com.glxp.api.entity.basic.SysWorkplaceLayer;
import com.glxp.api.entity.basic.SysWorkplacePutRel;
import com.glxp.api.entity.basic.SysWorkplaceQueue;
import com.glxp.api.entity.collect.IoCollectCodeBackup;
import com.glxp.api.entity.collect.IoCollectErrorLog;
import com.glxp.api.entity.collect.IoCollectOrderBackup;
import com.glxp.api.entity.collect.IoSplitFifoInvRel;
import com.glxp.api.entity.collect.*;
import com.glxp.api.entity.inout.*;
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.basic.SysWorkplaceLayerRequest;
@ -28,6 +25,7 @@ import com.glxp.api.service.basic.SysWorkplaceDocumentService;
import com.glxp.api.service.basic.SysWorkplaceLayerService;
import com.glxp.api.service.basic.SysWorkplaceQueueService;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.collect.IoCollectSetService;
import com.glxp.api.service.collect.IoSplitFifoInvRelService;
import com.glxp.api.service.thrsys.SysWorkplacePutRelService;
import com.glxp.api.util.IntUtil;
@ -226,58 +224,62 @@ public class IoSplitFifoInvService extends ServiceImpl<IoSplitFifoInvMapper, IoS
IoCollectOrderBackupMapper collectOrderBackupMapper;
@Resource
IoCollectCodeBackMapper collectCodeBackMapper;
@Resource
IoCollectSetService collectSetService;
/**
*
*
* @param codeList
* @param workPlaceCode
*/
@Transactional(rollbackFor = Exception.class)
public void removeInv(List<IoCodeEntity> codeList, Long workPlaceCode) {
public void removeInv(List<IoCodeEntity> codeList, IoOrderEntity orderEntity) {
List<IoSplitFifoCodeEntity> splitCodeEntities = new ArrayList<>();
IoCollectSet collectSet = collectSetService.getSet();
if (CollUtil.isNotEmpty(codeList)) {
for (IoCodeEntity codeEntity : codeList) {
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), workPlaceCode);
if (StrUtil.isEmpty(codeEntity.getSerialNo())) {
if (ioSplitFifoCodeEntity != null) {
ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) - IntUtil.value(codeEntity.getCount()));
ioSplitFifoCodeEntity.setTotalCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()) - IntUtil.value(codeEntity.getReCount()));
ioSplitFifoCodeEntity.setUpdateTime(new Date());
splitFifoCodeService.updateById(ioSplitFifoCodeEntity);
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + IntUtil.value(codeEntity.getCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), orderEntity.getWorkPlaceCode());
if (ioSplitFifoCodeEntity == null && IntUtil.value(collectSet.getConflictReturn())) {
ioSplitCodeService.workReturnReplace(codeEntity, orderEntity.getWorkPlaceCode());
} else {
//退库扫码冲突判断
if (StrUtil.isEmpty(codeEntity.getSerialNo())) {
if (ioSplitFifoCodeEntity != null) {
ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) - IntUtil.value(codeEntity.getCount()));
ioSplitFifoCodeEntity.setTotalCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()) - IntUtil.value(codeEntity.getReCount()));
ioSplitFifoCodeEntity.setUpdateTime(new Date());
splitFifoCodeService.updateById(ioSplitFifoCodeEntity);
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + IntUtil.value(codeEntity.getCount()));
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount()));
splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
}
if (ioSplitFifoCodeEntity.getScanCount() == 0) {
splitFifoCodeService.removeById(ioSplitFifoCodeEntity);
}
}
if (ioSplitFifoCodeEntity.getScanCount() == 0) {
splitFifoCodeService.removeById(ioSplitFifoCodeEntity);
} else {
if (ioSplitFifoCodeEntity != null) splitCodeEntities.add(ioSplitFifoCodeEntity);
splitFifoCodeService.removeBatchByIds(splitCodeEntities);
for (IoSplitFifoCodeEntity tempEntity : splitCodeEntities) {
IoSplitFifoInv splitFifoInv = findByFifoCode(tempEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(tempEntity.getTotalCount()));
splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + 1);
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()));
splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
}
}
}
} else {
if (ioSplitFifoCodeEntity != null) splitCodeEntities.add(ioSplitFifoCodeEntity);
}
}
}
splitFifoCodeService.removeBatchByIds(splitCodeEntities);
for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : splitCodeEntities) {
IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity);
if (splitFifoInv != null) {
splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()));
splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + 1);
splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()));
splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount()));
splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount()));
updateById(splitFifoInv);
}
}
}

@ -5590,6 +5590,15 @@ CALL Pro_Temp_ColumnWork('io_collect_set', 'delayTageCode',
1);
CALL Pro_Temp_ColumnWork('io_collect_set', 'conflictScan',
'tinyint NULL DEFAULT NULL COMMENT ''是否启用扫码冲突替换10''',
1);
CALL Pro_Temp_ColumnWork('io_collect_set', 'conflictReturn',
'tinyint NULL DEFAULT NULL COMMENT ''是否启用退货扫码冲突替换10''',
1);
CREATE TABLE IF NOT EXISTS `yb_uploading_log` (
`id` int NOT NULL AUTO_INCREMENT,
`ybParam` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '医保入参',

Loading…
Cancel
Save