fix: 修复入库单据提交时序列号唯一性校验

dev_price
chenhc 1 year ago
parent b7f26a1686
commit bd7154b81b

@ -3,6 +3,6 @@ package com.glxp.api.constant;
public interface ConstantType {
String TYPE_STOCK_CHECK = "StockCheck"; //盘点
String TYPE_PUT = "WareHouseIn"; //
String TYPE_OUT = "WareHouseOut"; //
String TYPE_PUT = "WareHouseIn"; //
String TYPE_OUT = "WareHouseOut"; //
}

@ -6,6 +6,7 @@ import com.glxp.api.req.inout.FilterCodeRequest;
import com.glxp.api.res.inout.IoCodeResponse;
import java.util.List;
import java.util.Map;
public interface IoCodeDao extends BaseMapperPlus<IoCodeDao, IoCodeEntity, IoCodeEntity> {
@ -24,4 +25,11 @@ public interface IoCodeDao extends BaseMapperPlus<IoCodeDao, IoCodeEntity, IoCod
* @return
*/
List<IoCodeResponse> filterList(FilterCodeRequest filterCodeRequest);
/**
* codesum
* @param codes
* @return
*/
List<IoCodeResponse> findByCodeSumReCount(List<String> codes);
}

@ -18,6 +18,9 @@ import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.inv.InvInnerOrderPdfTempEntity;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.exception.JsonException;
import com.glxp.api.exception.ServiceException;
import com.glxp.api.res.inout.IoCodeResponse;
import com.glxp.api.res.inout.IoOrderCheckResultResponse;
import com.glxp.api.res.inout.IoOrderDetailBizResponse;
import com.glxp.api.res.inout.IoOrderDetailCodeResponse;
@ -156,63 +159,101 @@ public class IoCheckInoutService {
orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_POST);
orderService.update(orderEntity);
List<IoCodeTempEntity> codeTempEntities = codeTempService.findByOrderId(orderEntity.getBillNo());
//序列号唯一性校验
serialNoUniquenessVerification(codeTempEntities);
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (!bussinessTypeEntity.isCheckEnable()) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
} else {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (bussinessTypeEntity.getCheckUdims() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (bussinessTypeEntity.getCheckWebNew() == 0 || bussinessTypeEntity.getCheckWebNew() == 4) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (bussinessTypeEntity.getCheckPdaEd() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (bussinessTypeEntity.getCheckPdaUn() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (bussinessTypeEntity.getCheckPc() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (bussinessTypeEntity.getCheckChange() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (bussinessTypeEntity.getCheckBalance() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (bussinessTypeEntity.getCheckSp() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (bussinessTypeEntity.getCheckCopy() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_REVIEW) {
if (bussinessTypeEntity.getCheckReview() == 0) {
unCheckFirstFinish(orderEntity);
unCheckFirstFinish(orderEntity,codeTempEntities);
return;
}
}
checkFirstFinish(orderEntity);
checkFirstFinish(orderEntity,codeTempEntities);
}
}
/**
* code
* 1code code
* 2code codesum code 0
*/
private void serialNoUniquenessVerification(List<IoCodeTempEntity> codeTempEntities) {
if (CollUtil.isNotEmpty(codeTempEntities)){
List<String> codes = new ArrayList<>(codeTempEntities.size());
codeTempEntities.stream().forEach( x -> {
if (StrUtil.isNotBlank(x.getSerialNo())){
codes.add(x.getCode());
}
});
if (CollUtil.isNotEmpty(codes)){
//正式code表里 对code分组sum实际库存数量
List<IoCodeResponse> codeSumReCountList = codeService.findByCodeSumReCount(codes);
if (codeSumReCountList.size() > 0 ){
StringBuilder msg = new StringBuilder();
codeSumReCountList.forEach( x -> {
if (x.getReCount() > 0){
msg.append(x.getCode()+",");
}
});
if (StrUtil.isNotEmpty(msg)){
msg.deleteCharAt(msg.length()-1);
throw new JsonException(500,"产品UDI码" + msg + "存库唯一性校验不通过!");
}
}
}
}
}
@Resource
@ -334,7 +375,7 @@ public class IoCheckInoutService {
//一次校验(无需校验)完成
public void unCheckFirstFinish(IoOrderEntity orderEntity) {
public void unCheckFirstFinish(IoOrderEntity orderEntity,List<IoCodeTempEntity> codeTempEntities) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
@ -380,7 +421,6 @@ public class IoCheckInoutService {
//临时表转正式表
List<IoCodeTempEntity> codeTempEntities = codeTempService.findByOrderId(orderEntity.getBillNo());
for (IoCodeTempEntity codeTempEntity : codeTempEntities) {
IoCodeEntity codeEnttity = new IoCodeEntity();
BeanUtils.copyProperties(codeTempEntity, codeEnttity);
@ -402,7 +442,7 @@ public class IoCheckInoutService {
//一次校验完成
public void checkFirstFinish(IoOrderEntity orderEntity) {
public void checkFirstFinish(IoOrderEntity orderEntity,List<IoCodeTempEntity> codeTempEntities) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
List<IoOrderDetailBizEntity> orderDetailBizEntities = orderDetailBizService.findByOrderId(orderEntity.getBillNo());
@ -502,7 +542,6 @@ public class IoCheckInoutService {
// orderDetailCodeDao.updateBatchById(orderDetailCodeEntities);
//临时表转正式表
List<IoCodeTempEntity> codeTempEntities = codeTempService.findByOrderId(orderEntity.getBillNo());
for (IoCodeTempEntity codeTempEntity : codeTempEntities) {
IoCodeEntity codeEnttity = new IoCodeEntity();
BeanUtils.copyProperties(codeTempEntity, codeEnttity);

@ -24,6 +24,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@Service
@Transactional(rollbackFor = Exception.class)
@ -149,5 +150,12 @@ public class IoCodeService extends ServiceImpl<IoCodeDao, IoCodeEntity> {
return ioCodeResponses;
}
/**
* codesum
* @param codes
* @return
*/
public List<IoCodeResponse> findByCodeSumReCount(List<String> codes) {
return ioCodeDao.findByCodeSumReCount(codes);
}
}

@ -107,4 +107,24 @@
</where>
group by ic.id
</select>
<select id="findByCodeSumReCount" resultType="com.glxp.api.res.inout.IoCodeResponse">
select ic.code,
SUM(
CASE WHEN ic.mainAction = '${@com.glxp.api.constant.ConstantType@TYPE_PUT}'
THEN ic.reCount ELSE -ic.reCount END
) AS reCount
from io_code ic
<where>
<if test="codes != null and codes.size() != 0">
AND ic.code in
<foreach collection="codes" item="item" open="(" close=")" index="index" separator=",">
#{item}
</foreach>
</if>
</where>
group by ic.code
</select>
</mapper>

Loading…
Cancel
Save