| 
					
				 | 
			
			
				@@ -0,0 +1,179 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.yonge.cooleshow.biz.dal.execl.analysis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.excel.EasyExcel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.excel.enums.CellExtraTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.excel.metadata.Sheet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.common.collect.Lists; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.common.collect.Maps; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.microsvc.toolkit.middleware.excel.analysis.AnalysisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.microsvc.toolkit.middleware.excel.analysis.DataAnalysis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.microsvc.toolkit.middleware.excel.util.DownloadManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.execl.entity.TeacherImportWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.execl.listener.TeacherImportListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.EasyExcelService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.Getter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.Setter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.collections.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.File; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Getter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Setter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class TeacherImportAnalysis extends DataAnalysis<TeacherImportAnalysis> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private List<TeacherImportWrapper.TeacherImport> teacherImportWrappers; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Excel解析服务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private EasyExcelService easyExcelService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final Map<String, TeacherImportWrapper.TeacherImport> recordMap = Maps.newHashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final Map<String, Long> subjectMap = Maps.newHashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final Map<String, Long> tenantMap = Maps.newHashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public TeacherImportAnalysis(AnalysisContext context) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static TeacherImportAnalysis build(EasyExcelService easyExcelService) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TeacherImportAnalysis analysis = new TeacherImportAnalysis(AnalysisContext.builder().build()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        analysis.setEasyExcelService(easyExcelService); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        analysis.setTeacherImportWrappers(Lists.newArrayList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return analysis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 读取文件数据到内存 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param path 本地文件地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void read(String path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        File file = new File(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Sheet> sheets = EasyExcel.read(file).build().getSheets(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isNotEmpty(sheets)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sheets.forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 读取数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                EasyExcel.read(file, TeacherImportWrapper.TeacherImport.class, new TeacherImportListener(getTeacherImportWrappers(), item.getSheetName())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .extraRead(CellExtraTypeEnum.MERGE).sheet(item.getSheetName()).doRead(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 删除本地缓存文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DownloadManager.getInstance().deleteOnExit(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 校验数据合法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return Map<Integer, String> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Map<Integer, String> verify() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 加载校验数据参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (Objects.nonNull(getTeacherImportWrappers())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            loadVerifyParamData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer, String> verifyDataMap = Maps.newLinkedHashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验每条入库记录数据合法性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StringBuffer ret = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (TeacherImportWrapper.TeacherImport item : getTeacherImportWrappers()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 检测机构编号,金额,订单号,结算状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(item.getUsername())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("用户昵称不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(item.getRealName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("真实姓名不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!item.getRealName().matches("^[\\u4e00-\\u9fa5]{2,10}$")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ret.append("真实姓名格式不正确;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(item.getPhone())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("手机号不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //手机号校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!item.getPhone().matches("^1[3-9]\\d{9}$")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ret.append("手机号格式不正确;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isNotEmpty(item.getIdCardNo())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //身份证校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!item.getIdCardNo().matches("(^\\d{6}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|X|x)$)|(^\\d{6}\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}$)")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ret.append("身份证格式不正确;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(item.getSubjectName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("老师声部不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!subjectMap.containsKey(item.getSubjectName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ret.append("声部无效:").append(item.getSubjectName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (item.getIsTestUser() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("是否测试用户不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (item.getSettlementFrom() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("结算方式不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (item.getCustomerService() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret.append("是否客服不能为空;"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isNotEmpty(ret)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                verifyDataMap.put(item.getRowIndex(), ret.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ret = new StringBuffer(); // 重置数据状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 数据校验记录信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getContext().total(getTeacherImportWrappers().size()).failure(verifyDataMap.size()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setSuccess(getContext().getTotal() - getContext().getFailure()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return verifyDataMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 数据转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void convert() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 加载校验数据参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void loadVerifyParamData() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //校验数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取所有手机号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectMap.putAll(easyExcelService.getSubjectMap()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tenantMap.putAll(easyExcelService.getTenantMap()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 数据对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return RoomInfoAnalysis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public TeacherImportAnalysis get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |