Bladeren bron

coding:问诊处方相关接口

zhangqin 2 weken geleden
bovenliggende
commit
4e972efa65

+ 0 - 2
fs-admin/src/main/java/com/fs/hisStore/facade/impl/FsStore580FacadeServiceImpl.java

@@ -19,10 +19,8 @@ import com.fs.hospital580.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service("fsStore580FacadeService")

+ 1 - 1
fs-common/src/main/java/com/fs/common/core/domain/PageResponse.java

@@ -46,7 +46,7 @@ public class PageResponse<T> implements Serializable {
         pageResponse.setTotal(total);
         pageResponse.setPageSize(pageSize);
         pageResponse.setCurrentPage(currentPage);
-        pageResponse.setTotalPage((pageSize + total - 1) / pageSize);
+        pageResponse.setTotalPage((pageSize + total - 1) / currentPage);
         return pageResponse;
     }
 }

+ 5 - 5
fs-common/src/main/java/com/fs/common/core/domain/Result.java

@@ -10,7 +10,7 @@ public class Result<T> {
     /**
      * 状态码
      */
-    private String code;
+    private Integer code;
 
     /**
      * 是否成功
@@ -36,7 +36,7 @@ public class Result<T> {
         this.data = data;
     }
 
-    public Result(Boolean success, String code, String message, T data) {
+    public Result(Boolean success, Integer code, String message, T data) {
         this.success = success;
         this.message = message;
         this.data = data;
@@ -45,10 +45,10 @@ public class Result<T> {
 
 
     public static <T> Result<T> success(T data) {
-        return new Result<>(true, ResponseCode.SUCCESS.name(), "200", data);
+        return new Result<>(true, 200, ResponseCode.SUCCESS.name(), data);
     }
 
-    public static <T> Result<T> error(String errorCode, String errorMsg) {
-        return new Result<>(false, errorCode, errorMsg, null);
+    public static <T> Result<T> error(String errorMsg) {
+        return new Result<>(false, 500, errorMsg, null);
     }
 }

+ 4 - 0
fs-service/src/main/java/com/fs/his/utils/PhoneUtil.java

@@ -77,4 +77,8 @@ public class PhoneUtil {
 
         return text;
     }
+
+    public static void main(String[] args) {
+        System.out.println(encryptPhone("18580395185"));
+    }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/hospital580/entity/Hospital580PrescriptionScrmEntity.java

@@ -79,7 +79,7 @@ public class Hospital580PrescriptionScrmEntity extends Model<Hospital580Prescrip
 
     @ApiModelProperty("关系:1-本人,2-父母,3-配偶,4-子女,5-其他")
     @TableField("relationship")
-    private Boolean relationship;
+    private Byte relationship;
 
     @ApiModelProperty("就诊人住址(最多30个字符)")
     @TableField("user_family_addr")

+ 3 - 0
fs-service/src/main/java/com/fs/hospital580/service/Hospital580PrescriptionScrmService.java

@@ -3,6 +3,8 @@ package com.fs.hospital580.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.hospital580.entity.Hospital580PrescriptionScrmEntity;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * <p>
  * 问诊订单主表 服务类
@@ -13,4 +15,5 @@ import com.fs.hospital580.entity.Hospital580PrescriptionScrmEntity;
  */
 public interface Hospital580PrescriptionScrmService extends IService<Hospital580PrescriptionScrmEntity> {
 
+    boolean isByStoreOrder(Long storeOrderId);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/hospital580/service/impl/Hospital580PrescriptionScrmServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.hospital580.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.hospital580.entity.Hospital580PrescriptionScrmEntity;
 import com.fs.hospital580.mapper.Hospital580PrescriptionScrmMapper;
@@ -17,4 +18,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class Hospital580PrescriptionScrmServiceImpl extends ServiceImpl<Hospital580PrescriptionScrmMapper, Hospital580PrescriptionScrmEntity> implements Hospital580PrescriptionScrmService {
 
+    @Override
+    public boolean isByStoreOrder(Long storeOrderId) {
+        return this.count(new LambdaQueryWrapper<Hospital580PrescriptionScrmEntity>().eq(Hospital580PrescriptionScrmEntity::getStoreOrderId, storeOrderId)) > 0;
+    }
 }

+ 2 - 0
fs-service/src/main/java/com/fs/hospital580/vo/PrescriptionMedicineScrmVo.java

@@ -48,4 +48,6 @@ public class PrescriptionMedicineScrmVo implements Serializable {
      */
     @ApiModelProperty("系统药品ID")
     private Integer medicineId;
+    @ApiModelProperty("商品图片")
+    private String image;
 }

+ 2 - 3
fs-service/src/main/java/com/fs/hospital580/vo/req/DiseaseReq.java

@@ -10,9 +10,8 @@ import java.io.Serializable;
 @Data
 @ApiModel("聊天记录请求")
 public class DiseaseReq implements Serializable {
-    @ApiModelProperty(value = "诊断类型(0为西医诊断,1为中医诊断)", required = true)
-    @NotNull(message = "type is null")
-    private Integer type;
+    @ApiModelProperty(value = "诊断类型(0为西医诊断,1为中医诊断)")
+    private Integer type = 0;
     @ApiModelProperty("诊断名称 模糊查询")
     private String diagnosisName;
     @ApiModelProperty("分页参数")

+ 12 - 10
fs-service/src/main/java/com/fs/hospital580/vo/req/SaveOrderScrmReq.java

@@ -16,13 +16,11 @@ import java.util.List;
 @ApiModel("新增问诊请求")
 public class SaveOrderScrmReq implements Serializable {
 
-    @ApiModelProperty(value = "服务类型:0-图文,1-视频", required = true)
-    @NotNull(message = "serviceType is null")
-    private Byte serviceType;
+    @ApiModelProperty(value = "服务类型:0-图文,1-视频")
+    private Byte serviceType = 0;
 
-    @ApiModelProperty(value = "是否需要审方:0-不需要,1-需要", required = true)
-    @NotNull(message = "isExamine is null")
-    private Byte isExamine;
+    @ApiModelProperty(value = "是否需要审方:0-不需要,1-需要")
+    private Byte isExamine = 0;
 
     @ApiModelProperty(value = "是否孕妇:0-否,1-是", required = true)
     @NotNull(message = "isPregnantWoman is null")
@@ -36,7 +34,11 @@ public class SaveOrderScrmReq implements Serializable {
     @NotNull(message = "souceFrom is null")
     private Byte souceFrom;
 
-    @ApiModelProperty(value = "用药人姓名", required = true)
+    @ApiModelProperty(value = "就诊人信息", required = true)
+    @NotNull(message = "patientId is null")
+    private Long patientId;
+
+/*    @ApiModelProperty(value = "用药人姓名", required = true)
     @NotNull(message = "userFamilyName is null")
     private String userFamilyName;
 
@@ -53,14 +55,14 @@ public class SaveOrderScrmReq implements Serializable {
 
     @ApiModelProperty(value = "用药人手机号码", required = true)
     @NotNull(message = "userFamilyPhone is null")
-    private String userFamilyPhone;
+    private String userFamilyPhone;*/
 
     @NotNull(message = "relationship is null")
     @ApiModelProperty(value = "用药人与问诊人关系:1-本人,2-父母,3-配偶,4-子女,5-其他", required = true)
     private Byte relationship;
 
-    @ApiModelProperty("就诊人住址(最多30个字符)")
-    private String userFamilyAddr;
+/*    @ApiModelProperty("就诊人住址(最多30个字符)")
+    private String userFamilyAddr;*/
 
     @ApiModelProperty("图片附件URL,多个以英文逗号隔开")
     private String imgList;

+ 7 - 1
fs-service/src/main/java/com/fs/hospital580/vo/res/PrescriptionDetailRes.java

@@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.hospital580.vo.PrescriptionMedicineScrmVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class PrescriptionDetailRes implements Serializable {
 
     @ApiModelProperty("主键ID")
-    private Long orderId;
+    private Long preId;
 
     @ApiModelProperty("用户id")
     private Long userId;
@@ -142,6 +145,7 @@ public class PrescriptionDetailRes implements Serializable {
 
     @ApiModelProperty("创建时间/开方时间")
     @TableField("created_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createdTime;
 
     @ApiModelProperty("处方编号")
@@ -168,4 +172,6 @@ public class PrescriptionDetailRes implements Serializable {
     @TableField("prescription_status")
     private Byte prescriptionStatus;
 
+    @ApiModelProperty("药品信息列表")
+    private List<PrescriptionMedicineScrmVo> drugRspList;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/hospital580/vo/res/PrescriptionListRes.java

@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
 public class PrescriptionListRes implements Serializable {
 
     @ApiModelProperty("id 传值用")
-    private Long orderId;
+    private Long preId;
 
     @ApiModelProperty("处方ID 展示用")
     private Long pid;

+ 5 - 3
fs-user-app/src/main/java/com/fs/app/controller/Hospital580Controller.java

@@ -17,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 
 @RestController
@@ -30,6 +29,7 @@ public class Hospital580Controller extends AppBaseController {
     private Hospital580FacadeService hospital580FacadeService;
 
     @ApiOperation(value = "新增问诊单接口")
+    @Login
     @PostMapping("/savePreDemand")
     public Result<String> savePreDemand(@RequestBody @Valid SaveOrderScrmReq vo) {
         return hospital580FacadeService.savePreDemand(vo);
@@ -37,20 +37,22 @@ public class Hospital580Controller extends AppBaseController {
 
     @ApiOperation(value = "查询诊断类型列表")
     @PostMapping("/diseaseQueryList")
-    public PageResponse<DiseaseQueryRes> diseaseQuery(@RequestBody @Valid DiseaseReq req) {
+    public PageResponse<DiseaseQueryRes> diseaseQuery(@RequestBody DiseaseReq req) {
         return hospital580FacadeService.diseaseQuery(req);
     }
 
 
     @ApiOperation(value = "处方订单列表")
+    @Login
     @PostMapping("/prescriptionList")
     public PageResponse<PrescriptionListRes> prescriptionList(@RequestBody PageRequest pageRequest) {
         return hospital580FacadeService.prescriptionList(getUserId(), pageRequest);
     }
 
     @ApiOperation(value = "处方订单详情")
+    @Login
     @PostMapping("/prescriptionDetail/{preId}")
     public Result<PrescriptionDetailRes> prescriptionDetail(@PathVariable("preId") Long preId) {
-        return hospital580FacadeService.prescriptionDetail(getUserId(),preId);
+        return hospital580FacadeService.prescriptionDetail(getUserId(), preId);
     }
 }

+ 60 - 11
fs-user-app/src/main/java/com/fs/app/facade/impl/Hospital580FacadeServiceImpl.java

@@ -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());
     }
 
 }

+ 1 - 1
fs-user-app/src/main/java/com/fs/framework/aspectj/Hospital580Aspect.java

@@ -35,7 +35,7 @@ public class Hospital580Aspect {
         String methodName = joinPoint.getSignature().getName();
         Object[] args = joinPoint.getArgs();
         Object parm = args[0];
-        log.info("580医院请求:{} {}", methodName, parm);
+        log.info("580医院请求:{} {}", methodName,JSONUtil.toJsonStr(parm));
         JSONObject entries = JSONUtil.parseObj(parm);
         String sign1 = entries.getStr("sign");
         String sign = ObjectApiSignUtil.getSign(parm, SECRETKEY);

+ 8 - 1
fs-user-app/src/main/java/com/fs/framework/config/MyBatisConfig.java

@@ -1,5 +1,7 @@
 package com.fs.framework.config;
 
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import com.fs.common.utils.StringUtils;
 import org.apache.ibatis.io.VFS;
@@ -146,6 +148,11 @@ public class MyBatisConfig
         sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
         sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
+        
+        // 添加MyBatis-Plus分页插件
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        sessionFactory.setPlugins(new PaginationInterceptor[]{paginationInterceptor});
+        
         return sessionFactory.getObject();
     }
-}
+}