|
|
|
@ -67,6 +67,7 @@ import java.io.InputStream;
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
@ -463,66 +464,77 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加一个用于同步的Map,存储正在处理的单号
|
|
|
|
|
private static final Map<String, Object> BILL_LOCKS = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
|
|
public void importPrescribe(List<BasicSkPrescribeEntity> basicSkPrescribeEntities) {
|
|
|
|
|
//下载处方
|
|
|
|
|
if (CollUtil.isEmpty(basicSkPrescribeEntities)) basicSkPrescribeEntities = basicSkPrescribeService.list();
|
|
|
|
|
List<SysWorkplaceResponse> allWorksList = new ArrayList<>();
|
|
|
|
|
for (BasicSkPrescribeEntity basicSkPrescribeEntity : basicSkPrescribeEntities) {
|
|
|
|
|
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, basicSkPrescribeEntity.getCode()))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(basicSkPrescribeEntity.getAddr());
|
|
|
|
|
if (sysWorkplaceDocumentEntity == null) continue;
|
|
|
|
|
//自动分配工位
|
|
|
|
|
final Long[] defaultWorkplace = {null};
|
|
|
|
|
List<SysWorkplaceResponse> sysWorkplaces = sysWorkplaceService.getAllByBusType(basicSkPrescribeEntity.getAddr());
|
|
|
|
|
if (CollUtil.isNotEmpty(sysWorkplaces)) {
|
|
|
|
|
if (sysWorkplaces.size() == 1) {
|
|
|
|
|
defaultWorkplace[0] = sysWorkplaces.get(0).getWorkplaceId();
|
|
|
|
|
} else {
|
|
|
|
|
List<SysWorkplaceResponse> addWorkplace = new ArrayList<>();
|
|
|
|
|
for (SysWorkplaceResponse sysWorkplace : sysWorkplaces) {
|
|
|
|
|
//获取是否有正在处理的工位
|
|
|
|
|
List<IoCollectOrder> collectOrderList1 = collectOrderMapper.selectList(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getWorkPlaceCode, sysWorkplace.getWorkplaceId()).in(IoCollectOrder::getTagStatus, -1, 1, 2));
|
|
|
|
|
sysWorkplace.setOrderCount(collectOrderList1.size());
|
|
|
|
|
if (IntUtil.value(sysWorkplace.getOrderCount()) > 0) {
|
|
|
|
|
addWorkplace.add(sysWorkplace);
|
|
|
|
|
// 获取单号
|
|
|
|
|
String billNo = basicSkPrescribeEntity.getCode();
|
|
|
|
|
// 为每个单号创建一个锁对象,如果已存在则使用现有的
|
|
|
|
|
Object billLock = BILL_LOCKS.computeIfAbsent(billNo, k -> new Object());
|
|
|
|
|
// 使用同步块确保同一单号的处理是同步的
|
|
|
|
|
synchronized (billLock) {
|
|
|
|
|
try {
|
|
|
|
|
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, billNo))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(basicSkPrescribeEntity.getAddr());
|
|
|
|
|
if (sysWorkplaceDocumentEntity == null) continue;
|
|
|
|
|
//自动分配工位
|
|
|
|
|
final Long[] defaultWorkplace = {null};
|
|
|
|
|
List<SysWorkplaceResponse> sysWorkplaces = sysWorkplaceService.getAllByBusType(basicSkPrescribeEntity.getAddr());
|
|
|
|
|
if (CollUtil.isNotEmpty(sysWorkplaces)) {
|
|
|
|
|
if (sysWorkplaces.size() == 1) {
|
|
|
|
|
defaultWorkplace[0] = sysWorkplaces.get(0).getWorkplaceId();
|
|
|
|
|
} else {
|
|
|
|
|
List<SysWorkplaceResponse> addWorkplace = new ArrayList<>();
|
|
|
|
|
for (SysWorkplaceResponse sysWorkplace : sysWorkplaces) {
|
|
|
|
|
//获取是否有正在处理的工位
|
|
|
|
|
List<IoCollectOrder> collectOrderList1 = collectOrderMapper.selectList(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getWorkPlaceCode, sysWorkplace.getWorkplaceId()).in(IoCollectOrder::getTagStatus, -1, 1, 2));
|
|
|
|
|
sysWorkplace.setOrderCount(collectOrderList1.size());
|
|
|
|
|
if (IntUtil.value(sysWorkplace.getOrderCount()) > 0) {
|
|
|
|
|
addWorkplace.add(sysWorkplace);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (addWorkplace.size() > 0) {
|
|
|
|
|
Optional<SysWorkplaceResponse> minCountObject = addWorkplace.stream().min((o1, o2) -> Integer.compare(o1.getOrderCount(), o2.getOrderCount()));
|
|
|
|
|
minCountObject.ifPresent(sysWorkplace -> defaultWorkplace[0] = sysWorkplace.getWorkplaceId());
|
|
|
|
|
} else {
|
|
|
|
|
defaultWorkplace[0] = sysWorkplaces.get(0).getWorkplaceId();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (addWorkplace.size() > 0) {
|
|
|
|
|
Optional<SysWorkplaceResponse> minCountObject = addWorkplace.stream().min((o1, o2) -> Integer.compare(o1.getOrderCount(), o2.getOrderCount()));
|
|
|
|
|
minCountObject.ifPresent(sysWorkplace -> defaultWorkplace[0] = sysWorkplace.getWorkplaceId());
|
|
|
|
|
} else {
|
|
|
|
|
defaultWorkplace[0] = sysWorkplaces.get(0).getWorkplaceId();
|
|
|
|
|
IoCollectOrder collectOrder = IoCollectOrder.builder().billNo(billNo).busType(sysWorkplaceDocumentEntity.getDocumentTypeCode()).fromType("HIS系统").fromCorp(basicSkPrescribeEntity.getSickerCode()).workPlaceCode(defaultWorkplace[0]).billTime(MsDateUtil.localToDate(basicSkPrescribeEntity.getPrescribeDate())).createTime(new Date()).createUser(basicSkPrescribeEntity.getCreateUser()).backupOrderRemark1(basicSkPrescribeEntity.getStooutNo()).updateTime(new Date()).orderCirType(sysWorkplaceDocumentEntity.getOrderCirType()).splitStatus(0).tagStatus(0).remark(basicSkPrescribeEntity.getRemark()).build();
|
|
|
|
|
if (collectOrder.getWorkPlaceCode() != null) {
|
|
|
|
|
collectOrder.setTagStatus(1);
|
|
|
|
|
}
|
|
|
|
|
save(collectOrder);
|
|
|
|
|
List<BasicSkPrescribeItemEntity> basicSkPrescribeItemEntities = basicSkPrescirbeDetailService.findByPrescribeNum(billNo);
|
|
|
|
|
List<IoCollectOrderBiz> collectOrderBizs = new ArrayList<>();
|
|
|
|
|
for (BasicSkPrescribeItemEntity bizEntity : basicSkPrescribeItemEntities) {
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(bizEntity.getRelId() + "");
|
|
|
|
|
double doubleValue = Double.parseDouble(bizEntity.getMeasureCount());
|
|
|
|
|
IoCollectOrderBiz collectOrderBiz = IoCollectOrderBiz.builder().orderIdFk(collectOrder.getBillNo()).relId(bizEntity.getRelId()).thrCode(bizEntity.getItemCode()).ybbm(udiRelevanceResponse.getYbbm()).payFeeCode(udiRelevanceResponse.getPayFeeCode()).cpmctymc(bizEntity.getItemName()).nameCode(udiRelevanceResponse.getNameCode()).batchNo(bizEntity.getBatchNo()).count((int) doubleValue).measureUnit(bizEntity.getMeasureUnit()).tagStatus(1).unTagCount(bizEntity.getCount()).build();
|
|
|
|
|
|
|
|
|
|
if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 2) {
|
|
|
|
|
collectOrderBiz.setMeasureUnit(udiRelevanceResponse.getPrepnUnit());
|
|
|
|
|
}
|
|
|
|
|
collectOrderBizs.add(collectOrderBiz);
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(collectOrderBizs)) collectOrderBizService.saveBatch(collectOrderBizs);
|
|
|
|
|
allWorksList.addAll(sysWorkplaces);
|
|
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getAutoTag()) == 1 && IntUtil.value(collectOrder.getTagStatus()) == 1) {
|
|
|
|
|
splitFifoCodeService.lockInventoryByOrder(billNo, 1);
|
|
|
|
|
}
|
|
|
|
|
} finally {
|
|
|
|
|
// 处理完成后,移除锁对象,释放内存
|
|
|
|
|
BILL_LOCKS.remove(billNo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IoCollectOrder collectOrder = IoCollectOrder.builder().billNo(basicSkPrescribeEntity.getCode()).busType(sysWorkplaceDocumentEntity.getDocumentTypeCode()).fromType("HIS系统").fromCorp(basicSkPrescribeEntity.getSickerCode()).workPlaceCode(defaultWorkplace[0]).billTime(MsDateUtil.localToDate(basicSkPrescribeEntity.getPrescribeDate())).createTime(new Date()).createUser(basicSkPrescribeEntity.getCreateUser()).backupOrderRemark1(basicSkPrescribeEntity.getStooutNo()).updateTime(new Date()).orderCirType(sysWorkplaceDocumentEntity.getOrderCirType()).splitStatus(0).tagStatus(0).remark(basicSkPrescribeEntity.getRemark()).build();
|
|
|
|
|
if (collectOrder.getWorkPlaceCode() != null) {
|
|
|
|
|
collectOrder.setTagStatus(1);
|
|
|
|
|
}
|
|
|
|
|
save(collectOrder);
|
|
|
|
|
List<BasicSkPrescribeItemEntity> basicSkPrescribeItemEntities = basicSkPrescirbeDetailService.findByPrescribeNum(basicSkPrescribeEntity.getCode());
|
|
|
|
|
List<IoCollectOrderBiz> collectOrderBizs = new ArrayList<>();
|
|
|
|
|
for (BasicSkPrescribeItemEntity bizEntity : basicSkPrescribeItemEntities) {
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(bizEntity.getRelId() + "");
|
|
|
|
|
double doubleValue = Double.parseDouble(bizEntity.getMeasureCount());
|
|
|
|
|
IoCollectOrderBiz collectOrderBiz = IoCollectOrderBiz.builder().orderIdFk(collectOrder.getBillNo()).relId(bizEntity.getRelId()).thrCode(bizEntity.getItemCode()).ybbm(udiRelevanceResponse.getYbbm()).payFeeCode(udiRelevanceResponse.getPayFeeCode()).cpmctymc(bizEntity.getItemName()).nameCode(udiRelevanceResponse.getNameCode()).batchNo(bizEntity.getBatchNo()).count((int) doubleValue).measureUnit(bizEntity.getMeasureUnit()).tagStatus(1).unTagCount(bizEntity.getCount()).build();
|
|
|
|
|
|
|
|
|
|
if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 2) {
|
|
|
|
|
collectOrderBiz.setMeasureUnit(udiRelevanceResponse.getPrepnUnit());
|
|
|
|
|
}
|
|
|
|
|
collectOrderBizs.add(collectOrderBiz);
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.isNotEmpty(collectOrderBizs)) collectOrderBizService.saveBatch(collectOrderBizs);
|
|
|
|
|
|
|
|
|
|
allWorksList.addAll(sysWorkplaces);
|
|
|
|
|
if (IntUtil.value(sysWorkplaceDocumentEntity.getAutoTag()) == 1 && IntUtil.value(collectOrder.getTagStatus()) == 1) {
|
|
|
|
|
splitFifoCodeService.lockInventoryByOrder(collectOrder.getBillNo(), 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -540,53 +552,62 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
public void importPrescribe(List<IoCollectOrder> ioCollectOrderList, CollectOrderRequest collectOrderRequest) {
|
|
|
|
|
String addr = collectOrderRequest.getBusType();
|
|
|
|
|
if (CollUtil.isNotEmpty(ioCollectOrderList)) {
|
|
|
|
|
|
|
|
|
|
//是否自动转成待处理单据
|
|
|
|
|
IoCollectSet collectSet = collectSetService.getSet();
|
|
|
|
|
|
|
|
|
|
for (IoCollectOrder collectOrder : ioCollectOrderList) {
|
|
|
|
|
IoCollectOrderOrigin ioCollectOrderOrigin = new IoCollectOrderOrigin();
|
|
|
|
|
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, collectOrder.getBillNo()))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(addr);
|
|
|
|
|
if (sysWorkplaceDocumentEntity == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// 获取单号
|
|
|
|
|
String billNo = collectOrder.getBillNo();
|
|
|
|
|
// 为每个单号创建一个锁对象,如果已存在则使用现有的
|
|
|
|
|
Object billLock = BILL_LOCKS.computeIfAbsent(billNo, k -> new Object());
|
|
|
|
|
// 使用同步块确保同一单号的处理是同步的
|
|
|
|
|
synchronized (billLock) {
|
|
|
|
|
try {
|
|
|
|
|
IoCollectOrderOrigin ioCollectOrderOrigin = new IoCollectOrderOrigin();
|
|
|
|
|
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, collectOrder.getBillNo()))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(addr);
|
|
|
|
|
if (sysWorkplaceDocumentEntity == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
collectOrder.setOrderCirType(sysWorkplaceDocumentEntity.getOrderCirType());
|
|
|
|
|
BeanUtils.copyProperties(collectOrder, ioCollectOrderOrigin);
|
|
|
|
|
collectOrderOriginService.remove(new LambdaUpdateWrapper<IoCollectOrderOrigin>().eq(IoCollectOrderOrigin::getBillNo, ioCollectOrderOrigin.getBillNo()));
|
|
|
|
|
collectOrderOriginService.save(ioCollectOrderOrigin);
|
|
|
|
|
List<IoCollectOrderBiz> bizList = collectOrder.getBizList();
|
|
|
|
|
if (CollUtil.isNotEmpty(bizList)) {
|
|
|
|
|
//先清空 原来的biz
|
|
|
|
|
String billNo = collectOrder.getBillNo();
|
|
|
|
|
collectOrderBizOriginService.remove(new LambdaUpdateWrapper<IoCollectOrderBizOrigin>().eq(IoCollectOrderBizOrigin::getOrderIdFk, billNo));
|
|
|
|
|
|
|
|
|
|
for (IoCollectOrderBiz collectOrderBiz : bizList) {
|
|
|
|
|
if (collectOrderBiz.getRelId() != null) {
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(collectOrderBiz.getRelId() + "");
|
|
|
|
|
if (udiRelevanceResponse != null) {
|
|
|
|
|
collectOrderBiz.setYbbm(udiRelevanceResponse.getYbbm());
|
|
|
|
|
collectOrderBiz.setPayFeeCode(udiRelevanceResponse.getPayFeeCode());
|
|
|
|
|
collectOrderBiz.setNameCode(udiRelevanceResponse.getNameCode());
|
|
|
|
|
if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 2) {
|
|
|
|
|
collectOrderBiz.setMeasureUnit(udiRelevanceResponse.getPrepnUnit());
|
|
|
|
|
collectOrder.setOrderCirType(sysWorkplaceDocumentEntity.getOrderCirType());
|
|
|
|
|
BeanUtils.copyProperties(collectOrder, ioCollectOrderOrigin);
|
|
|
|
|
collectOrderOriginService.remove(new LambdaUpdateWrapper<IoCollectOrderOrigin>().eq(IoCollectOrderOrigin::getBillNo, ioCollectOrderOrigin.getBillNo()));
|
|
|
|
|
collectOrderOriginService.save(ioCollectOrderOrigin);
|
|
|
|
|
List<IoCollectOrderBiz> bizList = collectOrder.getBizList();
|
|
|
|
|
if (CollUtil.isNotEmpty(bizList)) {
|
|
|
|
|
//先清空 原来的biz
|
|
|
|
|
for (IoCollectOrderBiz collectOrderBiz : bizList) {
|
|
|
|
|
if (collectOrderBiz.getRelId() != null) {
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(collectOrderBiz.getRelId() + "");
|
|
|
|
|
if (udiRelevanceResponse != null) {
|
|
|
|
|
collectOrderBiz.setYbbm(udiRelevanceResponse.getYbbm());
|
|
|
|
|
collectOrderBiz.setPayFeeCode(udiRelevanceResponse.getPayFeeCode());
|
|
|
|
|
collectOrderBiz.setNameCode(udiRelevanceResponse.getNameCode());
|
|
|
|
|
if (IntUtil.value(udiRelevanceResponse.getProductsType()) == 2) {
|
|
|
|
|
collectOrderBiz.setMeasureUnit(udiRelevanceResponse.getPrepnUnit());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<IoCollectOrderBizOrigin> ioCollectOrderBizOrigins = BeanCopyUtils.copyList(bizList, IoCollectOrderBizOrigin.class);
|
|
|
|
|
collectOrderBizOriginService.remove(new LambdaUpdateWrapper<IoCollectOrderBizOrigin>().eq(IoCollectOrderBizOrigin::getOrderIdFk, billNo));
|
|
|
|
|
collectOrderBizOriginService.saveBatch(ioCollectOrderBizOrigins);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<IoCollectOrderBizOrigin> ioCollectOrderBizOrigins = BeanCopyUtils.copyList(bizList, IoCollectOrderBizOrigin.class);
|
|
|
|
|
collectOrderBizOriginService.saveBatch(ioCollectOrderBizOrigins);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!collectOrder.getTagStatus().equals(4) && (IntUtil.value(collectSet.getAutoDealOrder()) || IntUtil.value(collectOrderRequest.getForceAllot()))) {//没出现耗材不匹配 且 开启了自动转成待处理单据
|
|
|
|
|
collectOrder.setTagStatus(1);
|
|
|
|
|
boolean isExit = collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, collectOrder.getBillNo()).eq(IoCollectOrder::getBusType, collectOrder.getBusType()));
|
|
|
|
|
if (!isExit) {
|
|
|
|
|
collectOrderMapper.insert(collectOrder);
|
|
|
|
|
collectOrderBizService.saveBatch(bizList);
|
|
|
|
|
if (!collectOrder.getTagStatus().equals(4) && (IntUtil.value(collectSet.getAutoDealOrder()) || IntUtil.value(collectOrderRequest.getForceAllot()))) {//没出现耗材不匹配 且 开启了自动转成待处理单据
|
|
|
|
|
collectOrder.setTagStatus(1);
|
|
|
|
|
boolean isExit = collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, collectOrder.getBillNo()).eq(IoCollectOrder::getBusType, collectOrder.getBusType()));
|
|
|
|
|
if (!isExit) {
|
|
|
|
|
collectOrderMapper.insert(collectOrder);
|
|
|
|
|
collectOrderBizService.saveBatch(bizList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} finally {
|
|
|
|
|
// 处理完成后,移除锁对象,释放内存
|
|
|
|
|
BILL_LOCKS.remove(billNo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -820,7 +841,7 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Boolean decideOrder(CollectOrderRequest request, Long userId) {
|
|
|
|
|
//判断当前用户是否已经绑定改工位
|
|
|
|
|
//判断当前用户是否已经绑定该工位
|
|
|
|
|
SysWorkplace workplace = sysWorkplaceService.getWorkplaceByUser(request, userId);
|
|
|
|
|
if (workplace == null) {
|
|
|
|
|
throw new JsonException(500, "当前用户未绑定该工位");
|
|
|
|
|