|
|
|
@ -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,12 +464,22 @@ 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()))) {
|
|
|
|
|
// 获取单号
|
|
|
|
|
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());
|
|
|
|
@ -497,14 +508,12 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
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(basicSkPrescribeEntity.getCode());
|
|
|
|
|
List<BasicSkPrescribeItemEntity> basicSkPrescribeItemEntities = basicSkPrescirbeDetailService.findByPrescribeNum(billNo);
|
|
|
|
|
List<IoCollectOrderBiz> collectOrderBizs = new ArrayList<>();
|
|
|
|
|
for (BasicSkPrescribeItemEntity bizEntity : basicSkPrescribeItemEntities) {
|
|
|
|
|
UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(bizEntity.getRelId() + "");
|
|
|
|
@ -517,12 +526,15 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
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);
|
|
|
|
|
splitFifoCodeService.lockInventoryByOrder(billNo, 1);
|
|
|
|
|
}
|
|
|
|
|
} finally {
|
|
|
|
|
// 处理完成后,移除锁对象,释放内存
|
|
|
|
|
BILL_LOCKS.remove(billNo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -540,11 +552,17 @@ 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) {
|
|
|
|
|
// 获取单号
|
|
|
|
|
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;
|
|
|
|
@ -561,9 +579,6 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
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() + "");
|
|
|
|
@ -578,6 +593,7 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<IoCollectOrderBizOrigin> ioCollectOrderBizOrigins = BeanCopyUtils.copyList(bizList, IoCollectOrderBizOrigin.class);
|
|
|
|
|
collectOrderBizOriginService.remove(new LambdaUpdateWrapper<IoCollectOrderBizOrigin>().eq(IoCollectOrderBizOrigin::getOrderIdFk, billNo));
|
|
|
|
|
collectOrderBizOriginService.saveBatch(ioCollectOrderBizOrigins);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -589,6 +605,11 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
|
|
|
|
|
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, "当前用户未绑定该工位");
|
|
|
|
|