Browse Source

优化分配在线药师的随机方式

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

+ 1 - 1
fs-service/src/main/java/com/fs/his/mapper/FsDoctorMapper.java

@@ -181,7 +181,7 @@ public interface FsDoctorMapper
     FsDoctor selectPackageFsDoctorType2Ids();
 
     //根据入参类型随机返回一个在线药师
-    FsDoctor selectRandomOnlineDoctorForPackage();
+    List<FsDoctor> selectRandomOnlineDoctorForPackage();
 
     @Select("select doctor_id from fs_doctor where doctor_type=1 and  `status`=1 and is_audit=1 and is_agreement_prescribe_doctor=1  and sign_url is not null")
     List<Long>  selectFsDoctorDoctorByPackage();

+ 10 - 4
fs-service/src/main/java/com/fs/his/service/impl/FsPrescribeServiceImpl.java

@@ -829,10 +829,16 @@ public class FsPrescribeServiceImpl implements IFsPrescribeService
         fsPrescribe.setPrescribeDoctorSignUrl(fsDoctor.getSignUrl());
 
         //分配在线的随机药师
-        FsDoctor fsDrugDoctor = doctorMapper.selectRandomOnlineDoctorForPackage();
-        if (fsDrugDoctor==null){
-            //兜底情况,如果没有在线的药师就无论在线随机分配
-            fsDrugDoctor=doctorMapper.selectPackageFsDoctorType2Ids();
+        List<FsDoctor> onlineDoctors = doctorMapper.selectRandomOnlineDoctorForPackage();
+        FsDoctor fsDrugDoctor = null;
+
+        if (onlineDoctors != null && !onlineDoctors.isEmpty()) {
+            // 有在线药师:应用层随机选一个
+            Collections.shuffle(onlineDoctors);
+            fsDrugDoctor = onlineDoctors.get(0);
+        } else {
+            // 兜底:无在线药师,随机选一个 type=2 的(不管是否在线)
+            fsDrugDoctor = doctorMapper.selectPackageFsDoctorType2Ids();
             if (fsDrugDoctor == null) {
                 log.error("无法分配药师:productType={}, 无可用在线或离线药师", fsPackage.getProductType());
                 throw new CustomException("当前无可用药师,请稍后再试");

+ 1 - 3
fs-service/src/main/resources/mapper/his/FsDoctorMapper.xml

@@ -124,7 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{doctorId}
         </foreach>
     </select>
-    <select id="selectRandomOnlineDoctorForPackage" resultType="com.fs.his.domain.FsDoctor">
+    <select id="selectRandomOnlineDoctorForPackage" resultMap="FsDoctorResult">
         SELECT d.*
         FROM fs_doctor d
                  INNER JOIN fs_doctor_online_info o ON d.doctor_id = o.doctor_id
@@ -133,8 +133,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           AND d.is_audit = 1
           AND d.sign_url IS NOT NULL
           AND o.is_online = 1
-        ORDER BY RAND()
-        LIMIT 1
     </select>
 
     <insert id="insertFsDoctor" parameterType="FsDoctor" useGeneratedKeys="true" keyProperty="doctorId">