he2802 1 jaar geleden
bovenliggende
commit
7acf2188bc

+ 22 - 8
zhongzheng-admin/src/main/java/com/zhongzheng/controller/user/DangAnController.java

@@ -3,6 +3,7 @@ package com.zhongzheng.controller.user;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.poi.EasyPoiUtil;
 import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.vo.ClassPeriodStudentVo;
@@ -10,21 +11,17 @@ import com.zhongzheng.modules.grade.vo.UserPeriodExportV2Vo;
 import com.zhongzheng.modules.order.bo.OrderQueryBo;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderListVo;
+import com.zhongzheng.modules.top.order.bo.TopOldOrderCustomerBo;
 import com.zhongzheng.modules.user.bo.*;
-import com.zhongzheng.modules.user.service.IUserCertificateService;
-import com.zhongzheng.modules.user.service.IUserStudyRecordService;
-import com.zhongzheng.modules.user.service.IUserSubscribeService;
-import com.zhongzheng.modules.user.service.IUserVisitLogService;
+import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -50,6 +47,8 @@ public class DangAnController extends BaseController {
 
     private final IUserSubscribeService iUserSubscribeService;
 
+    private final IUserService iUserService;
+
     @ApiOperation("查询档案网课列表")
     @PreAuthorize("@ss.hasPermi('grade:user:list')")
     @GetMapping("/listVideoUserPeriod")
@@ -163,4 +162,19 @@ public class DangAnController extends BaseController {
         List<UserPeriodExportV2Vo> list = iClassGradeUserService.listUserStudyQuestionRecordV2Week(bo);
         return getDataTable(list);
     }
+
+    @ApiOperation("学员资料导入更新")
+    @PostMapping("/userDataImportUp")
+    public AjaxResult userDataImportUp(MultipartFile file) {
+        List<UserDataImportBo> customerBos = EasyPoiUtil.importExcel(file,0,1,UserDataImportBo.class);
+        iUserService.userDataImportUp(customerBos);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation("学员资料照片导入")
+    @PostMapping("/userDataImgImport")
+    public AjaxResult userDataImgImport(MultipartFile file) {
+        iUserService.userDataImgImport(file);
+        return AjaxResult.success();
+    }
 }

+ 166 - 6
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -25,9 +25,14 @@ import com.zhongzheng.common.exception.BaseException;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.*;
+import com.zhongzheng.common.utils.file.FileUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
 import com.zhongzheng.modules.alisms.service.IAliSmsService;
+import com.zhongzheng.modules.base.domain.UserProfile;
+import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.collect.domain.CollectBank;
 import com.zhongzheng.modules.collect.domain.CollectCourse;
 import com.zhongzheng.modules.collect.domain.CollectNote;
@@ -37,9 +42,12 @@ import com.zhongzheng.modules.collect.mapper.CollectNoteMapper;
 import com.zhongzheng.modules.course.domain.Course;
 import com.zhongzheng.modules.course.domain.CourseSection;
 import com.zhongzheng.modules.course.domain.CourseSubject;
+import com.zhongzheng.modules.course.domain.Major;
 import com.zhongzheng.modules.course.service.ICourseSectionService;
 import com.zhongzheng.modules.course.service.ICourseService;
 import com.zhongzheng.modules.course.service.ICourseSubjectService;
+import com.zhongzheng.modules.course.service.IMajorService;
+import com.zhongzheng.modules.exam.service.IExamApplyService;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.UserNewGoodsVo;
@@ -52,6 +60,7 @@ import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.domain.UserCertificate;
 import com.zhongzheng.modules.user.domain.UserStudyLog;
 import com.zhongzheng.modules.user.domain.UserVisitLog;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
@@ -65,14 +74,20 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-
+import java.util.stream.Stream;
 
 
 /**
@@ -121,16 +136,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Autowired
     private ICourseSubjectService iCourseSubjectService;
-
+    @Autowired
+    private IUserCertificateService iUserCertificateService;
     @Autowired
     private TokenService tokenService;
-
+    @Autowired
+    private IMajorService iMajorService;
     @Autowired
     private IUserVisitLogService iUserVisitLogService;
-
+    @Autowired
+    private IUserProfileService iUserProfileService;
     @Autowired
     private IUserStudyLogService iUserStudyLogService;
-
+    @Autowired
+    private IExamApplyService iExamApplyService;
     @Autowired
     private IUserLoginErrorService iUserLoginErrorService;
     @Autowired
@@ -139,7 +158,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     private IGoodsService iGoodsService;
     @Autowired
     private ISysTenantService iSysTenantService;
-
+    @Autowired
+    private OssService ossService;
     @Autowired
     private ICourseService iCourseService;
     @Autowired
@@ -1723,6 +1743,146 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return null;
     }
 
+    @Override
+    public void userDataImportUp(List<UserDataImportBo> customerBos) {
+        if (CollectionUtils.isEmpty(customerBos)){
+            return;
+        }
+        customerBos.forEach(item -> {
+            if (StringUtils.isBlank(item.getUserCard())){
+                return;
+            }
+            User user = getOne(new LambdaQueryWrapper<User>()
+                    .eq(User::getIdCard, EncryptHandler.encrypt(item.getUserCard()))
+                    .eq(User::getStatus, 1));
+            if (Objects.isNull(user)){
+                return;
+            }
+
+            //跟新用户资料
+            user.setRealname(item.getUserName());
+            user.setTelphone(EncryptHandler.encrypt(item.getUserPhone()));
+            user.setSex(StringUtils.isNotBlank(item.getSex()) && item.getSex().equals("男") ? 1:2);
+            user.setEduLevel(item.getEducation());
+            user.setSchool(item.getSchool());
+            user.setGraduationTime(DateUtils.formatDate(item.getGraduationTime(),"yyyy-MM-dd"));
+            user.setMajor(item.getMajor());
+            user.setWorkYear(item.getWorkYear());
+            user.setCompanyName(item.getCompany());
+            user.setUnitContact(item.getCompanyContact());
+            user.setUnitTel(item.getCompanyPhone());
+            updateById(user);
+
+        });
+    }
+
+    @Override
+    public void userDataImgImport(MultipartFile file) {
+        String zhiyuan = System.getProperty("user.dir");
+        String path = zhiyuan+"/zhongzheng-admin/src/main/resources/xueyuanzhiliao";
+        try {
+            FileUtils.unzipWithStream(file.getInputStream(),path);
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new CustomException("文件解压错误");
+        }
+        // 路径
+        try (Stream<Path> paths = Files.walk(Paths.get(path))){
+            List<Path> fileNames = paths
+                    .filter(Files::isRegularFile)
+                    .collect(Collectors.toList());
+            if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(fileNames)){
+                return;
+            }
+            for (Path fileName : fileNames) {
+                Path name = fileName.getFileName();
+                //身份证号码
+                List<String> sign = Arrays.stream(name.toString().split("&")).collect(Collectors.toList());
+                //身份证号
+                String idCard = sign.get(0);
+                User user = getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getIdCard, EncryptHandler.encrypt(idCard)));
+                if (ObjectUtils.isNull(user)){
+                    return;
+                }
+
+                //上传OSS
+                File userFile = new File(fileName.toString());
+                MultipartFile multipartFile = FileUtils.getMultipartFile(userFile);
+                OssRequest ossRequest = new OssRequest();
+                ossRequest.setUserId(user.getUserId());
+                ossRequest.setFile(multipartFile);
+                ossRequest.setImageStatus(0);
+                String upload = "";
+                try {
+                    upload = ossService.upload(ossRequest);
+                }catch (Exception e) {
+                    throw new CustomException(name+"上传oss失败");
+                }
+                if (name.toString().contains("证件照")){
+                    user.setAvatar(upload);
+                }
+                if (name.toString().contains("身份证正面")){
+                    user.setIdCardImg1(upload);
+                }
+                if (name.toString().contains("身份证反面")){
+                    user.setIdCardImg2(upload);
+                }
+                if (name.toString().contains("承诺书")){
+                    //专业
+                    String major = sign.get(sign.size() - 1);
+                    List<UserProfile> userProfiles = iExamApplyService.getUserProfiles(idCard, "考前培训施工现场专业人员", major);
+                    for (UserProfile userItem : userProfiles) {
+                        JSONObject jsonObject = JSONObject.parseObject(userItem.getKeyValue());
+                        Map<String, Object> userMap = new HashMap<>();
+                        for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+                            userMap.put(entry.getKey(), entry.getValue());
+                        }
+                        String key = "commitment_electr_signature";
+                        String fieldName = "承诺书电子签";
+                        JSONObject recentJson = JSONObject.parseObject(userMap.get(key).toString());
+                        Map<String, Object> recentMap = new HashMap<>();
+                        for (Map.Entry<String, Object> entry : recentJson.entrySet()) {
+                            recentMap.put(entry.getKey(), entry.getValue());
+                        }
+                        if (ObjectUtils.isNotNull(recentMap)){
+                            recentMap.put("value",upload);
+                        }else {
+                            recentMap.put("fieldKey",key);
+                            recentMap.put("value",upload);
+                            recentMap.put("fieldName",fieldName);
+                            recentMap.put("status",0);
+                        }
+                        userMap.put(key,recentMap);
+                        String content = JSONObject.toJSONString(userMap);
+                        userItem.setKeyValue(content);
+                    }
+                    iUserProfileService.updateBatchById(userProfiles);
+                }
+                if (name.toString().contains("证书")){
+                    //专业
+                    String majorName = sign.get(sign.size() - 1);
+                    Major major = iMajorService.getOne(new LambdaQueryWrapper<Major>()
+                            .eq(Major::getCategoryName, majorName)
+                            .eq(Major::getStatus, 1)
+                            .last("limit 1"));
+                    if (ObjectUtil.isNotNull(major)){
+                        iUserCertificateService.update(new LambdaUpdateWrapper<UserCertificate>()
+                                .set(UserCertificate::getCertificatePath,upload)
+                                .eq(UserCertificate::getUserId,user.getUserId())
+                                .eq(UserCertificate::getMajorId,major.getId()));
+                    }
+                }
+                updateById(user);
+            }
+            //删除本地文件
+            FileUtils.deleteFilePackage(path);
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new CustomException("学员资料有误");
+        }
+    }
+
     @Override
     public Map<String, Object> accountLogin(UserAppAccountLoginBo bo) {
         if(Validator.isEmpty(bo.getAccount())){

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/IExamApplyService.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.exam.service;
 
 import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.modules.base.bo.UserProfileQueryBo;
+import com.zhongzheng.modules.base.domain.UserProfile;
 import com.zhongzheng.modules.exam.bo.*;
 import com.zhongzheng.modules.exam.domain.ExamApply;
 import com.zhongzheng.modules.exam.vo.*;
@@ -110,4 +111,6 @@ public interface IExamApplyService extends IService<ExamApply> {
     void examApplyResultReceipt(List<ExamApplyResultExportBo> exportBo, String time);
 
     String examApplyResultCertificate(List<MultipartFile> files);
+
+	List<UserProfile> getUserProfiles(String idCard, String businessName, String major);
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -1145,6 +1145,11 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
 
     }
 
+    @Override
+    public List<UserProfile> getUserProfiles(String idCard,String businessName,String major){
+       return baseMapper.getUserProfileList(idCard,businessName,major);
+    }
+
     @Override
     public String examUserProfileExport(UserProfileQueryBo bo) {
         List<UserProfileVo> userProfileVos = iUserProfileService.queryList(bo);

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java

@@ -108,4 +108,7 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 
     @InterceptorIgnore(tenantLine = "true")
     ClassGrade getCodeNoTenant(@Param("officialName") String officialName,@Param("tenantId") Long tenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Long getGradeCount(String sevenCode);
 }

+ 20 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -229,7 +229,26 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
     @Override
     public List<ClassGradeGoodsVo> listGoodsBatch(ClassGradeQueryBo bo) {
-        return baseMapper.listGoodsBatch(bo);
+        List<ClassGradeGoodsVo> classGradeGoodsVos = baseMapper.listGoodsBatch(bo);
+        if (CollectionUtils.isEmpty(classGradeGoodsVos)){
+            return new ArrayList<>();
+        }
+        classGradeGoodsVos.forEach(item -> {
+            if (CollectionUtils.isNotEmpty(item.getGradeList())){
+                List<ClassGradeVo> collect = item.getGradeList().stream().filter(gradeVo -> {
+                    //班级人数是否满人
+                    if (ObjectUtil.isNotNull(gradeVo.getSevenCode())) {
+                        Long count = baseMapper.getGradeCount(gradeVo.getSevenCode());
+                        if (gradeVo.getStudentUpper() <= count) {
+                            return false;
+                        }
+                    }
+                    return true;
+                }).collect(Collectors.toList());
+                item.setGradeList(collect);
+            }
+        });
+        return classGradeGoodsVos;
     }
 
     /**

+ 56 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserDataImportBo.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.modules.user.bo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author yangdamao
+ * @date 2023年12月22日 10:37
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class UserDataImportBo implements Serializable {
+
+    @Excel(name = "姓名")
+    private String userName;
+
+    @Excel(name = "身份证号")
+    private String userCard;
+
+    @Excel(name = "性别")
+    private String sex;
+
+    @Excel(name = "手机号码")
+    private String userPhone;
+
+    @Excel(name = "学历")
+    private String education;
+
+    @Excel(name = "毕业院校")
+    private String school;
+
+    @Excel(name = "毕业时间")
+    private Date graduationTime;
+
+    @Excel(name = "所学专业")
+    private String major;
+
+    @Excel(name = "工作年限")
+    private String workYear;
+
+    @Excel(name = "工作单位")
+    private String company;
+
+    @Excel(name = "单位联系人")
+    private String companyContact;
+
+    @Excel(name = "单位联系电话")
+    private String companyPhone;
+
+}

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -5,6 +5,7 @@ import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.vo.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
 import java.util.Collection;
@@ -147,4 +148,8 @@ public interface IUserService extends IService<User> {
     User getByCardNoTenant(String idCard);
 
 	Map<String, Object> importSevenUser(List<UserPeriodImportBo> userList);
+
+    void userDataImportUp(List<UserDataImportBo> customerBos);
+
+    void userDataImgImport(MultipartFile file);
 }

+ 10 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -1347,4 +1347,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LIMIT 1
     </select>
 
+    <select id="getGradeCount" resultType="java.lang.Long" parameterType="java.lang.String">
+        SELECT
+            COUNT( DISTINCT cgu.user_id )
+        FROM
+            class_grade_user cgu
+        WHERE
+            cgu.`status` = 1
+          AND cgu.grade_id IN ( SELECT grade_id FROM class_grade WHERE seven_code = #{sevenCode} )
+    </select>
+
 </mapper>