commit b89efa1db258877510f32b86845c2e5e7c7c4fcf Author: mfay Date: Wed Oct 12 22:14:57 2022 +0800 合并前端 diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java new file mode 100644 index 0000000..ca794d7 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java @@ -0,0 +1,46 @@ +package edu.ncst.ioreport.controller; + +import edu.ncst.ioreport.exception.CodeMsg; +import edu.ncst.ioreport.model.IORecords; +import edu.ncst.ioreport.service.IIORecordService; +import edu.ncst.ioreport.utils.ResponseUtils; +import edu.ncst.ioreport.utils.ResultUtils; +import edu.ncst.ioreport.vo.ListResultVO; +import edu.ncst.ioreport.vo.ResultVO; +import edu.ncst.ioreport.vo.param.QRecord; +import edu.ncst.ioreport.vo.param.QUser; +import edu.ncst.ioreport.vo.result.UserInfoVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 报备记录 控制器 + */ +@Api(description = "出入校报备记录控制器", tags = "IORecordsController") +@Slf4j +@RestController +@RequestMapping("/api/records") +public class IORecordsController { + + @Autowired + private IIORecordService iioRecordService; + @ApiOperation("获取报备记录列表") + @PostMapping("/list") + public ResultVO> getIORecordsList(@RequestBody QRecord param){ + List ioRecordsList = iioRecordService.getIORecordsList(param); + return ResultUtils.success(ioRecordsList); + } + + @ApiOperation("根据记录ID获取记录详细信息") + @GetMapping("/detail") + public ResultVO getIORecordByID(@RequestParam(name = "ID", required = true) Integer ID){ + IORecords record = iioRecordService.getIORecordsDetail(ID); + return ResultUtils.success(record); + } +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java new file mode 100644 index 0000000..d6b1c60 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java @@ -0,0 +1,10 @@ +package edu.ncst.ioreport.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import edu.ncst.ioreport.model.IORecords; +import edu.ncst.ioreport.model.Resource; +import org.springframework.stereotype.Repository; + +@Repository +public interface IORecordsMapper extends BaseMapper { +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/model/IORecords.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/model/IORecords.java new file mode 100644 index 0000000..faeca70 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/model/IORecords.java @@ -0,0 +1,69 @@ +package edu.ncst.ioreport.model; + +import com.baomidou.mybatisplus.annotation.*; +import edu.ncst.ioreport.model.BaseEntity; +import edu.ncst.ioreport.vo.QRToken; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 角色 + */ +@ApiModel(value="IORecords", description="报备记录") +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("IORecords") +public class IORecords { + private static final long serialVersionUID=1L; + + @ApiModelProperty(value = "报备记录ID") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "教师工号") + private String teacherID; + + @ApiModelProperty(value = "报备单类型:1-出;0-入") + private String ioType; + + @ApiModelProperty(value = "校外居住地") + private String outerResidence; + + @ApiModelProperty(value = "校内居住地") + private String innerResidence; + + @ApiModelProperty(value = "申请事由") + private String reason; + + @ApiModelProperty(value = "出入校时间") + private Date commitTime; + + @ApiModelProperty(value = "院级审核人") + private Integer deptAuditorID; + + @ApiModelProperty(value = "院级审核时间") + private Date deptAuditTime; + + @ApiModelProperty(value = "校级审核人") + private Integer schoolAuditorID; + + @ApiModelProperty(value = "校级审核时间") + private Date schoolAuditTime; + + @ApiModelProperty(value = "核验人") + private Integer validatorID; + + @ApiModelProperty(value = "核验时间") + private Date validateTime; + + @ApiModelProperty(value = "单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过") + private String status; + + @ApiModelProperty(value = "二维码token") + @TableField(exist = false) + private QRToken qrToken; +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java new file mode 100644 index 0000000..89591e3 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java @@ -0,0 +1,13 @@ +package edu.ncst.ioreport.service; + +import edu.ncst.ioreport.model.IORecords; +import edu.ncst.ioreport.vo.param.QRecord; + +import java.util.List; + +public interface IIORecordService { + + List getIORecordsList(QRecord query); + + IORecords getIORecordsDetail(Integer ID); +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java new file mode 100644 index 0000000..2956c19 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java @@ -0,0 +1,67 @@ +package edu.ncst.ioreport.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import edu.ncst.ioreport.exception.BusinessException; +import edu.ncst.ioreport.exception.CodeMsg; +import edu.ncst.ioreport.mapper.IORecordsMapper; +import edu.ncst.ioreport.model.IORecords; +import edu.ncst.ioreport.service.IIORecordService; +import edu.ncst.ioreport.vo.QRToken; +import edu.ncst.ioreport.vo.param.QRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@Service +public class IORecordServiceImpl implements IIORecordService { + @Autowired + private IORecordsMapper recordsMapper; + @Autowired + private RedisTemplate stringRedisTemplate; + @Override + public List getIORecordsList(QRecord query) { + IORecords ioRecords = new IORecords(); + ioRecords.setTeacherID(query.getTeacherID()); + ioRecords.setStatus(query.getStatus()); + ioRecords.setIoType(query.getType()); + QueryWrapper queryWrapper = new QueryWrapper(ioRecords); + List list = recordsMapper.selectList(queryWrapper); + + return list; + } + + @Override + public IORecords getIORecordsDetail(Integer ID) { + if(null==ID){ + throw new BusinessException(CodeMsg.PARAM_ERROR.fillArgs("记录单ID为空")); + } + + IORecords records = recordsMapper.selectById(ID); + + if(records.getStatus().compareTo("SCHOOL_PASS")==0){ + if(!stringRedisTemplate.hasKey("qrToken_"+ID)){ + QRToken qrToken = new QRToken(); + qrToken.setRecordID(ID); + stringRedisTemplate.opsForValue().set("qrToken_"+ID,JSON.toJSONString(qrToken),1, TimeUnit.MINUTES); + } + String qrTokenStr = stringRedisTemplate.opsForValue().get("qrToken_"+ID); + QRToken qrToken = JSON.parseObject(qrTokenStr,QRToken.class); + if(qrToken!=null){ + Long seconds = stringRedisTemplate.getExpire("qrToken_"+ID); + qrToken.setExpireTime(seconds); + records.setQrToken(qrToken); + } + } + + if(null==records){ + throw new BusinessException("记录不存在"); + } + return records; + } +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/QRToken.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/QRToken.java new file mode 100644 index 0000000..eb2448a --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/QRToken.java @@ -0,0 +1,21 @@ +package edu.ncst.ioreport.vo; + +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +@Data +public class QRToken { + private Integer recordID; + private Date expireTime; + + public void setExpireTime(Long time){ + Calendar calendar=Calendar.getInstance(); + if(time!=null&&time>0){ + calendar.add(Calendar.SECOND, time.intValue()); + } + this.expireTime = calendar.getTime(); + } +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/param/QRecord.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/param/QRecord.java new file mode 100644 index 0000000..b4e6891 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/param/QRecord.java @@ -0,0 +1,22 @@ +package edu.ncst.ioreport.vo.param; + +import edu.ncst.ioreport.vo.Query; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@ApiModel(description = "出入报备记录查询对象") +@Data +public class QRecord extends Query { + @ApiModelProperty(value = "教师工号") + private String teacherID; + + @ApiModelProperty(value = "记录类型") + private String type; + + @ApiModelProperty(value = "记录状态") + private String status; +} diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/result/RecordVO.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/result/RecordVO.java new file mode 100644 index 0000000..4ea02f2 --- /dev/null +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/vo/result/RecordVO.java @@ -0,0 +1,60 @@ +package edu.ncst.ioreport.vo.result; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import edu.ncst.ioreport.model.User; +import edu.ncst.ioreport.vo.QRToken; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@ApiModel(description = "当前用户信息") +@Data +public class RecordVO { + @ApiModelProperty(value = "报备记录ID") + private Integer ID; + + @ApiModelProperty(value = "教师工号") + private User Teacher; + + @ApiModelProperty(value = "报备单类型:1-出;0-入") + private Integer IOType; + + @ApiModelProperty(value = "校外居住地") + private String OuterResidence; + + @ApiModelProperty(value = "校内居住地") + private String InnerResidence; + + @ApiModelProperty(value = "申请事由") + private String Reason; + + @ApiModelProperty(value = "出入校时间") + private Date CommitTime; + + @ApiModelProperty(value = "院级审核人") + private User DeptAuditor; + + @ApiModelProperty(value = "院级审核时间") + private Date DeptAuditTime; + + @ApiModelProperty(value = "校级审核人") + private User SchoolAuditor; + + @ApiModelProperty(value = "校级审核时间") + private Date SchoolAuditTime; + + @ApiModelProperty(value = "核验人") + private User Validator; + + @ApiModelProperty(value = "核验时间") + private Date ValidateTime; + + @ApiModelProperty(value = "单据状态:0-保存;1-提交待审核;2-院级审核通过;3-校级审核通过;4-核验通过;9-院级审核不通过;8-校级审核不通过;7-核验不通过") + private String Status; + + @ApiModelProperty(value = "二维码token") + private QRToken qrToken; +}