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 { @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 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 listByBillNo(String billNo) { return collectOrderCodeManMapper.selectList(new LambdaQueryWrapper() .eq(IoCollectOrderCodeMan::getOrderIdFk, billNo)); } public IoCollectOrderCodeMan findByCode(String billNo, String code) { return collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper().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 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 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 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().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 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() .eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode())); if (one != null) { ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper().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().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getUdiCode, relCodeDetail.getParentCode())); if (!ret) { relCodeDetail = relCodeDetailService.findByCode(relCodeDetail.getParentCode()); ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getUdiCode, relCodeDetail.getParentCode())); } } if (ret) return true; //若父码不存在,判断当前单号是否存在当前码的子码,若存在则表示存在关联关系重复扫码 ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getParentCode, code)); if (!ret) { ret = collectOrderCodeManMapper.exists(new LambdaQueryWrapper().eq(IoCollectOrderCodeMan::getOrderIdFk, orderId).eq(IoCollectOrderCodeMan::getGrantPaCode, code)); } } return ret; } /** * 校验当前产品是否拆零表库存 */ public Boolean vailInSplit(IoCollectOrderBiz collectOrderBiz, Long workPlaceCode, Integer needCount) { // List 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 udiRelevanceResponses, List 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 udiRelevanceResponses, List 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 udiRelevanceResponses, List collectOrderBizs, UdiEntity udiEntity) { List 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().eq(IoCollectOrderCodeMan::getOrderIdFk, billNo)); } IoCollectOrderCodeMan exitCode(CollectOrderCodeManRequest collectOrderCodeManRequest) { return collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest); } public List selectByCodeAndOrderId(List codes, String orderId) { QueryWrapper 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() .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 vailCodeResultResponses = new ArrayList<>(); for (String code : request.getUdiCodeList()) { IoCollectOrderCodeMan ioCollectOrderCodeMan = collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper().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 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 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 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() .eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode())); if (one != null) { ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper().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 ioCollectOrderBizs = null; if (type == 1){ ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo()) .eq(IoCollectOrderBiz::getRelId,addTagCodeReqeust.getRelId())); } if (type == 2){ ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo())); } for (IoCollectOrderBiz ioCollectOrderBiz:ioCollectOrderBizs){ List ioCollectCodeBackups = ioCollectCodeBackService.list(new LambdaQueryWrapper() .eq(IoCollectCodeBackup::getBillNo, collectOrder.getRemark()) .eq(IoCollectCodeBackup::getRelId, ioCollectOrderBiz.getRelId())); //拆零 List spiltList = ioCollectCodeBackups.stream() .filter(item -> { Integer reCount = item.getReCount(); return reCount > 0; }) .collect(Collectors.toList()); //所有拆零码 如果type == 2 需要查看manList里面的码 是重复 过滤掉重复的 if (type == 2){ List collectOrderCodeManList = collectOrderCodeManService.list( new LambdaQueryWrapper() .eq(IoCollectOrderCodeMan::getOrderIdFk, addTagCodeReqeust.getBillNo())); if (collectOrderCodeManList.size() > 0){ // 提前将collectOrderCodeManList的udiCode提取到Set中,提升查找效率 Set 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(); } }