From 3f0dccca624434666f26e1cb978b8a83df11a61b Mon Sep 17 00:00:00 2001 From: liuao <1150003126@qq.com> Date: Tue, 6 May 2025 09:37:57 +0800 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B45=E6=9C=886=E6=97=A509:37:50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zilber/boot/Constants/HttpStatus.java | 5 +- .../booking/controller/BookingController.java | 82 ++++++ .../module/booking/dao/BookingMapper.java | 62 ++++ .../module/booking/enums/ApprovalStatus.java | 34 +++ .../module/booking/enums/BookingType.java | 32 ++ .../booking/enums/InspectionMethod.java | 33 +++ .../module/booking/form/ApprovalForm.java | 41 +++ .../boot/module/booking/form/BookingForm.java | 24 ++ .../module/booking/form/add/BookingAF.java | 115 ++++++++ .../module/booking/form/modify/BookingMF.java | 39 +++ .../module/booking/form/pr/BookingPR.java | 113 ++++++++ .../zilber/boot/module/booking/group/Me.java | 11 + .../boot/module/booking/group/Reject.java | 11 + .../boot/module/booking/pojo/Booking.java | 167 +++++++++++ .../booking/service/BookingService.java | 41 +++ .../service/impl/BookingServiceImpl.java | 273 ++++++++++++++++++ .../boot/module/booking/vo/BookingVO.java | 126 ++++++++ .../com/zilber/boot/utils/AjaxResult.java | 16 + .../com/zilber/boot/utils/InternalResult.java | 25 ++ .../com/zilber/boot/utils/ValidatorUtils.java | 47 +++ .../com/zilber/boot/utils/page/PageUtils.java | 115 ++++++++ .../com/zilber/boot/utils/page/Pageable.java | 35 +++ 22 files changed, 1446 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zilber/boot/module/booking/controller/BookingController.java create mode 100644 src/main/java/com/zilber/boot/module/booking/dao/BookingMapper.java create mode 100644 src/main/java/com/zilber/boot/module/booking/enums/ApprovalStatus.java create mode 100644 src/main/java/com/zilber/boot/module/booking/enums/BookingType.java create mode 100644 src/main/java/com/zilber/boot/module/booking/enums/InspectionMethod.java create mode 100644 src/main/java/com/zilber/boot/module/booking/form/ApprovalForm.java create mode 100644 src/main/java/com/zilber/boot/module/booking/form/BookingForm.java create mode 100644 src/main/java/com/zilber/boot/module/booking/form/add/BookingAF.java create mode 100644 src/main/java/com/zilber/boot/module/booking/form/modify/BookingMF.java create mode 100644 src/main/java/com/zilber/boot/module/booking/form/pr/BookingPR.java create mode 100644 src/main/java/com/zilber/boot/module/booking/group/Me.java create mode 100644 src/main/java/com/zilber/boot/module/booking/group/Reject.java create mode 100644 src/main/java/com/zilber/boot/module/booking/pojo/Booking.java create mode 100644 src/main/java/com/zilber/boot/module/booking/service/BookingService.java create mode 100644 src/main/java/com/zilber/boot/module/booking/service/impl/BookingServiceImpl.java create mode 100644 src/main/java/com/zilber/boot/module/booking/vo/BookingVO.java create mode 100644 src/main/java/com/zilber/boot/utils/InternalResult.java create mode 100644 src/main/java/com/zilber/boot/utils/ValidatorUtils.java create mode 100644 src/main/java/com/zilber/boot/utils/page/PageUtils.java create mode 100644 src/main/java/com/zilber/boot/utils/page/Pageable.java diff --git a/src/main/java/com/zilber/boot/Constants/HttpStatus.java b/src/main/java/com/zilber/boot/Constants/HttpStatus.java index 0f861d5..d0e1c14 100644 --- a/src/main/java/com/zilber/boot/Constants/HttpStatus.java +++ b/src/main/java/com/zilber/boot/Constants/HttpStatus.java @@ -11,7 +11,10 @@ public class HttpStatus * 操作成功 */ public static final int SUCCESS = 200; - + /** + * 操作失败 + */ + public static final int FAILED = -1; /** * 对象创建成功 */ diff --git a/src/main/java/com/zilber/boot/module/booking/controller/BookingController.java b/src/main/java/com/zilber/boot/module/booking/controller/BookingController.java new file mode 100644 index 0000000..164450f --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/controller/BookingController.java @@ -0,0 +1,82 @@ +package com.zilber.boot.module.booking.controller; + +import com.zilber.boot.module.booking.form.ApprovalForm; +import com.zilber.boot.module.booking.form.add.BookingAF; +import com.zilber.boot.module.booking.form.modify.BookingMF; +import com.zilber.boot.module.booking.form.pr.BookingPR; +import com.zilber.boot.module.booking.service.BookingService; +import com.zilber.boot.utils.AjaxResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.Serializable; +import java.util.List; + +/** + * 预约记录(Booking)表控制层 + * + * @author liuao + * @since 2025-04-25 15:50:18 + */ +@RestController +@RequestMapping("/booking") +@Api(tags = "预约记录管理") +public class BookingController +{ + + @Autowired + private BookingService service; + + @PostMapping + @ApiOperation("添加预约记录") + public AjaxResult addBooking(@RequestBody BookingAF form) + { + return new AjaxResult(service.addBooking(form)); + } + + @PutMapping + @ApiOperation("修改预约记录信息") + public AjaxResult updBooking(@RequestBody BookingMF form) + { + return new AjaxResult(service.updBooking(form)); + } + + @PutMapping("/approve") + @ApiOperation("审批预约") + public AjaxResult approve(@RequestBody ApprovalForm form) + { + return new AjaxResult(service.approve(form)); + } + + @GetMapping("/{id}") + @ApiOperation("获取单挑预约信息") + public AjaxResult getBooking(@PathVariable Serializable id) + { + return AjaxResult.success(service.getBooking(id)); + } + + @GetMapping + @ApiOperation("分页请求") + public AjaxResult getPage(BookingPR pr) + { + return AjaxResult.success(service.getPage(pr)); + } + + @DeleteMapping + @ApiOperation("删除单条预约记录") + public AjaxResult deleteBooking(@RequestBody BookingMF form) + { + return new AjaxResult(service.deleteBooking(form)); + } + + @DeleteMapping("/s") + @ApiOperation("批量删除预约记录") + public AjaxResult deleteBookings(@RequestBody List idList) + { + return new AjaxResult(service.deleteBookings(idList)); + } + +} + diff --git a/src/main/java/com/zilber/boot/module/booking/dao/BookingMapper.java b/src/main/java/com/zilber/boot/module/booking/dao/BookingMapper.java new file mode 100644 index 0000000..a93f854 --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/dao/BookingMapper.java @@ -0,0 +1,62 @@ +package com.zilber.boot.module.booking.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zilber.boot.module.booking.pojo.Booking; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 预约记录(Booking)表数据库访问层 + * + * @author liuao + * @since 2025-04-25 15:49:54 + */ +@Mapper +@Repository +public interface BookingMapper + extends BaseMapper +{ + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + Booking queryById(String id); + + /** + * 分页查询 + * + * @param booking 筛选条件 + * @return 查询结果 + */ + List queryList(Booking booking); + + /** + * 新增数据 + * + * @param booking 实例对象 + * @return 实例对象 + */ + int addBooking(Booking booking); + + /** + * 修改数据 + * + * @param booking 实例对象 + * @return 实例对象 + */ + int editBooking(Booking booking); + + /** + * 通过主键删除数据 + * + * @return 是否成功 + */ + int deleteBooking(String[] ids); + +} + diff --git a/src/main/java/com/zilber/boot/module/booking/enums/ApprovalStatus.java b/src/main/java/com/zilber/boot/module/booking/enums/ApprovalStatus.java new file mode 100644 index 0000000..995504f --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/enums/ApprovalStatus.java @@ -0,0 +1,34 @@ +package com.zilber.boot.module.booking.enums; + +/** + * @Author LJX + * @TIME 2025-04-28 10:02 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +public enum ApprovalStatus +{ + + NONE("0"),//待批 + PASS("1"),//通过 + REJECT("2"),//驳回 + ; + + private String code; + + ApprovalStatus(String code) { + this.code = code; + } + + ApprovalStatus() { + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/src/main/java/com/zilber/boot/module/booking/enums/BookingType.java b/src/main/java/com/zilber/boot/module/booking/enums/BookingType.java new file mode 100644 index 0000000..5b73f1b --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/enums/BookingType.java @@ -0,0 +1,32 @@ +package com.zilber.boot.module.booking.enums; + +/** + * @Author LJX + * @TIME 2025-04-27 11:37 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +public enum BookingType +{ + PRT("1"), //省招检测 + ME("2"),//厂家委托 + ; + + private String code; + + BookingType() { + } + + BookingType(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/src/main/java/com/zilber/boot/module/booking/enums/InspectionMethod.java b/src/main/java/com/zilber/boot/module/booking/enums/InspectionMethod.java new file mode 100644 index 0000000..00f22bb --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/enums/InspectionMethod.java @@ -0,0 +1,33 @@ +package com.zilber.boot.module.booking.enums; + +/** + * @Author LJX + * @TIME 2025-04-27 14:49 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +public enum InspectionMethod +{ + FI("1"),//全检 + SI("2"),//抽检 + ; + + private String code; + + InspectionMethod() { + } + + InspectionMethod(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + +} diff --git a/src/main/java/com/zilber/boot/module/booking/form/ApprovalForm.java b/src/main/java/com/zilber/boot/module/booking/form/ApprovalForm.java new file mode 100644 index 0000000..0a2184d --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/form/ApprovalForm.java @@ -0,0 +1,41 @@ +package com.zilber.boot.module.booking.form; + +import com.zilber.boot.module.booking.enums.ApprovalStatus; +import com.zilber.boot.module.booking.group.Reject; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @Author LJX + * @TIME 2025-04-28 10:00 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约审批表单") +public class ApprovalForm +{ + + @ApiModelProperty("id") + @NotNull(message = "id不能为空") + private Long id; + + @ApiModelProperty("审批状态(0-待批,1-通过,2-驳回)") + @NotNull(message = "审批状态不能为空") + private ApprovalStatus approvalStatus; + + @ApiModelProperty("驳回理由") + @NotNull(message = "驳回理由不能为空", groups = Reject.class) + @NotBlank(message = "驳回理由不能为空", groups = Reject.class) + private String rejectReason; + +} diff --git a/src/main/java/com/zilber/boot/module/booking/form/BookingForm.java b/src/main/java/com/zilber/boot/module/booking/form/BookingForm.java new file mode 100644 index 0000000..6b2b6bc --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/form/BookingForm.java @@ -0,0 +1,24 @@ +package com.zilber.boot.module.booking.form; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author LJX + * @TIME 2025-04-27 9:43 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录表单") +public class BookingForm +{ + + + +} diff --git a/src/main/java/com/zilber/boot/module/booking/form/add/BookingAF.java b/src/main/java/com/zilber/boot/module/booking/form/add/BookingAF.java new file mode 100644 index 0000000..4b72d2c --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/form/add/BookingAF.java @@ -0,0 +1,115 @@ +package com.zilber.boot.module.booking.form.add; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zilber.boot.module.booking.enums.BookingType; +import com.zilber.boot.module.booking.enums.InspectionMethod; +import com.zilber.boot.module.booking.form.BookingForm; +import com.zilber.boot.module.booking.group.Me; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @Author LJX + * @TIME 2025-04-27 9:12 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录添加表单") +public class BookingAF + extends BookingForm +{ + + /** + * 厂家id + */ + @ApiModelProperty(value = "厂家id") + @NotNull(message = "厂家id不能为空") + private Long factoryId; + /** + * 预约类型(1-省招检测,2-厂家委托) + */ + @ApiModelProperty(value = "预约类型(1-省招检测,2-厂家委托)") + @NotNull(message = "预约类型不能为空") + private BookingType bookingType; + /** + * 检测方式(1-全检,2-抽检) + */ + @ApiModelProperty(value = "检测方式(1-全检,2-抽检)") + @NotNull(message = "检测方式不能为空") + private InspectionMethod inspectionMethod; + /** + * 设备数量 + */ + @ApiModelProperty(value = "设备数量") + @NotNull(message = "设备数量不能为空") + @Min(value = 1, message = "设备数量不能小于0") + private Integer equipNum; + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型") + @NotNull(message = "设备类型不能为空") + @NotBlank(message = "设备类型不能为空") + private String equipType; + /** + * 预约检测日期 + */ + @ApiModelProperty(value = "预约检测日期") + @NotNull(message = "预约检测日期不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date inspectionDate; + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String remark; + /** + * 中标通知书路径 + */ + @ApiModelProperty(value = "中标通知书路径") + @NotNull(message = "中标通知书不能为空", groups = Me.class) + @NotBlank(message = "中标通知书不能为空", groups = Me.class) + private String loaUrl; + /** + * 地市公司 + */ + @ApiModelProperty(value = "地市公司") + @NotNull(message = "地市公司不能为空", groups = Me.class) + @NotBlank(message = "地市公司不能为空", groups = Me.class) + private String localOffice; + /** + * 中标类型 + */ + @ApiModelProperty(value = "中标类型") + @NotNull(message = "中标类型不能为空", groups = Me.class) + @NotBlank(message = "中标类型不能为空", groups = Me.class) + private String loaType; + /** + * 涉及工程类型 + */ + @ApiModelProperty(value = "涉及工程项目") + @NotNull(message = "涉及工程项目不能为空", groups = Me.class) + @NotBlank(message = "涉及工程项目不能为空", groups = Me.class) + private String projectName; + /** + * 招标批次 + */ + @ApiModelProperty(value = "招标批次") + @NotNull(message = "招标批次不能为空", groups = Me.class) + private Integer bidBatch; + +} diff --git a/src/main/java/com/zilber/boot/module/booking/form/modify/BookingMF.java b/src/main/java/com/zilber/boot/module/booking/form/modify/BookingMF.java new file mode 100644 index 0000000..d1cc4d8 --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/form/modify/BookingMF.java @@ -0,0 +1,39 @@ +package com.zilber.boot.module.booking.form.modify; + +import com.zilber.boot.module.booking.form.BookingForm; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; + +/** + * @Author LJX + * @TIME 2025-04-27 9:40 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录修改表单") +public class BookingMF + extends BookingForm +{ + + /** + * id + */ + @ApiModelProperty(value = "id") + @NotBlank(message = "id不能为空") + private Long id; + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String remark; + +} diff --git a/src/main/java/com/zilber/boot/module/booking/form/pr/BookingPR.java b/src/main/java/com/zilber/boot/module/booking/form/pr/BookingPR.java new file mode 100644 index 0000000..b92ac4a --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/form/pr/BookingPR.java @@ -0,0 +1,113 @@ +package com.zilber.boot.module.booking.form.pr; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zilber.boot.utils.page.Pageable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @Author LJX + * @TIME 2025-04-27 9:49 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录分页请求") +public class BookingPR + extends Pageable +{ + + /** + * 厂家id + */ + @ApiModelProperty(value = "厂家id") + private Long factoryId; + /** + * 预约类型(1-省招检测,2-厂家委托) + */ + @ApiModelProperty(value = "预约类型(1-省招检测,2-厂家委托)") + private String bookingType; + /** + * 检测方式(1-全检,2-抽检) + */ + @ApiModelProperty(value = "检测方式(1-全检,2-抽检)") + private String inspectionMethod; + /** + * 设备数量 + */ + @ApiModelProperty(value = "设备数量") + private Integer equipNum; + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型") + private String equipType; + /** + * 预约检测开始日期 + */ + @ApiModelProperty(value = "预约检测开始日期") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date inspectionDateStart; + /** + * 预约检测结束日期 + */ + @ApiModelProperty(value = "预约检测结束日期") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date inspectionDateEnd; + /** + * 地市公司 + */ + @ApiModelProperty(value = "地市公司") + private String localOffice; + /** + * 中标类型 + */ + @ApiModelProperty(value = "中标类型") + private String loaType; + /** + * 涉及工程类型 + */ + @ApiModelProperty(value = "涉及工程名称") + private String projectName; + /** + * 招标批次 + */ + @ApiModelProperty(value = "招标批次") + private Integer bidBatch; + /** + * 审批状态 + */ + @ApiModelProperty("审批状态(0-待批,1-通过,2-驳回)") + private String approvalStatus; + /** + * 审批开始时间 + */ + @ApiModelProperty("审批开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveTimeStart; + /** + * 审批结束时间 + */ + @ApiModelProperty("审批结束时间") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date approveTimeEnd; + /** + * 创建者id + */ + @ApiModelProperty(value = "创建者id") + private Long creatorId; + +} diff --git a/src/main/java/com/zilber/boot/module/booking/group/Me.java b/src/main/java/com/zilber/boot/module/booking/group/Me.java new file mode 100644 index 0000000..d43653c --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/group/Me.java @@ -0,0 +1,11 @@ +package com.zilber.boot.module.booking.group; + +/** + * @Author LJX + * @TIME 2025-04-27 11:47 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +public interface Me { +} diff --git a/src/main/java/com/zilber/boot/module/booking/group/Reject.java b/src/main/java/com/zilber/boot/module/booking/group/Reject.java new file mode 100644 index 0000000..5f92b59 --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/group/Reject.java @@ -0,0 +1,11 @@ +package com.zilber.boot.module.booking.group; + +/** + * @Author LJX + * @TIME 2025-04-28 10:00 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +public interface Reject { +} diff --git a/src/main/java/com/zilber/boot/module/booking/pojo/Booking.java b/src/main/java/com/zilber/boot/module/booking/pojo/Booking.java new file mode 100644 index 0000000..7b09a1b --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/pojo/Booking.java @@ -0,0 +1,167 @@ +package com.zilber.boot.module.booking.pojo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zilber.boot.module.booking.enums.ApprovalStatus; +import com.zilber.boot.module.booking.form.add.BookingAF; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; + +import java.io.Serializable; +import java.util.Calendar; +import java.util.Date; + +/** + * 预约记录(Booking)实体类 + * + * @author liuao + * @since 2025-04-25 15:49:55 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录") +@TableName("tc_booking") +public class Booking implements Serializable +{ + private static final long serialVersionUID = -37467439775541824L; + /** + * id + */ + @ApiModelProperty(value = "id") + @TableId(type = IdType.AUTO) + private Long id; + /** + * 厂家id + */ + @ApiModelProperty(value = "厂家id") + private Long factoryId; + /** + * 预约类型(1-省招检测,2-厂家委托) + */ + @ApiModelProperty(value = "预约类型(1-省招检测,2-厂家委托)") + private String bookingType; + /** + * 检测方式(1-全检,2-抽检) + */ + @ApiModelProperty(value = "检测方式(1-全检,2-抽检)") + private String inspectionMethod; + /** + * 设备数量 + */ + @ApiModelProperty(value = "设备数量") + private Integer equipNum; + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型") + private String equipType; + /** + * 预约检测日期 + */ + @ApiModelProperty(value = "预约检测日期") + private Date inspectionDate; + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String remark; + /** + * 中标通知书路径 + */ + @ApiModelProperty(value = "中标通知书路径") + private String loaUrl; + /** + * 地市公司 + */ + @ApiModelProperty(value = "地市公司") + private String localOffice; + /** + * 中标类型 + */ + @ApiModelProperty(value = "中标类型") + private String loaType; + /** + * 涉及工程类型 + */ + @ApiModelProperty(value = "涉及工程类型") + private String projectName; + /** + * 招标批次 + */ + @ApiModelProperty(value = "招标批次") + private Integer bidBatch; + /** + * 审批状态 + */ + @ApiModelProperty("审批状态(0-待批,1-通过,2-驳回)") + private String approvalStatus; + /** + * 驳回理由 + */ + @ApiModelProperty("驳回理由") + private String rejectReason; + /** + * 审批时间 + */ + @ApiModelProperty("审批时间") + private Date approveTime; + /** + * 检测状态(0-待检,1-通过,2-不通过) + */ + @ApiModelProperty("检测状态(0-待检,1-通过,2-不通过)") + private String inspectionStatus; + /** + * 检测时间 + */ + @ApiModelProperty("检测时间") + private Date inspectionExeDate; + /** + * 创建者id + */ + @ApiModelProperty(value = "创建者id") + private Long creatorId; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date creationTime; + /** + * 修改人id + */ + @ApiModelProperty(value = "修改人id") + private Long updaterId; + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + public Booking(BookingAF form, Long userId) + { + Calendar instance = Calendar.getInstance(); + Date now = new Date(); + BeanUtils.copyProperties(form, this); + this.bookingType = form.getBookingType().getCode(); + this.inspectionMethod = form.getInspectionMethod().getCode(); + instance.setTime(form.getInspectionDate()); + instance.set(Calendar.HOUR_OF_DAY, 0); + instance.set(Calendar.MINUTE, 0); + instance.set(Calendar.SECOND, 0); + this.inspectionDate = instance.getTime(); + //预约审批状态为待批 + this.approvalStatus = ApprovalStatus.NONE.getCode(); + // + this.creatorId = userId; + this.updaterId = userId; + this.creationTime = now; + this.updateTime = now; + } + +} + diff --git a/src/main/java/com/zilber/boot/module/booking/service/BookingService.java b/src/main/java/com/zilber/boot/module/booking/service/BookingService.java new file mode 100644 index 0000000..4632c2d --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/service/BookingService.java @@ -0,0 +1,41 @@ +package com.zilber.boot.module.booking.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zilber.boot.module.booking.form.ApprovalForm; +import com.zilber.boot.module.booking.form.add.BookingAF; +import com.zilber.boot.module.booking.form.modify.BookingMF; +import com.zilber.boot.module.booking.form.pr.BookingPR; +import com.zilber.boot.module.booking.pojo.Booking; +import com.zilber.boot.module.booking.vo.BookingVO; +import com.zilber.boot.utils.InternalResult; +import com.zilber.boot.utils.page.PageUtils; + +import java.io.Serializable; +import java.util.List; + +/** + * 预约记录(Booking)表服务接口 + * + * @author liuao + * @since 2025-04-25 15:49:58 + */ +public interface BookingService + extends IService +{ + + InternalResult addBooking(BookingAF form); + + InternalResult updBooking(BookingMF form); + + InternalResult approve(ApprovalForm form); + + BookingVO getBooking(Serializable id); + + PageUtils getPage(BookingPR pr); + + InternalResult deleteBooking(BookingMF form); + + InternalResult deleteBookings(List idList); + +} diff --git a/src/main/java/com/zilber/boot/module/booking/service/impl/BookingServiceImpl.java b/src/main/java/com/zilber/boot/module/booking/service/impl/BookingServiceImpl.java new file mode 100644 index 0000000..f7a43fd --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/service/impl/BookingServiceImpl.java @@ -0,0 +1,273 @@ +package com.zilber.boot.module.booking.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zilber.boot.Constants.HttpStatus; +import com.zilber.boot.module.booking.dao.BookingMapper; +import com.zilber.boot.module.booking.enums.ApprovalStatus; +import com.zilber.boot.module.booking.enums.BookingType; +import com.zilber.boot.module.booking.form.ApprovalForm; +import com.zilber.boot.module.booking.form.add.BookingAF; +import com.zilber.boot.module.booking.form.modify.BookingMF; +import com.zilber.boot.module.booking.form.pr.BookingPR; +import com.zilber.boot.module.booking.group.Me; +import com.zilber.boot.module.booking.group.Reject; +import com.zilber.boot.module.booking.pojo.Booking; +import com.zilber.boot.module.booking.service.BookingService; +import com.zilber.boot.module.booking.vo.BookingVO; +import com.zilber.boot.utils.InternalResult; +import com.zilber.boot.utils.SecurityUtils; +import com.zilber.boot.utils.ValidatorUtils; +import com.zilber.boot.utils.page.PageUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.io.Serializable; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 预约记录(Booking)表服务实现类 + * + * @author liuao + * @since 2025-04-25 15:50:01 + */ +@Service +public class BookingServiceImpl + extends ServiceImpl + implements BookingService +{ + + /** + * 申请预约 + * @param form 预约表单 + * @return 处理结果 + */ + @Override + public InternalResult addBooking(BookingAF form) + { + ValidatorUtils.validateEntity(form); + //如果是省招,则校验中标信息 + if ( form.getBookingType().equals(BookingType.PRT)) + { + ValidatorUtils.validateEntity(form, Me.class); + } + Long userId = SecurityUtils.getUserId(); + Booking booking = new Booking(form, userId); + this.save(booking); + return new InternalResult(HttpStatus.SUCCESS, "预约申请成功"); + } + + /** + * 修改预约信息 + * @param form 修改表单 + * @return 修改结果 + */ + @Override + public InternalResult updBooking(BookingMF form) + { + ValidatorUtils.validateEntity(form); + Booking byId = this.getById(form.getId()); + if ( byId != null) + { + BeanUtils.copyProperties(form, byId); + this.updateById(byId); + } + return new InternalResult(HttpStatus.SUCCESS, "预约信息修改成功"); + } + + /** + * 审批预约 + * @param form 预约表单 + * @return 处理结果 + */ + @Override + public InternalResult approve(ApprovalForm form) + { + ValidatorUtils.validateEntity(form); + if ( form.getApprovalStatus().equals(ApprovalStatus.NONE)) + { + return new InternalResult(HttpStatus.SUCCESS, "未作出审批"); + } + else if ( form.getApprovalStatus().equals(ApprovalStatus.REJECT)) + { + ValidatorUtils.validateEntity(form, Reject.class); + } + Booking byId = this.getById(form.getId()); + if ( byId != null) + { + byId.setApprovalStatus(form.getApprovalStatus().getCode()); + byId.setRejectReason(form.getRejectReason()); + byId.setApproveTime(new Date()); + this.updateById(byId); + } + return new InternalResult(HttpStatus.SUCCESS, "审批成功"); + } + + /** + * 获取单条预约信息 + * @param id id + * @return 单条预约记录 + */ + @Override + public BookingVO getBooking(Serializable id) + { + Booking byId = this.getById(id); + if ( byId != null) + { + return new BookingVO(byId); + } + return null; + } + + /** + * 分页查询 + * @param pr 查询条件 + * @return 分页列表 + */ + @Override + public PageUtils getPage(BookingPR pr) + { + LambdaQueryWrapper wrapper = this.wrapper(pr); + IPage page + = page(new Page(pr.getPageNo(), pr.getPageSize()), wrapper); + if ( CollectionUtils.isNotEmpty(page.getRecords())) + { + return new PageUtils( + page.getRecords() + .stream() + .map(BookingVO::new) + .collect(Collectors.toList()), + (int) page.getTotal(), + (int) page.getSize(), + (int) page.getCurrent() + ); + } + return new PageUtils(page); + } + + /** + * 删除单条预约记录 + * @param form 表单 + * @return 处理结果 + */ + @Override + public InternalResult deleteBooking(BookingMF form) + { + ValidatorUtils.validateEntity(form); + this.removeById(form.getId()); + return new InternalResult(HttpStatus.SUCCESS, "预约记录删除成功"); + } + + /** + * 删除多条预约记录 + * @param idList id列表 + * @return 处理结果 + */ + @Override + public InternalResult deleteBookings(List idList) + { + if (CollectionUtils.isNotEmpty(idList)) + { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(Booking::getId, idList); + this.remove(wrapper); + } + return new InternalResult(HttpStatus.SUCCESS, "预约记录删除成功"); + } + + /** + * 根据查询分页构造查询包装器并返回 + * @param pr 查询条件 + * @return 查询包装器 + */ + private LambdaQueryWrapper wrapper(BookingPR pr) + { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if ( pr.getFactoryId() != null) + { + wrapper.eq(Booking::getFactoryId, pr.getFactoryId()); + } + if (StringUtils.isNotBlank(pr.getBookingType())) + { + wrapper.eq(Booking::getBookingType, pr.getBookingType()); + } + if ( StringUtils.isNotBlank(pr.getInspectionMethod())) + { + wrapper.eq(Booking::getInspectionMethod, pr.getInspectionMethod()); + } + if ( pr.getEquipNum() != null) + { + wrapper.eq(Booking::getEquipNum, pr.getEquipNum()); + } + if ( StringUtils.isNotBlank(pr.getEquipType())) + { + wrapper.eq(Booking::getEquipType, pr.getEquipType()); + } + Calendar c = Calendar.getInstance(); + if ( pr.getInspectionDateStart() != null) + { + c.setTime(pr.getInspectionDateStart()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wrapper.ge(Booking::getInspectionDate, c.getTime()); + } + if ( pr.getInspectionDateEnd() != null) + { + c.setTime(pr.getInspectionDateEnd()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wrapper.le(Booking::getInspectionDate, c.getTime()); + } + if ( StringUtils.isNotBlank(pr.getLocalOffice())) + { + wrapper.like(Booking::getLocalOffice, pr.getLocalOffice()); + } + if ( StringUtils.isNotBlank(pr.getLoaType())) + { + wrapper.eq(Booking::getLoaType, pr.getLoaType()); + } + if (StringUtils.isNotBlank(pr.getProjectName())) + { + wrapper.like(Booking::getProjectName, pr.getProjectName()); + } + if ( pr.getBidBatch() != null) + { + wrapper.eq(Booking::getBidBatch, pr.getBidBatch()); + } + if ( pr.getCreatorId() != null) + { + wrapper.eq(Booking::getCreatorId, pr.getCreatorId()); + } + if ( StringUtils.isNotBlank(pr.getApprovalStatus())) + { + wrapper.eq(Booking::getApprovalStatus, pr.getApprovalStatus()); + } + if ( pr.getApproveTimeStart() != null) + { + c.setTime(pr.getApproveTimeStart()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wrapper.ge(Booking::getApproveTime, c.getTime()); + } + if ( pr.getApproveTimeEnd() != null) + { + c.setTime(pr.getInspectionDateEnd()); + c.set(Calendar.HOUR_OF_DAY, 23); + c.set(Calendar.MINUTE, 59); + c.set(Calendar.SECOND, 59); + wrapper.le(Booking::getApproveTime, c.getTime()); + } + return wrapper; + } + +} diff --git a/src/main/java/com/zilber/boot/module/booking/vo/BookingVO.java b/src/main/java/com/zilber/boot/module/booking/vo/BookingVO.java new file mode 100644 index 0000000..bd7a12e --- /dev/null +++ b/src/main/java/com/zilber/boot/module/booking/vo/BookingVO.java @@ -0,0 +1,126 @@ +package com.zilber.boot.module.booking.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zilber.boot.module.booking.pojo.Booking; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @Author LJX + * @TIME 2025-04-27 9:57 + * @PROJECT termicheck-platform + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("预约记录返回") +public class BookingVO +{ + + /** + * id + */ + @ApiModelProperty(value = "id") + private Long id; + /** + * 厂家id + */ + @ApiModelProperty(value = "厂家id") + private Long factoryId; + /** + * 预约类型(1-省招检测,2-厂家委托) + */ + @ApiModelProperty(value = "预约类型(1-省招检测,2-厂家委托)") + private String bookingType; + /** + * 检测方式(1-全检,2-抽检) + */ + @ApiModelProperty(value = "检测方式(1-全检,2-抽检)") + private String inspectionMethod; + /** + * 设备数量 + */ + @ApiModelProperty(value = "设备数量") + private Integer equipNum; + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型") + private String equipType; + /** + * 预约检测日期 + */ + @ApiModelProperty(value = "预约检测日期") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date inspectionDate; + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String remark; + /** + * 中标通知书路径 + */ + @ApiModelProperty(value = "中标通知书路径") + private String loaUrl; + /** + * 地市公司 + */ + @ApiModelProperty(value = "地市公司") + private String localOffice; + /** + * 中标类型 + */ + @ApiModelProperty(value = "中标类型") + private String loaType; + /** + * 涉及工程类型 + */ + @ApiModelProperty(value = "涉及工程类型") + private String projectName; + /** + * 招标批次 + */ + @ApiModelProperty(value = "招标批次") + private Integer bidBatch; + /** + * 创建者id + */ + @ApiModelProperty(value = "创建者id") + private Long creatorId; + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date creationTime; + /** + * 修改人id + */ + @ApiModelProperty(value = "修改人id") + private Long updaterId; + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + public BookingVO(Booking booking) + { + BeanUtils.copyProperties(booking, this); + } + +} diff --git a/src/main/java/com/zilber/boot/utils/AjaxResult.java b/src/main/java/com/zilber/boot/utils/AjaxResult.java index 0c57b27..62ebb6b 100644 --- a/src/main/java/com/zilber/boot/utils/AjaxResult.java +++ b/src/main/java/com/zilber/boot/utils/AjaxResult.java @@ -59,6 +59,22 @@ public class AjaxResult extends HashMap } } + public AjaxResult(InternalResult ir) { + super.put(CODE_TAG, ir.getCode()); + switch (ir.getCode()) { + case HttpStatus.SUCCESS: + super.put(MSG_TAG, "操作成功"); + break; + case HttpStatus.FAILED: + super.put(MSG_TAG, "操作失败"); + break; + } + if (StringUtils.isNotNull(ir.getData())) + { + super.put(DATA_TAG, ir.getData()); + } + } + /** * 返回成功消息 * diff --git a/src/main/java/com/zilber/boot/utils/InternalResult.java b/src/main/java/com/zilber/boot/utils/InternalResult.java new file mode 100644 index 0000000..e7ac17a --- /dev/null +++ b/src/main/java/com/zilber/boot/utils/InternalResult.java @@ -0,0 +1,25 @@ +package com.zilber.boot.utils; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author LJX + * @TIME 2023-11-02 14:50 + * @PROJECT LFVCManager + * created by Intellij IDEA + * Description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class InternalResult { + + private Integer code; + + private Object data; + + + +} diff --git a/src/main/java/com/zilber/boot/utils/ValidatorUtils.java b/src/main/java/com/zilber/boot/utils/ValidatorUtils.java new file mode 100644 index 0000000..740a7e2 --- /dev/null +++ b/src/main/java/com/zilber/boot/utils/ValidatorUtils.java @@ -0,0 +1,47 @@ +package com.zilber.boot.utils; + +import com.zilber.boot.exception.ServiceException; +import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import java.util.Locale; +import java.util.Set; + +/** + * hibernate-validator校验工具类 + * 参考文档:http://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/ + */ +public class ValidatorUtils { + + private static ResourceBundleMessageSource getMessageSource() { + ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource(); + bundleMessageSource.setDefaultEncoding("UTF-8"); + bundleMessageSource.setBasenames("i18n/validation"); + return bundleMessageSource; + } + + /** + * 校验对象 + * + * @param object 待校验对象 + * @param groups 待校验的组 + */ + public static void validateEntity(Object object, Class... groups) + throws ServiceException { + Locale.setDefault(LocaleContextHolder.getLocale()); + Validator validator = Validation.byDefaultProvider().configure().messageInterpolator( + new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))) + .buildValidatorFactory().getValidator(); + + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) { + ConstraintViolation constraint = constraintViolations.iterator().next(); + throw new ServiceException(constraint.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/zilber/boot/utils/page/PageUtils.java b/src/main/java/com/zilber/boot/utils/page/PageUtils.java new file mode 100644 index 0000000..27be0f8 --- /dev/null +++ b/src/main/java/com/zilber/boot/utils/page/PageUtils.java @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2016-2019 人人开源 All rights reserved. + *

+ * https://www.renren.io + *

+ * 版权所有,侵权必究! + */ + +package com.zilber.boot.utils.page; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.pagehelper.PageInfo; + +import java.io.Serializable; +import java.util.List; + + +public class PageUtils implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 总记录数 + */ + private int total; + /** + * 每页记录数 + */ + private int pageSize; + /** + * 总页数 + */ + private int totalPage; + /** + * 当前页数 + */ + private int currPage; + /** + * 列表数据 + */ + private List list; + + /** + * 分页 + * @param list 列表数据 + * @param totalCount 总记录数 + * @param pageSize 每页记录数 + * @param currPage 当前页数 + */ + public PageUtils(List list, int totalCount, int pageSize, int currPage) { + this.list = list; + this.total = totalCount; + this.pageSize = pageSize; + this.currPage = currPage; + this.totalPage = (int) Math.ceil((double) totalCount / pageSize); + } + + /** + * 分页 + */ + public PageUtils(IPage page) { + this.list = page.getRecords(); + this.total = (int) page.getTotal(); + this.pageSize = (int) page.getSize(); + this.currPage = (int) page.getCurrent(); + this.totalPage = (int) page.getPages(); + } + + public PageUtils(PageInfo page) { + this.list = page.getList(); + this.total = (int) page.getTotal(); + this.pageSize = (int) page.getSize(); + this.currPage = (int) page.getPageNum(); + this.totalPage = (int) page.getPages(); + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getCurrPage() { + return currPage; + } + + public void setCurrPage(int currPage) { + this.currPage = currPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + +} diff --git a/src/main/java/com/zilber/boot/utils/page/Pageable.java b/src/main/java/com/zilber/boot/utils/page/Pageable.java new file mode 100644 index 0000000..92e9db5 --- /dev/null +++ b/src/main/java/com/zilber/boot/utils/page/Pageable.java @@ -0,0 +1,35 @@ +package com.zilber.boot.utils.page; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.constraints.NotNull; + +@ApiModel("分页查询") +public class Pageable { + + @NotNull(message = "当前页数不能为空") + @ApiModelProperty(value = "当前页数", required = true) + private Integer pageNo = 1; + + @NotNull(message = "每页记录数不能为空") + @ApiModelProperty(value = "每页记录数", required = true) + private Integer pageSize = 9999999; + + public Integer getPageNo() { + return pageNo; + } + + public void setPageNo(Integer pageNo) { + this.pageNo = pageNo; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } +}