Переглянути джерело

Merge remote-tracking branch 'origin/ScrmStores' into ScrmStores

zyy 1 тиждень тому
батько
коміт
a3cc720146

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -251,7 +251,7 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
             "FROM fs_course_watch_log o " +
             "<if test= 'sendType != 1 '> " +
             " LEFT JOIN qw_user qu on qu.id=o.qw_user_id " +
-            " LEFT JOIN fs_course_red_packet_log fcr on o.user_id = fcr.user_id and fcr.video_id = o.video_id" +
+            " LEFT JOIN fs_course_red_packet_log fcr on o.user_id = fcr.user_id and fcr.video_id = o.video_id AND qu.id = fcr.qw_user_id" +
             "</if>\n" +
             "LEFT JOIN fs_user_course_video v on v.video_id=o.video_id \n" +
             "LEFT JOIN fs_user_course uc on uc.course_id=v.course_id\n" +

+ 8 - 2
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoRedPackageServiceImpl.java

@@ -143,6 +143,7 @@ public class FsUserCourseVideoRedPackageServiceImpl implements IFsUserCourseVide
         //需要修改和新增的数据
         List<FsUserCourseVideoRedPackage> updateList = new ArrayList<>();
         List<FsUserCourseVideoRedPackage> insertList = new ArrayList<>();
+        Set<String> checkKeys = new HashSet<>();
 
         for (FsUserCourseVideoRedPackage redPackage : fsUserCourseVideoRedPackageList) {
             String key = generateKey(redPackage.getPeriodId(), redPackage.getVideoId(), redPackage.getCompanyId());
@@ -151,8 +152,13 @@ public class FsUserCourseVideoRedPackageServiceImpl implements IFsUserCourseVide
                 // 存在则加入更新列表
                 updateList.add(redPackage);
             } else {
-                // 不存在则加入新增列表
-                insertList.add(redPackage);
+                if(checkKeys.contains(key)){
+                    continue;
+                }else {
+                    // 不存在则加入新增列表
+                    insertList.add(redPackage);
+                    checkKeys.add(key);
+                }
             }
         }
 

+ 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

@@ -1684,6 +1684,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;
+    }
 }