From 266bd0f4ce882a78abe1b75ea0b249346f341a07 Mon Sep 17 00:00:00 2001 From: mashuai Date: Tue, 18 Mar 2025 10:59:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LargeScreenController.java | 135 +++++++++++++++++- .../largeScreen/entity/MaLeaseAnswerInfo.java | 60 ++++++++ .../largeScreen/entity/MaLeaseOnlyInfo.java | 67 +++++++++ .../lease/mapper/MaLeaseInfoMapper.java | 30 ++++ .../material/lease/MaLeaseInfoMapper.xml | 68 +++++++++ 5 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseAnswerInfo.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseOnlyInfo.java diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java index dcee869..fca25d5 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/controller/LargeScreenController.java @@ -2,11 +2,15 @@ package com.bonus.material.largeScreen.controller; import cn.hutool.core.collection.CollectionUtil; import com.bonus.common.biz.utils.MathUtil; +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.device.domain.DevInfo; import com.bonus.material.device.domain.vo.DevInfoVo; import com.bonus.material.device.mapper.DevInfoMapper; import com.bonus.material.device.service.DevInfoService; +import com.bonus.material.largeScreen.entity.MaLeaseAnswerInfo; +import com.bonus.material.largeScreen.entity.MaLeaseOnlyInfo; import com.bonus.material.largeScreen.entity.OrderData; import com.bonus.material.largeScreen.service.LargeScreenService; import com.bonus.material.lease.domain.MaLeaseInfo; @@ -17,11 +21,16 @@ import com.bonus.material.order.mapper.OrderMapper; import com.bonus.material.order.service.OrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -33,7 +42,7 @@ import java.util.stream.Collectors; @Api(value = "大屏", tags = {"大屏"}) @RestController @RequestMapping("/largeScreen") -public class LargeScreenController { +public class LargeScreenController extends BaseController { @Resource private OrderService orderService; @@ -241,4 +250,128 @@ public class LargeScreenController { // return AjaxResult.success(orderData); // } + /** + * 应答率二级页面 + * @param dto + * @return + */ + @ApiOperation("应答率二级页面") + @GetMapping("/getLeaseAnswerRate") + public AjaxResult getLeaseAnswerRate(MaLeaseAnswerInfo dto) { + startPage(); + List list = leaseInfoMapper.getLeaseAnswerRate(dto); + if (!CollectionUtils.isEmpty(list)) { + for (MaLeaseAnswerInfo maLeaseAnswerInfo : list) { + // 根据 typeId 查询设备名称 + if (maLeaseAnswerInfo.getTypeId() != null) { + // 获取list集合 + List typeIds = Arrays.asList(maLeaseAnswerInfo.getTypeId().split(",")); + // 查询类型名称 + String typeName = leaseInfoMapper.selectMaTypeList(typeIds); + maLeaseAnswerInfo.setTypeName(typeName); + } + } + if (!StringUtils.isBlank(dto.getKeyWord())) { + list = list.stream() + .filter(item -> containsKeyword(item, dto.getKeyWord())) + .collect(Collectors.toList()); + } + } + return AjaxResult.success(getDataTable(list)); + } + + /** + * 判断关键字 + * @param item + * @param keyWord + * @return + */ + private boolean containsKeyword(MaLeaseAnswerInfo item, String keyWord) { + return (item.getDeviceName() != null && item.getDeviceName().contains(keyWord)) || + (item.getTypeName() != null && item.getTypeName().contains(keyWord)); + } + + /** + * 最需装备二级页面 + * @param dto + * @return + */ + @ApiOperation("最需装备二级页面") + @GetMapping("/getLeaseOnlyInfo") + public AjaxResult getLeaseOnlyInfo(MaLeaseOnlyInfo dto) { + startPage(); + List list = leaseInfoMapper.getLeaseOnlyInfo(dto); + return AjaxResult.success(getDataTable(list)); + } + + /** + * 需求装备种类 + * @param dto + * @return + */ + @ApiOperation("需求装备种类") + @GetMapping("/getLeaseTypeList") + public AjaxResult getLeaseTypeList(MaLeaseOnlyInfo dto) { + startPage(); + List list = leaseInfoMapper.getLeaseTypeList(dto); + if (!CollectionUtils.isEmpty(list)) { + for (MaLeaseOnlyInfo maLeaseOnlyInfo : list) { + // 获取list集合 + List typeIds = Arrays.asList(maLeaseOnlyInfo.getTypeId().split(",")); + // 查询类型名称 + String typeName = leaseInfoMapper.selectMaTypeList(typeIds); + maLeaseOnlyInfo.setTypeName(typeName); + long daysDifference = calculateDaysDifference(maLeaseOnlyInfo.getStartTime(), maLeaseOnlyInfo.getEndTime()); + maLeaseOnlyInfo.setEstimateDays((int) daysDifference); + } + if (!StringUtils.isBlank(dto.getKeyWord())) { + list = list.stream() + .filter(item -> containsTypeKeyword(item, dto.getKeyWord())) + .collect(Collectors.toList()); + } + } + return AjaxResult.success(getDataTable(list)); + } + + /** + * 判断关键字 + * @param item + * @param keyWord + * @return + */ + private boolean containsTypeKeyword(MaLeaseOnlyInfo item, String keyWord) { + return (item.getDeviceName() != null && item.getDeviceName().contains(keyWord)) || + (item.getTypeName() != null && item.getTypeName().contains(keyWord)); + } + + /** + * 计算租赁天数差 + * @param startTime + * @param rentEndTime + * @return + */ + private long calculateDaysDifference(Date startTime, Date rentEndTime) { + // 将 java.util.Date 转换为 java.time.LocalDate + LocalDate preOutboundLocalDate = convertToLocalDate(startTime); + LocalDate rentEndLocalDate = convertToLocalDate(rentEndTime); + // 计算天数差 + long days = ChronoUnit.DAYS.between(preOutboundLocalDate, rentEndLocalDate); + if (days == 0) { + days = 1; + } else { + days = days + 1; + } + return days; + } + + /** + * 将 java.util.Date 转换为 java.time.LocalDate + * @param date + * @return + */ + public static LocalDate convertToLocalDate(Date date) { + return Instant.ofEpochMilli(date.getTime()) + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + } } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseAnswerInfo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseAnswerInfo.java new file mode 100644 index 0000000..23ab7f0 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseAnswerInfo.java @@ -0,0 +1,60 @@ +package com.bonus.material.largeScreen.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @Author ma_sh + * @create 2025/3/18 9:21 + */ +@Data +public class MaLeaseAnswerInfo { + + private Long id; + + /** + * 装备类型 + */ + private String typeName; + + /** + * 装备名称 + */ + private String deviceName; + + /** + * 发布需求数 + */ + private Integer publishCount; + + /** + * 接单数 + */ + private Integer orderCount; + + /** + * 应答率 + */ + private String answerRate; + + /** + * 关键字 + */ + private String keyWord; + + private String typeId; + + /** + * 租赁开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startTime; + + /** + * 租赁结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date endTime; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseOnlyInfo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseOnlyInfo.java new file mode 100644 index 0000000..692a1b0 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/largeScreen/entity/MaLeaseOnlyInfo.java @@ -0,0 +1,67 @@ +package com.bonus.material.largeScreen.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @Author ma_sh + * @create 2025/3/18 10:11 + */ +@Data +public class MaLeaseOnlyInfo { + + private Long id; + + /** + * 装备名称 + */ + private String deviceName; + + /** + * 租赁公司 + */ + private String publishCompany; + + /** + * 联系人 + */ + private String person; + + /** + * 电话 + */ + private String phoneNumber; + + /** + * 预估数量 + */ + private Integer estimateCount; + + /** + * 需求发布时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** + * 需求截止日期(年月日) + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** + * 关键字 + */ + private String keyWord; + + /** + * 预估时长 + */ + private Integer estimateDays; + + private String typeId; + + private String typeName; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/MaLeaseInfoMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/MaLeaseInfoMapper.java index 9f88acc..4682a0b 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/MaLeaseInfoMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/MaLeaseInfoMapper.java @@ -1,5 +1,7 @@ package com.bonus.material.lease.mapper; +import com.bonus.material.largeScreen.entity.MaLeaseAnswerInfo; +import com.bonus.material.largeScreen.entity.MaLeaseOnlyInfo; import com.bonus.material.lease.domain.MaLease; import com.bonus.material.lease.domain.MaLeaseDetails; import com.bonus.material.lease.domain.MaLeaseDto; @@ -138,4 +140,32 @@ public interface MaLeaseInfoMapper { * @return */ int updateRejectDevInfo(MaLeaseInfo maLeaseInfo); + + /** + * 应答率二级页面 + * @param dto + * @return + */ + List getLeaseAnswerRate(MaLeaseAnswerInfo dto); + + /** + * 查询类型名称 + * @param typeIds + * @return + */ + String selectMaTypeList(@Param("list") List typeIds); + + /** + * 最需装备二级页面 + * @param dto + * @return + */ + List getLeaseOnlyInfo(MaLeaseOnlyInfo dto); + + /** + * 需求装备种类 + * @param dto + * @return + */ + List getLeaseTypeList(MaLeaseOnlyInfo dto); } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/MaLeaseInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/MaLeaseInfoMapper.xml index 2dec290..aebde6a 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/MaLeaseInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/MaLeaseInfoMapper.xml @@ -538,4 +538,72 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ORDER BY lease_count DESC + + + + + + + +