Sfoglia il codice sorgente

登录验证,修改密码通知,实习登记新增及导出

sangwenwei 9 mesi fa
parent
commit
ffa2ab9ec1
16 ha cambiato i file con 3561 aggiunte e 5 eliminazioni
  1. 6 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/User.java
  2. 10 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/factory/UserApiFallbackFactory.java
  3. 13 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/feign/IUserApi.java
  4. 6 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/service/dto/UserDTO.java
  5. 10 1
      jeeplus-auth/src/main/java/com/jeeplus/auth/controller/LoginController.java
  6. 1 0
      jeeplus-common/jeeplus-common-core/src/main/java/com/jeeplus/common/constant/ErrorConstants.java
  7. 74 3
      jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/register/controller/RegisterController.java
  8. 323 1
      jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/register/service/RegistrationService.java
  9. 61 0
      jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/utils/HumanResponseUtil.java
  10. 2937 0
      jeeplus-modules/jeeplus-human/src/main/resources/freemarker/registration.ftl
  11. 29 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/UserController.java
  12. 10 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/feign/UserApiImpl.java
  13. 11 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/UserMapper.java
  14. 13 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml
  15. 17 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/UserService.java
  16. 40 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

+ 6 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/User.java

@@ -4,11 +4,13 @@
 package com.jeeplus.sys.domain;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jeeplus.core.domain.BaseEntity;
 import com.jeeplus.core.query.Query;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -127,6 +129,10 @@ public class User extends BaseEntity {
      * 是否获取其他服务待办
      */
     private String otherServiceFlag;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date updatePasswordDate;	//修改密码时间
+
 
     /**
      * 构造函数

+ 10 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/factory/UserApiFallbackFactory.java

@@ -231,6 +231,16 @@ public class UserApiFallbackFactory implements FallbackFactory <IUserApi> {
                 return null;
             }
 
+            @Override
+            public List <UserDTO> getAllUserInfoNoTenId() {
+                return null;
+            }
+
+            @Override
+            public void updateUserById(UserDTO dto) {
+
+            }
+
         };
     }
 }

+ 13 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/feign/IUserApi.java

@@ -340,6 +340,19 @@ public interface IUserApi {
      */
     @RequestMapping(value = BASE_URL +  "/hasUser", method = RequestMethod.POST)
     List<String> hasUser();
+
+    /**
+     * 获取所有的用户信息
+     */
+    @GetMapping(value = BASE_URL + "/getAllUserInfoNoTenId")
+    List <UserDTO> getAllUserInfoNoTenId();
+
+    /**
+     * 修改用户信息
+     * @param dto
+     */
+    @PostMapping(value = BASE_URL + "/updateUserById")
+    void updateUserById(@RequestBody UserDTO dto);
 }
 
 

+ 6 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/service/dto/UserDTO.java

@@ -24,6 +24,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.Email;
 import javax.validation.constraints.NotNull;
@@ -88,6 +89,11 @@ public class UserDTO extends BaseDTO implements Serializable {
     private List<CertDTO> certDTOList;
 
     private OfficeDTO corporationDTO;   //公司信息
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date updatePasswordDate;	//修改密码时间
+
+    private String UpPassword;//用户的密码是否修改
 
 
     /**

+ 10 - 1
jeeplus-auth/src/main/java/com/jeeplus/auth/controller/LoginController.java

@@ -47,6 +47,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.time.Duration;
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.UUID;
 
@@ -90,10 +92,17 @@ public class LoginController {
         }
         RedisUtils.getInstance().set(CacheNames.USER_CACHE_LOGIN_CODE + loginUserName , redisLoginNumber);
         //给登录次数记录设置6小时的过期时间
-        RedisUtils.getInstance().expire(CacheNames.USER_CACHE_LOGIN_CODE + loginUserName , 21600);
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime midnight = now.toLocalDate().plusDays(1).atStartOfDay();
+        long secondsUntilMidnight = Duration.between(now, midnight).getSeconds();
+        RedisUtils.getInstance().expire(CacheNames.USER_CACHE_LOGIN_CODE + loginUserName , secondsUntilMidnight);
+
 
         //字典中限制显示次数
         Integer loginNumber = 5;
+        if (redisLoginNumber >= 10){
+            return ResponseEntity.badRequest ( ).body ( ErrorConstants.LOGIN_MAX_COUNT );
+        }
         if(redisLoginNumber > loginNumber){
             if(StringUtils.isNotBlank(code)){
                 if ( !code.equals ( RedisUtils.getInstance ( ).get ( CacheNames.SYS_CACHE_CODE, loginForm.getUuid ( ) ) ) ) {

+ 1 - 0
jeeplus-common/jeeplus-common-core/src/main/java/com/jeeplus/common/constant/ErrorConstants.java

@@ -11,4 +11,5 @@ public interface ErrorConstants {
     String LOGIN_ERROR__KICK_OUT_LOGGED_IN_ELSEWHERE = "您的账号在另一台设备上登录,如非本人操作,请立即修改密码!";
     String LOGIN_ERROR_ERROR_VALIDATE_CODE = "您输入的验证码不正确,请重新输入!";
     String LOGIN_CODE = "请输入验证码进行登录!";
+    String LOGIN_MAX_COUNT = "今天登录次数已达最大,请明天再登录!";
 }

+ 74 - 3
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/register/controller/RegisterController.java

@@ -7,14 +7,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.common.utils.ResponseUtil;
 import com.jeeplus.human.enrollment.enrollmentRegistration.domain.EnrollmentRegistration;
 import com.jeeplus.human.enrollment.enrollmentRegistration.service.EnrollmentRegistrationService;
+import com.jeeplus.human.enrollment.enrollmentRegistration.utils.HunamFreemarkerUtil;
 import com.jeeplus.human.practice.register.domain.Registration;
 import com.jeeplus.human.practice.register.service.RegistrationBankService;
 import com.jeeplus.human.practice.register.service.RegistrationService;
 import com.jeeplus.human.practice.register.service.dto.RegistrationDto;
+import com.jeeplus.human.practice.utils.HumanResponseUtil;
 import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.logging.constant.enums.LogTypeEnum;
-import com.jeeplus.sys.feign.IUserApi;
-import com.jeeplus.sys.service.dto.UserDTO;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -23,8 +26,12 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.File;
+import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author 王强
@@ -99,7 +106,7 @@ public class RegisterController {
     }
 
     /**
-     * 保存实习人员登记信息
+     * 修改实习人员登记信息
      * @param registration
      * @return
      */
@@ -111,6 +118,18 @@ public class RegisterController {
     }
 
     /**
+     * 保存实习人员登记信息
+     * @param registration
+     * @return
+     */
+    @ApiLog(value = "保存实习人员登记信息", type = LogTypeEnum.SAVE)
+    @PostMapping("saveForm")
+    public ResponseEntity saveForm(@Valid @RequestBody Registration registration) throws Exception {
+        service.saveForm(registration);
+        return ResponseEntity.ok("操作成功");
+    }
+
+    /**
      * 查询
      * @param id
      * @return
@@ -173,4 +192,56 @@ public class RegisterController {
         List<EnrollmentRegistration> listInfos = enrollmentRegistrationService.getFormalUserInfo();
         return JSON.toJSONString(listInfos);
     }
+
+    /**
+     * 下载实习用户信息
+     * @param response
+     * @param id
+     */
+    @RequestMapping(value="downloadRegistrationTpl")
+    @ResponseBody
+    public void downloadRegistration(HttpServletResponse response, @RequestParam("id") String id)  {
+        Map data = service.getInfoMap(response, id );
+
+        //模板对象
+        Template template=null;
+        //下载文件地址
+        String filePath = null;
+        if(System.getProperty("os.name").toLowerCase().contains("win")){
+            filePath = this.getClass().getResource("/").getPath()+"/freemarker";
+        }else{
+            filePath = "/mnt/project/cloud/freemarker";
+        }
+        //freemaker模板路径
+        File path = new File(filePath);
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("registration.ftl","UTF-8");
+
+            File docFile = new File("实习登记信息.doc");
+            HunamFreemarkerUtil.generateFile(data,template,docFile);
+            HumanResponseUtil.docResponse("实习登记信息.doc",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                //获取tomcat的路径
+                String tomcatFilePath=System.getProperty("catalina.home");
+                //删除tomcat目录下的处理后的文件信息
+                File tomcatFile = new File(tomcatFilePath+"/bin/"+"实习登记信息.doc");
+                if (tomcatFile.isFile()) {
+                    tomcatFile.delete();
+                }
+            }else{
+                //删除目录下的处理后的文件信息
+                File tomcatFile = new File("/mnt/project/cloud/"+"实习登记信息.doc");
+                if (tomcatFile.isFile()) {
+                    tomcatFile.delete();
+                }
+            }
+        }
+
+    }
 }

+ 323 - 1
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/register/service/RegistrationService.java

@@ -31,6 +31,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -110,11 +111,39 @@ public class RegistrationService extends ServiceImpl<InterRegistrationMapper, Re
             queryWrapper.eq("a.practice_office",projectReportData.getPracticeOffice());
         }
         if (StringUtils.isNotBlank(projectReportData.getMobilePhone())) {
-            queryWrapper.eq("a.mobile_phone",projectReportData.getMobilePhone());
+            queryWrapper.like("a.mobile_phone",projectReportData.getMobilePhone());
         }
         if (StringUtils.isNotBlank(projectReportData.getName())) {
             queryWrapper.like("a.name",projectReportData.getName());
         }
+        //性别
+        if (StringUtils.isNotBlank(projectReportData.getSex())) {
+            queryWrapper.eq("a.sex",projectReportData.getSex());
+        }
+        //身份证号码
+        if (StringUtils.isNotBlank(projectReportData.getIdCard())) {
+            queryWrapper.like("a.id_card",projectReportData.getIdCard());
+        }
+        //毕业院校
+        if (StringUtils.isNotBlank(projectReportData.getGraduatedFrom())) {
+            queryWrapper.like("a.graduated_from",projectReportData.getGraduatedFrom());
+        }
+        //专业
+        if (StringUtils.isNotBlank(projectReportData.getSpeciality())) {
+            queryWrapper.like("a.speciality",projectReportData.getSpeciality());
+        }
+        //qq/微信
+        if (StringUtils.isNotBlank(projectReportData.getQqNum())) {
+            queryWrapper.like("a.qq_num",projectReportData.getQqNum());
+        }
+        //实习单位名称
+        if (StringUtils.isNotBlank(projectReportData.getPracticeUnitName())) {
+            queryWrapper.like("a.practice_unit_name",projectReportData.getPracticeUnitName());
+        }
+        //项目经理
+        if (StringUtils.isNotBlank(projectReportData.getProjectManager())) {
+            queryWrapper.eq("a.project_manager",projectReportData.getProjectManager());
+        }
         IPage<RegistrationDto> list = mapper.findList(page, queryWrapper);
         return list;
 
@@ -473,6 +502,23 @@ public class RegistrationService extends ServiceImpl<InterRegistrationMapper, Re
         return registrations;
     }
 
+
+    /**
+     * 保存实习人员登记信息
+     * @param registration
+     */
+    public void saveForm(Registration registration) throws Exception {
+        if (StringUtils.isNotEmpty(registration.getId())){
+            updateRegistration(registration);
+        }else {
+            addRegistration(registration);
+        }
+    }
+
+    /**
+     * 修改实习人员信息
+     * @param reportData
+     */
     public void updateRegistration(Registration reportData) {
 
         //获取当前登录人信息
@@ -521,4 +567,280 @@ public class RegistrationService extends ServiceImpl<InterRegistrationMapper, Re
         }
         mapper.updateById(report);
     }
+
+    /**
+     * 新增实习人员信息
+     * @param reportData
+     */
+    public void addRegistration(Registration reportData) {
+
+        //获取当前登录人信息
+        UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken ( ));
+
+        Registration report = new Registration();
+        BeanUtils.copyProperties(reportData, report);
+        report.setUpdateById(userDTO.getId());
+        report.setUpdateTime(new Date());
+        report.setCreateById(userDTO.getId());
+        report.setCreateTime(new Date());
+        report.setType("5");
+        String reportId = SnowFlake.getId();
+        report.setId(reportId);
+        //家庭成员信息添加
+        List<RegistrationFamilyMembers> familyMembers = reportData.getFamilyMembers();
+        if (CollectionUtils.isNotEmpty(familyMembers)){
+            familyMembers.forEach(fa->{
+                // 生成id
+                String amountId = SnowFlake.getId();
+                fa.setId(amountId);
+                fa.setCreateById(userDTO.getId());
+                fa.setCreateTime(new Date());
+                fa.setUpdateById(userDTO.getId());
+                fa.setUpdateTime(new Date());
+                fa.setDelFlag(0);
+                fa.setRegistrationId(report.getId());
+
+                familyMembersMapper.insert(fa);
+            });
+        }
+        //实习经历信息
+        List<RegistrationExperience> experiences = reportData.getExperiences();
+        if (CollectionUtils.isNotEmpty(experiences)){
+            experiences.forEach(fa->{
+                // 生成id
+                String amountId = SnowFlake.getId();
+                fa.setId(amountId);
+                fa.setCreateById(userDTO.getId());
+                fa.setCreateTime(new Date());
+                fa.setUpdateById(userDTO.getId());
+                fa.setUpdateTime(new Date());
+                fa.setDelFlag(0);
+                fa.setRegistrationId(report.getId());
+
+                experienceMapper.insert(fa);
+            });
+        }
+        mapper.insert(report);
+    }
+
+    /**
+     * 下载实习登记信息
+     * @param response
+     * @param id
+     * @return
+     */
+    public Map getInfoMap(HttpServletResponse response, String id) {
+        Map data = new HashMap<>();
+
+        Registration registration = mapper.getById(id);
+        if (registration != null){
+            //基本信息
+            if (StringUtils.isNotBlank(registration.getName())){
+                data.put("name",registration.getName());
+            }else {
+                data.put("name","");
+            }
+            if (StringUtils.isNotBlank(registration.getSex())){
+                if (registration.getSex().equals("1")){
+                    data.put("sex","男");
+                }else {
+                    data.put("sex","女");
+                }
+            }else {
+                data.put("sex","");
+            }
+            if (StringUtils.isNotBlank(registration.getIdCard())) {
+                data.put("idCard", registration.getIdCard());
+            } else {
+                data.put("idCard", "");
+            }
+            //出生地
+            if (StringUtils.isNotBlank(registration.getNativePlace())) {
+                data.put("nativePlace", registration.getNativePlace());
+            } else {
+                data.put("nativePlace", "");
+            }
+            //民族
+            if (StringUtils.isNotBlank(registration.getNation())) {
+                data.put("nation", registration.getNation());
+            } else {
+                data.put("nation", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getPoliticalOutlook())) {
+                String dictLabel = SpringUtil.getBean(IDictApi.class).getDictLabel(registration.getPoliticalOutlook(), "political_outlook", "");
+                data.put("politicalOutlook", dictLabel);
+            } else {
+                data.put("politicalOutlook", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getGraduatedFrom())) {
+                data.put("graduatedFrom", registration.getGraduatedFrom());
+            } else {
+                data.put("graduatedFrom", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getSpeciality())) {
+                data.put("speciality", registration.getSpeciality());
+            } else {
+                data.put("speciality", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getMobilePhone())) {
+                data.put("mobilePhone", registration.getMobilePhone());
+            } else {
+                data.put("mobilePhone", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getQqNum())) {
+                data.put("qqNum", registration.getQqNum());
+            } else {
+                data.put("qqNum", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getPracticeStartDay())) {
+                data.put("practiceStartDay", registration.getPracticeStartDay());
+            } else {
+                data.put("practiceStartDay", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getPracticeOffice())) {
+                OfficeDTO officeDTO = SpringUtil.getBean(IOfficeApi.class).getOfficeById(registration.getPracticeOffice());
+                data.put("practiceOffice", officeDTO.getName());
+            } else {
+                data.put("practiceOffice", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getPracticeUnitName())) {
+                data.put("practiceUnitName", registration.getPracticeUnitName());
+            } else {
+                data.put("practiceUnitName", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getProjectManager())) {
+                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getById(registration.getProjectManager());
+                data.put("projectManager", userDTO.getName());
+            } else {
+                data.put("projectManager", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getRemarks())) {
+                int maxLineLength = 42; // 您可以根据需要调整这个值
+                StringBuilder formattedRemarks = new StringBuilder();
+
+                // 遍历每个字符并在需要时添加换行符
+                for (int i = 0; i < registration.getRemarks().length(); i++) {
+                    formattedRemarks.append(registration.getRemarks().charAt(i));
+                    // 在每maxLineLength个字符后添加换行符
+                    if ((i + 1) % maxLineLength == 0) {
+                        formattedRemarks.append("\n");
+                    }
+                }
+
+                data.put("remarks", formattedRemarks.toString());
+            } else {
+                data.put("remarks", "");
+            }
+
+            if (StringUtils.isNotBlank(registration.getPracticeCompleteDay())) {
+                data.put("practiceCompleteDay", registration.getPracticeCompleteDay());
+            } else {
+                data.put("practiceCompleteDay", "");
+            }
+
+            // 实习经历
+            List<RegistrationExperience> experiences = experienceMapper.getByRegisterId(id);
+            if (CollectionUtils.isNotEmpty(experiences)) {
+                if (experiences.size()<2){
+                    for (int i = 0; i < 2; i++) {
+                        RegistrationExperience registrationExperience = new RegistrationExperience();
+                        registrationExperience.setStartTime("");
+                        registrationExperience.setEndTime("");
+                        registrationExperience.setPracticeUnit("");
+                        registrationExperience.setPost("");
+                        experiences.add(registrationExperience);
+                    }
+                }
+                data.put("experiences", experiences);
+            } else {
+                ArrayList<RegistrationExperience> list = new ArrayList<>();
+                for (int i = 0; i < 2; i++) {
+                    RegistrationExperience registrationExperience = new RegistrationExperience();
+                    registrationExperience.setStartTime("");
+                    registrationExperience.setEndTime("");
+                    registrationExperience.setPracticeUnit("");
+                    registrationExperience.setPost("");
+                    list.add(registrationExperience);
+                }
+                data.put("experiences",list);
+            }
+
+            // 家庭成员
+            List<RegistrationFamilyMembers> familyMembers = familyMembersMapper.getByRegisterId(id);
+            if (CollectionUtils.isNotEmpty(familyMembers)) {
+                if (familyMembers.size()<2){
+                    RegistrationFamilyMembers members = new RegistrationFamilyMembers();
+                    members.setCallName("");
+                    members.setName("");
+                    members.setPhone("");
+                    members.setWorkUnit("");
+                    familyMembers.add(members);
+                }
+                data.put("familyMembers", familyMembers);
+            } else {
+                ArrayList<RegistrationFamilyMembers> list = new ArrayList<>();
+                for (int i = 0; i < 2; i++) {
+                    RegistrationFamilyMembers members = new RegistrationFamilyMembers();
+                    members.setCallName("");
+                    members.setName("");
+                    members.setPhone("");
+                    members.setWorkUnit("");
+                    list.add(members);
+                }
+                data.put("familyMembers",list );
+            }
+
+        }else {
+            data.put("name","");
+            data.put("sex","");
+            data.put("idCard", "");
+            data.put("nativePlace", "");
+            data.put("nation", "");
+            data.put("politicalOutlook", "");
+            data.put("graduatedFrom", "");
+            data.put("speciality", "");
+            data.put("mobilePhone", "");
+            data.put("qqNum", "");
+            data.put("practiceStartDay", "");
+            data.put("practiceOffice", "");
+            data.put("practiceUnitName", "");
+            data.put("remarks", "");
+            data.put("projectManager", "");
+            data.put("practiceCompleteDay", "");
+            ArrayList<RegistrationExperience> list = new ArrayList<>();
+            for (int i = 0; i < 2; i++) {
+                RegistrationExperience registrationExperience = new RegistrationExperience();
+                registrationExperience.setStartTime("");
+                registrationExperience.setEndTime("");
+                registrationExperience.setPracticeUnit("");
+                registrationExperience.setPost("");
+                list.add(registrationExperience);
+            }
+            data.put("experiences",list);
+
+            ArrayList<RegistrationFamilyMembers> list1 = new ArrayList<>();
+            for (int i = 0; i < 2; i++) {
+                RegistrationFamilyMembers members = new RegistrationFamilyMembers();
+                members.setCallName("");
+                members.setName("");
+                members.setPhone("");
+                members.setWorkUnit("");
+                list1.add(members);
+            }
+            data.put("familyMembers",list1 );
+        }
+
+
+        return data;
+    }
 }

+ 61 - 0
jeeplus-modules/jeeplus-human/src/main/java/com/jeeplus/human/practice/utils/HumanResponseUtil.java

@@ -0,0 +1,61 @@
+package com.jeeplus.human.practice.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Calendar;
+
+public class HumanResponseUtil {
+    private static Logger logger = LoggerFactory.getLogger(HumanResponseUtil.class);
+
+    public static void docResponse(String fileName, File file, HttpServletResponse response) {
+        ServletOutputStream out = null;
+        FileInputStream fin = null;
+        try {
+            fin = new FileInputStream(file);
+            response.setCharacterEncoding("utf-8");
+            response.setContentType("application/octet-stream; charset=UTF-8");
+            // 设置浏览器以下载的方式处理该文件名
+            response.setHeader("Content-Disposition", "attachment;filename="
+                    .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
+            out = response.getOutputStream();
+            byte[] buffer = new byte[1024];  // 缓冲区
+            int bytesToRead = -1;
+            // 通过循环将读入的Word文件的内容输出到浏览器中
+            while ((bytesToRead = fin.read(buffer)) != -1) {
+                out.write(buffer, 0, bytesToRead);
+            }
+        } catch (Exception e) {
+            logger.error("导出模板文件发生错误!",e);
+        } finally {
+            try {
+                out.flush();
+                if (fin != null) fin.close();
+                if (out != null) out.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+    }
+
+
+    /**
+     * 获取当前时间年月日
+     * @return
+     */
+    public static String datePath(){
+        Calendar date = Calendar.getInstance();
+        String year = String.valueOf(date.get(Calendar.YEAR));
+        String month = String.valueOf(date.get(Calendar.MONTH)+1);
+        String day = String.valueOf(date.get(Calendar.DAY_OF_MONTH));
+        String path = "/"+year+"/"+month+"/"+day;
+        return path;
+    }
+}

File diff suppressed because it is too large
+ 2937 - 0
jeeplus-modules/jeeplus-human/src/main/resources/freemarker/registration.ftl


+ 29 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/UserController.java

@@ -855,6 +855,35 @@ public class UserController {
                 User user = new User ( userDTO.getId ( ) );
                 user.setPassword ( SecurityUtils.encryptPassword ( newPassword ) );
                 user.setUpPassword("1");
+                user.setUpdatePasswordDate(new Date());
+                userService.updateById ( user );
+                UserUtils.deleteCache ( userDTO );
+                return ResponseEntity.ok ( "修改密码成功!" );
+            } else {
+                return ResponseEntity.badRequest ( ).body ( "修改密码失败,旧密码错误!" );
+            }
+        }
+        return ResponseEntity.badRequest ( ).body ( "参数错误!" );
+    }
+
+    /**
+     * 修改密码(超过90天未修改密码)
+     *
+     * @param oldPassword
+     * @param newPassword
+     * @return
+     */
+    @DemoMode
+    @ApiLog("修改密码(超过90天未修改密码)")
+    @PostMapping("/saveExceedPwd")
+    public ResponseEntity saveExceedPwd(String oldPassword, String newPassword) {
+        UserDTO userDTO = UserUtils.getCurrentUserDTO ( );
+        if ( StrUtil.isNotBlank ( oldPassword ) && StrUtil.isNotBlank ( newPassword ) ) {
+            if ( SecurityUtils.validatePassword ( oldPassword, userDTO.getPassword ( ) ) ) {
+                User user = new User ( userDTO.getId ( ) );
+                user.setPassword ( SecurityUtils.encryptPassword ( newPassword ) );
+                user.setUpPassword("1");
+                user.setUpdatePasswordDate(new Date());
                 userService.updateById ( user );
                 UserUtils.deleteCache ( userDTO );
                 return ResponseEntity.ok ( "修改密码成功!" );

+ 10 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/feign/UserApiImpl.java

@@ -276,4 +276,14 @@ public class UserApiImpl implements IUserApi {
         return userService.hasUser();
     }
 
+    @Override
+    public List <UserDTO> getAllUserInfoNoTenId() {
+        return userService.getAllUserInfoNoTenId();
+    }
+
+    @Override
+    public void updateUserById(UserDTO dto) {
+        userService.updateUserById(dto);
+    }
+
 }

+ 11 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/UserMapper.java

@@ -236,6 +236,13 @@ public interface UserMapper extends BaseMapper <User> {
     String isUpdatePassword(String userId);
 
     /**
+     * 判断当前用户是否超过90天未修改过密码
+     * @param userId
+     * @return
+     */
+    String isExceedNoUpdatePassword(String userId);
+
+    /**
      * 获取所有的用户信息
      * @return
      */
@@ -279,4 +286,8 @@ public interface UserMapper extends BaseMapper <User> {
     void deleteByUserId(@Param("id") String userId);
 
     void insertUserManageOffice(@Param("userId") String userId,@Param("officeId") String officeId);
+    @InterceptorIgnore(tenantLine = "true")
+    List<UserDTO> getAllUserInfoNoTenId();
+    @InterceptorIgnore(tenantLine = "true")
+    void updateUserById(UserDTO dto);
 }

+ 13 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml

@@ -639,5 +639,18 @@ select a.id, a.company_id as "companyDTO.id", a.office_id as "officeDTO.id", a.l
         INSERT INTO sys_user_manage_office(user_id, office_id)
         VALUES (#{userId}, #{officeId})
     </insert>
+    <select id="getAllUserInfoNoTenId" resultType="com.jeeplus.sys.service.dto.UserDTO">
+        select distinct id,name,up_password,update_password_date from sys_user where del_flag = '0'
+    </select>
 
+    <update id="updateUserById">
+        update sys_user set
+        <if test="upPassword != null and upPassword != ''">
+            up_password = #{upPassword}
+        </if>
+        <if test="updatePasswordDate != null ">
+            update_password_date = #{updatePasswordDate}
+        </if>
+        where id =#{id} and del_flag = '0'
+    </update>
 </mapper>

+ 17 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/UserService.java

@@ -735,4 +735,21 @@ public class UserService extends ServiceImpl <UserMapper, User> {
     public UserDTO getByLoginNameNoTen(String loginName) {
         return userMapper.getByLoginNameNoTen(loginName);
     }
+
+    /**
+     * 获取所有的用户信息
+     * @return
+     */
+    public List<UserDTO> getAllUserInfoNoTenId() {
+        List<UserDTO> allUserInfo = userMapper.getAllUserInfoNoTenId();
+        return allUserInfo;
+    }
+
+    /**
+     * 修改用户信息
+     * @param dto
+     */
+    public void updateUserById(UserDTO dto) {
+        userMapper.updateUserById(dto);
+    }
 }

+ 40 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

@@ -20,6 +20,7 @@ import com.xxl.job.executor.feign.AssessFeignApi;
 import com.xxl.job.executor.feign.FinanceFeignApi;
 import com.xxl.job.executor.feign.HumanFeignApi;
 import com.xxl.job.executor.feign.UserFeignApi;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -931,4 +932,43 @@ public class SampleXxlJob {
     }
 
 
+    /**
+     * 用户是否超过90天未修改密码
+     */
+    @XxlJob("exceedUpPassword")
+    public void exceedUpPassword(){
+        //获取所有的用户信息
+        List<UserDTO> allUserInfoNoTenId = SpringUtil.getBean(IUserApi.class).getAllUserInfoNoTenId();
+        //将超过90天还未修改密码的用户提示修改密码
+        for (UserDTO userDTO : allUserInfoNoTenId) {
+            UserDTO dto = new UserDTO();
+            dto.setId(userDTO.getId());
+
+            //upPassword为1,判断修改密码时间是否存在,存在则判断是否大于90天,不存在则生成修改密码时间,upPassword为0,则生成修改密码时间
+            if (StringUtils.isNotBlank(userDTO.getUpPassword())){
+                if (userDTO.getUpPassword().equals("1")){
+                    if (ObjectUtils.isNotEmpty(userDTO.getUpdatePasswordDate())) {
+                        int interval = Integer.parseInt(this.getInterval(userDTO.getUpdatePasswordDate(), new Date()));
+                        if (interval >= 90){
+                            dto.setUpPassword("0");
+                            SpringUtil.getBean(IUserApi.class).updateUserById(dto);
+                        }
+                    }else {
+                        dto.setUpdatePasswordDate(new Date());
+                        SpringUtil.getBean(IUserApi.class).updateUserById(dto);
+                    }
+                }else {
+
+                    if (ObjectUtils.isEmpty(userDTO.getUpdatePasswordDate())){
+                        dto.setUpdatePasswordDate(new Date());
+                        SpringUtil.getBean(IUserApi.class).updateUserById(dto);
+                    }
+                }
+            }
+
+
+        }
+    }
+
+
 }