|
|
package com.glxp.api.service.collect;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.glxp.api.common.enums.ResultEnum;
|
|
|
import com.glxp.api.common.res.BaseResponse;
|
|
|
import com.glxp.api.common.util.ResultVOUtils;
|
|
|
import com.glxp.api.constant.Constant;
|
|
|
import com.glxp.api.constant.WorkOperType;
|
|
|
import com.glxp.api.dao.collect.IoCollectOrderCodeManMapper;
|
|
|
import com.glxp.api.entity.auth.SysWorkplace;
|
|
|
import com.glxp.api.entity.basic.*;
|
|
|
import com.glxp.api.entity.collect.*;
|
|
|
import com.glxp.api.entity.inout.IoCodeLostEntity;
|
|
|
import com.glxp.api.entity.inout.IoCodeTempEntity;
|
|
|
import com.glxp.api.entity.inout.IoSplitCodeEntity;
|
|
|
import com.glxp.api.entity.inv.AnncmntProductEntity;
|
|
|
import com.glxp.api.entity.thrsys.ThrBusTypeOriginEntity;
|
|
|
import com.glxp.api.entity.thrsys.ThrSystemEntity;
|
|
|
import com.glxp.api.exception.JsonException;
|
|
|
import com.glxp.api.req.collect.CollectOrderCodeManRequest;
|
|
|
import com.glxp.api.req.collect.IoCollectCodeRequest;
|
|
|
import com.glxp.api.req.inout.AddTagCodeReqeust;
|
|
|
import com.glxp.api.res.basic.UdiRelevanceResponse;
|
|
|
import com.glxp.api.res.collect.CollectOrderCodeManResponse;
|
|
|
import com.glxp.api.res.collect.IoCollectCodeResponse;
|
|
|
import com.glxp.api.res.collect.RelCodeDetailResponse;
|
|
|
import com.glxp.api.res.inout.AddEnterCodeResponse;
|
|
|
import com.glxp.api.res.inout.VailCodeResultResponse;
|
|
|
import com.glxp.api.service.auth.CustomerService;
|
|
|
import com.glxp.api.service.auth.SysWorkplaceService;
|
|
|
import com.glxp.api.service.basic.IBasicBussinessTypeService;
|
|
|
import com.glxp.api.service.basic.SysWorkplaceDocumentService;
|
|
|
import com.glxp.api.service.basic.UdiRelevanceService;
|
|
|
import com.glxp.api.service.inout.IoCodeLostService;
|
|
|
import com.glxp.api.service.inout.IoCodeTempService;
|
|
|
import com.glxp.api.service.inout.IoSplitCodeService;
|
|
|
import com.glxp.api.service.inout.impl.IoCodeService;
|
|
|
import com.glxp.api.service.inv.AnncmntProductService;
|
|
|
import com.glxp.api.service.thrsys.IThrBusTypeOriginService;
|
|
|
import com.glxp.api.service.thrsys.SysWorkplacePutRelService;
|
|
|
import com.glxp.api.service.thrsys.ThrSystemService;
|
|
|
import com.glxp.api.util.GennerOrderUtils;
|
|
|
import com.glxp.api.util.IntUtil;
|
|
|
import com.glxp.api.util.MsDateUtil;
|
|
|
import com.glxp.api.util.OrderNoTypeBean;
|
|
|
import com.glxp.api.util.udi.FilterUdiUtils;
|
|
|
import com.glxp.api.util.udi.UdiCalCountUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class IoCollectOrderCodeManService extends ServiceImpl<IoCollectOrderCodeManMapper, IoCollectOrderCodeMan> {
|
|
|
@Resource
|
|
|
IoCollectOrderCodeManMapper collectOrderCodeManMapper;
|
|
|
@Resource
|
|
|
SysWorkplaceService sysWorkPlaceService;
|
|
|
@Resource
|
|
|
UdiRelevanceService udiRelevanceService;
|
|
|
@Resource
|
|
|
IoCollectOrderBizService collectOrderBizService;
|
|
|
@Resource
|
|
|
GennerOrderUtils gennerOrderUtils;
|
|
|
|
|
|
@Resource
|
|
|
AnncmntProductService anncmntProductService;
|
|
|
@Resource
|
|
|
private ThrSystemService thrSystemService;
|
|
|
@Resource
|
|
|
private IThrBusTypeOriginService thrBusTypeOriginService;
|
|
|
@Resource
|
|
|
CustomerService customerService;
|
|
|
@Resource
|
|
|
IoCollectOrderService collectOrderService;
|
|
|
@Resource
|
|
|
SysWorkplaceDocumentService sysWorkplaceDocumentService;
|
|
|
@Resource
|
|
|
UdiCalCountUtil calCountUtil;
|
|
|
|
|
|
@Resource
|
|
|
IoSplitCodeService splitCodeService;
|
|
|
|
|
|
@Resource
|
|
|
private IoCollectCodeBackService ioCollectCodeBackService;
|
|
|
|
|
|
@Resource
|
|
|
private IBasicBussinessTypeService basicBussinessTypeService;
|
|
|
@Resource
|
|
|
IoCodeService codeService;
|
|
|
@Resource
|
|
|
private IoCodeTempService codeTempService;
|
|
|
|
|
|
public List<CollectOrderCodeManResponse> filterList(CollectOrderCodeManRequest collectOrderCodeManRequest) {
|
|
|
if (collectOrderCodeManRequest == null) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
if (collectOrderCodeManRequest.getPage() != null) {
|
|
|
int offset = (collectOrderCodeManRequest.getPage() - 1) * collectOrderCodeManRequest.getLimit();
|
|
|
PageHelper.offsetPage(offset, collectOrderCodeManRequest.getLimit());
|
|
|
}
|
|
|
return collectOrderCodeManMapper.filterList(collectOrderCodeManRequest);
|
|
|
|
|
|
}
|
|
|
|
|
|
public List<IoCollectOrderCodeMan> listByBillNo(String billNo) {
|
|
|
return collectOrderCodeManMapper.selectList(new LambdaQueryWrapper<IoCollectOrderCodeMan>()
|
|
|
.eq(IoCollectOrderCodeMan::getOrderIdFk, billNo));
|
|
|
}
|
|
|
|
|
|
|
|
|
public IoCollectOrderCodeMan findByCode(String billNo, String code) {
|
|
|
return collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, billNo)
|
|
|
.eq(IoCollectOrderCodeMan::getUdiCode, code).last("limit 1"));
|
|
|
}
|
|
|
|
|
|
@Resource
|
|
|
SysWorkplacePutRelService workplacePutRelService;
|
|
|
@Resource
|
|
|
IoCodeLostService codeLostService;
|
|
|
@Resource
|
|
|
IoCollectSetService collectSetService;
|
|
|
|
|
|
// @Transactional(rollbackFor = Exception.class)
|
|
|
public IoCollectOrder prescribeTagCode(AddTagCodeReqeust addTagCodeReqeust) {
|
|
|
Long userId = customerService.getUserId();
|
|
|
String userIds = customerService.getUserId() + "";
|
|
|
SysWorkplace workPlace = sysWorkPlaceService.getWorkplace(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
SysWorkplacePutRel sysWorkplacePutRel = workplacePutRelService.findPutWorkPlace(workPlace.getWorkplaceId(), null);
|
|
|
IoCollectSet collectSet = collectSetService.getSet();
|
|
|
Long putWorkPlaceCode = null;
|
|
|
if (sysWorkplacePutRel != null) putWorkPlaceCode = sysWorkplacePutRel.getWorkPlaceCode();
|
|
|
if (workPlace == null) throw new JsonException(500, "请先选择工位");
|
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(workPlace.getWorkplaceId(), addTagCodeReqeust.getBusType());
|
|
|
IoCollectOrderBiz collectOrderBiz = null;
|
|
|
IoCollectOrder collectOrder = null;
|
|
|
//1.校验UDI码完整性
|
|
|
String code = addTagCodeReqeust.getCode();
|
|
|
if (StringUtils.isBlank(code)) throw new JsonException(ResultEnum.DATA_ERROR.getMessage());
|
|
|
if (code.endsWith("\u001D")) {
|
|
|
code = code.replace("\u001D", "");
|
|
|
}
|
|
|
UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
|
|
|
if (udiEntity == null) throw new JsonException(500, "无效条码!");
|
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse;
|
|
|
List<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
|
|
|
if (CollUtil.isEmpty(udiRelevanceResponses)) throw new JsonException(500, "产品字典不存在此产品!");
|
|
|
else udiRelevanceResponse = udiRelevanceResponses.get(0);
|
|
|
//判断层级标识是否正确
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getOrderCirType()) == 2) {
|
|
|
|
|
|
if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 1) {
|
|
|
|
|
|
} else {
|
|
|
if (udiRelevanceResponse.getUseMaxLevel() != null && IntUtil.value(udiRelevanceResponse.getPackLevel()) > IntUtil.value(udiRelevanceResponse.getUseMaxLevel())) {
|
|
|
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
|
|
|
}
|
|
|
if (udiRelevanceResponse.getUseMaxLevel() == null && IntUtil.value(udiRelevanceResponse.getPackLevel()) > 1) {
|
|
|
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
|
|
|
}
|
|
|
if (IntUtil.value(udiRelevanceResponse.getPackLevel()) < IntUtil.value(udiRelevanceResponse.getUseLevel())) {
|
|
|
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
if (udiRelevanceResponse.getDistributeMaxLevel() != null && IntUtil.value(udiRelevanceResponse.getDistributeMaxLevel()) < IntUtil.value(udiRelevanceResponse.getPackLevel())) {
|
|
|
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
|
|
|
}
|
|
|
if (IntUtil.value(udiRelevanceResponse.getPackLevel()) < IntUtil.value(udiRelevanceResponse.getDistributeLevel())) {
|
|
|
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是处方退药的码 要去校验是 否是 原始单据处方已完成的码
|
|
|
if (addTagCodeReqeust.getBusType().startsWith("YPCFTF")){
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
IoCollectCodeRequest ioCollectCodeRequest = new IoCollectCodeRequest();
|
|
|
ioCollectCodeRequest.setBillNo(collectOrder.getRemark());
|
|
|
ioCollectCodeRequest.setCode(code);
|
|
|
List<IoCollectCodeResponse> ioCollectCodeResponses = ioCollectCodeBackService.filterList(ioCollectCodeRequest);
|
|
|
if (ioCollectCodeResponses.size() == 0){
|
|
|
throw new JsonException(500, "当前追溯码非原始处方追溯码");
|
|
|
}
|
|
|
IoCollectCodeResponse ioCollectCodeResponse = ioCollectCodeResponses.get(0);
|
|
|
// if (ioCollectCodeResponse.getReCount() != 0 || ioCollectCodeResponse.getReCount() != null){
|
|
|
// //扫入的为拆零码
|
|
|
// //这个为 退货的数量 如果退货数量 是
|
|
|
// Integer count = collectOrderBiz1.getCount();
|
|
|
// }
|
|
|
if (!ioCollectCodeResponse.getCode().equals(code)){
|
|
|
throw new JsonException(500, "当前追溯码非原始处方追溯码");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//2-1.校验预验收库存是否已存在
|
|
|
String preInBillNo = addTagCodeReqeust.getPreInBillNo();
|
|
|
String orderId = addTagCodeReqeust.getBillNo();
|
|
|
if (StrUtil.isNotEmpty(preInBillNo)) {
|
|
|
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction("SC74047387362851");
|
|
|
if (bussinessTypeEntity.isScanPreIn() && checkDiAttribute(bussinessTypeEntity, udiRelevanceResponse, 2)) {
|
|
|
if (bussinessTypeEntity.getBackPreinType() == 1 && bussinessTypeEntity.isPreInBack()) {//按单出库&& bussinessTypeEntity.isPreInBack()
|
|
|
String orderIds = preInBillNo;
|
|
|
if (StrUtil.isNotEmpty(orderIds)) {
|
|
|
String[] orderIdArray = orderIds.split(",");
|
|
|
List<String> orderList = CollUtil.toList(orderIdArray);
|
|
|
int count = codeService.findByOrderIdsCount(orderList, code);
|
|
|
if (count <= 0) {
|
|
|
throw new JsonException(500, "非预验收单产品或预验收库存数量不足!");
|
|
|
}
|
|
|
if (StrUtil.isNotEmpty(orderId)) {//非首次添加
|
|
|
if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
|
|
|
//无序列号,则可能存在多个预验收入库单
|
|
|
IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code);
|
|
|
if (codeTempEntity != null) {
|
|
|
if (count < (codeTempEntity.getMyCount() + 1)) {
|
|
|
throw new JsonException(500, "超出预验收库存数量");
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
if (count < 1) {
|
|
|
throw new JsonException(500, "预验收库存数量不足");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
throw new JsonException(500, "未选择预验收入库单,请先选择预验收入库单!");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
//流通数量
|
|
|
Integer circleCount = calCountUtil.getCirActCount(udiRelevanceResponse);
|
|
|
//使用数量
|
|
|
Integer useCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
Integer scanCount = 0;
|
|
|
|
|
|
IoCollectOrderCodeMan exitCode = this.findByCode(addTagCodeReqeust.getBillNo(), code);
|
|
|
if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
throw new JsonException(500, "重复扫码!");
|
|
|
}
|
|
|
AnncmntProductEntity anncmntProductEntity = anncmntProductService.getOne(new QueryWrapper<AnncmntProductEntity>().eq("nameCode", udiEntity.getUdi()).last("limit 1"));
|
|
|
if (anncmntProductEntity != null) {
|
|
|
throw new JsonException(500, anncmntProductEntity.getErrMsg());
|
|
|
}
|
|
|
if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) {
|
|
|
String expireDate = "20" + udiEntity.getExpireDate();
|
|
|
long expireTime = MsDateUtil.parseDateExpire(expireDate);
|
|
|
if (expireTime - System.currentTimeMillis() < 0) {
|
|
|
throw new JsonException(500, "当前产品已过期!");
|
|
|
}
|
|
|
}
|
|
|
IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(code, putWorkPlaceCode);
|
|
|
List<IoCollectOrderBiz> collectOrderBizs;
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) {
|
|
|
collectOrderBizs = collectOrderService.getOrderBizs(collectOrder.getSummaryNo());
|
|
|
} else {
|
|
|
collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
}
|
|
|
//2.校验是否处方单UDI码
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) {
|
|
|
if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) {
|
|
|
String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_ORDER, "yyyyMMdd"));
|
|
|
collectOrder = IoCollectOrder.builder()
|
|
|
.billNo(orderNo)
|
|
|
.busType(sysWorkplaceDocumentEntity.getDocumentTypeCode())
|
|
|
.fromCorp(addTagCodeReqeust.getFromCorp())
|
|
|
.fromCorpName(addTagCodeReqeust.getFromCorpName())
|
|
|
.billTime(new Date())
|
|
|
.workPlaceCode(workPlace.getWorkplaceId())
|
|
|
.createTime(new Date())
|
|
|
.createUser(userIds)
|
|
|
.shipper(addTagCodeReqeust.getInvCode())
|
|
|
.updateTime(new Date())
|
|
|
.orderCirType(sysWorkplaceDocumentEntity.getOrderCirType())
|
|
|
.tagStatus(1)
|
|
|
.build();
|
|
|
if (StrUtil.isNotEmpty(addTagCodeReqeust.getShipper())) {
|
|
|
collectOrder.setShipper(addTagCodeReqeust.getShipper());
|
|
|
collectOrder.setShipperName(addTagCodeReqeust.getShipperName());
|
|
|
}
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getIsMatching()) == 1) {
|
|
|
collectOrder.setFromType("药械追溯管理系统");
|
|
|
} else {
|
|
|
ThrBusTypeOriginEntity one = thrBusTypeOriginService.getOne(new LambdaQueryWrapper<ThrBusTypeOriginEntity>()
|
|
|
.eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode()));
|
|
|
if (one != null) {
|
|
|
ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper<ThrSystemEntity>().eq(ThrSystemEntity::getThirdId, one.getThirdSys()));
|
|
|
if (thrSystemEntity != null) {
|
|
|
collectOrder.setFromType(thrSystemEntity.getThirdName());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
collectOrderService.save(collectOrder);
|
|
|
} else {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
}
|
|
|
|
|
|
//直接扫码单生成业务单
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
collectOrderBizService.saveOrUpdate(collectOrderBiz);
|
|
|
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_VAIL_BATCH) {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
if (collectOrder == null)
|
|
|
throw new JsonException(500, "单据不存在!");
|
|
|
if (splitCodeEntity != null && StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())) {
|
|
|
if (IntUtil.value(splitCodeEntity.getRemainCount()) < 1) {
|
|
|
throw new JsonException(500, "当前追溯码已被拆零!");
|
|
|
} else {
|
|
|
circleCount = splitCodeEntity.getRemainCount();
|
|
|
useCount = splitCodeEntity.getRemainCount();
|
|
|
}
|
|
|
}
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
scanCount = circleCount;
|
|
|
} else {
|
|
|
scanCount = useCount;
|
|
|
}
|
|
|
|
|
|
CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest();
|
|
|
collectOrderCodeManRequest.setUdiCode(code);
|
|
|
collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode());
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest);
|
|
|
IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code);
|
|
|
if (codeLostEntity != null) {
|
|
|
udiEntity.setBatchNo(codeLostEntity.getBatchNo());
|
|
|
udiEntity.setProduceDate(codeLostEntity.getProduceDate());
|
|
|
udiEntity.setExpireDate(codeLostEntity.getExpireDate());
|
|
|
|
|
|
}
|
|
|
if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) {
|
|
|
throw new JsonException(500, "当前追溯码已被其他单据关联!");
|
|
|
}
|
|
|
|
|
|
collectOrderBiz = vailByBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
|
|
|
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
|
|
|
case 1: //插入
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount);
|
|
|
}
|
|
|
break;
|
|
|
case 2: //不插入
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, "非此单据追溯码!");
|
|
|
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
|
|
|
int actCount = 0;
|
|
|
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (actCount > IntUtil.value(collectOrderBiz.getCount())) {
|
|
|
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续添加?");
|
|
|
}
|
|
|
}
|
|
|
throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
}
|
|
|
collectOrderBiz.setScanCount(count);
|
|
|
collectOrderBiz.setScanActCount(actCount);
|
|
|
break;
|
|
|
case 3: //提醒是否插入
|
|
|
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(502, addTagCodeReqeust.getCode() + "非此单据追溯码,是否继续添加!");
|
|
|
int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
int actCount1 = 0;
|
|
|
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (actCount1 > collectOrderBiz.getCount()) {
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续扫码?");
|
|
|
}
|
|
|
int myUseCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
if (needCount > myUseCount) {
|
|
|
throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
} else {
|
|
|
collectOrderBiz.setSplitUnCheck(true);
|
|
|
if (IntUtil.value(collectSet.getLastCodeSplit())) {
|
|
|
throw new JsonException(503, collectOrderBiz.getId() + ";" + count1 + ";" + collectOrderBiz.getCpmctymc() + ";" + "扫码数量超出!");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
collectOrderBiz.setScanCount(count1);
|
|
|
collectOrderBiz.setScanActCount(actCount1);
|
|
|
} else {
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse));
|
|
|
} else {
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
collectOrderBizService.saveOrUpdate(collectOrderBiz);
|
|
|
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_UNVAIL_BATCH) {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
if (collectOrder == null)
|
|
|
throw new JsonException(500, "单据不存在!");
|
|
|
//按单不校验三期
|
|
|
collectOrderBiz = vailNoBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
|
|
|
|
|
|
CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest();
|
|
|
collectOrderCodeManRequest.setUdiCode(code);
|
|
|
collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode());
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest);
|
|
|
if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) {
|
|
|
throw new JsonException(500, "当前追溯码已被其他单据关联!");
|
|
|
}
|
|
|
|
|
|
if (!addTagCodeReqeust.getBusType().startsWith("YPCFTF")){
|
|
|
if (splitCodeEntity != null && StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())) {
|
|
|
if (IntUtil.value(splitCodeEntity.getRemainCount()) < 1) {
|
|
|
throw new JsonException(500, "当前追溯码已被拆零!");
|
|
|
} else {
|
|
|
circleCount = splitCodeEntity.getRemainCount();
|
|
|
useCount = splitCodeEntity.getRemainCount();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
scanCount = circleCount;
|
|
|
} else {
|
|
|
scanCount = useCount;
|
|
|
}
|
|
|
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
|
|
|
case 1: //插入
|
|
|
if (collectOrderBiz == null) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!");
|
|
|
} else {
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
}
|
|
|
break;
|
|
|
case 2: //不插入
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, "非此单据追溯码!");
|
|
|
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
int actCount = 0;
|
|
|
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (!addTagCodeReqeust.getBusType().startsWith("YPCFTF")) {
|
|
|
if (actCount > IntUtil.value(collectOrderBiz.getCount())) {
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "当前拆零数量还有剩余,是否继续扫码进行拆零?");
|
|
|
}
|
|
|
}
|
|
|
throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
}
|
|
|
}
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
break;
|
|
|
case 3: //提醒是否插入
|
|
|
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!");
|
|
|
int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
int actCount1 = 0;
|
|
|
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (!addTagCodeReqeust.getBusType().startsWith("YPCFTF")){
|
|
|
if (actCount1 > IntUtil.value(collectOrderBiz.getCount())) {
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续添加?");
|
|
|
}
|
|
|
int myUseCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
if (needCount > myUseCount) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
} else {
|
|
|
collectOrderBiz.setSplitUnCheck(true);
|
|
|
if (IntUtil.value(collectSet.getLastCodeSplit())) {
|
|
|
throw new JsonException(503, collectOrderBiz.getId() + ";" + count1 + ";" + collectOrderBiz.getCpmctymc() + ";" + "扫码数量超出!");
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
} else {
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
collectOrderBizService.insertOrUpdate(collectOrderBiz);
|
|
|
}
|
|
|
|
|
|
int count = 0;
|
|
|
if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1);
|
|
|
exitCode.setScanActCount(IntUtil.value(exitCode.getScanActCount()) + scanCount);
|
|
|
exitCode.setBizIdFk(collectOrderBiz.getId());
|
|
|
this.updateById(exitCode);
|
|
|
} else {
|
|
|
if (isExitRel(code, collectOrder.getBillNo())) {
|
|
|
throw new JsonException(500, "当前追溯码已上传关联关系,请勿重复扫码!");
|
|
|
}
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan = IoCollectOrderCodeMan.builder().udiCode(code)
|
|
|
.orderIdFk(collectOrderBiz.getOrderIdFk())
|
|
|
.bizIdFk(collectOrderBiz.getId()).relId(collectOrderBiz.getRelId()).nameCode(udiEntity.getUdi()).batchNo(udiEntity.getBatchNo() == null ? collectOrderBiz.getBatchNo() : udiEntity.getBatchNo()).serialNo(udiEntity.getSerialNo()).productDate(udiEntity.getProduceDate() == null ? collectOrderBiz.getProductDate() : udiEntity.getProduceDate()).expireDate(udiEntity.getExpireDate() == null ? collectOrderBiz.getExpireDate() : udiEntity.getExpireDate()).createTime(new Date()).createUser(userId).updateTime(new Date()).updateUser(userId).scanCount(count + 1)
|
|
|
// .scanCount(scanCount)
|
|
|
.isSplitCode(addTagCodeReqeust.getIsSplitCode()).scanActCount(scanCount).build();
|
|
|
|
|
|
|
|
|
RelCodeDetailResponse codeRelEntity = relCodeDetailService.findByCode(code);
|
|
|
if (codeRelEntity != null) {
|
|
|
collectOrderCodeMan.setParentCode(codeRelEntity.getParentCode());
|
|
|
RelCodeDetail relCodeDetail = relCodeDetailService.getOneByCode(codeRelEntity.getParentCode());
|
|
|
if (relCodeDetail != null) {
|
|
|
collectOrderCodeMan.setGrantPaCode(relCodeDetail.getParentCode());
|
|
|
}
|
|
|
//当关联关系存在的时候 以关联关系为准
|
|
|
collectOrderCodeMan.setBatchNo(codeRelEntity.getBatchNo());
|
|
|
collectOrderCodeMan.setProductDate(codeRelEntity.getMadeDate() + "");
|
|
|
collectOrderCodeMan.setExpireDate(codeRelEntity.getValidateDate() + "");
|
|
|
}
|
|
|
this.save(collectOrderCodeMan);
|
|
|
}
|
|
|
|
|
|
collectOrder.setTagStatus(2);
|
|
|
collectOrderService.updateById(collectOrder);
|
|
|
return collectOrder;
|
|
|
}
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
RelCodeDetailService relCodeDetailService;
|
|
|
|
|
|
public boolean isExitRel(String code, String orderId) {
|
|
|
boolean ret = false;
|
|
|
RelCodeDetailResponse relCodeDetail = relCodeDetailService.findByCode(code);
|
|
|
if (relCodeDetail != null) {
|
|
|
//判断是否存在关联关系:1.先判断当前单号是否存在父码,若存在则表示存在关联关系重复扫码
|
|
|
if (StrUtil.isNotEmpty(relCodeDetail.getParentCode())) {
|
|
|
ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getUdiCode, relCodeDetail.getParentCode()));
|
|
|
if (!ret) {
|
|
|
relCodeDetail = relCodeDetailService.findByCode(relCodeDetail.getParentCode());
|
|
|
ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getUdiCode, relCodeDetail.getParentCode()));
|
|
|
}
|
|
|
}
|
|
|
if (ret)
|
|
|
return true;
|
|
|
//若父码不存在,判断当前单号是否存在当前码的子码,若存在则表示存在关联关系重复扫码
|
|
|
ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getParentCode, code));
|
|
|
if (!ret) {
|
|
|
ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getGrantPaCode, code));
|
|
|
}
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 校验当前产品是否拆零表库存
|
|
|
*/
|
|
|
public Boolean vailInSplit(IoCollectOrderBiz collectOrderBiz, Long workPlaceCode, Integer needCount) {
|
|
|
// List<IoSplitCodeEntity> ioSplitCodeEntities = splitCodeService.findSplitCodes(collectOrderBiz.getRelId(), collectOrderBiz.getBatchNo(), workPlaceCode);
|
|
|
// for (IoSplitCodeEntity ioSplitCodeEntity : ioSplitCodeEntities) {
|
|
|
// if (IntUtil.value(ioSplitCodeEntity.getRemainCount()) >= needCount) {
|
|
|
// return true;
|
|
|
// }
|
|
|
// }
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
public IoCollectOrderBiz scanGenOrder(List<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> collectOrderBizs, UdiEntity udiEntity, IoCollectOrder collectOrder) {
|
|
|
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
|
|
|
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
|
|
|
if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.trimToEmpty(collectOrderBiz.getBatchNo()).equals(StrUtil.trimToEmpty(udiEntity.getBatchNo())))) {
|
|
|
int actCount = 0;
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
actCount = +calCountUtil.getCirActCount(udiRelevanceResponse);
|
|
|
} else {
|
|
|
actCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
}
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + actCount);
|
|
|
collectOrderBiz.setCount(IntUtil.value(collectOrderBiz.getCount()) + 1);
|
|
|
collectOrderBiz.setAddCount(1);
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddActCount(actCount);
|
|
|
collectOrderBiz.setAddScanActCount(actCount);
|
|
|
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceResponses.get(0);
|
|
|
int actCount = 0;
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
actCount = calCountUtil.getCirActCount(udiRelevanceResponse);
|
|
|
} else {
|
|
|
actCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
}
|
|
|
return IoCollectOrderBiz.builder()
|
|
|
.id(IdUtil.getSnowflakeNextId())
|
|
|
.relId(udiRelevanceResponse.getId())
|
|
|
.thrCode(udiRelevanceResponse.getMainId())
|
|
|
.ybbm(udiRelevanceResponse.getYbbm())
|
|
|
.payFeeCode(udiRelevanceResponse.getPayFeeCode())
|
|
|
.cpmctymc(udiRelevanceResponse.getCpmctymc())
|
|
|
.nameCode(udiEntity.getUdi())
|
|
|
.ggxh(StrUtil.isNotEmpty(udiRelevanceResponse.getGgxh()) ? udiRelevanceResponse.getGgxh() : udiRelevanceResponse.getBzgg())
|
|
|
.batchNo(udiEntity.getBatchNo())
|
|
|
.productDate(udiEntity.getProduceDate())
|
|
|
.expireDate(udiEntity.getExpireDate())
|
|
|
.count(1)
|
|
|
.addCount(1)
|
|
|
.actCount(actCount)
|
|
|
.addActCount(actCount)
|
|
|
.scanCount(1)
|
|
|
.addScanCount(1)
|
|
|
.scanActCount(actCount)
|
|
|
.addScanActCount(actCount)
|
|
|
.measureUnit(udiRelevanceResponse.getMeasname())
|
|
|
.createTime(new Date())
|
|
|
.updateTime(new Date())
|
|
|
.build();
|
|
|
|
|
|
}
|
|
|
|
|
|
public IoCollectOrderBiz vailByBatchNo(List<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> collectOrderBizs, UdiEntity udiEntity) {
|
|
|
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
|
|
|
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
|
|
|
|
|
|
|
|
|
// 增加医保编码/组套编码等校验
|
|
|
if (StrUtil.isNotEmpty(collectOrderBiz.getCheckCode())) {
|
|
|
|
|
|
if ((StrUtil.emptyIfNull(collectOrderBiz.getBatchNo()).equals(StrUtil.emptyIfNull(udiEntity.getBatchNo())))
|
|
|
&& (StrUtil.emptyIfNull(collectOrderBiz.getCheckCode()).contains(StrUtil.emptyIfNull(udiRelevanceResponse.getYbbm())))) {
|
|
|
collectOrderBiz.setRelId(udiRelevanceResponse.getId());
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
|
|
|
} else if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.emptyIfNull(collectOrderBiz.getBatchNo()).equals(StrUtil.emptyIfNull(udiEntity.getBatchNo())))) {
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public IoCollectOrderBiz vailNoBatchNo(List<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> collectOrderBizs, UdiEntity udiEntity) {
|
|
|
List<IoCollectOrderBiz> addList = new ArrayList<>();
|
|
|
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
|
|
|
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
|
|
|
if (StrUtil.isNotEmpty(collectOrderBiz.getCheckCode())) {
|
|
|
if (StrUtil.emptyIfNull(udiRelevanceResponse.getYbbm()).contains(StrUtil.emptyIfNull(collectOrderBiz.getCheckCode()))) {
|
|
|
collectOrderBiz.setRelId(udiRelevanceResponse.getId());
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
} else if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId())) {
|
|
|
addList.add(collectOrderBiz);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (addList.size() > 0) {
|
|
|
for (IoCollectOrderBiz collectOrderBiz : addList) {
|
|
|
|
|
|
if (StrUtil.trimToEmpty(collectOrderBiz.getBatchNo()).equals(StrUtil.trimToEmpty(udiEntity.getBatchNo()))) {
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
if (IntUtil.value(collectOrderBiz.getCount()) > IntUtil.value(collectOrderBiz.getScanCount())) {
|
|
|
return collectOrderBiz;
|
|
|
}
|
|
|
}
|
|
|
return addList.get(0);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
|
|
|
public Boolean removeByBillNo(String billNo) {
|
|
|
return remove(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, billNo));
|
|
|
}
|
|
|
|
|
|
|
|
|
IoCollectOrderCodeMan exitCode(CollectOrderCodeManRequest collectOrderCodeManRequest) {
|
|
|
return collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest);
|
|
|
}
|
|
|
|
|
|
public List<IoCollectOrderCodeMan> selectByCodeAndOrderId(List<String> codes, String orderId) {
|
|
|
QueryWrapper<IoCollectOrderCodeMan> ew = new QueryWrapper<>();
|
|
|
ew.eq("orderIdFk", orderId);
|
|
|
ew.in("udiCode", codes);
|
|
|
return collectOrderCodeManMapper.selectList(ew);
|
|
|
}
|
|
|
|
|
|
public BaseResponse CheckCode(CollectOrderCodeManRequest request) {
|
|
|
String orderId = request.getOrderIdFk();
|
|
|
IoCollectOrder ioCollectOrder = collectOrderService.getByBillNo(orderId);
|
|
|
if (ioCollectOrder == null)
|
|
|
return ResultVOUtils.error(500, "单据不存在");
|
|
|
//判断
|
|
|
if (StrUtil.isNotEmpty(request.getUdiCode())) {
|
|
|
IoCollectOrderCodeMan ioCollectOrderCodeMan = collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper<IoCollectOrderCodeMan>()
|
|
|
.eq(IoCollectOrderCodeMan::getOrderIdFk, request.getOrderIdFk())
|
|
|
.eq(IoCollectOrderCodeMan::getUdiCode, request.getUdiCode()));
|
|
|
if (ioCollectOrderCodeMan == null) {
|
|
|
BaseResponse response = new BaseResponse();
|
|
|
response.setData(request.getUdiCode());
|
|
|
response.setCode(500);
|
|
|
response.setMessage("追溯码不存在");
|
|
|
return response;
|
|
|
}
|
|
|
UdiEntity udiEntity = FilterUdiUtils.getUdi(request.getUdiCode());
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
|
|
|
udiEntity.setCode(request.getUdiCode());
|
|
|
|
|
|
AddEnterCodeResponse addEnterCodeResponse = setAddEnterCodeResponse(udiEntity, udiRelevanceResponse);
|
|
|
addEnterCodeResponse.setBizIdFk(ioCollectOrderCodeMan.getBizIdFk());
|
|
|
addEnterCodeResponse.setScanActCount(ioCollectOrderCodeMan.getScanActCount());
|
|
|
return ResultVOUtils.success(addEnterCodeResponse);
|
|
|
} else {
|
|
|
List<VailCodeResultResponse> vailCodeResultResponses = new ArrayList<>();
|
|
|
for (String code : request.getUdiCodeList()) {
|
|
|
IoCollectOrderCodeMan ioCollectOrderCodeMan = collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper<IoCollectOrderCodeMan>().eq(IoCollectOrderCodeMan::getOrderIdFk, request.getOrderIdFk()).eq(IoCollectOrderCodeMan::getUdiCode, code));
|
|
|
VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse();
|
|
|
if (ioCollectOrderCodeMan != null) {
|
|
|
vailCodeResultResponse.setStatus(1);
|
|
|
vailCodeResultResponse.setCode(code);
|
|
|
vailCodeResultResponse.setSucMsg("校验成功");
|
|
|
vailCodeResultResponse.setBizIdFk(ioCollectOrderCodeMan.getBizIdFk());
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
} else {
|
|
|
vailCodeResultResponse.setStatus(2);
|
|
|
vailCodeResultResponse.setCode(code);
|
|
|
vailCodeResultResponse.setErrMsg("追溯码不存在");
|
|
|
vailCodeResultResponses.add(vailCodeResultResponse);
|
|
|
}
|
|
|
}
|
|
|
return ResultVOUtils.success(vailCodeResultResponses);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
public AddEnterCodeResponse setAddEnterCodeResponse(UdiEntity udiEntity, UdiRelevanceResponse checkUdi) {
|
|
|
AddEnterCodeResponse addEnterCodeResponse = new AddEnterCodeResponse();
|
|
|
BeanUtils.copyProperties(udiEntity, addEnterCodeResponse);
|
|
|
addEnterCodeResponse.setBzgg(checkUdi.getBzgg());
|
|
|
addEnterCodeResponse.setCpmctymc(checkUdi.getCpmctymc());
|
|
|
addEnterCodeResponse.setPrepnSpec(checkUdi.getPrepnSpec());
|
|
|
addEnterCodeResponse.setPrepnUnit(checkUdi.getPrepnUnit());
|
|
|
addEnterCodeResponse.setPackUnit(checkUdi.getPackUnit());
|
|
|
addEnterCodeResponse.setGgxh(checkUdi.getGgxh());
|
|
|
return addEnterCodeResponse;
|
|
|
}
|
|
|
|
|
|
public Integer getScanCount(String billNo, Long relId) {
|
|
|
return collectOrderCodeManMapper.getScanCount(billNo, relId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param purType 1:入账库;2:预验收库;3:寄售库
|
|
|
*/
|
|
|
public boolean checkDiAttribute(BasicBussinessTypeEntity bussinessTypeEntity, UdiRelevanceResponse
|
|
|
udiRelevanceEntity, Integer purType) {
|
|
|
if (bussinessTypeEntity.getUseDyCount() == 2) {
|
|
|
if (IntUtil.value(udiRelevanceEntity.getPurType()) == IntUtil.value(purType)) {
|
|
|
return true;
|
|
|
} else
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
public IoCollectOrder prescribeReturnOrderCode(AddTagCodeReqeust addTagCodeReqeust) {
|
|
|
Long userId = customerService.getUserId();
|
|
|
String userIds = customerService.getUserId() + "";
|
|
|
SysWorkplace workPlace = sysWorkPlaceService.getWorkplace(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
SysWorkplacePutRel sysWorkplacePutRel = workplacePutRelService.findPutWorkPlace(workPlace.getWorkplaceId(), null);
|
|
|
IoCollectSet collectSet = collectSetService.getSet();
|
|
|
Long putWorkPlaceCode = null;
|
|
|
if (sysWorkplacePutRel != null)
|
|
|
putWorkPlaceCode = sysWorkplacePutRel.getWorkPlaceCode();
|
|
|
if (workPlace == null) throw new JsonException(500, "请先选择工位");
|
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(workPlace.getWorkplaceId(), addTagCodeReqeust.getBusType());
|
|
|
IoCollectOrderBiz collectOrderBiz = null;
|
|
|
IoCollectOrder collectOrder = null;
|
|
|
// try {
|
|
|
// Thread.sleep(3*1000);
|
|
|
// } catch (InterruptedException e) {
|
|
|
// throw new RuntimeException(e);
|
|
|
// }
|
|
|
//1.校验UDI码完整性
|
|
|
String code = addTagCodeReqeust.getCode();
|
|
|
if (StringUtils.isBlank(code)) throw new JsonException(ResultEnum.DATA_ERROR.getMessage());
|
|
|
if (code.endsWith("\u001D")) {
|
|
|
code = code.replace("\u001D", "");
|
|
|
}
|
|
|
UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
|
|
|
if (udiEntity == null) throw new JsonException(500, "无效条码!");
|
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse;
|
|
|
List<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
|
|
|
if (CollUtil.isEmpty(udiRelevanceResponses)) throw new JsonException(500, "产品字典不存在此产品!");
|
|
|
else udiRelevanceResponse = udiRelevanceResponses.get(0);
|
|
|
|
|
|
//如果是处方退药的码 要去校验是 否是 原始单据处方已完成的码
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
IoCollectCodeRequest ioCollectCodeRequest = new IoCollectCodeRequest();
|
|
|
ioCollectCodeRequest.setBillNo(collectOrder.getRemark());
|
|
|
ioCollectCodeRequest.setCode(code);
|
|
|
List<IoCollectCodeResponse> ioCollectCodeResponses = ioCollectCodeBackService.filterList(ioCollectCodeRequest);
|
|
|
if (ioCollectCodeResponses.size() == 0){
|
|
|
throw new JsonException(500, "当前追溯码非原始处方追溯码");
|
|
|
}
|
|
|
IoCollectCodeResponse ioCollectCodeResponse = ioCollectCodeResponses.get(0);
|
|
|
// if (ioCollectCodeResponse.getReCount() != 0 || ioCollectCodeResponse.getReCount() != null){
|
|
|
// //扫入的为拆零码
|
|
|
// //这个为 退货的数量 如果退货数量 是
|
|
|
// Integer count = collectOrderBiz1.getCount();
|
|
|
// }
|
|
|
if (!ioCollectCodeResponse.getCode().equals(code)){
|
|
|
throw new JsonException(500, "当前追溯码非原始处方追溯码");
|
|
|
}
|
|
|
|
|
|
//流通数量
|
|
|
Integer circleCount = calCountUtil.getCirActCount(udiRelevanceResponse);
|
|
|
//使用数量
|
|
|
Integer useCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
Integer scanCount = 0;
|
|
|
|
|
|
IoCollectOrderCodeMan exitCode = this.findByCode(addTagCodeReqeust.getBillNo(), code);
|
|
|
if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
throw new JsonException(500, "重复扫码!");
|
|
|
}
|
|
|
IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(code, putWorkPlaceCode);
|
|
|
List<IoCollectOrderBiz> collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
//2.校验是否处方单UDI码
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) {
|
|
|
if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) {
|
|
|
String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_ORDER, "yyyyMMdd"));
|
|
|
collectOrder = IoCollectOrder.builder()
|
|
|
.billNo(orderNo)
|
|
|
.busType(sysWorkplaceDocumentEntity.getDocumentTypeCode())
|
|
|
.fromCorp(addTagCodeReqeust.getFromCorp())
|
|
|
.fromCorpName(addTagCodeReqeust.getFromCorpName())
|
|
|
.billTime(new Date())
|
|
|
.workPlaceCode(workPlace.getWorkplaceId())
|
|
|
.createTime(new Date())
|
|
|
.createUser(userIds)
|
|
|
.shipper(addTagCodeReqeust.getInvCode())
|
|
|
.updateTime(new Date())
|
|
|
.orderCirType(sysWorkplaceDocumentEntity.getOrderCirType())
|
|
|
.tagStatus(1)
|
|
|
.build();
|
|
|
if (StrUtil.isNotEmpty(addTagCodeReqeust.getShipper())) {
|
|
|
collectOrder.setShipper(addTagCodeReqeust.getShipper());
|
|
|
collectOrder.setShipperName(addTagCodeReqeust.getShipperName());
|
|
|
}
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getIsMatching()) == 1) {
|
|
|
collectOrder.setFromType("药械追溯管理系统");
|
|
|
} else {
|
|
|
ThrBusTypeOriginEntity one = thrBusTypeOriginService.getOne(new LambdaQueryWrapper<ThrBusTypeOriginEntity>()
|
|
|
.eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode()));
|
|
|
if (one != null) {
|
|
|
ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper<ThrSystemEntity>().eq(ThrSystemEntity::getThirdId, one.getThirdSys()));
|
|
|
if (thrSystemEntity != null) {
|
|
|
collectOrder.setFromType(thrSystemEntity.getThirdName());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
collectOrderService.save(collectOrder);
|
|
|
} else {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
}
|
|
|
|
|
|
//直接扫码单生成业务单
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
collectOrderBizService.saveOrUpdate(collectOrderBiz);
|
|
|
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_VAIL_BATCH) {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
if (collectOrder == null)
|
|
|
throw new JsonException(500, "单据不存在!");
|
|
|
if (splitCodeEntity != null && StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())) {
|
|
|
if (IntUtil.value(splitCodeEntity.getRemainCount()) < 1) {
|
|
|
throw new JsonException(500, "当前追溯码已被拆零!");
|
|
|
} else {
|
|
|
circleCount = splitCodeEntity.getRemainCount();
|
|
|
useCount = splitCodeEntity.getRemainCount();
|
|
|
}
|
|
|
}
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
scanCount = circleCount;
|
|
|
} else {
|
|
|
scanCount = useCount;
|
|
|
}
|
|
|
|
|
|
CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest();
|
|
|
collectOrderCodeManRequest.setUdiCode(code);
|
|
|
collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode());
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest);
|
|
|
IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code);
|
|
|
if (codeLostEntity != null) {
|
|
|
udiEntity.setBatchNo(codeLostEntity.getBatchNo());
|
|
|
udiEntity.setProduceDate(codeLostEntity.getProduceDate());
|
|
|
udiEntity.setExpireDate(codeLostEntity.getExpireDate());
|
|
|
|
|
|
}
|
|
|
if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) {
|
|
|
throw new JsonException(500, "当前追溯码已被其他单据关联!");
|
|
|
}
|
|
|
|
|
|
collectOrderBiz = vailByBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
|
|
|
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
|
|
|
case 1: //插入
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount);
|
|
|
}
|
|
|
break;
|
|
|
case 2: //不插入
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, "非此单据追溯码!");
|
|
|
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
|
|
|
int actCount = 0;
|
|
|
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (actCount > IntUtil.value(collectOrderBiz.getCount())) {
|
|
|
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续添加?");
|
|
|
}
|
|
|
}
|
|
|
throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
}
|
|
|
collectOrderBiz.setScanCount(count);
|
|
|
collectOrderBiz.setScanActCount(actCount);
|
|
|
break;
|
|
|
case 3: //提醒是否插入
|
|
|
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(502, addTagCodeReqeust.getCode() + "非此单据追溯码,是否继续添加!");
|
|
|
int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
int actCount1 = 0;
|
|
|
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
if (actCount1 > collectOrderBiz.getCount()) {
|
|
|
int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount());
|
|
|
if (needCount > 0) {
|
|
|
if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) {
|
|
|
throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续扫码?");
|
|
|
}
|
|
|
int myUseCount = calCountUtil.getUseActCount(udiRelevanceResponse);
|
|
|
if (needCount > myUseCount) {
|
|
|
throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
|
|
|
} else {
|
|
|
collectOrderBiz.setSplitUnCheck(true);
|
|
|
if (IntUtil.value(collectSet.getLastCodeSplit())) {
|
|
|
throw new JsonException(503, collectOrderBiz.getId() + ";" + count1 + ";" + collectOrderBiz.getCpmctymc() + ";" + "扫码数量超出!");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
collectOrderBiz.setScanCount(count1);
|
|
|
collectOrderBiz.setScanActCount(actCount1);
|
|
|
} else {
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse));
|
|
|
} else {
|
|
|
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
collectOrderBizService.saveOrUpdate(collectOrderBiz);
|
|
|
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_UNVAIL_BATCH) {
|
|
|
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode());
|
|
|
if (collectOrder == null)
|
|
|
throw new JsonException(500, "单据不存在!");
|
|
|
//按单不校验三期
|
|
|
collectOrderBiz = vailNoBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
|
|
|
|
|
|
CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest();
|
|
|
collectOrderCodeManRequest.setUdiCode(code);
|
|
|
collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode());
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest);
|
|
|
if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) {
|
|
|
throw new JsonException(500, "当前追溯码已被其他单据关联!");
|
|
|
}
|
|
|
|
|
|
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
|
|
|
scanCount = circleCount;
|
|
|
} else {
|
|
|
scanCount = useCount;
|
|
|
}
|
|
|
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
|
|
|
case 1: //插入
|
|
|
if (collectOrderBiz == null) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!");
|
|
|
} else {
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
}
|
|
|
break;
|
|
|
case 2: //不插入
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, "非此单据追溯码!");
|
|
|
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
|
|
|
int actCount = 0;
|
|
|
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount;
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
break;
|
|
|
case 3: //提醒是否插入
|
|
|
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
|
|
|
if (collectOrderBiz == null)
|
|
|
throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!");
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
} else {
|
|
|
if (collectOrderBiz == null) {
|
|
|
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
|
|
|
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
|
|
|
} else {
|
|
|
collectOrderBiz.setAddScanCount(1);
|
|
|
collectOrderBiz.setAddScanActCount(scanCount);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
collectOrderBizService.insertOrUpdate(collectOrderBiz);
|
|
|
}
|
|
|
|
|
|
int count = 0;
|
|
|
if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) {
|
|
|
exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1);
|
|
|
exitCode.setScanActCount(IntUtil.value(exitCode.getScanActCount()) + scanCount);
|
|
|
exitCode.setBizIdFk(collectOrderBiz.getId());
|
|
|
this.updateById(exitCode);
|
|
|
} else {
|
|
|
// if (isExitRel(code, collectOrder.getBillNo())) {
|
|
|
// throw new JsonException(500, "当前追溯码已上传关联关系,请勿重复扫码!");
|
|
|
// }
|
|
|
IoCollectOrderCodeMan collectOrderCodeMan =
|
|
|
IoCollectOrderCodeMan.builder()
|
|
|
.udiCode(code)
|
|
|
.orderIdFk(collectOrder.getBillNo())
|
|
|
.bizIdFk(collectOrderBiz.getId())
|
|
|
.relId(collectOrderBiz.getRelId())
|
|
|
.nameCode(udiEntity.getUdi())
|
|
|
.batchNo(udiEntity.getBatchNo() == null ? collectOrderBiz.getBatchNo() : udiEntity.getBatchNo())
|
|
|
.serialNo(udiEntity.getSerialNo())
|
|
|
.productDate(udiEntity.getProduceDate() == null ? collectOrderBiz.getProductDate() : udiEntity.getProduceDate())
|
|
|
.expireDate(udiEntity.getExpireDate() == null ? collectOrderBiz.getExpireDate() : udiEntity.getExpireDate())
|
|
|
.createTime(new Date())
|
|
|
.createUser(userId)
|
|
|
.updateTime(new Date())
|
|
|
.updateUser(userId)
|
|
|
.scanCount(count + 1)
|
|
|
// .scanCount(scanCount)
|
|
|
.isSplitCode(addTagCodeReqeust.getIsSplitCode())
|
|
|
.scanActCount(scanCount)
|
|
|
.build();
|
|
|
|
|
|
|
|
|
// RelCodeDetailResponse codeRelEntity = relCodeDetailService.findByCode(code);
|
|
|
// if (codeRelEntity != null) {
|
|
|
// collectOrderCodeMan.setParentCode(codeRelEntity.getParentCode());
|
|
|
// RelCodeDetail relCodeDetail = relCodeDetailService.getOneByCode(codeRelEntity.getParentCode());
|
|
|
// if (relCodeDetail != null) {
|
|
|
// collectOrderCodeMan.setGrantPaCode(relCodeDetail.getParentCode());
|
|
|
// }
|
|
|
// //当关联关系存在的时候 以关联关系为准
|
|
|
// collectOrderCodeMan.setBatchNo(codeRelEntity.getBatchNo());
|
|
|
// collectOrderCodeMan.setProductDate(codeRelEntity.getMadeDate() + "");
|
|
|
// collectOrderCodeMan.setExpireDate(codeRelEntity.getValidateDate() + "");
|
|
|
// }
|
|
|
this.save(collectOrderCodeMan);
|
|
|
}
|
|
|
collectOrder.setTagStatus(2);
|
|
|
collectOrderService.updateById(collectOrder);
|
|
|
return collectOrder;
|
|
|
}
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
IoCollectOrderCodeManService collectOrderCodeManService;
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public BaseResponse splitReturnOrderCode(AddTagCodeReqeust addTagCodeReqeust,Integer type) {
|
|
|
if (StrUtil.isBlank(addTagCodeReqeust.getBillNo())){
|
|
|
throw new JsonException(500,"单据号不能为空");
|
|
|
}
|
|
|
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
|
|
|
if (collectOrder == null){
|
|
|
throw new JsonException(500,"单据不存在");
|
|
|
}
|
|
|
|
|
|
List<IoCollectOrderBiz> ioCollectOrderBizs = null;
|
|
|
if (type == 1){
|
|
|
ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper<IoCollectOrderBiz>().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo())
|
|
|
.eq(IoCollectOrderBiz::getRelId,addTagCodeReqeust.getRelId()));
|
|
|
}
|
|
|
if (type == 2){
|
|
|
ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper<IoCollectOrderBiz>().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo()));
|
|
|
}
|
|
|
|
|
|
for (IoCollectOrderBiz ioCollectOrderBiz:ioCollectOrderBizs){
|
|
|
List<IoCollectCodeBackup> ioCollectCodeBackups = ioCollectCodeBackService.list(new LambdaQueryWrapper<IoCollectCodeBackup>()
|
|
|
.eq(IoCollectCodeBackup::getBillNo, collectOrder.getRemark())
|
|
|
.eq(IoCollectCodeBackup::getRelId, ioCollectOrderBiz.getRelId()));
|
|
|
//拆零
|
|
|
List<IoCollectCodeBackup> spiltList = ioCollectCodeBackups.stream()
|
|
|
.filter(item -> {
|
|
|
Integer reCount = item.getReCount();
|
|
|
return reCount > 0;
|
|
|
})
|
|
|
.collect(Collectors.toList());
|
|
|
//所有拆零码 如果type == 2 需要查看manList里面的码 是重复 过滤掉重复的
|
|
|
if (type == 2){
|
|
|
List<IoCollectOrderCodeMan> collectOrderCodeManList = collectOrderCodeManService.list(
|
|
|
new LambdaQueryWrapper<IoCollectOrderCodeMan>()
|
|
|
.eq(IoCollectOrderCodeMan::getOrderIdFk, addTagCodeReqeust.getBillNo()));
|
|
|
if (collectOrderCodeManList.size() > 0){
|
|
|
// 提前将collectOrderCodeManList的udiCode提取到Set中,提升查找效率
|
|
|
Set<String> udiCodeSet = collectOrderCodeManList.stream()
|
|
|
.map(IoCollectOrderCodeMan::getUdiCode)
|
|
|
.collect(Collectors.toSet());
|
|
|
|
|
|
// 过滤掉spiltList中code存在于udiCodeSet中的项
|
|
|
spiltList = spiltList.stream()
|
|
|
.filter(item -> !udiCodeSet.contains(item.getCode()))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (IoCollectCodeBackup ioCollectCodeBackup : spiltList){
|
|
|
addTagCodeReqeust.setBusType(collectOrder.getBusType());
|
|
|
addTagCodeReqeust.setCode(ioCollectCodeBackup.getCode());
|
|
|
addTagCodeReqeust.setFromCorp(collectOrder.getFromCorp());
|
|
|
addTagCodeReqeust.setFromCorpName(collectOrder.getFromCorpName());
|
|
|
addTagCodeReqeust.setShipperName(collectOrder.getShipperName());
|
|
|
this.prescribeReturnOrderCode(addTagCodeReqeust);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
return ResultVOUtils.success();
|
|
|
}
|
|
|
}
|