From 19f40c8e0649ae81b3f0183a6f4c8aa6c3db39bc Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Thu, 18 Nov 2021 17:54:37 +0800
Subject: [PATCH] 证书打印信息导出修改,已过考试的,系统每天凌晨1点定时清理,标记为缺考,并生成缺考记录,保安员导入新增年龄判断,超过60岁的不能导入

---
 src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsService.java                 |   14 +
 src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java |   52 +++-
 src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java                 |    9 
 src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml             |   13 +
 src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml                  |   39 +++
 src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsServiceImpl.java             |   18 +
 src/main/java/org/springblade/modules/crontab/Crontab.java                                            |   30 ++
 src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.xml                    |    5 
 src/main/java/org/springblade/modules/absentrecords/vo/AbsentRecordsVo.java                           |   17 +
 src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java    |   12 
 src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java      |   66 ++++++
 src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java            |   14 +
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java                        |  155 +++++++------
 src/main/java/org/springblade/modules/absentrecords/controller/AbsentRecordsController.java           |   86 +++++++
 src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.java                   |   19 +
 src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java               |    5 
 src/main/java/org/springblade/modules/absentrecords/entity/AbsentRecords.java                         |   63 +++++
 17 files changed, 529 insertions(+), 88 deletions(-)

diff --git a/src/main/java/org/springblade/modules/absentrecords/controller/AbsentRecordsController.java b/src/main/java/org/springblade/modules/absentrecords/controller/AbsentRecordsController.java
new file mode 100644
index 0000000..f7a026e
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/controller/AbsentRecordsController.java
@@ -0,0 +1,86 @@
+package org.springblade.modules.absentrecords.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+import org.springblade.modules.absentrecords.service.AbsentRecordsService;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhongrj
+ * @time 2021-11-18
+ * @desc 缺考记录控制层
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/absentRecords")
+public class AbsentRecordsController {
+
+	private final AbsentRecordsService absentRecordsService;
+
+
+//	/**
+//	 * 自定义分页
+//	 * @param query page,size
+//	 * @param absentRecords 缺考记录信息对象
+//	 */
+//	@GetMapping("/page")
+//	public R<IPage<AbsentRecordsVo>> page(AbsentRecordsVo absentRecords, Query query) {
+//		IPage<AbsentRecordsVo> pages = absentRecordsService.selectAbsentRecordsPage(Condition.getPage(query), absentRecords);
+//		return R.data(pages);
+//	}
+
+	/**
+	 * 新增
+	 * @param absentRecords 缺考记录信息对象
+	 */
+	@PostMapping("/save")
+	@ApiOperation(value = "新增", notes = "传入absentRecords")
+	public R save(@RequestBody AbsentRecords absentRecords){
+		return R.data(absentRecordsService.save(absentRecords));
+	}
+
+
+	/**
+	 * 修改
+	 * @param absentRecords 缺考记录信息对象
+	 */
+	@PostMapping("/update")
+	public R update(@RequestBody AbsentRecords absentRecords){
+		return R.status(absentRecordsService.updateById(absentRecords));
+	}
+
+	/**
+	 * 新增或修改
+	 * @param absentRecords 缺考记录信息对象
+	 */
+	@PostMapping("/submit")
+	public R submit(@RequestBody AbsentRecords absentRecords){
+		return R.data(absentRecordsService.saveOrUpdate(absentRecords));
+	}
+
+	/**
+	 * 删除
+	 * @param ids 缺考记录信息ids 数组
+	 */
+	@PostMapping("/remove")
+	public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) {
+		return R.status(absentRecordsService.removeByIds(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 详情
+	 * @param absentRecords 缺考记录信息对象
+	 */
+	@GetMapping("/detail")
+	@ApiOperation(value = "详情", notes = "传入absentRecords")
+	public R<AbsentRecords> detail(AbsentRecords absentRecords) {
+		AbsentRecords detail = absentRecordsService.getOne(Condition.getQueryWrapper(absentRecords));
+		return R.data(detail);
+	}
+
+}
diff --git a/src/main/java/org/springblade/modules/absentrecords/entity/AbsentRecords.java b/src/main/java/org/springblade/modules/absentrecords/entity/AbsentRecords.java
new file mode 100644
index 0000000..e75bc75
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/entity/AbsentRecords.java
@@ -0,0 +1,63 @@
+package org.springblade.modules.absentrecords.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 缺考记录实体类
+ * @author zhongrj
+ * @time 2021-11-18
+ */
+@Data
+@TableName("sys_absent_records")
+public class AbsentRecords implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 制证记录主键id,非自增
+	 */
+	@TableId(value = "id",type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 缺考人 user_id
+	 */
+	@TableField("user_id")
+	private Long userId;
+
+
+	/**
+	 * 申请时间
+	 */
+	@TableField("create_time")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+
+	/**
+	 * 考试id
+	 */
+	@TableField("exam_id")
+	private Long examId;
+
+	/**
+	 * 报名id
+	 */
+	@TableField("apply_id")
+	private Long applyId;
+
+	/**
+	 * 考生准考证号
+	 */
+	@TableField("candidate_no")
+	private String candidateNo;
+}
diff --git a/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.java b/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.java
new file mode 100644
index 0000000..6beae14
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.java
@@ -0,0 +1,19 @@
+package org.springblade.modules.absentrecords.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+import org.springblade.modules.accreditation.entity.AccreditationRecords;
+import org.springblade.modules.accreditation.excel.ExportSecurityBookPaperExcel;
+import org.springblade.modules.accreditation.vo.AccreditationRecordsVo;
+
+import java.util.List;
+
+/**
+ * 缺考记录Mapper 接口
+ * @author zhongrj
+ */
+public interface AbsentRecordsMapper extends BaseMapper<AbsentRecords> {
+
+}
diff --git a/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.xml b/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.xml
new file mode 100644
index 0000000..fda708c
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/mapper/AbsentRecordsMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.absentrecords.mapper.AbsentRecordsMapper">
+
+</mapper>
diff --git a/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsService.java b/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsService.java
new file mode 100644
index 0000000..645571d
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsService.java
@@ -0,0 +1,14 @@
+package org.springblade.modules.absentrecords.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+
+import java.util.List;
+
+/**
+ * 制证记录服务类
+ * @author zhongrj
+ */
+public interface AbsentRecordsService extends IService<AbsentRecords> {
+
+}
diff --git a/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsServiceImpl.java b/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsServiceImpl.java
new file mode 100644
index 0000000..a63d899
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/service/AbsentRecordsServiceImpl.java
@@ -0,0 +1,18 @@
+
+package org.springblade.modules.absentrecords.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+import org.springblade.modules.absentrecords.mapper.AbsentRecordsMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * 缺考记录服务实现类
+ * @author zhongrj
+ */
+@Service
+@AllArgsConstructor
+public class AbsentRecordsServiceImpl extends ServiceImpl<AbsentRecordsMapper, AbsentRecords> implements AbsentRecordsService {
+
+}
diff --git a/src/main/java/org/springblade/modules/absentrecords/vo/AbsentRecordsVo.java b/src/main/java/org/springblade/modules/absentrecords/vo/AbsentRecordsVo.java
new file mode 100644
index 0000000..805687e
--- /dev/null
+++ b/src/main/java/org/springblade/modules/absentrecords/vo/AbsentRecordsVo.java
@@ -0,0 +1,17 @@
+package org.springblade.modules.absentrecords.vo;
+
+import lombok.Data;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+import org.springblade.modules.accreditation.entity.AccreditationRecords;
+
+import java.io.Serializable;
+
+/**
+ * 缺考记录vo
+ * @author zhongrj
+ * @since 2021-11-18
+ */
+@Data
+public class AbsentRecordsVo extends AbsentRecords implements Serializable {
+
+}
diff --git a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
index 4e72d3a..811945a 100644
--- a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
+++ b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
@@ -367,9 +367,9 @@
 									0, // y缩放
 									1023, //最大1023
 									255, //最大255
-									(short) i,  //宽度占几格 0开始
+									(short) i,  //宽度 0开始
 									0, //在第几行
-									(short) i, //宽度占几格 0开始
+									(short) i, //宽度 0开始
 									0 //第几列
 								);
 						//插入图片
@@ -397,14 +397,16 @@
 			}
 			//判断余下的
 			if (excelList.size()>0){
-				rowNum++;
+				rowNum = rowNum + 2;
 				//写入表格
 				writeBookForEach(excelList,rowNum,workBook,sheet,patriarch);
 			}
 		}
 		//导出数据
-		response.setContentType("application/vnd.ms-excel; charset=UTF-8");
-		response.setHeader("Content-Disposition", "attachment;filename=" + "证书打印信息导出"+DateUtil.time() + ".xlsx");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
+		String fileName = URLEncoder.encode("证书打印信息导出"+ DateUtil.time(), Charsets.UTF_8.name());
+		response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
 		workBook.write(response.getOutputStream());
 	}
 
diff --git a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
index 789d5df..12ced06 100644
--- a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
+++ b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
@@ -53,4 +53,18 @@
 	 * 导出证书制证信息(包含照片)
 	 */
 	List<AccreditationRecordsVo> exportSecurityBookPapers(@Param("accreditationRecords") AccreditationRecordsVo accreditationRecords);
+
+	/**
+	 * 根据用户 id 查询上岗证申请记录
+	 * @param id 用户id
+	 * @return
+	 */
+	int getAccreditationRecordsByUserIdCount(@Param("userId") String id);
+
+	/**
+	 * 根据用户 id 查询当前人员是否有待审核和审核通过的记录数
+	 * @param id 用户id
+	 * @return
+	 */
+	int getAccreditationRecordsByUserIdAuditCount(@Param("userId") String id);
 }
diff --git a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
index 317e9c1..1400c89 100644
--- a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
+++ b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
@@ -45,8 +45,6 @@
         sj.id = si.jurisdiction
         WHERE
             1=1
-        and bu.status = 1
-        and bu.is_deleted = 0
         <if test="accreditationRecords.deptName!=null and  accreditationRecords.deptName!=''">
             and bt.dept_name like concat('%', #{accreditationRecords.deptName},'%')
         </if>
@@ -403,4 +401,15 @@
             and sar.create_time &lt;= #{accreditationRecords.endTime}
         </if>
     </select>
+
+    <!--根据用户 id 查询上岗证申请记录-->
+    <select id="getAccreditationRecordsByUserIdCount" resultType="java.lang.Integer">
+        select count(*) from sys_accreditation_records where user_id = #{userId} and type = 1
+    </select>
+
+
+    <!--根据用户 id 查询当前人员是否有待审核和审核通过的记录数-->
+    <select id="getAccreditationRecordsByUserIdAuditCount" resultType="java.lang.Integer">
+        select count(*) from sys_accreditation_records where (audit_status = 1 or audit_status = 3) and user_id = #{userId} and type = 2
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java b/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
index 3d19de5..97f5bcb 100644
--- a/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
+++ b/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
@@ -61,19 +61,47 @@
 			records.setAuditStatus(1);
 			records.setType(accreditationRecords.getType());
 			records.setUserId(Long.parseLong(id));
-			//新增
-			this.save(records);
+			//判断类型,如果是上岗证则判断是否有申请,有申请的不在新增记录
+			if (accreditationRecords.getType()==1){
+				//查询当前人员是否有申请记录
+				int count  = baseMapper.getAccreditationRecordsByUserIdCount(id);
+				if (count<1){
+					//新增
+					this.save(records);
 
-			//内网新增
-			String s = "insert into sys_accreditation_records(id,user_id,create_time,create_user,status,type,audit_status) " +
-				"values(" + "'" + records.getId() + "'" + ","
-				+ "'" + records.getUserId() + "'" + ","
-				+ "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(records.getCreateTime()) + "'" + ","
-				+ "'" + records.getCreateUser() +"'" + ","
-				+ "'" + records.getStatus() +"'" + ","
-				+ "'" + records.getType() +"'" + ","
-				+"'" + records.getAuditStatus() + "'" + ")";
-			FtpUtil.sqlFileUpload(s);
+					//内网新增
+					String s = "insert into sys_accreditation_records(id,user_id,create_time,create_user,status,type,audit_status) " +
+						"values(" + "'" + records.getId() + "'" + ","
+						+ "'" + records.getUserId() + "'" + ","
+						+ "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(records.getCreateTime()) + "'" + ","
+						+ "'" + records.getCreateUser() +"'" + ","
+						+ "'" + records.getStatus() +"'" + ","
+						+ "'" + records.getType() +"'" + ","
+						+"'" + records.getAuditStatus() + "'" + ")";
+					FtpUtil.sqlFileUpload(s);
+				}
+			}
+			//判断类型,如果是证书的,审核未通过的可以再次申请,审核通过的,暂时不给于新增记录
+			if (accreditationRecords.getType()==2){
+				//查询当前人员是否有待审核和审核通过的记录数
+				int count  = baseMapper.getAccreditationRecordsByUserIdAuditCount(id);
+				if (count<1){
+					//新增
+					this.save(records);
+
+					//内网新增
+					String s = "insert into sys_accreditation_records(id,user_id,create_time,create_user,status,type,audit_status) " +
+						"values(" + "'" + records.getId() + "'" + ","
+						+ "'" + records.getUserId() + "'" + ","
+						+ "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(records.getCreateTime()) + "'" + ","
+						+ "'" + records.getCreateUser() +"'" + ","
+						+ "'" + records.getStatus() +"'" + ","
+						+ "'" + records.getType() +"'" + ","
+						+"'" + records.getAuditStatus() + "'" + ")";
+					FtpUtil.sqlFileUpload(s);
+				}
+			}
+
 		});
 		return true;
 	}
diff --git a/src/main/java/org/springblade/modules/crontab/Crontab.java b/src/main/java/org/springblade/modules/crontab/Crontab.java
new file mode 100644
index 0000000..93be67f
--- /dev/null
+++ b/src/main/java/org/springblade/modules/crontab/Crontab.java
@@ -0,0 +1,30 @@
+package org.springblade.modules.crontab;
+
+import org.springblade.modules.training.entity.TrainingRegistration;
+import org.springblade.modules.training.service.TrainingRegistrationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 定时任务
+ * @author zhongrj
+ * @since 2021-11-18
+ */
+@Component
+public class Crontab {
+
+	@Autowired
+	private TrainingRegistrationService trainingRegistrationService;
+
+	/**
+	 * 定时任务,每天凌晨1点执行一次,
+	 * 自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名
+	 */
+	@Scheduled(cron = "* * 1 * * ?")
+//	@Scheduled(cron = "*/30 * * * * ?")
+	public void examApplyStatus(){
+		//自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名
+		trainingRegistrationService.examApplyStatus();
+	}
+}
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index c62718f..0653222 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -804,12 +804,13 @@
 	public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
 		//将不能导入的保安员账号存起来
 		List<String> errorList = new ArrayList<>();
-		//将需要新增的保安员信息存入集合
-		List<User> insertList = new ArrayList<>();
+		//年龄不符的保安员信息存入集合
+		List<String> ageErrorList = new ArrayList<>();
 		//将需要更新的保安员信息存入集合
 		List<User> updateList = new ArrayList<>();
 		//导入状态,默认为true ,如果有一个出现问题则为 false
 		AtomicBoolean status = new AtomicBoolean(true);
+		AtomicBoolean agetStatus = new AtomicBoolean(true);
 		data.forEach(userExcel -> {
 			User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
 			//设置部门id
@@ -847,37 +848,39 @@
 						user.setHold("2");
 					}
 				}
-				//分配保安角色
-				Role role = new Role();
-				role.setRoleAlias("保安");
-				Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
-				user.setRoleId(oneRole.getId().toString());
+				//判断年龄,超过60岁的不入
+				if (AgeUtil.idCardToAge(user.getCardid())<60) {
+					//分配保安角色
+					Role role = new Role();
+					role.setRoleAlias("保安");
+					Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
+					user.setRoleId(oneRole.getId().toString());
 
-				//性别
-				if (null != userExcel.getSex()) {
-					if (userExcel.getSex().equals("男")) {
-						user.setSex(1);
+					//性别
+					if (null != userExcel.getSex()) {
+						if (userExcel.getSex().equals("男")) {
+							user.setSex(1);
+						}
+						if (userExcel.getSex().equals("女")) {
+							user.setSex(2);
+						}
 					}
-					if (userExcel.getSex().equals("女")) {
-						user.setSex(2);
-					}
-				}
 
-				//设置账号
-				user.setAccount(user.getCardid());
-				//获取默认密码配置
-				user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
-				//加密
-				if (Func.isNotEmpty(user.getPassword())) {
-					user.setPassword(DigestUtil.encrypt(user.getPassword()));
-				}
-				Integer userCount = baseMapper.selectCountAccount(user.getAccount());
-				if (userCount > 0 && Func.isEmpty(user.getId())) {
-					throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
-				}
-				//新增
-				this.save(user);
-				//内网同步
+					//设置账号
+					user.setAccount(user.getCardid());
+					//获取默认密码配置
+					user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
+					//加密
+					if (Func.isNotEmpty(user.getPassword())) {
+						user.setPassword(DigestUtil.encrypt(user.getPassword()));
+					}
+					Integer userCount = baseMapper.selectCountAccount(user.getAccount());
+					if (userCount > 0 && Func.isEmpty(user.getId())) {
+						throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
+					}
+					//新增
+					this.save(user);
+					//内网同步
 //				String s = "insert into blade_user(" +
 //					"id,tenant_id,account,password,real_name,phone,sex,role_id,dept_id," +
 //					"cardid,nation,registered,securitynumber,hold,status,is_deleted) " +
@@ -898,41 +901,45 @@
 //					"," + "'" + user.getStatus() + "'" +
 //					"," + "'" + user.getIsDeleted() + "'"
 //					+ ")";
-				String s = "insert into blade_user(" +
-					"id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," +
-					"role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," +
-					"politicaloutlook,healstats,height,address,registered," +
-					"securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch) " +
-					"values(" + "'" + user.getId() + "'" +
-					"," + "'" + user.getTenantId() + "'" +
-					"," + "'" + user.getAccount() + "'" +
-					"," + "'" + user.getPassword() + "'" +
-					"," + "'" + user.getName() + "'" +
-					"," + "'" + user.getRealName() + "'" +
-					"," + "'" + user.getAvatar() + "'" +
-					"," + "'" + user.getEmail() + "'" +
-					"," + "'" + user.getPhone() + "'" +
-					"," + "'" + user.getSex() + "'" +
-					"," + "'" + user.getRoleId() + "'" +
-					"," + "'" + user.getDeptId() + "'" +
-					"," + "'" + user.getCardid() + "'" +
-					"," + "'" + user.getNativeplace() + "'" +
-					"," + "'" + user.getNation() + "'" +
-					"," + "'" + user.getFingerprint() + "'" +
-					"," + "'" + user.getEducation() + "'" +
-					"," + "'" + user.getPoliticaloutlook() + "'" +
-					"," + "'" + user.getHealstats() + "'"+
-					"," + "'" + user.getHeight() + "'" +
-					"," + "'" + user.getAddress() + "'" +
-					"," + "'" + user.getRegistered() + "'" +
-					"," + "'" + user.getSecuritynumber() + "'" +
-					"," + "'" + user.getHold() + "'" +
-					"," + "'" + user.getJurisdiction() + "'" +
-					"," + "'" + user.getExaminationType() + "'" +
-					"," + "'" + user.getStatus() + "'" +
-					"," + "'" + user.getIsDeleted() + "'" +
-					"," + "'" + user.getDispatch() + "'" + ")";
-				FtpUtil.sqlFileUpload(s);
+					String s = "insert into blade_user(" +
+						"id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," +
+						"role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," +
+						"politicaloutlook,healstats,height,address,registered," +
+						"securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch) " +
+						"values(" + "'" + user.getId() + "'" +
+						"," + "'" + user.getTenantId() + "'" +
+						"," + "'" + user.getAccount() + "'" +
+						"," + "'" + user.getPassword() + "'" +
+						"," + "'" + user.getName() + "'" +
+						"," + "'" + user.getRealName() + "'" +
+						"," + "'" + user.getAvatar() + "'" +
+						"," + "'" + user.getEmail() + "'" +
+						"," + "'" + user.getPhone() + "'" +
+						"," + "'" + user.getSex() + "'" +
+						"," + "'" + user.getRoleId() + "'" +
+						"," + "'" + user.getDeptId() + "'" +
+						"," + "'" + user.getCardid() + "'" +
+						"," + "'" + user.getNativeplace() + "'" +
+						"," + "'" + user.getNation() + "'" +
+						"," + "'" + user.getFingerprint() + "'" +
+						"," + "'" + user.getEducation() + "'" +
+						"," + "'" + user.getPoliticaloutlook() + "'" +
+						"," + "'" + user.getHealstats() + "'" +
+						"," + "'" + user.getHeight() + "'" +
+						"," + "'" + user.getAddress() + "'" +
+						"," + "'" + user.getRegistered() + "'" +
+						"," + "'" + user.getSecuritynumber() + "'" +
+						"," + "'" + user.getHold() + "'" +
+						"," + "'" + user.getJurisdiction() + "'" +
+						"," + "'" + user.getExaminationType() + "'" +
+						"," + "'" + user.getStatus() + "'" +
+						"," + "'" + user.getIsDeleted() + "'" +
+						"," + "'" + user.getDispatch() + "'" + ")";
+					FtpUtil.sqlFileUpload(s);
+				}else {
+					agetStatus.set(false);
+					ageErrorList.add(user.getCardid());
+				}
 			}else {
 				//匹配组织机构是否一致,如果不一致
 				if(!user2.getDeptId().equals(user.getDeptId())){
@@ -972,9 +979,21 @@
 			}
 		});
 		//如果所有数据导入有一个异常
-		if (!status.get()){
-			String errorAccount = StringUtils.join(errorList, "\\\n");
-			throw new ServiceException("用户:["+errorAccount+"]导入失败!已在其他单位存在!");
+		if (!status.get() || !agetStatus.get()){
+			if (!status.get() && agetStatus.get()) {
+				String errorAccount = StringUtils.join(errorList, "\\\n");
+				throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
+			}
+			if (!agetStatus.get() && status.get()) {
+				String errorAccount = StringUtils.join(ageErrorList, "\\\n");
+				throw new ServiceException("用户:[" + errorAccount + "]导入失败!年龄不符!");
+			}
+			if (!status.get() && !agetStatus.get()) {
+				String errorAccount = StringUtils.join(errorList, "\\\n");
+				String errorAgeAccount = StringUtils.join(ageErrorList, "\\\n");
+				throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"+
+					"用户:[" + errorAgeAccount + "]导入失败!年龄不符!");
+			}
 		}
 	}
 
diff --git a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
index ed025b1..1987728 100644
--- a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
+++ b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
 import org.springblade.modules.apply.excel.ApplyInfoExcel;
 import org.springblade.modules.training.entity.TrainingRegistration;
 import org.springblade.modules.training.vo.TrainingRegistrationVo;
@@ -58,4 +59,12 @@
 	 * @return
 	 */
     List<TrainingRegistration> getTrainIds(@Param("trainingRegistration") TrainingRegistrationVo trainingRegistration);
+
+	/**
+	 * 查询考试申请审核通过,已报名,未考试的人员
+	 * @param trainingRegistration
+	 * @return
+	 */
+	List<TrainingRegistration> selectTrainingRegistrationList(@Param("trainingRegistration") TrainingRegistration trainingRegistration);
+
 }
diff --git a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
index 4a6d3a7..fde6c9d 100644
--- a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
+++ b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
@@ -34,7 +34,7 @@
             1=1
         and bu.status = 1
         and bu.is_deleted = 0
-        <if test="trainingRegistration.isExam!=null">
+        <if test="trainingRegistration.isExam!=null and trainingRegistration.isExam!=0">
             and is_exam = #{trainingRegistration.isExam}
         </if>
         <if test="trainingRegistration.trainingUnitId!=null and  trainingRegistration.trainingUnitId!=''">
@@ -209,4 +209,41 @@
         </if>
         limit #{trainingRegistration.serialStart},#{trainingRegistration.serialEnd}
     </select>
+
+    <!--报名培训分页信息-->
+    <select id="selectTrainingRegistrationList" resultType="org.springblade.modules.training.entity.TrainingRegistration">
+        SELECT
+        sr.*
+        FROM
+        sys_training_registration sr
+        LEFT JOIN
+        blade_dept bt0
+        ON
+        sr.training_unit_id = bt0.id
+        left join
+        blade_user bu
+        on
+        sr.user_id = bu.id
+        LEFT JOIN
+        blade_dept bt
+        ON
+        bu.dept_id = bt.id
+        left join
+        ksxt_exam ke
+        on
+        ke.id = sr.train_exam_id
+        WHERE
+        1=1
+        and bu.status = 1
+        and bu.is_deleted = 0
+        <if test="trainingRegistration.isExam!=null">
+            and is_exam = #{trainingRegistration.isExam}
+        </if>
+        <if test="trainingRegistration.auditStatus!=null and trainingRegistration.auditStatus!=0">
+            and sr.audit_status = #{trainingRegistration.auditStatus}
+        </if>
+        <if test="trainingRegistration.cancel!=null">
+            and sr.cancel = #{trainingRegistration.cancel}
+        </if>
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java b/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
index 4c9b723..ab7ba17 100644
--- a/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
+++ b/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
@@ -62,4 +62,9 @@
 	 * @return
 	 */
     List<TrainingRegistration> getTrainIds(TrainingRegistrationVo trainingRegistrationVo);
+
+	/**
+	 * 自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名
+	 */
+	void examApplyStatus();
 }
diff --git a/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java b/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
index 7634a6a..a113f9f 100644
--- a/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
+++ b/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
@@ -9,6 +9,8 @@
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.tool.api.R;
 import org.springblade.modules.FTP.FtpUtil;
+import org.springblade.modules.absentrecords.entity.AbsentRecords;
+import org.springblade.modules.absentrecords.service.AbsentRecordsService;
 import org.springblade.modules.apply.entity.Apply;
 import org.springblade.modules.apply.excel.ApplyInfoExcel;
 import org.springblade.modules.exam.entity.ExamPaper;
@@ -45,6 +47,8 @@
 	private final IUserDeptService userDeptService;
 
 	private final ExamPaperService examPaperService;
+
+	private final AbsentRecordsService absentRecordsService;
 
 
 	@Override
@@ -313,4 +317,66 @@
 		trainingRegistrationVo.setSerialEnd(trainingRegistrationVo.getSerialEnd() -trainingRegistrationVo.getSerialStart());
 		return baseMapper.getTrainIds(trainingRegistrationVo);
 	}
+
+	/**
+	 * 自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名
+	 */
+	@Override
+	public void examApplyStatus() {
+		//封装条件
+		TrainingRegistration trainingRegistration = new TrainingRegistration();
+		trainingRegistration.setCancel(1);
+		trainingRegistration.setAuditStatus(1);
+		trainingRegistration.setIsExam(1);
+		//查询考试申请审核通过,已报名,未考试的人员
+		List<TrainingRegistration> trainingRegistrationList = baseMapper.selectTrainingRegistrationList(trainingRegistration);
+		if (trainingRegistrationList.size()>0) {
+			trainingRegistrationList.forEach(trainingRegistration1 -> {
+				//判断时间
+				//查询考试信息
+				ExamPaper paper = examPaperService.getById(trainingRegistration1.getTrainExamId());
+				if (null!=paper) {
+					//比对考试结束时间
+					Date now = new Date();
+					Date exanEndTime = paper.getEndTime();
+					//考试截止时间小于当前时间,说明已过考试时间
+					if (exanEndTime.before(now)) {
+						//修改报名状态
+						trainingRegistration1.setCancel(2);
+						//缺考标记
+						trainingRegistration1.setIsExam(4);
+						this.updateById(trainingRegistration1);
+						//修改保安报名状态
+						User user = userService.getById(trainingRegistration1.getUserId());
+						user.setIsTrain(2);
+						userService.updateById(user);
+						//生成缺考记录
+						AbsentRecords absentRecords = new AbsentRecords();
+						absentRecords.setUserId(user.getId());
+						absentRecords.setApplyId(trainingRegistration1.getId());
+						absentRecords.setExamId(Long.parseLong(trainingRegistration1.getTrainExamId()));
+						absentRecords.setCandidateNo(trainingRegistration1.getCandidateNo());
+						absentRecords.setCreateTime(new Date());
+						//新增
+						absentRecordsService.save(absentRecords);
+
+						//内网同步
+						String s =
+							"update sys_training_registration set cancel = " + trainingRegistration1.getCancel() +
+								",is_exam = " + "'" + trainingRegistration1.getIsExam() + "'" +
+								" " + "where id = " + "'" + trainingRegistration1.getId() + "';" +
+								"update blade_user set is_train = " + user.getIsTrain() + " " + "where id = " + "'" + user.getId() + "';" +
+								"insert into sys_absent_records(id,user_id,create_time,exam_id,apply_id,candidate_no) " +
+								"values(" + "'" + absentRecords.getId() + "'" + ","
+								+ "'" + absentRecords.getUserId() + "'" + ","
+								+ "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(absentRecords.getCreateTime()) + "'" + ","
+								+ "'" + absentRecords.getExamId() + "'" + ","
+								+ "'" + absentRecords.getApplyId() + "'" + ","
+								+ "'" + absentRecords.getCandidateNo() + "'" + ")";
+						FtpUtil.sqlFileUpload(s);
+					}
+				}
+			});
+		}
+	}
 }

--
Gitblit v1.9.3