|
|
@@ -6,20 +6,27 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.fs.app.exception.FSException;
|
|
|
import com.fs.app.facade.Hospital580FacadeService;
|
|
|
import com.fs.common.core.domain.PageResponse;
|
|
|
import com.fs.common.core.domain.Result;
|
|
|
import com.fs.common.core.page.PageRequest;
|
|
|
import com.fs.framework.aspectj.lock.DistributeLock;
|
|
|
-import com.fs.hospital580.dto.DiseaseDto;
|
|
|
-import com.fs.hospital580.dto.PreDemandDto;
|
|
|
-import com.fs.hospital580.dto.Result580;
|
|
|
-import com.fs.hospital580.dto.TextRecordDto;
|
|
|
+import com.fs.his.domain.FsPatient;
|
|
|
+import com.fs.his.service.IFsPatientService;
|
|
|
+import com.fs.his.utils.PhoneUtil;
|
|
|
+import com.fs.hisStore.domain.FsStoreOrderScrm;
|
|
|
+import com.fs.hisStore.domain.FsStoreProductScrm;
|
|
|
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
|
|
|
+import com.fs.hisStore.service.IFsStoreProductScrmService;
|
|
|
+import com.fs.hospital580.dto.*;
|
|
|
import com.fs.hospital580.entity.*;
|
|
|
import com.fs.hospital580.service.Hospital580PrescriptionAnswerScrmService;
|
|
|
+import com.fs.hospital580.service.Hospital580PrescriptionMedicineScrmService;
|
|
|
import com.fs.hospital580.service.Hospital580PrescriptionScrmService;
|
|
|
import com.fs.hospital580.service.Hospital580Service;
|
|
|
import com.fs.hospital580.vo.MedicineSyncVo;
|
|
|
@@ -36,7 +43,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.Period;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -51,15 +61,32 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
|
|
|
|
|
|
@Autowired
|
|
|
private Hospital580PrescriptionScrmService orderScrmService;
|
|
|
+ @Autowired
|
|
|
+ private IFsPatientService fsPatientService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private Hospital580PrescriptionMedicineScrmService medicineScrmService;
|
|
|
+ @Autowired
|
|
|
+ private IFsStoreProductScrmService productScrmService;
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- @DistributeLock(keyExpression = "#vo.userId", scene = "savePreDemand", waitTime = 5000, errorMsg = "红包领取失败")
|
|
|
+ @DistributeLock(key = "#vo.userId", scene = "savePreDemand", waitTime = 5000, errorMsg = "新增问诊信息失败")
|
|
|
public Result<String> savePreDemand(SaveOrderScrmReq vo) {
|
|
|
+ // 校验是否存在问诊单
|
|
|
+ if (orderScrmService.isByStoreOrder(vo.getStoreOrderId())){
|
|
|
+ throw new FSException("您已存在未处理的问诊单");
|
|
|
+ }
|
|
|
+
|
|
|
// 保存问诊信息
|
|
|
Hospital580PrescriptionScrmEntity order = new Hospital580PrescriptionScrmEntity();
|
|
|
BeanUtil.copyProperties(vo, order);
|
|
|
+ FsPatient fsPatient = fsPatientService.selectFsPatientByPatientId(vo.getPatientId());
|
|
|
+ order.setUserFamilyIdCard(fsPatient.getIdCard());
|
|
|
+ order.setUserFamilyPhone(PhoneUtil.decryptPhone(fsPatient.getMobile()));
|
|
|
+ order.setUserFamilyName(fsPatient.getPatientName());
|
|
|
+ order.setUserFamilyGender(fsPatient.getSex().byteValue());
|
|
|
+ order.setUserFamilyAge(Period.between(fsPatient.getBirthday().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now()).getYears());
|
|
|
order.insert();
|
|
|
|
|
|
// 保存问诊答案
|
|
|
@@ -74,10 +101,16 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
|
|
|
|
|
|
// 获取问诊链接并更新
|
|
|
PreDemandDto dto = new PreDemandDto();
|
|
|
- BeanUtil.copyProperties(vo, dto);
|
|
|
+ BeanUtil.copyProperties(order, dto);
|
|
|
dto.setBizOrderId(order.getPreId().toString());
|
|
|
- dto.setMemberId(vo.getUserFamilyPhone());
|
|
|
-
|
|
|
+ dto.setMemberId(order.getUserFamilyPhone());
|
|
|
+ dto.setBeforeAiDataList(vo.getBeforeAiDataList().stream().map(item -> {
|
|
|
+ BeforeAiData textRecordDto = new BeforeAiData();
|
|
|
+ textRecordDto.setSubjectId(item.getSubjectId());
|
|
|
+ textRecordDto.setAnswer(item.getAnswer());
|
|
|
+ textRecordDto.setAnswerMedicine(item.getAnswerMedicine());
|
|
|
+ return textRecordDto;
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
Result580 result580 = hospital580Service.initPreDemand(dto);
|
|
|
order.setJumpUrl(result580.getData());
|
|
|
order.updateById();
|
|
|
@@ -176,6 +209,9 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
|
|
|
// 问诊列表
|
|
|
IPage<Hospital580PrescriptionScrmEntity> page = orderScrmService.page(
|
|
|
new Page<Hospital580PrescriptionScrmEntity>(pageRequest.getPageNum(), pageRequest.getPageSize())
|
|
|
+ , new LambdaQueryWrapper<Hospital580PrescriptionScrmEntity>()
|
|
|
+ //.eq(Hospital580PrescriptionScrmEntity::getUserId, userId)
|
|
|
+ .orderByDesc(Hospital580PrescriptionScrmEntity::getCreatedTime)
|
|
|
);
|
|
|
List<Hospital580PrescriptionScrmEntity> orderRecords = page.getRecords();
|
|
|
// 构建返回结果
|
|
|
@@ -183,7 +219,7 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
|
|
|
.map(order -> {
|
|
|
return PrescriptionListRes.builder()
|
|
|
.pid(order.getPid())
|
|
|
- .orderId(order.getPreId())
|
|
|
+ .preId(order.getPreId())
|
|
|
.createdTime(order.getCreatedTime())
|
|
|
.createTime(order.getCreatedTime())
|
|
|
.tags(order.getTags())
|
|
|
@@ -203,14 +239,27 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
|
|
|
@Override
|
|
|
public Result<PrescriptionDetailRes> prescriptionDetail(String userId, Long preId) {
|
|
|
Hospital580PrescriptionScrmEntity byId = orderScrmService.getById(preId);
|
|
|
- return Result.success(BeanUtil.toBean(byId, PrescriptionDetailRes.class));
|
|
|
+ PrescriptionDetailRes prescriptionScrmVo = BeanUtil.toBean(byId, PrescriptionDetailRes.class);
|
|
|
+ prescriptionScrmVo.setDrugRspList(medicineScrmService.list(new LambdaQueryWrapper<Hospital580PrescriptionMedicineScrmEntity>()
|
|
|
+ .eq(Hospital580PrescriptionMedicineScrmEntity::getPreId, prescriptionScrmVo.getPreId()))
|
|
|
+ .stream()
|
|
|
+ .filter(Objects::nonNull) // 过滤掉空对象
|
|
|
+ .map(item -> {
|
|
|
+ PrescriptionMedicineScrmVo vo = new PrescriptionMedicineScrmVo();
|
|
|
+ BeanUtil.copyProperties(item, vo);
|
|
|
+ FsStoreProductScrm fsStoreProductScrm = productScrmService.selectFsStoreProductById(Long.valueOf(item.getCommodityCode()));
|
|
|
+ vo.setImage(fsStoreProductScrm.getImage());
|
|
|
+ return vo;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ return Result.success(prescriptionScrmVo);
|
|
|
}
|
|
|
|
|
|
private Result<String> processResult(Result580 result580) {
|
|
|
if (0 == result580.getErr()) {
|
|
|
return Result.success(result580.getData());
|
|
|
}
|
|
|
- throw new RuntimeException(result580.getErrmsg());
|
|
|
+ throw new FSException(result580.getErrmsg());
|
|
|
}
|
|
|
|
|
|
}
|