ソースを参照

fix. 1.派单划定
2.修改角色限制

caozixuan 9 ヶ月 前
コミット
965838327d

+ 2 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysUserMapper.java

@@ -132,4 +132,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<OrgUserNameDto> findOrgUserName(@Param("userIds") List<Long> userIds);
+
+    List<String> findOnPassageSopNoByUserId(@Param("userId") Long userId);
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserService.java

@@ -215,4 +215,12 @@ public interface SysUserService extends IService<SysUser> {
      * @return 用户
      */
     SysUser findByArchivesId(Long archivesId);
+
+    /**
+     * 根据用户id查询在途的sopNo
+     *
+     * @param userId 用户id
+     * @return 在途的sopNo集合
+     */
+    List<String> findOnPassageSopNoByUserId(Long userId);
 }

+ 23 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java

@@ -362,6 +362,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 sysUserService.update(userUpdateWrapper);
                 //如果修改了角色,需要重新登录
                 if (count > 0 || dbUserRolesList.size() != userRolesList.size()) {
+                    // 如果涉及到区协和工程师身份的互相转变,则需要判断该用户没有在途的sop
+                    Long sysCoordinatorRoleId = sysRoleService.findRoleInfoByArchivesType(RoleTypeEnum.REGION_COORDINATOR).getRoleId();
+                    Long sysEffectRoleId = sysRoleService.findRoleInfoByArchivesType(RoleTypeEnum.EFFECT_ENGINEER).getRoleId();
+                    Long sysAssistantRoleId = sysRoleService.findRoleInfoByArchivesType(RoleTypeEnum.ASSISTANT_ENGINEER)
+                            .getRoleId();
+
+                    if (userRolesList.contains(sysCoordinatorRoleId) && (dbUserRolesList.contains(sysEffectRoleId) || dbUserRolesList.contains(sysAssistantRoleId))
+                            || ((userRolesList.contains(sysEffectRoleId) || userRolesList.contains(sysAssistantRoleId))
+                            && dbUserRolesList.contains(sysCoordinatorRoleId))) {
+                        // 判断是否有在途的sop
+                        List<String> onPassageSopNoList = this.findOnPassageSopNoByUserId(sysUser.getId());
+                        if (!CollectionUtils.isEmpty(onPassageSopNoList)) {
+                            throw ExceptionResultEnum.ERROR.exception(
+                                    String.format("用户[%s]有在途的SOP[%s],无法切换人员档案的角色", sysUser.getRealName(),
+                                            String.join(",", onPassageSopNoList)));
+                        }
+                    }
+
                     QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
                     sysUserRoleQueryWrapper.lambda().eq(SysUserRole::getUserId, sysUser.getId());
                     sysUserRoleService.remove(sysUserRoleQueryWrapper);
@@ -704,4 +722,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
         return sysUser;
     }
+
+    @Override
+    public List<String> findOnPassageSopNoByUserId(Long userId) {
+        return this.baseMapper.findOnPassageSopNoByUserId(userId);
+    }
 }

+ 18 - 0
sop-business/src/main/resources/mapper/SysUserMapper.xml

@@ -336,4 +336,22 @@
             </if>
         </where>
     </select>
+    <select id="findOnPassageSopNoByUserId" resultType="java.lang.String">
+        SELECT DISTINCT
+            (tbcd.sop_no)
+        FROM
+            t_b_user_archives_allocation tbuaa
+                LEFT JOIN
+            t_b_crm_detail tbcd ON tbcd.id = tbuaa.crm_detail_id
+                INNER JOIN
+            t_f_custom_flow_entity tfcfe ON tfcfe.code = tbcd.sop_no
+                LEFT JOIN
+            t_f_flow_approve tffa ON tffa.flow_id = tfcfe.flow_id
+        <where>
+            AND tffa.status NOT IN ('END' , 'FINISH')
+            <if test="userId != null">
+                AND tbuaa.user_id = #{userId}
+            </if>
+        </where>
+    </select>
 </mapper>