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-wms-java/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManServic...

626 lines
34 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.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.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.InvWarehouseEntity;
import com.glxp.api.entity.auth.SysWorkplace;
import com.glxp.api.entity.basic.SysWorkplaceDocumentEntity;
import com.glxp.api.entity.basic.SysWorkplacePutRel;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.collect.IoCollectOrder;
import com.glxp.api.entity.collect.IoCollectOrderBiz;
import com.glxp.api.entity.collect.IoCollectOrderCodeMan;
import com.glxp.api.entity.collect.RelCodeDetail;
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.inout.AddTagCodeReqeust;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.res.collect.CollectOrderCodeManResponse;
import com.glxp.api.res.collect.RelCodeDetailResponse;
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.auth.SysWorkplaceService;
import com.glxp.api.service.basic.BasicCollectBustypeService;
import com.glxp.api.service.basic.SysWorkplaceDocumentService;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.inout.IoSplitCodeService;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@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;
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
InvWarehouseService invWarehouseService;
@Resource
SysWorkplacePutRelService workplacePutRelService;
@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);
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.getPackLevel()) > IntUtil.value(udiRelevanceResponse.getUseMaxLevel())) {
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
}
if (IntUtil.value(udiRelevanceResponse.getPackLevel()) < IntUtil.value(udiRelevanceResponse.getUseLevel())) {
throw new JsonException(500, "当前产品不支持采集该包装层级追溯码!");
}
if (udiRelevanceResponse.getUseMaxLevel() == null && IntUtil.value(udiRelevanceResponse.getPackLevel()) > 1) {
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, "当前产品不支持采集该包装层级追溯码!");
}
}
//流通数量
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);
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.getInvCode())) {
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(addTagCodeReqeust.getInvCode());
collectOrder.setShipperName(invWarehouseEntity.getName());
}
if (IntUtil.value(sysWorkplaceDocumentEntity.getIsMatching()) == 1) {
collectOrder.setFromType("UDI系统");
} 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);
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);
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;
}
} 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 (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) {
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 > 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(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!");
} else {
collectOrderBiz.setSplitUnCheck(true);
throw new JsonException(503, collectOrderBiz.getId() + ";" + count1 + ";" + collectOrderBiz.getCpmctymc() + ";" + "扫码数量超出!");
}
} else {
throw new JsonException(500, 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);
collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount);
}
}
break;
default:
break;
}
}
collectOrderBizService.saveOrUpdate(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())
.serialNo(udiEntity.getSerialNo())
.productDate(udiEntity.getProduceDate())
.expireDate(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());
}
}
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.isNotEmpty(collectOrderBiz.getBatchNo()) && collectOrderBiz.getBatchNo().equals(udiEntity.getBatchNo()))
) {
int actCount = 0;
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse);
} else {
actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse);
}
collectOrderBiz.setScanActCount(actCount);
collectOrderBiz.setCount(IntUtil.value(collectOrderBiz.getCount()) + 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(0)
.actCount(0)
.scanCount(1)
.scanActCount(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 (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 (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);
}
}