Browse Source

开方校验

yjwang 1 tuần trước cách đây
mục cha
commit
d04eb28fcf

+ 2 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java

@@ -602,7 +602,8 @@ public interface FsStoreProductScrmMapper
 
     List<FsStoreProductScrm> bulkCopyFsStoreProductByIds(Long[] productIds);
 
-    List<FsStoreProductScrm> getStoreProductInProductIds(List<Long> productIds);
+    //2026/02/27 异常Parameter 'productIds' not found. Available parameters are [arg0, collection, list]新增@Param("productIds")注解
+    List<FsStoreProductScrm> getStoreProductInProductIds(@Param("productIds") List<Long> productIds);
 
     @Select("SELECT " +
             " distinct  " +

+ 6 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -366,4 +366,10 @@ public interface IFsStoreOrderScrmService
      * @param dtoList 订单数据
      * **/
     R importDeliveryNoteExpress(List<FsOrderCodeNoteDTO> dtoList);
+
+    /**
+     * 校验开方
+     * @param cartParamList 校验信息
+     * **/
+    R checkPrescribe(List<FsStoreConfirmOrderGroupStoreParam> cartParamList);
 }

+ 48 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -166,8 +166,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collector;
 import java.util.stream.Collectors;
 
-import static com.fs.his.utils.PhoneUtil.decryptPhone;
-import static com.fs.his.utils.PhoneUtil.encryptPhone;
+import static com.fs.his.utils.PhoneUtil.*;
 import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
 
 /**
@@ -5039,6 +5038,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         FsUserAddressScrm address = null;
         List<String> uuids = new ArrayList<>();
         List<FsStoreCartQueryGroupStoreVO> list = new ArrayList<>();
+
         for (FsStoreConfirmOrderGroupStoreParam cartGroupStoreParam : cartParamList) {
             FsStoreConfirmOrderParam cartParam = cartGroupStoreParam.getData();
             //获取地址信息和购物车信息
@@ -6095,6 +6095,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok();
     }
 
+    @Override
+    public R checkPrescribe(List<FsStoreConfirmOrderGroupStoreParam> cartParamList) {
+        //加入验证是否存在多店铺并且是否存在处方药
+        if(checkStorePrescriptionDrug(cartParamList)){
+            return R.error("多店铺处方药,无法开处方!");
+        }
+        return R.ok();
+    }
+
 //    //校验商品类型
 //    public boolean checkProductCater(FsStoreProductScrm product){
 //        if(product.getCateId().equals(202L) || product.getCateId().equals(232L) || product.getCateId().equals(201L) || product.getCateId().equals(233L)){
@@ -6130,4 +6139,41 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
         return value;
     }
+
+    private boolean checkStorePrescriptionDrug(List<FsStoreConfirmOrderGroupStoreParam> cartParamList) {
+        // 早期返回:如果只有一个店铺
+        if (cartParamList == null || cartParamList.size() <= 1) {
+            return false;
+        }
+
+        // 提取购物车id并去重
+        String cartIds = cartParamList.stream()
+                .map(FsStoreConfirmOrderGroupStoreParam::getData)
+                .map(FsStoreConfirmOrderParam::getCartIds)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.joining(","));
+
+        if (StringUtils.isEmpty(cartIds)) {
+            return false;
+        }
+
+        // 获取处方药信息
+        List<FsStorePreparedProductInfoVo> prescriptionDrugs = cartMapper.getFsPreparedProductInfoVoList(cartIds.split(","))
+                .stream()
+                .filter(c -> c != null && c.getProductType() == 2)
+                .collect(Collectors.toList());
+
+        if (prescriptionDrugs.isEmpty()) {
+            return false;
+        }
+
+        long storeCount = prescriptionDrugs.stream()
+                .map(FsStorePreparedProductInfoVo::getStoreId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .count();
+
+        return storeCount > 1;
+    }
 }

+ 7 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

@@ -1650,6 +1650,13 @@ public class StoreOrderScrmController extends AppBaseController {
         return R.ok().put("data", information);
     }
 
+    @Login
+    @ApiOperation("校验是否多店铺开方")
+    @PostMapping("/checkPrescribe")
+    public R check(@Validated @RequestBody List<FsStoreConfirmOrderGroupStoreParam> paramList) {
+        return orderService.checkPrescribe(paramList);
+    }
+
     /**
      * 构建缓存key
      */

+ 43 - 7
fs-user-app/src/main/java/com/fs/app/facade/impl/Hospital580FacadeServiceImpl.java

@@ -34,10 +34,7 @@ import com.fs.hospital580.service.Hospital580PrescriptionMedicineScrmService;
 import com.fs.hospital580.service.Hospital580PrescriptionScrmService;
 import com.fs.hospital580.service.Hospital580Service;
 import com.fs.hospital580.util.ThumbnailatorWatermark;
-import com.fs.hospital580.vo.MedicineSyncVo;
-import com.fs.hospital580.vo.PrescriptionMedicineScrmVo;
-import com.fs.hospital580.vo.RefusePrescriptionVo;
-import com.fs.hospital580.vo.ReviewPrescriptionVo;
+import com.fs.hospital580.vo.*;
 import com.fs.hospital580.vo.req.DiseaseReq;
 import com.fs.hospital580.vo.req.Prescription580Req;
 import com.fs.hospital580.vo.req.PrescriptionListReq;
@@ -55,9 +52,7 @@ 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.Optional;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -111,6 +106,20 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
         if(storeScrm == null){
             throw new FSException("操作失败,店铺信息不存在!");
         }
+
+        //过滤商品信息
+        AnswerDataVo answerDataVo= vo.getBeforeAiDataList().stream().filter(item -> item.getTitle().equals("居民用药信息选择")).findFirst().orElse(null);
+        if(answerDataVo == null){
+            throw new FSException("操作失败,请选择用药信息!");
+        }
+
+        AnswerDataVo fileDataVo = filterProduct(answerDataVo);
+        List<AnswerDataVo> newList = vo.getBeforeAiDataList().stream()
+                .filter(item -> !item.getTitle().equals("居民用药信息选择"))
+                .collect(Collectors.toList());
+        newList.add(fileDataVo);
+        vo.setBeforeAiDataList(newList);
+
         // 保存问诊信息
         Hospital580PrescriptionScrmEntity order = new Hospital580PrescriptionScrmEntity();
         BeanUtil.copyProperties(vo, order);
@@ -369,4 +378,31 @@ public class Hospital580FacadeServiceImpl implements Hospital580FacadeService {
         }
         return value;
     }
+
+    /**
+     * 过滤非处方商品
+     * **/
+    private AnswerDataVo filterProduct(AnswerDataVo dataVo){
+        List<Long> ids=new LinkedList<>();
+        JSONArray jsonArray = JSONUtil.parseArray(dataVo.getAnswerMedicine());
+        Map<Long,Object> numMap = new HashMap<>();
+        for (Object o:jsonArray){
+            JSONObject jsonObject = JSONUtil.parseObj(o);
+            ids.add(jsonObject.getLong("medicineId"));
+            numMap.put(jsonObject.getLong("medicineId"),jsonObject.getInt("number"));
+        }
+
+        //获取商品信息
+        JSONArray array = new JSONArray();
+        List<FsStoreProductScrm> fsStoreProductScrms = productScrmService.getStoreProductInProductIds(ids);
+
+        fsStoreProductScrms.stream().filter(f-> f.getProductType() == 2).forEach(f->{
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.set("medicineId", f.getProductId());
+            jsonObject.set("number", numMap.get(f.getProductId()));
+            array.add(jsonObject);
+        });
+        dataVo.setAnswerMedicine(array.toString());
+        return dataVo;
+    }
 }