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...

449 lines
24 KiB
Java

package com.glxp.api.service.collect;
11 months ago
import cn.hutool.core.collection.CollUtil;
10 months ago
import cn.hutool.core.util.IdUtil;
11 months ago
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
11 months ago
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.basic.BasicSkPrescribeItemCodeMapper;
import com.glxp.api.dao.collect.IoCollectOrderCodeAutoMapper;
11 months ago
import com.glxp.api.entity.auth.SysWorkplace;
import com.glxp.api.entity.basic.BasicCollectBustypeEntity;
import com.glxp.api.entity.basic.BasicSkPrescribeItemCode;
11 months ago
import com.glxp.api.entity.basic.SysWorkplaceDocumentEntity;
11 months ago
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.collect.IoCollectOrder;
import com.glxp.api.entity.collect.IoCollectOrderBiz;
11 months ago
import com.glxp.api.entity.collect.IoCollectOrderCodeAuto;
import com.glxp.api.entity.thrsys.ThrBusTypeOriginEntity;
import com.glxp.api.entity.thrsys.ThrSystemEntity;
11 months ago
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.collect.CollectOrderCodeAutoRequest;
import com.glxp.api.req.collect.CollectOrderCodeManRequest;
11 months ago
import com.glxp.api.req.inout.AddTagCodeReqeust;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.res.collect.CollectOrderCodeAutoResponse;
import com.glxp.api.res.collect.CollectOrderCodeManResponse;
11 months ago
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.auth.SysWorkplaceService;
import com.glxp.api.service.basic.BasicCollectBustypeService;
11 months ago
import com.glxp.api.service.basic.SysWorkplaceDocumentService;
11 months ago
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.thrsys.IThrBusTypeOriginService;
import com.glxp.api.service.thrsys.ThrSystemService;
11 months ago
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.IntUtil;
import com.glxp.api.util.OrderNoTypeBean;
import com.glxp.api.util.udi.FilterUdiUtils;
11 months ago
import com.glxp.api.util.udi.UdiCalCountUtil;
11 months ago
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
11 months ago
import java.util.ArrayList;
import java.util.Collections;
11 months ago
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.glxp.api.entity.collect.IoCollectOrderCodeMan;
import com.glxp.api.dao.collect.IoCollectOrderCodeManMapper;
11 months ago
import org.springframework.transaction.annotation.Transactional;
@Service
public class IoCollectOrderCodeManService extends ServiceImpl<IoCollectOrderCodeManMapper, IoCollectOrderCodeMan> {
@Resource
IoCollectOrderCodeManMapper collectOrderCodeManMapper;
11 months ago
@Resource
SysWorkplaceService sysWorkPlaceService;
@Resource
UdiRelevanceService udiRelevanceService;
@Resource
IoCollectOrderBizService collectOrderBizService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
BasicCollectBustypeService bustypeService;
@Resource
private ThrSystemService thrSystemService;
@Resource
private IThrBusTypeOriginService thrBusTypeOriginService;
11 months ago
@Resource
CustomerService customerService;
@Resource
IoCollectOrderService collectOrderService;
11 months ago
@Resource
SysWorkplaceDocumentService sysWorkplaceDocumentService;
11 months ago
@Resource
UdiCalCountUtil calCountUtil;
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);
}
11 months ago
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"));
}
11 months ago
@Transactional(rollbackFor = Exception.class)
public IoCollectOrder prescribeTagCode(AddTagCodeReqeust addTagCodeReqeust) {
Long userId = customerService.getUserId();
String userIds = customerService.getUserId() + "";
SysWorkplace workPlace = sysWorkPlaceService.getWorkplace(addTagCodeReqeust.getWorkPlaceCode());
11 months ago
if (workPlace == null) throw new JsonException(500, "请先选择工位");
11 months ago
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByWorkplaceCode(workPlace.getWorkplaceId(), addTagCodeReqeust.getBusType());
11 months ago
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);
11 months ago
if (udiEntity == null) throw new JsonException(500, "无效条码!");
11 months ago
UdiRelevanceResponse udiRelevanceResponse;
List<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null);
11 months ago
if (CollUtil.isEmpty(udiRelevanceResponses)) throw new JsonException(500, "耗材字典不存在此产品!");
11 months ago
else udiRelevanceResponse = udiRelevanceResponses.get(0);
List<IoCollectOrderBiz> collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo());
//2.校验是否处方单UDI码
11 months ago
if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) {
11 months ago
if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) {
String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_ORDER, "yyyyMMdd"));
11 months ago
collectOrder = IoCollectOrder.builder()
.billNo(orderNo)
11 months ago
.busType(sysWorkplaceDocumentEntity.getDocumentTypeCode())
11 months ago
.fromCorp(addTagCodeReqeust.getFromCorp())
.billTime(new Date())
.workPlaceCode(workPlace.getWorkplaceId())
.createTime(new Date())
.createUser(userIds)
.updateTime(new Date())
.tagStatus(1)
.build();
11 months ago
if (IntUtil.value(sysWorkplaceDocumentEntity.getIsMatching()) == 1) {
collectOrder.setFromType("UDI系统");
} else {
ThrBusTypeOriginEntity one = thrBusTypeOriginService.getOne(new LambdaQueryWrapper<ThrBusTypeOriginEntity>()
.eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode()));
10 months ago
if (one != null) {
ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper<ThrSystemEntity>().eq(ThrSystemEntity::getThirdId, one.getThirdSys()));
10 months ago
if (thrSystemEntity != null) {
collectOrder.setFromType(thrSystemEntity.getThirdName());
}
}
11 months ago
}
11 months ago
collectOrderService.save(collectOrder);
} else {
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
}
//直接扫码单生成业务单
11 months ago
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
11 months ago
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
collectOrderBizService.saveOrUpdate(collectOrderBiz);
11 months ago
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_VAIL_BATCH) {
11 months ago
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
if (collectOrder == null)
11 months ago
throw new JsonException(500, "单据不存在!");
11 months ago
//3.校验该UDI码是否已经出库是否在预出库队列
// Boolean b1 = splitFifoCodeService.isExitCode(code, collectOrder.getWorkPlaceCode());
// if (!b1) {
// return ResultVOUtils.error(500, "该追溯码未上货,无法使用!");
// }
collectOrderBiz = vailByBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
11 months ago
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
11 months ago
case 1: //插入
if (collectOrderBiz == null) {
11 months ago
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
11 months ago
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
11 months ago
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));
}
11 months ago
}
break;
case 2: //不插入
if (collectOrderBiz == null)
throw new JsonException(500, "非此单据追溯码!");
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
11 months ago
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);
}
if (actCount > IntUtil.value(collectOrderBiz.getCount())) {
11 months ago
throw new JsonException(500, "扫码数量超出!");
}
collectOrderBiz.setScanCount(count);
11 months ago
collectOrderBiz.setScanActCount(actCount);
11 months ago
break;
case 3: //提醒是否插入
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
if (collectOrderBiz == null)
throw new JsonException(502, "非此单据追溯码!");
int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
11 months ago
int actCount1 = 0;
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse);
} else {
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse);
}
if (actCount1 > collectOrderBiz.getCount()) {
11 months ago
throw new JsonException(502, "扫码数量超出!");
}
collectOrderBiz.setScanCount(count1);
11 months ago
collectOrderBiz.setScanActCount(actCount1);
11 months ago
} else {
if (collectOrderBiz == null) {
11 months ago
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
11 months ago
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
11 months ago
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));
}
11 months ago
}
}
break;
default:
break;
}
11 months ago
} else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_UNVAIL_BATCH) {
11 months ago
collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
if (collectOrder == null)
throw new JsonException(500, "单据不存在!");
//3.校验该UDI码是否已经出库是否在预出库队列
// Boolean b1 = splitFifoCodeService.isExitCode(code, collectOrder.getWorkPlaceCode());
// if (!b1) {
// return ResultVOUtils.error(500, "该追溯码未上货,无法使用!");
// }
//按单不校验三期
collectOrderBiz = vailNoBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity);
11 months ago
switch (sysWorkplaceDocumentEntity.getCheckInsert()) {
11 months ago
case 1: //插入
if (collectOrderBiz == null) {
11 months ago
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
11 months ago
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
11 months ago
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));
}
11 months ago
}
break;
case 2: //不插入
if (collectOrderBiz == null)
throw new JsonException(500, "非此单据追溯码!");
int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
11 months ago
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);
}
if (actCount > IntUtil.value(collectOrderBiz.getCount())) {
11 months ago
throw new JsonException(500, "扫码数量超出!");
}
collectOrderBiz.setScanCount(count);
11 months ago
collectOrderBiz.setScanActCount(actCount);
11 months ago
break;
case 3: //提醒是否插入
if (!IntUtil.value(addTagCodeReqeust.getInsert())) {
if (collectOrderBiz == null)
throw new JsonException(502, "非此单据追溯码!");
int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1;
11 months ago
int actCount1 = 0;
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse);
} else {
actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse);
}
if (actCount1 > collectOrderBiz.getCount()) {
11 months ago
throw new JsonException(502, "扫码数量超出!");
}
collectOrderBiz.setScanCount(count1);
11 months ago
collectOrderBiz.setScanActCount(actCount1);
11 months ago
} else {
if (collectOrderBiz == null) {
11 months ago
collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder);
11 months ago
collectOrderBiz.setOrderIdFk(collectOrder.getBillNo());
} else {
10 months ago
collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1);
11 months ago
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));
}
11 months ago
}
}
break;
default:
break;
}
}
10 months ago
collectOrderBizService.saveOrUpdate(collectOrderBiz);
11 months ago
IoCollectOrderCodeMan exitCode = this.findByCode(collectOrderBiz.getOrderIdFk(), code);
if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) {
exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1);
exitCode.setBizIdFk(collectOrderBiz.getId());
this.updateById(exitCode);
} else if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) {
throw new JsonException(500, "重复扫码!");
} else {
IoCollectOrderCodeMan collectOrderCodeMan =
IoCollectOrderCodeMan.builder()
.udiCode(code)
.orderIdFk(collectOrder.getBillNo())
.bizIdFk(collectOrderBiz.getId())
.relId(collectOrderBiz.getRelId())
.nameCode(udiRelevanceResponse.getNameCode())
.batchNo(udiEntity.getBatchNo())
.productDate(udiEntity.getProduceDate())
.expireDate(udiEntity.getExpireDate())
11 months ago
.createTime(new Date())
.createUser(userId)
.updateTime(new Date())
.updateUser(userId)
.scanCount(1)
.build();
this.save(collectOrderCodeMan);
}
collectOrder.setTagStatus(2);
collectOrderService.updateById(collectOrder);
return collectOrder;
}
11 months ago
public IoCollectOrderBiz scanGenOrder(List<UdiRelevanceResponse> udiRelevanceResponses, List<IoCollectOrderBiz> collectOrderBizs, UdiEntity udiEntity, IoCollectOrder collectOrder) {
11 months ago
for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) {
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) &&
(StrUtil.isNotEmpty(collectOrderBiz.getBatchNo()) && collectOrderBiz.getBatchNo().equals(udiEntity.getBatchNo()))
) {
11 months ago
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);
11 months ago
collectOrderBiz.setCount(IntUtil.value(collectOrderBiz.getCount()) + 1);
return collectOrderBiz;
}
}
}
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceResponses.get(0);
11 months ago
int actCount = 0;
if (IntUtil.value(collectOrder.getOrderCirType()) == 1) {
actCount = calCountUtil.getCirActCount(udiRelevanceResponse);
} else {
actCount = calCountUtil.getUseActCount(udiRelevanceResponse);
}
11 months ago
return IoCollectOrderBiz.builder()
10 months ago
.id(IdUtil.getSnowflakeNextId())
11 months ago
.relId(udiRelevanceResponse.getId())
.thrCode(udiRelevanceResponse.getMainId())
.ybbm(udiRelevanceResponse.getYbbm())
.payFeeCode(udiRelevanceResponse.getPayFeeCode())
.cpmctymc(udiRelevanceResponse.getCpmctymc())
.nameCode(udiRelevanceResponse.getNameCode())
.ggxh(udiRelevanceResponse.getGgxh())
.batchNo(udiEntity.getBatchNo())
.productDate(udiEntity.getProduceDate())
.expireDate(udiEntity.getExpireDate())
.count(0)
.actCount(0)
.scanCount(1)
11 months ago
.scanActCount(actCount)
11 months ago
.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) {
10 months ago
if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.emptyIfNull(collectOrderBiz.getBatchNo()).equals(StrUtil.emptyIfNull(udiEntity.getBatchNo())))) {
11 months ago
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;
}
}