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

dev_backend_yly
GPU is all you need 4 years ago
parent 1fc066b64a
commit 0dc428dc16
  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. 77
      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. 69
      IOReportSysMP/miniprogram/pages/audit/detail/index.ts
  9. 25
      IOReportSysMP/miniprogram/pages/audit/detail/index.wxml
  10. 30
      IOReportSysMP/miniprogram/pages/audit/list/auditList.ts
  11. 5
      IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml
  12. 33
      IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts
  13. 5
      IOReportSysMP/miniprogram/services/mods/iORecords/index.ts
  14. 33
      IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts

@ -44,4 +44,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("拒绝成功");
}
}

@ -8,4 +8,6 @@ import org.springframework.stereotype.Repository;
@Repository
public interface IORecordsMapper extends BaseMapper<IORecords> {
int insertAndGetId(IORecords record);
int auditIORecord(IORecords record);
}

@ -12,4 +12,7 @@ public interface IIORecordService {
IORecords getIORecordsDetail(Integer ID);
int addIORecord(IORecords record);
void passIORecord(Integer recordId);
void denyIORecord(Integer recordId);
}

@ -1,13 +1,12 @@
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;
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;
@ -17,9 +16,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 {
@ -27,6 +27,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();
@ -86,4 +87,74 @@ public class IORecordServiceImpl implements IIORecordService {
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);
}
}

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

@ -10,6 +10,22 @@
<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>
</mapper>

@ -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;

@ -1,30 +1,54 @@
import orderApi from "../../../api/orderApi/orderApi"
const orderType = ['出校报备', '进校报备']
const reportStatus = ['通过', '院级审核', '校级审核', '退回']
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: {
/**
*
*/
data: {
showQrcode: false,
ioRecord: IORecords,
expireTime: null,
ioRecordType,
ioRecordStatus,
},
onLoad() {
const reportID = wx.getStorageSync("auditList/auditList")
orderApi.getOrderDetailByOrderID(reportID).then(res => {
res.reportStatus = reportStatus[res.reportStatus as any] as any
res.reportType = orderType[res.reportType as any] as any
this.setData(res)
})
},
onPass(event: WechatMiniprogram.Input) {
orderApi.passOrder(event.currentTarget.dataset.reportID)
onLoad: async function () {
// TODO orderinfo by orderID
// const reportID = wx.getStorageSync("myReport/myReport")
this.getRecordDetail();
let record = this.data.ioRecord;
},
onDeny(event: WechatMiniprogram.Input) {
orderApi.denyOrder(event.currentTarget.dataset.reportID)
getRecordDetail: async function () {
const reportID = wx.getStorageSync("auditList/auditList")
let res = await services.API.iORecords.getIORecordByID.request({ ID: reportID });
if (res && res.data) {
let record = res.data;
console.log(res)
this.setData({ ioRecord: record ? record : null });
}
},
/**
* --
*/
onReady() {
async onPass() {
const res = await services.API.iORecords.passIORecord.request({ recordId: this.data.ioRecord.id })
wx.showToast({title:res.msg!,icon:'none'})
},
async onDeny() {
const res = await services.API.iORecords.passIORecord.request({ recordId: this.data.ioRecord.id })
wx.showToast({title:res.msg!,icon:'none'})
},
/**
@ -38,15 +62,12 @@ Page({
* --
*/
onHide() {
console.log("onhide");
},
/**
* --
*/
onUnload() {
},
/**
* --

@ -1,15 +1,22 @@
<navigationBar title="审核详情"></navigationBar>
<navigationBar title="报备详情"></navigationBar>
<view>
<view class="report-info-container">
<view class="card-col-1">
<yinput onlyRead padding="6px" label="工号:" defaultValue="{{id}}" />
<yinput onlyRead padding="6px" label="姓名:" defaultValue="{{name}}" />
<yinput onlyRead padding="3px" label="工号:" value="{{ioRecord.teacherID}}" />
<yinput onlyRead padding="3px" label="姓名:" value="{{ioRecord.teacherID}}" />
</view>
<yinput onlyRead padding="3px" label="手机号:" value="{{ioRecord.mobile?ioRecord.mobile:'无'}}" />
<view class="card-col-1">
<yinput onlyRead padding="3px" label="类型:" value="{{ioRecordType[ioRecord.ioType]}}" />
</view>
<view class="card-col-1">
<yinput onlyRead padding="3px" label="状态:" value="{{ioRecordStatus[ioRecord.status]}}" />
</view>
<yinput onlyRead padding="3px" label="校内居住地:" value="{{ioRecord.innerResidence}}" />
<yinput onlyRead padding="3px" label="校外居住地:" value="{{ioRecord.outerResidence}}" />
<yinput onlyRead padding="3px" label="事由:" value="{{ioRecord.reason}}" />
</view>
<yinput onlyRead padding="6px" label="手机号:" defaultValue="{{phone}}" />
<yinput onlyRead padding="6px" label="类型:" defaultValue="{{reportType}}" />
<yinput onlyRead padding="6px" label="状态:" defaultValue="{{reportStatus}}" />
<yinput onlyRead padding="6px" label="校内居住地:" defaultValue="{{phone}}" />
<yinput onlyRead padding="6px" label="校外居住地:" defaultValue="{{outerLocation}}" />
<yinput onlyRead padding="6px" label="事由:" defaultValue="{{reason}}" />
</view>
<view class="submit-button">
<ybutton bindtap="onPass" class="button-item" lineHeight="50px" title="通过" bgColor="var(--color-primary)" />

@ -1,9 +1,7 @@
// pages/my-report/myReport.ts
Page({
import services from "../../../services/index"
import constant from "../../../utils/constant"
/**
*
*/
Page({
data: {
reportInfos:[] as any,
noData: false,
@ -16,22 +14,28 @@ Page({
}
},
bindtap(event: WechatMiniprogram.Input) {
const { reportID } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportID)
wx.navigateTo({ url: "../auditDetail/auditDetail" })
const { reportid } = event.currentTarget.dataset
wx.setStorageSync("auditList/auditList", reportid)
wx.navigateTo({ url: "../detail/index" })
},
onSubmit({ detail }: { detail: Record<string, string> }) {
// orderApi.getOrderDetailFilter(detail.reportType, detail.reportStatus).then(res => {
// this.setData({reportInfos:res || []})
// })
},
/**
* --
*/
onLoad() {
// 单据id 报备时间 报备类型 审核人 审核状态
// 锁? 多人同时操作一个订单怎么办
// orderApi.getOrderInfo().then(res => this.setData({ reportInfos: res || [] }))
onLoad:async function() {
const user = wx.getStorageSync(constant.USER_INFO);
console.log("user",user);
if(!user||!user.teacherID){
wx.navigateTo({url:"../../index/index.ts"})
}
let res = await services.API.iORecords.getIORecordsList.request({teacherID:user.userID});
if(res&&res.data){
console.log(res.data)
this.setData({reportInfos:res.data||[]})
}
},
/**

@ -2,9 +2,6 @@
<navigationBar title="审核列表" bindtap="bindTestTap"></navigationBar>
<sysFilterBar bindonSubmit="onSubmit"></sysFilterBar>
<view class="cards-container">
<sysCard wx:for="{{reportInfos}}" reportStatus="{{item.reportStatus}}" reportType="{{item.reportType == '0' ? '出校报备' : '进校报备'}}" reportDateTime="{{item.reportDateTime}}" reviewer="{{item.reviewer}}" data-reportID="{{item.reportID}}" bindtap="bindtap" wx:key="reportID" />
<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);
}

@ -4,5 +4,8 @@
import * as addIORecord from './addIORecord';
import * as getIORecordByID from './getIORecordByID';
import * as getIORecordsList from './getIORecordsList';
import * as passIORecord from './passIORecord';
import * as denyIORecord from './denyIORecord';
export { addIORecord, getIORecordByID, getIORecordsList };
export { addIORecord, 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