diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java index 7e4c060..1a3a116 100644 --- a/core/src/main/java/com/dite/znpt/constant/Message.java +++ b/core/src/main/java/com/dite/znpt/constant/Message.java @@ -64,4 +64,6 @@ public class Message implements Serializable { public static final String WORK_SHIFT_NOT_EXIST = "班次不存在"; public static final String WORK_SHIFT_IS_NOT_UNPUBLISH = "班次的状态不是未发布"; public static final String IMAGE_AUTO_MARK_ERROR = "自动标注出错:"; + public static final String SUGGESTION_ID_IS_NOT_EXIST = "维修建议id不存在"; + public static final String SUGGESTION_LEVEL_TYPE_FORBID_REPEAT = "存在缺陷级别为[{}]缺陷类型为[{}]的维修建议"; } diff --git a/core/src/main/java/com/dite/znpt/converts/Converts.java b/core/src/main/java/com/dite/znpt/converts/Converts.java index 61ea9be..c6428a3 100644 --- a/core/src/main/java/com/dite/znpt/converts/Converts.java +++ b/core/src/main/java/com/dite/znpt/converts/Converts.java @@ -97,5 +97,11 @@ public interface Converts { WorkShiftResp toWorkShiftResp(WorkShiftEntity entity); WorkShiftEntity toWorkShiftEntity(WorkShiftReq req); + + List toMaintainSuggestionResp(List list); + + MaintainSuggestionResp toMaintainSuggestionResp(MaintainSuggestionEntity entity); + + MaintainSuggestionEntity toMaintainSuggestionEntity(MaintainSuggestionReq req); } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java new file mode 100644 index 0000000..7191246 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/MaintainSuggestionEntity.java @@ -0,0 +1,46 @@ +package com.dite.znpt.domain.entity; + +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 com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:18 + * @Description: + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("maintain_suggestion") +@ApiModel(value="MaintainSuggestionEntity对象", description="维修建议库") +public class MaintainSuggestionEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -5774159362861473940L; + + @ApiModelProperty("建议id") + @TableId(value = "suggestion_id", type = IdType.ASSIGN_UUID) + private String suggestionId; + + @ApiModelProperty("建议类容") + @TableField("suggestion_content") + private String suggestionContent; + + @ApiModelProperty("缺陷级别") + @TableField("defect_level") + private String defectLevel; + + + @ApiModelProperty("缺陷类型") + @TableField("defect_type") + private String defectType; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java new file mode 100644 index 0000000..0c6b112 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionReq.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:25 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("维修建议请求实体") +public class MaintainSuggestionReq implements Serializable { + @Serial + private static final long serialVersionUID = 6390137746113715095L; + + @NotBlank(message = "建议内容不能为空") + @Size(max = 200, message = "建议内容不能超过200个字符") + @ApiModelProperty("建议内容") + private String suggestionContent; + + @NotBlank(message = "缺陷类型不能为空") + @ApiModelProperty("缺陷类型,枚举:DefectTypeEnum") + private String defectType; + + @NotBlank(message = "缺陷级别不能为空") + @ApiModelProperty("缺陷级别,枚举:DefectLevelEnum") + private String defectLevel; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java new file mode 100644 index 0000000..42b2963 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/MaintainSuggestionResp.java @@ -0,0 +1,40 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:26 + * @Description: + */ +@Data +@Accessors(chain = true) +@ApiModel("维修建议响应实体") +public class MaintainSuggestionResp implements Serializable { + @Serial + private static final long serialVersionUID = -5835303002016693551L; + + @ApiModelProperty("建议id") + private String suggestionId; + + @ApiModelProperty("建议内容") + private String suggestionContent; + + @ApiModelProperty("缺陷类型,枚举:DefectTypeEnum") + private String defectType; + + @ApiModelProperty("缺陷类型描述") + private String defectTypeLabel; + + @ApiModelProperty("缺陷级别,枚举:DefectLevelEnum") + private String defectLevel; + + @ApiModelProperty("缺陷级别描述") + private String defectLevelLabel; +} diff --git a/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java b/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java new file mode 100644 index 0000000..ed0e581 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/MaintainSuggestionMapper.java @@ -0,0 +1,13 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:22 + * @Description: + */ +public interface MaintainSuggestionMapper extends BaseMapper { + +} diff --git a/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java b/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java new file mode 100644 index 0000000..af96086 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/MaintainSuggestionService.java @@ -0,0 +1,23 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:24 + * @Description: + */ +public interface MaintainSuggestionService extends IService { + + List page(String defectLevel, String defectType); + List list(String defectLevel, String defectType); + MaintainSuggestionResp detail(String suggestionId); + void save(MaintainSuggestionReq req); + void update(String suggestionId, MaintainSuggestionReq req); + void deleteById(String suggestionId); +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java new file mode 100644 index 0000000..4cf5e6d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/MaintainSuggestionServiceImpl.java @@ -0,0 +1,99 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.entity.MaintainSuggestionEntity; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; +import com.dite.znpt.enums.DefectLevelEnum; +import com.dite.znpt.enums.DefectTypeEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.MaintainSuggestionMapper; +import com.dite.znpt.service.MaintainSuggestionService; +import com.dite.znpt.util.PageUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:25 + * @Description: + */ +@Service +public class MaintainSuggestionServiceImpl extends ServiceImpl implements MaintainSuggestionService { + @Override + public List page(String defectLevel, String defectType) { + PageUtil.startPage(); + return this.list(defectLevel, defectType); + } + + @Override + public List list(String defectLevel, String defectType) { + List result = Converts.INSTANCE.toMaintainSuggestionResp( + this.list(Wrappers.lambdaQuery(MaintainSuggestionEntity.class) + .eq(StrUtil.isNotEmpty(defectLevel), MaintainSuggestionEntity::getDefectLevel, defectLevel) + .eq(StrUtil.isNotEmpty(defectType), MaintainSuggestionEntity::getDefectType, defectType) + )); + result.forEach(resp -> { + resp.setDefectLevelLabel(DefectLevelEnum.getDescByCode(resp.getDefectLevel())); + resp.setDefectTypeLabel(DefectTypeEnum.getDescByCode(resp.getDefectType())); + }); + return result; + } + + @Override + public MaintainSuggestionResp detail(String suggestionId) { + MaintainSuggestionResp result = Converts.INSTANCE.toMaintainSuggestionResp(this.getById(suggestionId)); + result.setDefectLevelLabel(DefectLevelEnum.getDescByCode(result.getDefectLevel())); + result.setDefectTypeLabel(DefectTypeEnum.getDescByCode(result.getDefectType())); + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void save(MaintainSuggestionReq req) { + if(!validDefectLevelAndType(req.getDefectLevel(), req.getDefectType())){ + throw new ServiceException(StrUtil.format(Message.SUGGESTION_LEVEL_TYPE_FORBID_REPEAT, req.getDefectLevel(), req.getDefectType())); + } + this.save(Converts.INSTANCE.toMaintainSuggestionEntity(req)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(String suggestionId, MaintainSuggestionReq req) { + MaintainSuggestionEntity maintainSuggestion = this.getById(suggestionId); + if(null == maintainSuggestion){ + throw new ServiceException(Message.SUGGESTION_ID_IS_NOT_EXIST); + } + if(!req.getDefectLevel().equals(maintainSuggestion.getDefectLevel()) || !req.getDefectType().equals(maintainSuggestion.getDefectType())){ + if(!validDefectLevelAndType(req.getDefectLevel(), req.getDefectType())){ + throw new ServiceException(StrUtil.format(Message.SUGGESTION_LEVEL_TYPE_FORBID_REPEAT, req.getDefectLevel(), req.getDefectType())); + } + } + MaintainSuggestionEntity entity = Converts.INSTANCE.toMaintainSuggestionEntity(req); + entity.setSuggestionId(suggestionId); + this.updateById(entity); + } + + private Boolean validDefectLevelAndType(String defectLevel, String defectType){ + return this.list( + Wrappers.lambdaQuery(MaintainSuggestionEntity.class) + .eq(MaintainSuggestionEntity::getDefectLevel, defectLevel) + .eq(MaintainSuggestionEntity::getDefectType, defectType) + ).size() == 0 ; + + }; + @Transactional(rollbackFor = Exception.class) + @Override + public void deleteById(String suggestionId) { + if(null == this.getById(suggestionId)){ + throw new ServiceException(Message.SUGGESTION_ID_IS_NOT_EXIST); + } + this.removeById(suggestionId); + } +} diff --git a/core/src/main/resources/mapper/MaintainSuggestionMapper.xml b/core/src/main/resources/mapper/MaintainSuggestionMapper.xml new file mode 100644 index 0000000..597b5f8 --- /dev/null +++ b/core/src/main/resources/mapper/MaintainSuggestionMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java b/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java new file mode 100644 index 0000000..cbc0220 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/MaintainSuggestionController.java @@ -0,0 +1,67 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.MaintainSuggestionReq; +import com.dite.znpt.domain.vo.MaintainSuggestionResp; +import com.dite.znpt.service.MaintainSuggestionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/7/7 22:31 + * @Description: + */ +@Api(tags = "维修建议库") +@RestController +@RequestMapping("/maintain_suggestion") +public class MaintainSuggestionController { + + @Resource + private MaintainSuggestionService maintainSuggestionService; + + @ApiOperation(value = "分页查询维修建议列表", httpMethod = "GET") + @GetMapping("/page") + public PageResult page(@RequestParam(required = false) String defectLevel, @RequestParam(required = false) String defectType){ + return PageResult.ok(maintainSuggestionService.page(defectLevel, defectType)); + } + + @ApiOperation(value = "查询维修建议列表", httpMethod = "GET") + @GetMapping("/list") + public Result> list(@RequestParam(required = false) String defectLevel, @RequestParam(required = false) String defectType){ + return Result.ok(maintainSuggestionService.list(defectLevel, defectType)); + } + + @ApiOperation(value = "查询维修建议详情", httpMethod = "GET") + @GetMapping("/detail/{suggestionId}") + public Result detail(@PathVariable String suggestionId){ + return Result.ok(maintainSuggestionService.detail(suggestionId)); + } + + @ApiOperation(value = "新增维修建议", httpMethod = "POST") + @PostMapping + public Result add(@Validated @RequestBody MaintainSuggestionReq req){ + maintainSuggestionService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "修改维修建议", httpMethod = "PUT") + @PutMapping + public Result edit(@PathVariable String suggestionId, @Validated @RequestBody MaintainSuggestionReq req){ + maintainSuggestionService.update(suggestionId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除维修建议", httpMethod = "DELETE") + @DeleteMapping("/{suggestionId}") + public Result remove(@PathVariable String suggestionId){ + maintainSuggestionService.deleteById(suggestionId); + return Result.ok(); + } +}