4.21冲刺记录和课下作业
典型用户:吴小石头(设备台账管理场景)
| 类别 | 详情 |
|---|---|
| 名字 | 吴小石头 |
| 性别、年龄 | 男,20岁 |
| 职业 | 帮父亲做石头生意,兼管设备台账(客服设备、消防设备方向)管理 |
| 收入 | 收入上交父亲,参与设备管理工作无额外独立收入 |
| 知识层次和能力 | 河曲村农机技校毕业,会基础电脑操作,可通过简单培训掌握设备台账系统基础功能,能上网、聊天、游戏 |
| 生活/工作情况 | 日常帮父亲做石头生意,工作之余常泡在顶球网吧,需利用网吧电脑完成设备台账(客服、消防设备)的信息维护,如回答买家设备相关疑问、更新设备资料等 |
| 动机、目的、困难 | 希望通过管好设备台账,助力石头生意拓展,早日盖房独立;困难在于要快速熟悉客服、消防设备台账管理逻辑,扩大石头生意销路,让更多人了解设备关联业务 |
| 用户偏好 | 上网、游戏、交友,愿在网吧环境用轻松方式(如边玩游戏边抽空处理)管理设备台账 |
| 用户比例 | 此类兼顾家族生意、需用基础系统管理设备的年轻群体,在相关小生意从业者中占比待调研(可后续根据业务覆盖范围统计 ) |
| 典型场景 | ①在顶球网吧,收到买家关于客服/消防设备关联石头产品的咨询,需查询设备台账(如设备适配石头规格、过往故障维修对产品影响等)回答疑问 ②定期(如每周)抽时间登录系统,更新客服、消防设备台账里的设备履历、变更记录(因石头生意中设备使用、调配产生的变动) |
| 典型描述 | “我不在顶球网吧,就在去顶球网吧的路上,顺道把客服和消防设备台账的事儿也处理处理,让买石头的人更放心!” |
今日全力投入故障销号模块后端接口开发,实现了设备故障从处理到销号的核心业务逻辑。当现场工程师点击 “已完成” 后,故障状态能够自动变更为待销号,并将审核任务按照班组长、工区长的顺序自动推送。同时,完成了审核人员查看故障处理全流程记录接口的开发,包括接单时间、关单时间、故障描述等信息的获取。
在开发过程中,任务推送的顺序逻辑出现错误,导致审核任务推送混乱,通过仔细检查代码逻辑,调整任务推送的优先级设置,解决了该问题。此外,在获取现场照片信息时,由于照片存储路径设计不合理,导致无法正确读取照片,重新规划照片存储路径和读取方式后得以解决。目前,故障销号模块后端接口的核心功能已初步实现,明日将继续完善接口功能,并开始开发前端页面。
package com.example.devicemanagesystem.entity;
import lombok.Getter;
import java.util.Date;
public class InspectionPhoto {
private Long photoId;
@Getter
private Long taskId;
@Getter
private String photoUrl;
@Getter
private String photoType;
@Getter
private Date uploadTime;
@Getter
private String watermarkInfo;
private Boolean isApproved;
@Getter
private String rejectReason;
@Getter
private Integer fileSize;
@Getter
private String fileMd5;
@Getter
private Date createTime;
public void setPhotoId(Long photoId) {
this.photoId = photoId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
public void setPhotoUrl(String photoUrl) {
this.photoUrl = photoUrl;
}
public void setPhotoType(String photoType) {
this.photoType = photoType;
}
public void setUploadTime(Date uploadTime) {
this.uploadTime = uploadTime;
}
public void setWatermarkInfo(String watermarkInfo) {
this.watermarkInfo = watermarkInfo;
}
public Boolean getIsApproved() {
return isApproved;
}
public void setIsApproved(Boolean approved) {
isApproved = approved;
}
public void setRejectReason(String rejectReason) {
this.rejectReason = rejectReason;
}
public void setFileSize(Integer fileSize) {
this.fileSize = fileSize;
}
public void setFileMd5(String fileMd5) {
this.fileMd5 = fileMd5;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Long getPhotoId() {
return photoId;
}
public Long getTaskId() {
return taskId;
}
public String getPhotoUrl() {
return photoUrl;
}
public String getPhotoType() {
return photoType;
}
public Date getUploadTime() {
return uploadTime;
}
public String getWatermarkInfo() {
return watermarkInfo;
}
public Boolean getApproved() {
return isApproved;
}
public String getRejectReason() {
return rejectReason;
}
public Integer getFileSize() {
return fileSize;
}
public String getFileMd5() {
return fileMd5;
}
public Date getCreateTime() {
return createTime;
}
}
package com.example.devicemanagesystem.entity;
import lombok.Data;
import java.util.Date;
@Data
public class InspectionTask {
private Long taskId;
private Long deviceId;
private String inspectorId;
private Date orderTime;
private Date closeTime;
private String status;
private String inspectionItems;
private String inspectionRecords;
private String deviceStatus;
private String remarks;
private Boolean teamLeaderApproval;
private Boolean sectionLeaderApproval;
private Boolean stationLeaderApproval;
private String stationLeaderSignature;
private Integer satisfactionScore;
private Date createdAt;
private Date updatedAt;
// 关联的设备信息
private Device device;
public Long getTaskId() {
return taskId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
public Long getDeviceId() {
return deviceId;
}
public void setDeviceId(Long deviceId) {
this.deviceId = deviceId;
}
public String getInspectorId() {
return inspectorId;
}
public void setInspectorId(String inspectorId) {
this.inspectorId = inspectorId;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public Date getCloseTime() {
return closeTime;
}
public void setCloseTime(Date closeTime) {
this.closeTime = closeTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getInspectionItems() {
return inspectionItems;
}
public void setInspectionItems(String inspectionItems) {
this.inspectionItems = inspectionItems;
}
public String getInspectionRecords() {
return inspectionRecords;
}
public void setInspectionRecords(String inspectionRecords) {
this.inspectionRecords = inspectionRecords;
}
public String getDeviceStatus() {
return deviceStatus;
}
public void setDeviceStatus(String deviceStatus) {
this.deviceStatus = deviceStatus;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public Boolean getTeamLeaderApproval() {
return teamLeaderApproval;
}
public void setTeamLeaderApproval(Boolean teamLeaderApproval) {
this.teamLeaderApproval = teamLeaderApproval;
}
public Boolean getSectionLeaderApproval() {
return sectionLeaderApproval;
}
public void setSectionLeaderApproval(Boolean sectionLeaderApproval) {
this.sectionLeaderApproval = sectionLeaderApproval;
}
public Boolean getStationLeaderApproval() {
return stationLeaderApproval;
}
public void setStationLeaderApproval(Boolean stationLeaderApproval) {
this.stationLeaderApproval = stationLeaderApproval;
}
public String getStationLeaderSignature() {
return stationLeaderSignature;
}
public void setStationLeaderSignature(String stationLeaderSignature) {
this.stationLeaderSignature = stationLeaderSignature;
}
public Integer getSatisfactionScore() {
return satisfactionScore;
}
public void setSatisfactionScore(Integer satisfactionScore) {
this.satisfactionScore = satisfactionScore;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Date getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
public Device getDevice() {
return device;
}
public void setDevice(Device device) {
this.device = device;
}
}
package com.example.devicemanagesystem.controller;
import com.example.devicemanagesystem.config.ApiResponse;
import com.example.devicemanagesystem.entity.FaultTask;
import com.example.devicemanagesystem.service.FaultTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api/fault-tasks")
public class FaultTaskController {
@Autowired
private FaultTaskService faultTaskService;
/**
* 创建故障单
*/
@PostMapping
public ApiResponse<FaultTask> createFaultTask(@RequestBody FaultTask faultTask) {
return ApiResponse.success(faultTaskService.createFaultTask(faultTask));
}
/**
* 获取设备的故障单列表
*/
@GetMapping("/device/{deviceId}")
public ApiResponse<List<FaultTask>> getFaultTasksByDevice(@PathVariable Long deviceId) {
return ApiResponse.success(faultTaskService.getFaultTasksByDeviceId(deviceId));
}
/**
* 获取故障单详情
*/
@GetMapping("/{id}")
public ApiResponse<FaultTask> getFaultTaskById(@PathVariable Long id) {
return ApiResponse.success(faultTaskService.getFaultTaskById(id));
}
/**
* 更新故障单状态
*/
@PutMapping("/{id}/status")
public ApiResponse<Boolean> updateFaultTaskStatus(
@PathVariable Long id,
@RequestParam String status
) {
return ApiResponse.success(faultTaskService.updateFaultTaskStatus(id, status));
}
/**
* 获取当前用户的待处理故障单
*/
@GetMapping("/pending")
public ApiResponse<List<FaultTask>> getPendingFaultTasks(
@RequestParam String inspectorId
) {
return ApiResponse.success(faultTaskService.getPendingFaultTasksByInspector(inspectorId));
}
/**
* 班组长验收故障单
*/
@PostMapping("/{id}/approve-by-team-leader")
public ApiResponse<Boolean> approveByTeamLeader(
@PathVariable Long id,
@RequestBody Map<String, Object> request
) {
boolean approved = Boolean.parseBoolean(request.getOrDefault("approved", "false").toString());
String comments = request.getOrDefault("comments", "").toString();
return ApiResponse.success(faultTaskService.approveByTeamLeader(id, approved, comments));
}
/**
* 工区长验收故障单
*/
@PostMapping("/{id}/approve-by-section-leader")
public ApiResponse<Boolean> approveBySectionLeader(
@PathVariable Long id,
@RequestBody Map<String, Object> request
) {
boolean approved = Boolean.parseBoolean(request.getOrDefault("approved", "false").toString());
String comments = request.getOrDefault("comments", "").toString();
return ApiResponse.success(faultTaskService.approveBySectionLeader(id, approved, comments));
}
/**
* 主管验收故障单
*/
@PostMapping("/{id}/approve-by-station-leader")
public ApiResponse<Boolean> approveByStationLeader(
@PathVariable Long id,
@RequestBody Map<String, Object> request
) {
boolean approved = Boolean.parseBoolean(request.getOrDefault("approved", "false").toString());
String comments = request.getOrDefault("comments", "").toString();
Integer satisfactionScore = request.containsKey("satisfactionScore") ?
Integer.parseInt(request.get("satisfactionScore").toString()) : null;
String signature = request.getOrDefault("signature", "").toString();
return ApiResponse.success(faultTaskService.approveByStationLeader(id, approved, comments, satisfactionScore, signature));
}
/**
* 根据状态获取故障单列表
*/
@GetMapping("/status/{status}")
public ApiResponse<List<FaultTask>> getFaultTasksByStatus(@PathVariable String status) {
return ApiResponse.success(faultTaskService.getFaultTasksByStatus(status));
}
}

浙公网安备 33010602011771号