From 0dc428dc16b533a2d014c45fdd98bc6f2ea5983d Mon Sep 17 00:00:00 2001 From: GPU is all you need <2778335106@qq.com> Date: Mon, 17 Oct 2022 15:39:39 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=A2=9E=E5=8A=A0=E6=8A=A5=E5=A4=87?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=92=8C=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IORecordsController.java | 12 ++ .../ncst/ioreport/mapper/IORecordsMapper.java | 2 + .../ioreport/service/IIORecordService.java | 3 + .../service/impl/IORecordServiceImpl.java | 105 +++++++++++++++--- .../service/impl/ResourceServiceImpl.java | 2 + .../main/resources/mapping/IORecordMapper.xml | 18 ++- .../miniprogram/pages/audit/detail/index.scss | 3 +- .../miniprogram/pages/audit/detail/index.ts | 69 ++++++++---- .../miniprogram/pages/audit/detail/index.wxml | 29 +++-- .../miniprogram/pages/audit/list/auditList.ts | 30 ++--- .../pages/audit/list/auditList.wxml | 5 +- .../services/mods/iORecords/denyIORecord.ts | 33 ++++++ .../services/mods/iORecords/index.ts | 5 +- .../services/mods/iORecords/passIORecord.ts | 33 ++++++ 14 files changed, 277 insertions(+), 72 deletions(-) create mode 100644 IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts create mode 100644 IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java index 5bf02ac..5e75801 100644 --- a/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/controller/IORecordsController.java @@ -44,4 +44,16 @@ public class IORecordsController { int id = iioRecordService.addIORecord(param); return ResultUtils.success(Integer.valueOf(id)); } + @ApiOperation("根据记录ID获取记录详细信息") + @GetMapping("/pass") + public ResultVO passIORecord(@RequestParam Integer recordId){ + iioRecordService.passIORecord(recordId); + return ResultUtils.success("通过成功"); + } + @ApiOperation("根据记录ID获取记录详细信息") + @GetMapping("/deny") + public ResultVO denyIORecord(@RequestParam Integer recordId){ + iioRecordService.denyIORecord(recordId); + return ResultUtils.success("拒绝成功"); + } } diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java index 65561ae..1738d87 100644 --- a/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/mapper/IORecordsMapper.java @@ -8,4 +8,6 @@ import org.springframework.stereotype.Repository; @Repository public interface IORecordsMapper extends BaseMapper { int insertAndGetId(IORecords record); + + int auditIORecord(IORecords record); } diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java index e208379..c6754fc 100644 --- a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/IIORecordService.java @@ -12,4 +12,7 @@ public interface IIORecordService { IORecords getIORecordsDetail(Integer ID); int addIORecord(IORecords record); + + void passIORecord(Integer recordId); + void denyIORecord(Integer recordId); } 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 index e1e71fc..9543e56 100644 --- a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/IORecordServiceImpl.java @@ -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 stringRedisTemplate; + @Override public List getIORecordsList(QRecord query) { IORecords ioRecords = new IORecords(); @@ -41,28 +42,28 @@ 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为空")); } IORecords records = recordsMapper.selectById(ID); - 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; @@ -72,18 +73,88 @@ public class IORecordServiceImpl implements IIORecordService { public int addIORecord(IORecords record) { UserInfoVO user = SessionUtils.getCurrentUser(); List roles = user.getRoles(); - if(roles==null||(roles.size()==1&&user.getRoles().get(0).compareTo("DOOR_GUARD")==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 roles = user.getRoles(); + List 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 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 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 roles = user.getRoles(); + List 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 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 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); + } + } diff --git a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java index 9537da2..8ecc11e 100644 --- a/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java +++ b/IOReportSysBE/src/main/java/edu/ncst/ioreport/service/impl/ResourceServiceImpl.java @@ -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; } } diff --git a/IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml b/IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml index 035ffb5..7fb98e3 100644 --- a/IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml +++ b/IOReportSysBE/src/main/resources/mapping/IORecordMapper.xml @@ -10,6 +10,22 @@ 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}) + + update iorecords set teacherid = #{teacherID}, + + set deptAuditorID = #{deptAuditorID}, + + + set DeptAuditTime = #{deptAuditTime}, + + + set SchoolAuditorID = #{schoolAuditorID}, + + + set SchoolAuditTime = #{schoolAuditTime}, + + status = #{status} where id = #{id} + \ No newline at end of file diff --git a/IOReportSysMP/miniprogram/pages/audit/detail/index.scss b/IOReportSysMP/miniprogram/pages/audit/detail/index.scss index b755947..923861a 100644 --- a/IOReportSysMP/miniprogram/pages/audit/detail/index.scss +++ b/IOReportSysMP/miniprogram/pages/audit/detail/index.scss @@ -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; diff --git a/IOReportSysMP/miniprogram/pages/audit/detail/index.ts b/IOReportSysMP/miniprogram/pages/audit/detail/index.ts index 06e28c3..1c721fb 100644 --- a/IOReportSysMP/miniprogram/pages/audit/detail/index.ts +++ b/IOReportSysMP/miniprogram/pages/audit/detail/index.ts @@ -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() { - - }, /** * 页面相关事件处理函数--监听用户下拉动作 diff --git a/IOReportSysMP/miniprogram/pages/audit/detail/index.wxml b/IOReportSysMP/miniprogram/pages/audit/detail/index.wxml index 9fcb1a5..2a1f336 100644 --- a/IOReportSysMP/miniprogram/pages/audit/detail/index.wxml +++ b/IOReportSysMP/miniprogram/pages/audit/detail/index.wxml @@ -1,15 +1,22 @@ - - - - - + + + + + + + + + + + + + + + + + + - - - - - - diff --git a/IOReportSysMP/miniprogram/pages/audit/list/auditList.ts b/IOReportSysMP/miniprogram/pages/audit/list/auditList.ts index 8914e4b..31c1e7a 100644 --- a/IOReportSysMP/miniprogram/pages/audit/list/auditList.ts +++ b/IOReportSysMP/miniprogram/pages/audit/list/auditList.ts @@ -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 }) { // 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||[]}) + } }, /** diff --git a/IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml b/IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml index bf656a4..fa27668 100644 --- a/IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml +++ b/IOReportSysMP/miniprogram/pages/audit/list/auditList.wxml @@ -2,9 +2,6 @@ - + - - \ No newline at end of file diff --git a/IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts b/IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts new file mode 100644 index 0000000..5fd63a2 --- /dev/null +++ b/IOReportSysMP/miniprogram/services/mods/iORecords/denyIORecord.ts @@ -0,0 +1,33 @@ +import { fetch } from '../../../utils/util'; + +export class Params { + /** ID */ + recordId?: number; +} + +export type ResponseType = Promise>; + +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); +} diff --git a/IOReportSysMP/miniprogram/services/mods/iORecords/index.ts b/IOReportSysMP/miniprogram/services/mods/iORecords/index.ts index eef71a8..0a9f080 100644 --- a/IOReportSysMP/miniprogram/services/mods/iORecords/index.ts +++ b/IOReportSysMP/miniprogram/services/mods/iORecords/index.ts @@ -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 }; diff --git a/IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts b/IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts new file mode 100644 index 0000000..d51481e --- /dev/null +++ b/IOReportSysMP/miniprogram/services/mods/iORecords/passIORecord.ts @@ -0,0 +1,33 @@ +import { fetch } from '../../../utils/util'; + +export class Params { + /** ID */ + recordId?: number; +} + +export type ResponseType = Promise>; + +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); +}