feat 增加报备详情接口,和页面

dev_yly
GPU is all you need 4 years ago
parent 92d87c1133
commit 19898f3a17
  1. 12
      IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java
  2. 2
      IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java
  3. 3
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java
  4. 104
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java
  5. 2
      IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java
  6. 18
      IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml
  7. 3
      IOReportSysMP/miniprogram/pages/audit/detail/index.scss
  8. 31
      IOReportSysMP/miniprogram/pages/audit/detail/index.ts
  9. 11
      IOReportSysMP/miniprogram/pages/audit/list/auditList.ts
  10. 3
      IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml
  11. 33
      IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts
  12. 5
      IOReportSysMP/miniprogram/services/mods/iORecords/index.ts
  13. 33
      IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts

@ -49,4 +49,16 @@ public class IORecordsController {
int id = iioRecordService.addIORecord(param);
return ResultUtils.success(Integer.valueOf(id));
}
@ApiOperation("根据记录ID获取记录详细信息")
@GetMapping("/pass")
public ResultVO<Integer> passIORecord(@RequestParam Integer recordId){
iioRecordService.passIORecord(recordId);
return ResultUtils.success("通过成功");
}
@ApiOperation("根据记录ID获取记录详细信息")
@GetMapping("/deny")
public ResultVO<Integer> denyIORecord(@RequestParam Integer recordId){
iioRecordService.denyIORecord(recordId);
return ResultUtils.success("拒绝成功");
}
}

@ -14,6 +14,8 @@ import java.util.List;
public interface IORecordsMapper extends BaseMapper<IORecords> {
int insertAndGetId(IORecords record);
int auditIORecord(IORecords record);
List<IORecords> selectAuditList(@Param(Constants.WRAPPER) QueryWrapper<IORecords> queryWrapper);
IORecords selectDetail(@Param(Constants.WRAPPER) QueryWrapper<IORecords> queryWrapper);
}

@ -14,4 +14,7 @@ public interface IIORecordService {
int addIORecord(IORecords record);
List<IORecords> getIORecordsAuditList(QRecord param);
void passIORecord(Integer recordId);
void denyIORecord(Integer recordId);
}

@ -1,5 +1,6 @@
package edu.ncst.ioreport.service.impl;
import afu.org.checkerframework.checker.oigj.qual.O;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@ -8,7 +9,6 @@ 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.model.User;
import edu.ncst.ioreport.service.IIORecordService;
import edu.ncst.ioreport.utils.SessionUtils;
import edu.ncst.ioreport.vo.QRToken;
@ -18,9 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service
public class IORecordServiceImpl implements IIORecordService {
@ -28,6 +29,7 @@ public class IORecordServiceImpl implements IIORecordService {
private IORecordsMapper recordsMapper;
@Autowired
private RedisTemplate<String, String> stringRedisTemplate;
@Override
public List<IORecords> getIORecordsList(QRecord query) {
IORecords ioRecords = new IORecords();
@ -78,7 +80,7 @@ public class IORecordServiceImpl implements IIORecordService {
}
@Override
public IORecords getIORecordsDetail(Integer ID) {
if(null==ID){
if (null == ID) {
throw new BusinessException(CodeMsg.PARAM_ERROR.fillArgs("记录单ID为空"));
}
@ -86,22 +88,22 @@ public class IORecordServiceImpl implements IIORecordService {
queryWrapper.eq("id",ID);
IORecords records = recordsMapper.selectDetail(queryWrapper);
if(records.getStatus().compareTo("SCHOOL_PASS")==0){
if(!stringRedisTemplate.hasKey("qrToken_"+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);
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);
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){
if (null == records) {
throw new BusinessException("记录不存在");
}
return records;
@ -111,18 +113,88 @@ public class IORecordServiceImpl implements IIORecordService {
public int addIORecord(IORecords record) {
UserInfoVO user = SessionUtils.getCurrentUser();
List<String> roles = user.getRoles();
if(roles==null||(roles.size()==1&&user.getRoles().get(0).compareTo("DOORMEN")==0)){
if(roles==null||(roles.size()==1&&user.getRoles().get(0).compareTo("DOOR_GUARD")==0)){
throw new BusinessException(CodeMsg.CAN_NOT_DATA_ACCESS);
}
if(user.getTeacherID().compareTo(record.getTeacherID())!=0){
throw new BusinessException(CodeMsg.BUSINESS_ERROR.fillArgs("当前用户为"+user.getTeacherID()+",与单据中提交人不一致"));
if (user.getTeacherID().compareTo(record.getTeacherID()) != 0) {
throw new BusinessException(CodeMsg.BUSINESS_ERROR.fillArgs("当前用户为" + user.getTeacherID() + ",与单据中提交人不一致"));
}
record.setStatus("SUBMIT");
int id = recordsMapper.insertAndGetId(record);
if(id==1){
if (id == 1) {
return record.getId();
}else{
} else {
throw new BusinessException(CodeMsg.ADD_ERROR);
}
}
// 审核通过接口
@Override
public void passIORecord(Integer recordId) {
if (null == recordId) {
throw new BusinessException(CodeMsg.PARAM_ERROR.fillArgs("记录单ID为空"));
}
// user 是审核人信息
IORecords ioRecords = recordsMapper.selectById(recordId);
if (ioRecords == null) {
throw new BusinessException("记录不存在");
}
// if (!ioRecords.getStatus().equals("SUBMIT")) {
// throw new BusinessException("记录不存在");
// }
UserInfoVO user = SessionUtils.getCurrentUser();
List<String> roles = user.getRoles();
List<String> res_1 = roles.stream().filter(role -> role.equals("SCHOOL_AUDITOR") || role.equals("DEPART_AUDITOR")).collect(Collectors.toList());
if (res_1.size() == 0) {
throw new BusinessException(CodeMsg.CAN_NOT_DATA_ACCESS);
}
List<String> res_2 = res_1.stream().filter(role -> role.equals("DEPT_AUDITOR")).collect(Collectors.toList());
if (res_2.size() != 0) {
ioRecords.setStatus("DEPT_PASS");
ioRecords.setDeptAuditorID(user.getUserID());
ioRecords.setDeptAuditTime(new Date());
}
List<String> res_3 = res_1.stream().filter(role -> role.equals("SCHOOL_AUDITOR")).collect(Collectors.toList());
if (res_3.size() != 0) {
ioRecords.setStatus("SCHOOL_PASS");
ioRecords.setSchoolAuditorID(user.getUserID());
ioRecords.setSchoolAuditTime(new Date());
}
// 更新数据库
recordsMapper.auditIORecord(ioRecords);
}
// 审核通过接口
@Override
public void denyIORecord(Integer recordId) {
if (null == recordId) {
throw new BusinessException(CodeMsg.PARAM_ERROR.fillArgs("记录单ID为空"));
}
// user 是审核人信息
IORecords ioRecords = recordsMapper.selectById(recordId);
if (ioRecords == null) {
throw new BusinessException("记录不存在");
}
UserInfoVO user = SessionUtils.getCurrentUser();
List<String> roles = user.getRoles();
List<String> res_1 = roles.stream().filter(role -> role.equals("SCHOOL_AUDITOR") || role.equals("DEPART_AUDITOR")).collect(Collectors.toList());
if (res_1.size() == 0) {
throw new BusinessException(CodeMsg.CAN_NOT_DATA_ACCESS);
}
List<String> res_2 = res_1.stream().filter(role -> role.equals("DEPT_AUDITOR")).collect(Collectors.toList());
if (res_2.size() != 0) {
ioRecords.setStatus("DEPT_DENY");
ioRecords.setDeptAuditorID(user.getUserID());
ioRecords.setDeptAuditTime(new Date());
}
List<String> res_3 = res_1.stream().filter(role -> role.equals("SCHOOL_AUDITOR")).collect(Collectors.toList());
if (res_3.size() != 0) {
ioRecords.setStatus("SCHOOL_DENY");
ioRecords.setSchoolAuditorID(user.getUserID());
ioRecords.setSchoolAuditTime(new Date());
}
// 更新数据库
recordsMapper.auditIORecord(ioRecords);
}
}

@ -59,6 +59,8 @@ public class ResourceServiceImpl implements IResourceService {
urls.add("/api/records/list");
urls.add("/api/records/audit-list");
urls.add("/api/records/add");
urls.add("/api/records/pass");
urls.add("/api/records/deny");
return urls;
}
}

@ -10,8 +10,24 @@
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="id" parameterType="edu.ncst.ioreport.model.IORecords">
insert into iorecords (teacherid,iotype,outerResidence,innerResidence,reason,committime,status)
values(#{teacherID},#{ioType},#{outerResidence},#{innerResidence},#{reason},#{commitTime},#{status})
values(1,#{ioType},#{outerResidence},#{innerResidence},#{reason},#{commitTime},#{status})
</insert>
<update id="auditIORecord" parameterType="edu.ncst.ioreport.model.IORecords">
update iorecords set teacherid = #{teacherID},
<if test="deptAuditorID != null">
set deptAuditorID = #{deptAuditorID},
</if>
<if test="deptAuditTime != null">
set DeptAuditTime = #{deptAuditTime},
</if>
<if test="schoolAuditorID != null">
set SchoolAuditorID = #{schoolAuditorID},
</if>
<if test="schoolAuditTime != null">
set SchoolAuditTime = #{schoolAuditTime},
</if>
status = #{status} where id = #{id}
</update>
<select id="selectAuditList" resultMap="IORecord">
select r.*,

@ -1,4 +1,5 @@
.report-info-container {
font-size: 18px;
display: flex;
flex-direction: column;
background-color: var(--color-gray-0);
@ -20,7 +21,7 @@
.submit-button {
position: absolute;
bottom: 0;
bottom: 0px;
left: 0;
right: 0;
display: flex;

@ -10,6 +10,21 @@ const ioRecordStatus = {
VERIFY_DENY:'核验不通过',
}
const ioRecordType = ['入校','出校']
import { IORecords } from '../../../services/baseClass'
import services from "../../../services/index"
import { formatDateTimeStr } from '../../../utils/util'
// 字典数据
const ioRecordType = ['入', '出']
const ioRecordStatus = {
SAVE: '保存',
SUBMIT: "提交待审核",
HOSPITAL_PASS: '院级审核通过',
SCHOOL_PASS: '校级审核通过',
VERIFICATION_PASS: '核验通过',
HOSPITAL_NOT_PASS: '院级审核不通过',
SCHOOL_NOT_PASS: '校级审核不通过',
VERIFICATION_NOT_PASS: '核验不通过',
}
Page({
data: {
@ -28,17 +43,13 @@ Page({
this.setData({teacher:record?record.teacher:null});
}
},
onPass(event: WechatMiniprogram.Input) {
//orderApi.passOrder(event.currentTarget.dataset.reportID)
async onPass() {
const res = await services.API.iORecords.passIORecord.request({ recordId: this.data.ioRecord.id })
wx.showToast({title:res.msg!,icon:'none'})
},
onDeny(event: WechatMiniprogram.Input) {
//orderApi.denyOrder(event.currentTarget.dataset.reportID)
},
/**
* --
*/
onReady() {
async onDeny() {
const res = await services.API.iORecords.passIORecord.request({ recordId: this.data.ioRecord.id })
wx.showToast({title:res.msg!,icon:'none'})
},
/**

@ -1,8 +1,8 @@
// pages/my-report/myReport.ts
import { QRecord } from "../../../services/baseClass"
import services from "../../../services/index"
import constant from "../../../utils/constant"
Page({
/**
@ -20,9 +20,9 @@ Page({
}
},
bindtap(event: WechatMiniprogram.Input) {
const { reportid } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportid)
wx.navigateTo({ url: "../detail/index" })
const { reportID } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportID)
wx.navigateTo({ url: "../auditDetail/auditDetail" })
},
onSubmit:async function( detail : QRecord) {
@ -41,7 +41,7 @@ Page({
const user = wx.getStorageSync(constant.USER_INFO);
console.log("user",user);
if(!user||!user.teacherID){
wx.navigateTo({url:"../../index/index.ts"})
wx.navigateTo({url:"../../index/index"})
}
let res = await services.API.iORecords.getIORecordsAuditList.request({teacherID:user.teacherID});
if(res&&res.data){
@ -98,4 +98,3 @@ Page({
}
})

@ -5,6 +5,3 @@
<sysCard wx:for="{{reportInfos}}" reportStatus="{{item.status}}" reportType="{{item.ioType == '0' ? '进校报备' : '出校报备'}}" reportDateTime="{{item.commitTime}}" reviewer="{{item.schoolAuditorID==0?'无':item.schoolAuditorID}}" data-reportID="{{item.id}}" bindtap="bindtap" wx:key="id" />
</view>
</view>
<!-- <sysCard reportStatus="2" reportType="入校报备" reportDateTime="2022-10-4 18:18:30" reviewer="张三"></sysCard>
-->

@ -0,0 +1,33 @@
import { fetch } from '../../../utils/util';
export class Params {
/** ID */
recordId?: number;
}
export type ResponseType = Promise<defs.ResultVO<defs.IORecords>>;
export const URL = '/api/records/deny';
/**
* @desc ID获取记录详细信息
*/
export function request(
params: Params,
options?: WechatMiniprogram.RequestOption,
): ResponseType {
let url = '/api/records/deny';
const fetchOption = Object.assign(
{
url: url,
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
params: params,
},
options,
);
return fetch(fetchOption);
}

@ -5,10 +5,15 @@ import * as addIORecord from './addIORecord';
import * as getIORecordsAuditList from './getIORecordsAuditList';
import * as getIORecordByID from './getIORecordByID';
import * as getIORecordsList from './getIORecordsList';
import * as passIORecord from './passIORecord';
import * as denyIORecord from './denyIORecord';
export {
addIORecord,
getIORecordsAuditList,
getIORecordByID,
getIORecordsList,
passIORecord, denyIORecord,
};

@ -0,0 +1,33 @@
import { fetch } from '../../../utils/util';
export class Params {
/** ID */
recordId?: number;
}
export type ResponseType = Promise<defs.ResultVO<defs.IORecords>>;
export const URL = '/api/records/pass';
/**
* @desc ID获取记录详细信息
*/
export function request(
params: Params,
options?: WechatMiniprogram.RequestOption,
): ResponseType {
let url = '/api/records/pass';
const fetchOption = Object.assign(
{
url: url,
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
params: params,
},
options,
);
return fetch(fetchOption);
}
Loading…
Cancel
Save