zouxuan 6 mēneši atpakaļ
vecāks
revīzija
76638c9d7f

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/execl/analysis/TeacherImportAnalysis.java

@@ -150,6 +150,14 @@ public class TeacherImportAnalysis extends DataAnalysis<TeacherImportAnalysis> {
                     ret.append("声部无效:").append(item.getSubjectName());
                 }
             }
+            if (StringUtils.isEmpty(item.getTenantName())) {
+                ret.append("机构名称不能为空;");
+            }else {
+                if (!tenantMap.containsKey(item.getTenantName())) {
+                    ret.append("机构无效:").append(item.getTenantName());
+                }
+                item.setTenantId(tenantMap.get(item.getTenantName()));
+            }
             if (item.getIsTestUser() == null) {
                 ret.append("是否测试用户不能为空;");
             }

+ 7 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/execl/entity/TeacherImportWrapper.java

@@ -8,6 +8,7 @@ import com.alibaba.excel.metadata.CellData;
 import com.alibaba.excel.metadata.GlobalConfiguration;
 import com.alibaba.excel.metadata.property.ExcelContentProperty;
 import com.yonge.cooleshow.common.enums.ESettlementFrom;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -44,7 +45,7 @@ public class TeacherImportWrapper {
         private Boolean isTestUser;
 
         @ExcelProperty("所属机构")
-        private Long tenantName;
+        private String tenantName;
 
         @ExcelIgnore
         private Long tenantId;
@@ -56,6 +57,11 @@ public class TeacherImportWrapper {
         private Boolean customerService;
 
         @ExcelIgnore
+        private Long updateBy;
+        @ExcelIgnore
+        private Long userId;
+
+        @ExcelIgnore
         private Integer rowIndex;
         @ExcelIgnore
         private String sheetName;

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysUserMapper.java

@@ -60,4 +60,10 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 
     List<String> existIdCardNos(@Param("idCardNos") List<String> idCardNos,
                                 @Param("userType") String userType);
+
+    List<com.yonge.cooleshow.auth.api.entity.SysUser> findUserByPhones(@Param("phones") List<String> phones);
+
+    void batchInsert(@Param("addUsers") List<com.yonge.cooleshow.auth.api.entity.SysUser> addUsers);
+
+    void batchUpdate(@Param("updateUsers") List<com.yonge.cooleshow.auth.api.entity.SysUser> updateUsers);
 }

+ 128 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -192,7 +192,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     private TenantGroupMapper tenantGroupMapper;
 
     @Autowired
-    private UserTenantBindRecordMapper userTenantBindRecordMapper;
+    private UserTenantBindRecordService userTenantBindRecordService;
 
     @Autowired
     private VipCardRecordService vipCardRecordService;
@@ -747,6 +747,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return teacher;
     }
 
+
     // 清除专属客服信息
     private void clearUserCustomerRelation(Long userId) {
 
@@ -1523,7 +1524,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         bindRecord.setTenantId(tenantId);
         bindRecord.setBindStatus(bind);
         bindRecord.setBindTime(new Date());
-        userTenantBindRecordMapper.add(bindRecord);
+        userTenantBindRecordService.save(bindRecord);
     }
 
     private void sendBindUnBindSMS(Long userId, String phone, MessageTypeEnum messageType, Long tenantId) {
@@ -1688,7 +1689,131 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     }
 
     @Override
-    public void importTeacher(List<TeacherImportWrapper.TeacherImport> collect) {
+    @Transactional(rollbackFor = Exception.class)
+    public void importTeacher(List<TeacherImportWrapper.TeacherImport> teacherImports) {
+        //设置默认头像
+        Date now = new Date();
+        String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.TEACHER_AVATAR);
+        List<SysUser> existUser = sysUserMapper.findUserByPhones(teacherImports.stream().map(TeacherImportWrapper.TeacherImport::getPhone).collect(Collectors.toList()));
+        Map<String, SysUser> existUserMap = existUser.stream().collect(Collectors.toMap(SysUser::getPhone, o -> o));
+        List<SysUser> sysUsers = new ArrayList<>();
+        for (TeacherImportWrapper.TeacherImport teacherImport : teacherImports) {
+            SysUser sysUser = existUserMap.get(teacherImport.getPhone());
+            if(sysUser == null) {
+                sysUser = new SysUser();
+                sysUser.setAvatar(defaultHeard);
+                sysUser.setPhone(teacherImport.getPhone());
+                sysUser.setUsername(teacherImport.getUsername());
+                sysUser.setCreateTime(now);
+            }
+            if(StringUtils.isEmpty(sysUser.getIdCardNo()) && StringUtils.isNotEmpty(teacherImport.getIdCardNo())){
+                //通过身份证号获取身份信息
+                IdcardInfoExtractor idcardInfo = new IdcardInfoExtractor(teacherImport.getIdCardNo(), false);
+                sysUser.setIdCardNo(teacherImport.getIdCardNo());
+                sysUser.setGender(idcardInfo.getGender());
+                sysUser.setBirthdate(idcardInfo.getBirthday());
+            }
+            if(StringUtils.isEmpty(sysUser.getRealName()) && StringUtils.isNotEmpty(teacherImport.getRealName())){
+                sysUser.setRealName(teacherImport.getRealName());
+            }
+            if(StringUtils.isEmpty(sysUser.getPassword())){
+                //初始密码,klx+手机号四位
+                String password = "klx" + sysUser.getPhone().substring(sysUser.getPhone().length() - 4);
+                sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
+            }
+            if (StringUtil.isEmpty(sysUser.getUserType())) {
+                sysUser.setUserType("TEACHER");
+            } else if (!sysUser.getUserType().contains("TEACHER")) {
+                sysUser.setUserType(sysUser.getUserType() + ",TEACHER");
+            }
+            sysUser.setUpdateTime(now);
+            sysUsers.add(sysUser);
+        }
+        //获取需要新增的用户
+        List<SysUser> addUsers = sysUsers.stream().filter(o -> o.getId() == null).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(addUsers)) {
+            sysUserMapper.batchInsert(addUsers);
+        }
+        //获取修改的用户
+        List<SysUser> updateUsers = sysUsers.stream().filter(o -> o.getId() != null).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(updateUsers)) {
+            sysUserMapper.batchUpdate(updateUsers);
+        }
+        //保存老师信息
+        Map<String,TeacherImportWrapper.TeacherImport> teacherImportMap = teacherImports.stream().collect(Collectors.toMap(TeacherImportWrapper.TeacherImport::getPhone, o -> o));
+        //获取所有用户编号
+        List<Long> userIds = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
+        //获取所有老师账户表
+        List<UserAccount> userAccounts = userAccountService.lambdaQuery().in(UserAccount::getUserId, userIds).list();
+        Map<Long, UserAccount> userAccountMap = userAccounts.stream().collect(Collectors.toMap(UserAccount::getUserId, o -> o));
+        List<UserAccount> addAccounts = new ArrayList<>();
+
+        //机构老师添加机构绑定记录
+        List<UserTenantBindRecord> userTenantBindRecords = userTenantBindRecordService.lambdaQuery().in(UserTenantBindRecord::getUserId, userIds).list();
+        Map<Long, UserTenantBindRecord> userTenantBindRecordMap = userTenantBindRecords.stream().collect(Collectors.toMap(UserTenantBindRecord::getUserId, o -> o));
+        List<UserTenantBindRecord> bindRecords = new ArrayList<>();
+
+        List<Teacher> teachers = new ArrayList<>();
+        for (SysUser sysUser : sysUsers) {
+            //老师表初始化
+            TeacherImportWrapper.TeacherImport teacherImport = teacherImportMap.get(sysUser.getPhone());
+            teacherImport.setUserId(sysUser.getId());
+            Teacher teacher = this.initTeacher(teacherImport);
+            teacher.setAvatar(sysUser.getAvatar());
+            teachers.add(teacher);
+
+            //老师账户表初始化
+            UserAccount userAccount = userAccountMap.get(sysUser.getId());
+            if (userAccount == null) {
+                userAccount = new UserAccount();
+                userAccount.setUserId(sysUser.getId());
+                addAccounts.add(userAccount);
+            }
+            //机构老师添加机构绑定记录
+            UserTenantBindRecord userTenantBindRecord = userTenantBindRecordMap.get(sysUser.getId());
+            if (userTenantBindRecord == null) {
+                userTenantBindRecord = new UserTenantBindRecord();
+                userTenantBindRecord.setUserId(sysUser.getId());
+                userTenantBindRecord.setUserType("TEACHER");
+                userTenantBindRecord.setTenantId(teacherImport.getTenantId());
+                userTenantBindRecord.setBindStatus(true);
+                userTenantBindRecord.setBindTime(now);
+                bindRecords.add(userTenantBindRecord);
+            }
+        }
+        //批量保存老师
+        this.saveBatch(teachers);
+        //批量保存老师账户表
+        if (CollectionUtils.isNotEmpty(addAccounts)) {
+            userAccountService.saveBatch(addAccounts);
+        }
+        //批量保存机构老师绑定记录
+        if (CollectionUtils.isNotEmpty(bindRecords)) {
+            userTenantBindRecordService.saveBatch(bindRecords);
+        }
+        //批量导入IM账号到三方
+        sysUsers.forEach(sysUser -> {
+            try {
+                imGroupCoreService.register(String.valueOf(sysUser.getId()), ClientEnum.TEACHER.getCode(),
+                        sysUser.getUsername(), sysUser.getAvatar());
+            } catch (Exception e) {
+                log.error("导入IM账号到三方 teacherId={}", sysUser.getId(), e);
+            }
+        });
+    }
 
+
+    private Teacher initTeacher(TeacherImportWrapper.TeacherImport teacherImport) {
+        Teacher teacher = new Teacher();
+        teacher.setUserId(teacherImport.getUserId());
+        teacher.setEntryFlag(YesOrNoEnum.NO);
+        teacher.setMusicianFlag(YesOrNoEnum.NO);
+        teacher.setSubjectId(teacherImport.getSubjectId());
+        teacher.setIsSettlement(!ESettlementFrom.NO.equals(teacherImport.getSettlementFrom()));
+        teacher.setIsTestUser(teacherImport.getIsTestUser());
+        teacher.setSettlementFrom(teacherImport.getSettlementFrom());
+        teacher.setTenantId(teacherImport.getTenantId());
+        teacher.setCustomerService(teacherImport.getCustomerService());
+        return teacher;
     }
 }

+ 51 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -34,6 +34,51 @@
     <sql id="Base_Column_List">
         id_, username_, password_, salt_, phone_, avatar_, create_time_, update_time_, lock_flag_, wx_openid_, qq_openid_, user_type_, gender_, nation_, birthdate_, email_, im_token_, real_name_, id_card_no_, certificate_type_, is_super_admin_, wechat_id_, del_flag_, last_username_time_
     </sql>
+    <update id="batchUpdate">
+        <foreach collection="updateUsers" item="item" separator=";">
+            UPDATE sys_user
+            <set>
+            <if test="item.username != null and item.username != ''">
+                username_ = #{item.username},
+            </if>
+            <if test="item.password != null and item.password != ''">
+                password_ = #{item.password},
+            </if>
+            <if test="item.phone != null and item.phone != ''">
+                phone_ = #{item.phone},
+            </if>
+            <if test="item.avatar != null and item.avatar != ''">
+                avatar_ = #{item.avatar},
+            </if>
+            <if test="item.userType != null">
+                user_type_ = #{item.userType},
+            </if>
+            <if test="item.gender != null">
+                gender_ = #{item.gender},
+            </if>
+            <if test="item.birthdate != null">
+                birthdate_ = #{item.birthdate},
+            </if>
+            <if test="item.realName != null and item.realName != ''">
+                real_name_ = #{item.realName},
+            </if>
+            <if test="item.idCardNo != null and item.idCardNo != ''">
+                id_card_no_ = #{item.idCardNo},
+            </if>
+            update_time_ = now()
+            </set>
+            WHERE id_ = #{item.id}
+        </foreach>
+    </update>
+    <insert id="batchInsert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        insert into sys_user
+        (username_, password_, phone_, avatar_, create_time_, update_time_, user_type_, gender_,birthdate_, real_name_, id_card_no_)
+        values
+        <foreach collection="addUsers" item="item" separator="," >
+            (#{item.username}, #{item.password}, #{item.phone}, #{item.avatar}, #{item.createTime}, #{item.updateTIme}, #{item.userType},
+             #{item.gender}, #{item.birthdate}, #{item.realName}, #{item.idCardNo})
+        </foreach>
+    </insert>
 
     <select id="queryCouponIssueUser" resultType="com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo">
 
@@ -147,5 +192,11 @@
         </foreach>
         AND user_type_ LIKE CONCAT('%',#{userType},'%')
     </select>
+    <select id="findUserByPhones" resultType="com.yonge.cooleshow.auth.api.entity.SysUser">
+        select * from sys_user where phone_ in
+        <foreach collection="phones" item="phone" open="(" separator="," close=")">
+            #{phone}
+        </foreach>
+    </select>
     <!--客服消息接收者-->
 </mapper>