710.5——Alpha冲刺Day10
目录
| 这个作业属于哪个课程 | < 2301-计算机学院-软件工程> |
|---|---|
| 这个作业要求在哪里 | < 团队作业——站立式会议+alpha冲刺-CSDN社区> |
| 这个作业的目标 | < 站立式会议+alpha冲刺 > |
| 其他参考文献 |
会议照片
- 前端组

- 后端组
燃尽图

今日成果
- 各成员通过讨论沟通、团队协作,进一步推进了工作
成果展示
- 前端成果:基本实现新建队伍功能模块

- 后端成果:对所需提供的接口服务设计完成

commit
- 前端

- 后端


部分代码展示
-
前端
//Page Object
Page({
data: {
id: 0,
level: 0,
nickname: "",
token: "",
peoplelist: [],
grouplist: [],
addprouppop: false,
addproupname: "",
inputvalue: "",
},
//options(Object)
onLoad: function (options) {
let that = this
wx.setVisualEffectOnCapture({
visualEffect: 'hidden',
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log(err)
},
complete: (res) => {
console.log(res)
}
})
wx.getStorage({
key: 'id',
success: (res) => {
that.setData({ 'id': res.data })
let id = res.data
wx.getStorage({
key: 'level',
success: (res) => {
that.setData({ 'level': res.data })
let level = res.data
wx.getStorage({
key: 'token',
success: (res) => {
that.setData({ 'token': res.data })
let token = res.data
wx.getStorage({
key: 'nickname',
success: (res) => {
that.setData({ 'nickname': res.data })
let nickname = res.data
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/users',
data: {
"level": level + 1,
"group": ""
},
header: {
'content-type': 'application/json',
'token': token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'peoplelist': res.data.data })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
let num = level + 1
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/groups/' + num,
header: {
'content-type': 'application/json',
'token': token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'grouplist': res.data.data })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
//账号回收
huishou(e) {
console.log(e);
let that = this
let id = e.currentTarget.dataset.id
wx.showModal({
title: '是否收回账号',
showCancel: true,
content: '',
success: function (res) {
if (res.confirm) {
wx.request({
url: 'http://81.68.194.42:9090/api/1/remove/user/' + id,
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
wx.showModal({
title: '回收成功',
showCancel: false,
content: '',
success: function (res) {
that.handrefresh()
}
})
},
fail: (err) => { console.log(err); },
complete: () => { }
});
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
},
//队伍回收
huishougroup(e) {
console.log(e);
let that = this
let id = e.currentTarget.dataset.id
wx.showModal({
title: '是否解散队伍',
showCancel: true,
content: '',
success: function (res) {
if (res.confirm) {
wx.request({
url: 'http://81.68.194.42:9090/api/1/remove/group/' + id,
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
that.handrefresh()
wx.showModal({
title: '队伍已解散',
showCancel: false,
content: '',
success: function (res) {
}
})
},
fail: (err) => { console.log(err); },
complete: () => { }
});
}
}
})
},
//账号新增
addpeople(e) {
console.log(e);
let that = this
let id = that.data.id
wx.request({
url: 'http://81.68.194.42:9090/api/1/create/code/' + id,
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
let invitecode = res.data.data
wx.showModal({
title: '邀请码',
showCancel: false,
confirmText: '复制',
content: res.data.data,
success: function (res) {
if (res.confirm) {
console.log('用户点击复制')
wx.setClipboardData({
data: invitecode,
success: (res) => {
wx.showToast({
title: '复制成功',
})
}
})
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
//队伍新增
addproup(e) {
this.setData({ addprouppop: !this.data.addprouppop })
},
addproupcancel(e) {
this.setData({ addprouppop: !this.data.addprouppop })
},
addproupconfirm(e) {
let that = this
wx.request({
url: 'http://81.68.194.42:9090/api/1/create/group',
data: {
name: that.data.addproupname,
userId: that.data.id,
level: that.data.level + 1,
},
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res);
wx.showModal({
title: '创建成功',
showCancel: false,
content: '',
success: function (res) {
that.setData({ addprouppop: !that.data.addprouppop })
that.handrefresh()
}
})
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
addproupnameinput(e) {
this.setData({ 'addproupname': e.detail.value })
},
onRefresh: function () {
let that = this
wx.getStorage({
key: 'id',
success: (res) => {
that.setData({ 'id': res.data })
let id = res.data
wx.getStorage({
key: 'level',
success: (res) => {
that.setData({ 'level': res.data })
let level = res.data
wx.getStorage({
key: 'token',
success: (res) => {
that.setData({ 'token': res.data })
let token = res.data
wx.getStorage({
key: 'nickname',
success: (res) => {
that.setData({ 'nickname': res.data })
let nickname = res.data
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/users',
data: {
"level": level + 1,
"group": ""
},
header: {
'content-type': 'application/json',
'token': token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'peoplelist': res.data.data })
},
fail: (err) => { },
complete: () => { wx.stopPullDownRefresh(); }
});
let num = level + 1
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/groups/' + num,
header: {
'content-type': 'application/json',
'token': token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'grouplist': res.data.data })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
onPullDownRefresh: function () {
this.onRefresh();
},
handrefresh() {
let that = this
wx.getStorage({
key: 'id',
success: (res) => {
that.setData({ 'id': res.data })
let id = res.data
wx.getStorage({
key: 'level',
success: (res) => {
that.setData({ 'level': res.data })
let level = res.data
wx.getStorage({
key: 'token',
success: (res) => {
that.setData({ 'token': res.data })
let token = res.data
wx.getStorage({
key: 'nickname',
success: (res) => {
that.setData({ 'nickname': res.data })
let nickname = res.data
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/users',
data: {
"level": level + 1,
"group": "",
"keyWord": "",
},
header: {
'content-type': 'application/json',
'token': token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'peoplelist': res.data.data })
},
fail: (err) => { },
complete: () => { }
});
let num = level + 1
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/groups/' + num,
header: {
'content-type': 'application/json',
'token': token
},
method: 'GET',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'grouplist': res.data.data })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
fail: () => { },
})
},
inputevent(e) {
this.setData({ inputvalue: e.detail.value })
},
search(e) {
let that = this
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/users',
data: {
"level": that.data.level + 1,
"keyWord": that.data.inputvalue,
},
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res);
that.setData({ 'peoplelist': res.data.data })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
},
cancelsearch(e) {
let that = this
wx.request({
url: 'http://81.68.194.42:9090/api/1/get/users',
data: {
"level": that.data.level + 1,
},
header: {
'content-type': 'application/json',
'token': that.data.token
},
method: 'POST',
dataType: 'json',
success: (res) => {
console.log(res, 'lsit');
that.setData({ 'peoplelist': res.data.data, 'inputvalue': "" })
},
fail: (err) => { console.log(err); },
complete: () => { }
});
}
});
-
后端
package com.huahuo.huahuobank.pojo;
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 java.io.Serializable;
import lombok.Data;
/**
*
* @TableName hgroups
*/
@TableName(value ="hgroups")
@Data
public class Hgroups implements Serializable {
/**
*
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
*
*/
@TableField(value = "name")
private String name;
@TableField(value = "level")
private Integer level;
/**
*
*/
@TableField(value = "num")
private Integer num;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Hgroups other = (Hgroups) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
&& (this.getNum() == null ? other.getNum() == null : this.getNum().equals(other.getNum()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((getNum() == null) ? 0 : getNum().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", name=").append(name);
sb.append(", num=").append(num);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}
issue

今日总结
| 学号 | 姓名 | 昨天站立式会议到现在的进展 | 所遇困难 | 今天到明天会议的安排 | 心得体会 |
|---|---|---|---|---|---|
| 102101113 | 王嘉星 | 完成新建队伍功能相关模块 | 在前端设置权限与后端对接时出现困难 | 优化UI和代码 | 单写前端而不会后端知识是不够的,前后端知识都要懂 |
| 102101337 | 施心隆 | 实现新建队伍功能 | 后端数据库操作有误 | 优化代码 | 继续学习 |
| 102101130 | 陈泽力 | 完善图片上传和下载 | 无 | 优化代码 | 无 |
| 102101139 | 郑礼铄 | 无 | 无 | 无 | 无 |
| 102101543 | 蔡林辉 | 完善了队伍功能 | 设置权限监控时出现了问题 | 优化代码 | 多实践 |
| 102101116 | 刘宇星 | 完成新建队伍功能接口 | 无 | 完善功能 | 继续学习 |
| 102101342 | 蔡嘉钦 | 完成新建队伍功能相关模块 | 使用后端接口时出现失误 | 继续完善相关代码 | 多学多练 |
| 102101343 | 颜景辉 | 完成新建队伍相关功能接口设计 | 传输数据的结构待优化 | 多多学习、查阅博客 | 要坚持学习 |
| 102101115 | 刘庆林 | 调整界面ui比例 | 无 | 总结工作内容 | 继续学习 |
| 102101423 | 沈棋燊 | 对新建队伍功能进行测试 |
难以设计全面且准确的测试用例 | 无 | 在测试过程中的记录和总结对于未来的优化和改进至关重要。通过记录测试过程中发现的问题、解决方案以及测试结果,可以为未来的版本升级提供宝贵的参考资料。同时,总结测试过程中的经验和教训,有助于发现测试方法的不足之处,并为下一轮测试工作提供指导。这样做可以不断优化测试流程,提高测试效率,同时也有助于小程序的持续改进和用户体验的提升。因此,记录和总结是测试工作中不可或缺的环节 |
相关推荐
高校及科研院所如何利用外部数据完善技术转移转化机制.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)
内容概要:本文档围绕“【完全复现】虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比”这一主题,利用Simulink和Matlab平台,系统性地实现了虚拟同步发电机(VSG)的自适应惯量与阻尼控制策略的建模与仿真。内容涵盖VSG的核心控制原理、系统动态响应特性分析、根轨迹绘制以及在不同调节系数下的性能对比研究,旨在深入剖析关键控制参数对系统稳定性与动态性能的影响机制,为新能源并网系统中提升频率支撑能力和暂态稳定性的控制策略设计提供理论依据和技术支持。; 适合人群:具备扎实的电力系统分析与自动控制理论基础,熟练掌握Matlab/Simulink仿真工具,主要从事新能源发电、微电网运行、电力电子变换器控制或电力系统稳定研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展虚拟同步发电机(VSG)的建模与先进控制策略的深入研究;②探究自适应惯量与阻尼控制对改善电网频率响应速度和平抑功率波动的作用机理;③运用根轨迹法进行系统稳定性分析,并指导控制器参数的优化整定;④完成高水平学术论文撰写或科研项目申报所需的仿真复现实验。; 阅读建议:本资源以“完全复现”为核心目标,提供了完整的仿真模型与配套代码。使用者应在深入理解同步发电机转子运动方程、虚拟惯量及阻尼物理意义的基础上,结合电力系统暂态稳定理论,逐步操作并调试仿真模型,尤其需关注不同调节系数变化对系统动态性能指标(如超调量、调节时间)的影响,从而深化对VSG内在控制机制与稳定边界的认知。
前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-dQ4ehf7C1792158475
内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等问题。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;DtPXB1792158476
科技服务机构如何通过数据服务增强市场竞争力?.docx
科技服务机构如何通过数据服务增强市场竞争力?
基于双向DC-DC变换器的储能电池SOC充电+放电双模式Simulink仿真
内容概要:本文详细介绍了一种基于双向DC-DC变换器的储能电池SOC(荷电状态)充放电双模式Simulink仿真模型,旨在实现储能系统在充电与放电两种工作模式下的智能切换与精确控制。该模型依托Simulink平台搭建,通过检测电池SOC实时值,动态判断并切换充放电模式,有效防止过充与过放,提升电池使用寿命与能量利用效率。系统涵盖双向功率变换、电压电流双闭环控制、模式切换逻辑及保护机制等关键环节,充分体现了电力电子变换与电池管理系统(BMS)的深度融合。该仿真模型适用于微电网、电动汽车及可再生能源系统中的能量管理研究,为优化储能调度策略、提高系统稳定性提供了可靠的技术支撑。; 适合人群:具备一定电力电子技术、自动控制理论及Simulink建模基础,从事新能源、储能系统、电力系统仿真等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究储能电池在不同负载或发电条件下的充放电动态行为;②优化电池管理系统中SOC估算精度与充放电控制策略;③验证双向DC-DC变换器在能量双向流动中的响应特性与控制性能;④为微电网能量调度、电动汽车能量回收、风光储一体化系统等实际应用场景提供仿真验证与设计依据。; 阅读建议:建议结合Simulink仿真环境动手实践,深入理解主电路拓扑、控制环路设计及模式切换逻辑,同时可配合相关文献资料进一步探究PI控制、滞环控制等算法对系统动态性能的影响,以全面提升对储能系统能量管理机制的认知与设计能力。


