You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-java/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java

1262 lines
58 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.glxp.api.service.inout;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.dao.inout.IoOrderDetailCodeDao;
import com.glxp.api.entity.auth.InvWarehouseEntity;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
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;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.basic.UdiProductService;
import com.glxp.api.service.inout.impl.IoCodeService;
import com.glxp.api.service.inout.impl.IoCodeTempService;
import com.glxp.api.service.inout.impl.IoOrderInvoiceService;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvPreinOrderService;
import com.glxp.api.service.inv.InvPreinProductDetailService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.util.*;
import com.glxp.api.util.udi.FilterUdiUtils;
import com.glxp.api.util.udi.UdiCalCountUtil;
import lombok.RequiredArgsConstructor;
import net.sf.jasperreports.engine.JRException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
import static com.glxp.api.constant.ConstantStatus.ORDER_STATUS_CHECK_PROCESS;
/**
* 校验出入库服务
*/
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class IoCheckInoutService {
@Resource
IoOrderService orderService;
@Resource
IoCodeService codeService;
@Resource
IoCodeTempService codeTempService;
@Resource
IBasicBussinessTypeService basicBussinessTypeService;
@Lazy
private final IoOrderDetailCodeService orderDetailCodeService;
@Lazy
private final IoOrderDetailBizService orderDetailBizService;
@Resource
IoOrderDetailResultService orderDetailResultService;
@Resource
IoOrderDetailCodeDao orderDetailCodeDao;
@Resource
InvPreinDetailService invPreinDetailService;
@Resource
IoGenInvService genInvService;
@Resource
IoAddInoutService addInoutService;
@Resource
SystemParamConfigService systemParamConfigService;
@Resource
UdiProductService udiProductService;
/**
* 判断是否需要手动校验
*
* @param billNo
* @return
*/
public boolean checkManual(String billNo) {
IoOrderEntity orderEntity = orderService.findByBillNo(billNo);
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (!bussinessTypeEntity.isCheckEnable()) {
return false;
} else {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (bussinessTypeEntity.getCheckUdims() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (bussinessTypeEntity.getCheckWebNew() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (bussinessTypeEntity.getCheckPdaEd() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (bussinessTypeEntity.getCheckPdaUn() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (bussinessTypeEntity.getCheckPc() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (bussinessTypeEntity.getCheckChange() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (bussinessTypeEntity.getCheckBalance() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (bussinessTypeEntity.getCheckSp() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (bussinessTypeEntity.getCheckCopy() == 0) {
return false;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_REVIEW) {
if (bussinessTypeEntity.getCheckReview() == 0) {
return false;
}
}
return true;
}
}
/**
* 校验流程 | 一次校验
*
* @param orderId
*/
public void check(String orderId) {
IoOrderEntity orderEntity = orderService.findByBillNo(orderId);
//过滤非未校验或校验异常
if (orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK_PROCESS &&
orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK && orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK_FAIL)
return;
orderEntity.setStatus(ORDER_STATUS_CHECK_PROCESS);
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, codeTempEntities);
} else {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (bussinessTypeEntity.getCheckUdims() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (bussinessTypeEntity.getCheckWebNew() == 0 || bussinessTypeEntity.getCheckWebNew() == 4) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (bussinessTypeEntity.getCheckPdaEd() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (bussinessTypeEntity.getCheckPdaUn() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (bussinessTypeEntity.getCheckPc() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (bussinessTypeEntity.getCheckChange() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (bussinessTypeEntity.getCheckBalance() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (bussinessTypeEntity.getCheckSp() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (bussinessTypeEntity.getCheckCopy() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_REVIEW) {
if (bussinessTypeEntity.getCheckReview() == 0) {
unCheckFirstFinish(orderEntity, codeTempEntities);
return;
}
}
checkFirstFinish(orderEntity, codeTempEntities);
}
}
/**
* code列表中 有序列号的 进行唯一校验
* 1、查找出临时code中 有 序列号的 code集合
* 2、在正式code表里 对code分组sum库存 前提是 在待校验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
IoCodeLostService codeLostService;
@Async
public void genLostCode(String orderId) {
List<IoCodeEntity> ioCodeEntities = codeService.findByOrderId(orderId);
for (IoCodeEntity codeEntity : ioCodeEntities) {
UdiEntity udiEntity = FilterUdiUtils.getUdi(codeEntity.getCode());
IoCodeLostEntity codeLostEntity = codeLostService.findByCode(codeEntity.getCode());
if (codeLostEntity == null) {
codeLostEntity = new IoCodeLostEntity();
codeLostEntity.setId(IdUtil.getSnowflakeNextId());
codeLostEntity.setNameCode(udiEntity.getUdi());
codeLostEntity.setCode(codeEntity.getCode());
codeLostEntity.setBatchNo(codeEntity.getBatchNo());
codeLostEntity.setProduceDate(codeEntity.getProduceDate());
codeLostEntity.setExpireDate(codeEntity.getExpireDate());
codeLostEntity.setSerialNo(codeEntity.getSerialNo());
}
//校验是否写入缺失表
boolean isTrue = false;
if (udiEntity != null) {
if (!StrUtil.trimToEmpty(codeEntity.getBatchNo()).equals(StrUtil.trimToEmpty(udiEntity.getBatchNo()))) {
if (StrUtil.isNotEmpty(codeEntity.getBatchNo())) {
codeLostEntity.setBatchNo(codeEntity.getBatchNo());
isTrue = true;
}
}
if (!StrUtil.trimToEmpty(codeEntity.getProduceDate()).equals(StrUtil.trimToEmpty(udiEntity.getProduceDate()))) {
if (StrUtil.isNotEmpty(codeEntity.getProduceDate())) {
codeLostEntity.setProduceDate(codeEntity.getProduceDate());
isTrue = true;
}
}
if (!StrUtil.trimToEmpty(codeEntity.getExpireDate()).equals(StrUtil.trimToEmpty(udiEntity.getExpireDate()))) {
if (StrUtil.isNotEmpty(codeEntity.getExpireDate())) {
codeLostEntity.setExpireDate(codeEntity.getExpireDate());
isTrue = true;
}
}
if (isTrue && codeLostEntity.getId() != null) {
codeLostEntity.setCreateTime(new Date());
codeLostService.insertOrUpdate(codeLostEntity);
}
}
}
}
public String checkCode(IoCodeTempEntity codeEntity) {
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("only_vail_batch");
boolean vailBatchNo = false;
if (systemParamConfigEntity != null) {
if (systemParamConfigEntity.getParamValue().equals("1")) {
vailBatchNo = true;
}
}
boolean isBillExit = orderDetailBizService.isExit(codeEntity.getOrderId());
if (!isBillExit) {
return "请先录入业务详情";
}
IoOrderDetailBizEntity bizEntity;
if (vailBatchNo) {
bizEntity = orderDetailBizService.findByUnique(codeEntity.getOrderId(), codeEntity.getRelId(), codeEntity.getBatchNo());
} else {
bizEntity = orderDetailBizService.findByUnique(codeEntity.getOrderId(), codeEntity.getRelId(), codeEntity.getBatchNo(), codeEntity.getProduceDate(), codeEntity.getExpireDate());
}
if (bizEntity == null) {
return "非此单产品!";
}
IoOrderDetailCodeEntity orderDetailCodeEntity = orderDetailCodeService.findByUnique(codeEntity.getOrderId(), codeEntity.getRelId(), codeEntity.getBatchNo());
int curCount = 0;
if (orderDetailCodeEntity != null) {
curCount = orderDetailCodeEntity.getReCount() + codeEntity.getMyReCount();
} else {
curCount = codeEntity.getMyReCount();
}
if (curCount > bizEntity.getCount()) {
return "当前产品数量超出!";
}
if (bizEntity.getPrice() != null)
codeEntity.setPrice(bizEntity.getPrice());
return null;
}
// 无三期拣货校验
public String checkNoPiCode(IoCodeTempEntity codeTempEntity) {
boolean isBillExit = orderDetailBizService.isExit(codeTempEntity.getOrderId());
if (!isBillExit) {
return "请先录入业务详情";
}
IoOrderDetailBizEntity bizEntity = orderDetailBizService.findByRelId(codeTempEntity.getOrderId(), codeTempEntity.getRelId());
if (bizEntity == null) {
return "非此单产品!";
}
Integer detailCount = orderDetailCodeService.findByRelIdCount(codeTempEntity.getOrderId(), codeTempEntity.getRelId());
int curCount = 0;
if (detailCount != null) {
curCount = detailCount + codeTempEntity.getMyReCount();
} else {
curCount = codeTempEntity.getMyReCount();
}
if (curCount > bizEntity.getCount()) {
return "当前产品数量超出!";
}
if (bizEntity.getPrice() != null)
codeTempEntity.setPrice(bizEntity.getPrice());
return null;
}
public String checkDrugNoPiCode(IoCodeTempEntity codeTempEntity) {
boolean isBillExit = orderDetailBizService.isExit(codeTempEntity.getOrderId());
if (!isBillExit) {
return "请先录入业务详情";
}
IoOrderDetailBizEntity bizEntity = orderDetailBizService.findByRelId(codeTempEntity.getOrderId(), codeTempEntity.getRelId());
if (bizEntity == null) {
return "非此单产品!";
}
Integer detailCount = orderDetailCodeService.findByRelIdCount(codeTempEntity.getOrderId(), codeTempEntity.getRelId());
int curCount = 0;
if (detailCount != null) {
curCount = detailCount + codeTempEntity.getMyReCount();
} else {
curCount = codeTempEntity.getMyReCount();
}
if (curCount > bizEntity.getCount()) {
return "当前产品数量超出!";
}
if (bizEntity.getPrice() != null) {
codeTempEntity.setPrice(bizEntity.getPrice());
}
if (StrUtil.isEmpty(codeTempEntity.getBatchNo())) {
codeTempEntity.setBatchNo(bizEntity.getBatchNo());
codeTempEntity.setProduceDate(bizEntity.getProductDate());
codeTempEntity.setExpireDate(bizEntity.getExpireDate());
}
return null;
}
//一次校验(无需校验)完成
public void unCheckFirstFinish(IoOrderEntity orderEntity, List<IoCodeTempEntity> codeTempEntities) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
if (CollUtil.isEmpty(orderDetailCodeEntities)) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_FAIL);
orderEntity.setUpdateTime(new Date());
orderEntity.setErrMsg("校验失败,扫码详情为空!");
orderService.update(orderEntity);
return;
}
if (orderEntity.getFromType() != ConstantStatus.FROM_UDISP
&& orderEntity.getFromType() != ConstantStatus.FROM_UDIMS) {
if (orderEntity.getFromType() != ConstantStatus.FROM_COPY
&& orderEntity.getFromType() != ConstantStatus.FROM_CHANGE) {
orderDetailBizService.deleteByOrderId(orderEntity.getBillNo());
}
orderDetailResultService.deleteByOrderId(orderEntity.getBillNo());
if (!orderDetailBizService.isExit(orderEntity.getBillNo())) {
orderDetailCodeEntities.forEach(orderDetailCodeEntity ->
{
//生成业务单据
IoOrderDetailBizEntity orderDetailBizEntity = new IoOrderDetailBizEntity();
BeanUtils.copyProperties(orderDetailCodeEntity, orderDetailBizEntity);
orderDetailBizEntity.setCount(orderDetailCodeEntity.getReCount());
orderDetailBizEntity.setId(null);
orderDetailBizService.insert(orderDetailBizEntity);
});
}
orderDetailCodeEntities.forEach(orderDetailCodeEntity ->
{
//生成单据结果
IoOrderDetailResultEntity orderDetailResultEntity = new IoOrderDetailResultEntity();
BeanUtils.copyProperties(orderDetailCodeEntity, orderDetailResultEntity);
orderDetailResultEntity.setCount(orderDetailCodeEntity.getReCount());
orderDetailResultEntity.setReCount(orderDetailCodeEntity.getReCount());
orderDetailResultEntity.setId(null);
UdiProductEntity product = udiProductService.findProductByNameCode(orderDetailCodeEntity.getNameCode());
if (product.getProductsType() == 2) {
//药品 拿到药品赋值
orderDetailResultEntity.setSpec(product.getBzgg());
}
orderDetailResultService.insert(orderDetailResultEntity);
});
}
//临时表转正式表
for (IoCodeTempEntity codeTempEntity : codeTempEntities) {
IoCodeEntity codeEnttity = new IoCodeEntity();
BeanUtils.copyProperties(codeTempEntity, codeEnttity);
codeEnttity.setId(null);
codeService.insert(codeEnttity);
}
codeTempService.deleteByBillNo(orderEntity.getBillNo());
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_SUCCESS);
orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_POST);
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
genLostCode(orderEntity.getBillNo());
checkThird(orderEntity);
}
@Resource
IoOrderInvoiceService orderInvoiceService;
//一次校验完成
public void checkFirstFinish(IoOrderEntity orderEntity, List<IoCodeTempEntity> codeTempEntities) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
List<IoOrderDetailBizEntity> orderDetailBizEntities = orderDetailBizService.findByOrderId(orderEntity.getBillNo());
if (CollUtil.isEmpty(orderDetailCodeEntities)) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK);
orderEntity.setUpdateTime(new Date());
orderEntity.setErrMsg("校验失败,扫码详情为空!");
orderService.update(orderEntity);
return;
}
if (CollUtil.isEmpty(orderDetailBizEntities)) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK);
orderEntity.setUpdateTime(new Date());
orderEntity.setErrMsg("校验失败,业务详情为空!");
orderService.update(orderEntity);
return;
}
String errMsg = "";
//正向校验
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
String msg = "";
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
&& checkProductDate(bizEntity, codeEntity) == null
&& checkExpireDate(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
bizEntity.setScanCount(codeEntity.getReCount());
codeEntity.setCheckSuccess(true);
codeEntity.setPrice(bizEntity.getPrice());
} else {
bizEntity.setScanCount(codeEntity.getReCount());
bizEntity.setCheckSuccess(false);
msg = "数量不匹配";
}
break;
}
}
if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) {
msg = "三期不匹配";
}
bizEntity.setErrMsg(msg);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess()) {
errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";";
}
}
//反向校验
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
&& checkProductDate(bizEntity, codeEntity) == null
&& checkExpireDate(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
codeEntity.setPrice(bizEntity.getPrice());
}
break;
}
}
}
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!codeEntity.isCheckSuccess()) {
errMsg = errMsg + codeEntity.getCoName() + ";";
}
}
if (StrUtil.isNotEmpty(errMsg)) {
orderEntity.setErrMsg(errMsg + "校验失败");
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_FAIL);
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
} else {
//生成单据结果
orderDetailResultService.deleteByOrderId(orderEntity.getBillNo());
for (IoOrderDetailBizEntity orderDetailBizEntity : orderDetailBizEntities) {
IoOrderDetailResultEntity orderDetailResultEntity = new IoOrderDetailResultEntity();
BeanUtils.copyProperties(orderDetailBizEntity, orderDetailResultEntity);
orderDetailResultEntity.setId(null);
orderDetailResultEntity.setReCount(orderDetailBizEntity.getScanCount());
UdiProductEntity product = udiProductService.findProductByNameCode(orderDetailBizEntity.getNameCode());
if (product.getProductsType() == 2) {
//药品 拿到药品赋值
orderDetailResultEntity.setSpec(product.getBzgg());
}
orderDetailResultService.insert(orderDetailResultEntity);
}
// orderDetailCodeDao.updateBatchById(orderDetailCodeEntities);
//临时表转正式表
for (IoCodeTempEntity codeTempEntity : codeTempEntities) {
IoCodeEntity codeEnttity = new IoCodeEntity();
BeanUtils.copyProperties(codeTempEntity, codeEnttity);
codeService.insert(codeEnttity);
}
//更新扫码详情表
orderDetailCodeDao.updateBatchById(orderDetailCodeEntities);
codeTempService.deleteByBillNo(orderEntity.getBillNo());
orderEntity.setErrMsg("校验成功!");
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_SUCCESS);
orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_POST);
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
//生成缺失码
genLostCode(orderEntity.getBillNo());
checkThird(orderEntity);
}
}
//业务单正向校验
public String bizNoPiCheck(List<IoOrderDetailBizEntity> orderDetailBizEntities, IoOrderEntity orderEntity) {
String errMsg = "";
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
bizEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
String msg = "";
int count = IntUtil.value(orderDetailCodeService.findByRelIdCount(orderEntity.getBillNo(), bizEntity.getBindRlFk()));
if (bizEntity.getCount() == count) {
bizEntity.setCheckSuccess(true);
bizEntity.setScanCount(count);
} else {
msg = "数量不匹配";
bizEntity.setScanCount(count);
bizEntity.setCheckSuccess(false);
}
bizEntity.setErrMsg(msg);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess()) {
errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";";
}
}
return errMsg;
}
//业务单正向校验
public String bizOrderCheck(List<IoOrderDetailBizEntity> orderDetailBizEntities, List<IoOrderDetailCodeEntity> orderDetailCodeEntities) {
String errMsg = "";
//初始化默认值
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
codeEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
bizEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
String msg = "";
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
&& checkProductDate(bizEntity, codeEntity) == null
&& checkExpireDate(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
bizEntity.setScanCount(codeEntity.getReCount());
} else {
msg = "数量不匹配";
bizEntity.setScanCount(codeEntity.getReCount());
bizEntity.setCheckSuccess(false);
}
break;
}
}
if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) {
msg = "三期不匹配";
}
bizEntity.setErrMsg(msg);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess()) {
errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";";
}
}
return errMsg;
}
//业务单正向校验
public String bizOrderCheck2(List<IoOrderDetailBizResponse> orderDetailBizEntities, List<IoOrderDetailCodeEntity> orderDetailCodeEntities) {
String errMsg = "";
//初始化默认值
for (IoOrderDetailBizResponse bizResponse : orderDetailBizEntities) {
IoOrderDetailBizEntity bizEntity = new IoOrderDetailBizEntity();
BeanUtils.copyProperties(bizResponse, bizEntity);
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizResponse.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
bizResponse.setScanCount(codeEntity.getReCount());
} else {
bizResponse.setScanCount(codeEntity.getReCount());
bizResponse.setCheckSuccess(false);
}
break;
}
}
}
for (IoOrderDetailBizResponse bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess()) {
errMsg = errMsg + bizEntity.getCoName() + ";";
}
}
return errMsg;
}
public String bizOrderCheckPass(List<IoOrderDetailBizEntity> orderDetailBizEntities, List<IoOrderDetailCodeEntity> orderDetailCodeEntities) {
String errMsg = "";
//初始化默认值
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
codeEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
bizEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
String msg = "";
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
&& checkProductDate(bizEntity, codeEntity) == null
&& checkExpireDate(bizEntity, codeEntity) == null
) {
if (checkBizCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
bizEntity.setScanCount(codeEntity.getReCount());
} else {
msg = "扫码数量超出";
bizEntity.setCheckSuccess(false);
}
break;
}
}
if (StrUtil.isEmpty(msg) && !bizEntity.isCheckSuccess()) {
msg = "三期不匹配";
}
bizEntity.setErrMsg(msg);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess()) {
errMsg = errMsg + bizEntity.getCoName() + bizEntity.getErrMsg() + ";";
}
}
return errMsg;
}
//单据合并校验
public List<IoOrderCheckResultResponse> combineCheck(List<IoOrderDetailBizEntity> orderDetailBizEntities, List<IoOrderDetailCodeEntity> orderDetailCodeEntities) {
List<IoOrderCheckResultResponse> orderCheckResultResponses = new ArrayList<>();
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
boolean isPass = false;
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
) {
//将产品ID,批次号匹配的合并,添加到列表
IoOrderCheckResultResponse ioOrderCheckResultResponse = new IoOrderCheckResultResponse();
BeanUtils.copyProperties(bizEntity, ioOrderCheckResultResponse);
ioOrderCheckResultResponse.setBBatchNo(bizEntity.getBatchNo());
ioOrderCheckResultResponse.setBProductDate(bizEntity.getProductDate());
ioOrderCheckResultResponse.setBExpireDate(bizEntity.getExpireDate());
ioOrderCheckResultResponse.setSBatchNo(codeEntity.getBatchNo());
ioOrderCheckResultResponse.setSProductDate(codeEntity.getProductDate());
ioOrderCheckResultResponse.setSExpireDate(codeEntity.getExpireDate());
bizEntity.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
bizEntity.setScanCount(codeEntity.getReCount());
ioOrderCheckResultResponse.setScanCount(bizEntity.getScanCount());
ioOrderCheckResultResponse.setCheckSuccess(true);
isPass = true;
orderCheckResultResponses.add(ioOrderCheckResultResponse);
break;
}
}
if (!isPass) {
//将未与扫码单
IoOrderCheckResultResponse ioOrderCheckResultResponse = new IoOrderCheckResultResponse();
BeanUtils.copyProperties(bizEntity, ioOrderCheckResultResponse);
ioOrderCheckResultResponse.setBBatchNo(bizEntity.getBatchNo());
ioOrderCheckResultResponse.setBProductDate(bizEntity.getProductDate());
ioOrderCheckResultResponse.setBExpireDate(bizEntity.getExpireDate());
bizEntity.setScanCount(0);
ioOrderCheckResultResponse.setCheckSuccess(false);
orderCheckResultResponses.add(ioOrderCheckResultResponse);
}
}
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!codeEntity.isCheckSuccess()) {
IoOrderCheckResultResponse ioOrderCheckResultResponse = new IoOrderCheckResultResponse();
BeanUtils.copyProperties(codeEntity, ioOrderCheckResultResponse);
ioOrderCheckResultResponse.setSBatchNo(codeEntity.getBatchNo());
ioOrderCheckResultResponse.setSProductDate(codeEntity.getProductDate());
ioOrderCheckResultResponse.setSExpireDate(codeEntity.getExpireDate());
ioOrderCheckResultResponse.setCount(0);
ioOrderCheckResultResponse.setScanCount(codeEntity.getReCount());
orderCheckResultResponses.add(ioOrderCheckResultResponse);
}
}
return orderCheckResultResponses;
}
//扫码单反向校验
public String codeOrderCheck(List<IoOrderDetailCodeEntity> orderDetailCodeEntities, List<IoOrderDetailBizEntity> orderDetailBizEntities) {
//初始化默认值
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
codeEntity.setCheckSuccess(false);
}
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
bizEntity.setCheckSuccess(false);
}
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
String msg = "";
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess()
&& checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
&& checkProductDate(bizEntity, codeEntity) == null
&& checkExpireDate(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
codeEntity.setCheckSuccess(true);
codeEntity.setOrderCount(bizEntity.getCount());
} else {
msg = "数量不匹配";
codeEntity.setCheckSuccess(false);
codeEntity.setOrderCount(bizEntity.getCount());
}
break;
} else {
codeEntity.setCheckSuccess(false);
}
}
if (StrUtil.isEmpty(msg) && !codeEntity.isCheckSuccess()) {
msg = "三期不匹配";
}
codeEntity.setErrMsg(msg);
}
String errMsg = "";
for (IoOrderDetailCodeEntity codeEntity : orderDetailCodeEntities) {
if (!codeEntity.isCheckSuccess()) {
errMsg = errMsg + codeEntity.getCoName() + codeEntity.getErrMsg() + ";";
}
}
return errMsg;
}
public void codeOrderCheck2(List<IoOrderDetailCodeResponse> orderDetailCodeEntities, List<IoOrderDetailBizEntity> orderDetailBizEntities) {
for (IoOrderDetailCodeResponse codeResponse : orderDetailCodeEntities) {
IoOrderDetailCodeEntity codeEntity = new IoOrderDetailCodeEntity();
BeanUtils.copyProperties(codeResponse, codeEntity);
for (IoOrderDetailBizEntity bizEntity : orderDetailBizEntities) {
if (!bizEntity.isCheckSuccess() && !codeEntity.isCheckSuccess() && checkId(bizEntity, codeEntity) == null
&& checkBatchNo(bizEntity, codeEntity) == null
) {
if (checkCount(bizEntity, codeEntity) == null) {
bizEntity.setCheckSuccess(true);
codeResponse.setCheckSuccess(true);
codeResponse.setOrderCount(bizEntity.getCount());
} else {
codeResponse.setCheckSuccess(false);
codeResponse.setOrderCount(bizEntity.getCount());
}
break;
} else {
codeResponse.setCheckSuccess(false);
}
}
}
}
//三次校验(中间层)
public void checkThird(IoOrderEntity orderEntity) {
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_AUDITED && orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_CHECK_REW) {
if (bussinessTypeEntity.isThrCheckEnable()) {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (!bussinessTypeEntity.isThrCheckUdims()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (!bussinessTypeEntity.isThrCheckWebNew()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (!bussinessTypeEntity.isThrCheckPdaEd()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (!bussinessTypeEntity.isThrCheckPdaUn()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (!bussinessTypeEntity.isThrCheckPc()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (!bussinessTypeEntity.isThrCheckChange()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (!bussinessTypeEntity.isThrCheckBalance()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (!bussinessTypeEntity.isThrCheckCopy()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (!bussinessTypeEntity.isThrCheckSp()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_REVIEW) {
if (!bussinessTypeEntity.isThrCheckReview()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
}
} else {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_CHECK_REW);
}
}
if (StrUtil.isEmpty(orderEntity.getCheckUser())) {
orderEntity.setCheckUser(orderEntity.getCreateUser());
}
if (orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_CHECK_REW) {
orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_REW);
orderEntity.setUpdateTime(new Date());
if (IntUtil.value(orderEntity.getFromType()) != ConstantStatus.FROM_UDISP)
orderEntity.setCheckTime(new Date());
orderService.update(orderEntity);
checkSecond(orderEntity);
}
}
//二次校验
public void checkSecond(IoOrderEntity orderEntity) {
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (orderEntity.getStatus() != ConstantStatus.ORDER_STATUS_AUDITED) {
if (bussinessTypeEntity.isSecCheckEnable()) {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (!bussinessTypeEntity.isSecCheckUdims()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (!bussinessTypeEntity.isSecCheckWebNew()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (!bussinessTypeEntity.isSecCheckPdaEd()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (!bussinessTypeEntity.isSecCheckPdaUn()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (!bussinessTypeEntity.isSecCheckPc()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (!bussinessTypeEntity.isSecCheckChange()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (!bussinessTypeEntity.isSecCheckBalance()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (!bussinessTypeEntity.isSecCheckCopy()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (!bussinessTypeEntity.isSecCheckSp()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_REVIEW) {
if (!bussinessTypeEntity.isSeccheckReview()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
}
} else {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
}
}
if (orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_AUDITED) {
orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_CHECK);
orderEntity.setUpdateTime(new Date());
if (IntUtil.value(orderEntity.getFromType()) != ConstantStatus.FROM_UDISP)
orderEntity.setAuditTime(new Date());
if (StrUtil.isEmpty(orderEntity.getReviewUser())) {
orderEntity.setReviewUser(orderEntity.getReviewUser());
}
orderService.update(orderEntity);
genInv(orderEntity, bussinessTypeEntity);
}
}
@Resource
IoChangeInoutService changeInoutService;
@Resource
InvPreinProductDetailService invPreinProductDetailService;
@Resource
UdiCalCountUtil udiCalCountUtil;
//校验完成后生成库存
public void genInv(IoOrderEntity orderEntity, BasicBussinessTypeEntity bussinessTypeEntity) {
if (
IntUtil.value(orderEntity.getFromType()) != ConstantStatus.FROM_UDISP &&
bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT) && bussinessTypeEntity.isScanPreIn()) {
// ThreadUtil.execAsync(() -> {
// 内网同步出来不进行退货
if (StrUtil.isNotEmpty(bussinessTypeEntity.getPreInBackAction())) {
if (bussinessTypeEntity.getBackPreinType() == 1) { //按单退货
String orderIds = orderEntity.getCheckPreInOrders();
if (StrUtil.isNotEmpty(orderIds)) {
String[] orderIdArray = orderIds.split(",");
List<String> orderList = CollUtil.toList(orderIdArray);
List<IoCodeEntity> outCodeEntitys = codeService.findByOrderId(orderEntity.getBillNo());
List<IoCodeEntity> preInCodeEntities = codeService.findByOrderIds(orderList, null);
// 扣减数量
for (IoCodeEntity preInCodeEntity : preInCodeEntities) {
for (IoCodeEntity codeEntity : outCodeEntitys) {
if (preInCodeEntity.getCode().equals(codeEntity.getCode())) {
int count = preInCodeEntity.getMyCount() - codeEntity.getMyCount();
int reCount = preInCodeEntity.getMyReCount() - codeEntity.getMyReCount();
if (count > 0) {
preInCodeEntity.setCount(count);
preInCodeEntity.setReCount(reCount);
codeEntity.setCount(0);
codeEntity.setReCount(0);
} else if (count < 0) {
preInCodeEntity.setCount(0);
preInCodeEntity.setReCount(0);
codeEntity.setCount(-count);
codeEntity.setReCount(-reCount);
} else {
preInCodeEntity.setCount(0);
preInCodeEntity.setReCount(0);
codeEntity.setCount(0);
codeEntity.setReCount(0);
}
}
}
}
List<IoCodeEntity> backCodeList = new ArrayList<>();
for (IoCodeEntity codeEntity : preInCodeEntities) {
if (codeEntity.getMyCount() > 0) {
backCodeList.add(codeEntity);
}
}
genBackOrder(orderEntity, backCodeList);
}
} else { //按仓库货位退货
List<IoCodeEntity> backCodeList = new ArrayList<>();
List<IoCodeEntity> codeList = codeService.findByOrderId(orderEntity.getBillNo());
for (IoCodeEntity codeEntity : codeList) {
int count = invPreinProductDetailService.findCountByCode(codeEntity.getCode());
if (count > 0) {
codeEntity.setCount(count);
codeEntity.setReCount(udiCalCountUtil.getActCount(codeEntity.getNameCode()));
backCodeList.add(codeEntity);
genBackOrder(orderEntity, backCodeList);
}
}
}
}
// });
}
//校验是否是不入库存单据
if (bussinessTypeEntity.isInStock()) {
//生成库存
if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN) {
genInvService.genPreInInv(orderEntity.getBillNo());
} else if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_ADVANCE) {
genInvService.genPreInv(orderEntity.getBillNo());
} else {
genInvService.genNorInv(orderEntity.getBillNo());
}
} else {
//不入库存,直接进行单据流转
changeInoutService.changeOrder(orderEntity);
}
}
@Resource
InvWarehouseService invWarehouseService;
public void genBackOrder(IoOrderEntity orderEntity, List<IoCodeEntity> backCodeList) {
if (CollUtil.isEmpty(backCodeList))
return;
BasicBussinessTypeEntity basicBussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (StrUtil.isNotEmpty(basicBussinessTypeEntity.getPreInBackAction())) {
IoOrderEntity outOrder = new IoOrderEntity();
IoCodeEntity codeEntity = backCodeList.get(0);
outOrder.setId(null);
outOrder.setMainAction(ConstantType.TYPE_OUT);
outOrder.setAction(basicBussinessTypeEntity.getPreInBackAction());
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(Constant.INV_PRE_IN_CODE);
outOrder.setInvCode(invWarehouseEntity.getCode());
outOrder.setDeptCode(invWarehouseEntity.getParentId());
outOrder.setFromCorp(codeEntity.getSupId());
outOrder.setCreateTime(new Date());
outOrder.setFromType(ConstantStatus.FROM_BACK);
String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(basicBussinessTypeEntity.getPrefix()), "yyyyMMdd"));
outOrder.setBillNo(orderNo);
outOrder.setCustomerId(Constant.SYSTEM_CUSTOMER_ID);
outOrder.setCorpOrderId(CustomUtil.getId() + "x");
outOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS);
orderEntity.setUllageSupNo(outOrder.getBillNo());
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
outOrder.setOriginUllageSupNo(orderEntity.getBillNo());
outOrder.setCreateUser(null);
outOrder.setReviewUser(null);
orderService.insertOrder(outOrder);
//生成条码
List<IoCodeTempEntity> codeTempEntities = new ArrayList<>();
for (IoCodeEntity warehouseEntity : backCodeList) {
IoCodeTempEntity codeTempEntity = new IoCodeTempEntity();
BeanUtils.copyProperties(warehouseEntity, codeTempEntity);
codeTempEntity.setId(null);
codeTempEntity.setOrderId(outOrder.getBillNo());
codeTempEntity.setAction(outOrder.getAction());
codeTempEntity.setMainAction(outOrder.getMainAction());
codeTempEntity.setCreateTime(new Date());
codeTempEntity.setUpdateTime(new Date());
codeTempEntities.add(codeTempEntity);
}
codeTempService.insertBatch(codeTempEntities);
addInoutService.dealProcess(outOrder);
if (!checkManual(outOrder.getBillNo())) {
check(outOrder.getBillNo());
}
}
}
// 预验收使用出库处理1.不带回扣库存;2.带回时生成退货出库单
@Resource
GennerOrderUtils gennerOrderUtils;
public String checkId(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (bizEntity.getBindRlFk().longValue() == codeEntity.getBindRlFk().longValue()) {
return null;
} else {
return "产品ID不匹配";
}
}
public String checkBatchNo(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (StrUtil.nullToEmpty(bizEntity.getBatchNo()).equals(StrUtil.nullToEmpty(codeEntity.getBatchNo()))) {
return null;
} else {
return bizEntity.getCoName() + "批次号不匹配";
}
}
public String checkProductDate(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
String value = systemParamConfigService.selectValueByParamKey("only_vail_batch");
if (StrUtil.isNotEmpty(value) && value.equals("1")) {
return null;
}
if (StrUtil.nullToEmpty(bizEntity.getProductDate()).equals(StrUtil.nullToEmpty(codeEntity.getProductDate()))) {
return null;
} else {
return bizEntity.getCoName() + "生产日期不匹配";
}
}
public String checkExpireDate(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
String value = systemParamConfigService.selectValueByParamKey("only_vail_batch");
if (StrUtil.isNotEmpty(value) && value.equals("1")) {
return null;
}
if (StrUtil.nullToEmpty(bizEntity.getExpireDate()).equals(StrUtil.nullToEmpty(codeEntity.getExpireDate()))) {
return null;
} else {
return bizEntity.getCoName() + "失效日期不匹配";
}
}
public String checkCount(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (bizEntity.getCount() == codeEntity.getReCount()) {
return null;
}
return bizEntity.getCoName() + "数量不匹配!";
}
/**
* 校验业务单扫码数量是否大于扫码单
*
* @param bizEntity
* @param codeEntity
* @return
*/
public String checkBizCount(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (bizEntity.getCount() > codeEntity.getReCount()) {
return null;
}
return bizEntity.getCoName() + "数量不匹配!";
}
}