From 49887103010ab4134c49515fe0d598591f062065 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Wed, 14 May 2025 14:48:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E4=BF=A1=E6=81=AF=E7=B1=BB=E5=9E=8B=E5=92=8C=E4=BB=B7?= =?UTF-8?q?=E5=80=BC=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ProductInfo 模型中添加 type 和 value 字段 - 更新相关 mapper 和 SQL 文件以支持新字段 - 修改 OrderList 模型,关联 ProductInfo 对象 - 优化 DeliveryInfoVo 和相关服务的实现 --- .../java/com/ruoyi/sip/domain/OrderList.java | 108 +-------------- .../com/ruoyi/sip/domain/ProductInfo.java | 37 +++++ .../ruoyi/sip/mapper/DeliveryListMapper.java | 4 + .../com/ruoyi/sip/mapper/OrderInfoMapper.java | 2 + .../service/impl/DeliveryListServiceImpl.java | 87 +++++++++++- .../service/impl/OrderInfoServiceImpl.java | 126 +++++++++++------- .../java/com/ruoyi/sip/vo/DeliveryInfoVo.java | 17 ++- .../mapper/manage/CustomerInfoMapper.xml | 2 +- .../mapper/manage/DeliveryListMapper.xml | 28 ++++ .../mapper/manage/OrderInfoMapper.xml | 37 +++++ .../mapper/system/ProductInfoMapper.xml | 5 +- 11 files changed, 295 insertions(+), 158 deletions(-) diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OrderList.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OrderList.java index fbc91021..e8ed2be2 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OrderList.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/OrderList.java @@ -3,6 +3,8 @@ package com.ruoyi.sip.domain; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.ToString; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; @@ -14,6 +16,8 @@ import com.ruoyi.common.core.domain.BaseEntity; * @author mula * @date 2025-04-11 */ +@Data +@ToString public class OrderList extends BaseEntity { private static final long serialVersionUID = 1L; @@ -60,107 +64,5 @@ public class OrderList extends BaseEntity @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd") private Date deletedAt; - public void setId(Long id) - { - this.id = id; - } - - public Long getId() - { - return id; - } - public void setOrderId(Long orderId) - { - this.orderId = orderId; - } - - public Long getOrderId() - { - return orderId; - } - public void setProductCode(String productCode) - { - this.productCode = productCode; - } - - public String getProductCode() - { - return productCode; - } - public String getProductName() - { - return productName; - } - public void setQuantity(Long quantity) - { - this.quantity = quantity; - } - - public Long getQuantity() - { - return quantity; - } - public void setPrice(BigDecimal price) - { - this.price = price; - } - - public BigDecimal getPrice() - { - return price; - } - public void setAmount(BigDecimal amount) - { - this.amount = amount; - } - - public BigDecimal getAmount() - { - return amount; - } - public void setCreatedAt(Date createdAt) - { - this.createdAt = createdAt; - } - - public Date getCreatedAt() - { - return createdAt; - } - public void setUpdatedAt(Date updatedAt) - { - this.updatedAt = updatedAt; - } - - public Date getUpdatedAt() - { - return updatedAt; - } - public void setDeletedAt(Date deletedAt) - { - this.deletedAt = deletedAt; - } - - public Date getDeletedAt() - { - return deletedAt; - } - - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("orderId", getOrderId()) - .append("productCode", getProductCode()) - .append("productName", getProductName()) - .append("quantity", getQuantity()) - .append("price", getPrice()) - .append("amount", getAmount()) - .append("remark", getRemark()) - .append("createdAt", getCreatedAt()) - .append("updatedAt", getUpdatedAt()) - .append("deletedAt", getDeletedAt()) - .toString(); - } + private ProductInfo productInfo; } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java index 77a1d04a..3eb944bd 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProductInfo.java @@ -4,6 +4,7 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; @@ -27,6 +28,8 @@ public class ProductInfo extends BaseEntity /** 产品编码 */ @Excel(name = "产品编码") private String productCode; + private String type; + private String value; /** 产品名称 */ @Excel(name = "产品名称") @@ -52,4 +55,38 @@ public class ProductInfo extends BaseEntity private Date deletedAt; private String serialNumber; + @Getter + public enum ProductTypeEnum { + /** + * 软件 + */ + SOFTWARE("1","软件"), + /** + * 硬件 + */ + HARDWARE("2","硬件"), + /** + * 软件维保 + */ + SOFTWARE_MAINTENANCE("11","软件维保"), + /** + * 硬件维保 + */ + HARDWARE_MAINTENANCE("22","硬件维保"), + /** + * 其它 + */ + OTHER("99","其它"), + ; + + private final String type; + private final String desc; + + ProductTypeEnum(String type,String desc) { + this.type = type; + this.desc = desc; + } + + + } } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java index e3043d63..d1828522 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java @@ -2,6 +2,8 @@ package com.ruoyi.sip.mapper; import java.util.List; import com.ruoyi.sip.domain.DeliveryList; +import com.ruoyi.sip.dto.ApiDataQueryDto; +import com.ruoyi.sip.vo.DeliveryInfoVo; /** * 发货清单Mapper接口 @@ -61,4 +63,6 @@ public interface DeliveryListMapper public int deleteDeliveryListByIds(String[] ids); List listBySerialNumberList(List deliveryList); + + List listNumberInfo(ApiDataQueryDto dto); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java index ad29f9db..27a68609 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java @@ -103,4 +103,6 @@ public interface OrderInfoMapper List listOrderListByDeliveryId(Long deliveryId); List selectOrderInfoByMaintenance(MaintenanceRecordsDto dto); + + List listMaintenanceByOrderIdList(List orderIdList); } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java index c48741ed..f22423e2 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java @@ -1,11 +1,15 @@ package com.ruoyi.sip.service.impl; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.sip.domain.OrderList; import com.ruoyi.sip.domain.ProductInfo; @@ -137,13 +141,86 @@ public class DeliveryListServiceImpl implements IDeliveryListService { @Override public List getNumberInfo(ApiDataQueryDto dto) { - + List deliveryInfoVos = deliveryListMapper.listNumberInfo(dto); + if (CollUtil.isEmpty(deliveryInfoVos)) { + return Collections.emptyList(); + } + + List orderIdList = deliveryInfoVos.stream() + .map(DeliveryInfoVo::getOrderId) + .collect(Collectors.toList()); + + // 根据订单ID查询合同信息 + List orderListList = infoMapper.listMaintenanceByOrderIdList(orderIdList); + + // 构建维护类型与年限的映射 + Map> maintenanceTypeYearMap = buildMaintenanceTypeYearMap(orderListList); + // 查询标准硬件维保的产品信息 + ProductInfo productInfo = new ProductInfo(); + productInfo.setType(ProductInfo.ProductTypeEnum.HARDWARE_MAINTENANCE.getType()); + List productInfos = productInfoMapper.selectProductInfoList(productInfo); + // 设置服务等级和服务结束时间 + for (DeliveryInfoVo deliveryInfoVo : deliveryInfoVos) { + updateDeliveryInfoVo(deliveryInfoVo, maintenanceTypeYearMap, productInfos); + } - - - - return Collections.emptyList(); + return deliveryInfoVos; } + + /** + * 构建维护类型与年限的映射 + */ + private Map> buildMaintenanceTypeYearMap(List orderListList) { + return orderListList.stream() + .filter(item -> item.getProductInfo() != null) + .collect(Collectors.groupingBy( + OrderList::getOrderId, + Collectors.toMap( + item -> item.getProductInfo().getType(), + this::calculateYear, + Integer::sum + ) + )); + } + + /** + * 计算年限 + */ + private Integer calculateYear(OrderList item) { + if (item.getQuantity() == null || StrUtil.isEmpty(item.getProductInfo().getValue())) { + return 0; + } + return BigDecimal.valueOf(item.getQuantity()) + .multiply(new BigDecimal(item.getProductInfo().getValue())) + .intValue(); + } + + /** + * 更新 DeliveryInfoVo 的服务等级和服务结束时间 + */ + private void updateDeliveryInfoVo(DeliveryInfoVo deliveryInfoVo, Map> maintenanceTypeYearMap, List productInfos) { + Map yearMap = maintenanceTypeYearMap.get(deliveryInfoVo.getOrderId()); + if (yearMap != null) { + Integer year; + if (ProductInfo.ProductTypeEnum.SOFTWARE.getType().equals(deliveryInfoVo.getProductType())) { + year = yearMap.getOrDefault(ProductInfo.ProductTypeEnum.SOFTWARE_MAINTENANCE.getType(), 0); + } else { + year = yearMap.getOrDefault(ProductInfo.ProductTypeEnum.HARDWARE_MAINTENANCE.getType(), 0); + } + + if (year == 0 && ProductInfo.ProductTypeEnum.HARDWARE.getType().equals(deliveryInfoVo.getProductType()) + && CollUtil.isNotEmpty(productInfos)) { + // 判断是否硬件,如果是硬件取标准维保三年 + if (StringUtils.isNotEmpty(productInfos.get(0).getValue())) { + year = Integer.valueOf(productInfos.get(0).getValue()); + } + } + + deliveryInfoVo.setServiceLevel(year.toString()); + deliveryInfoVo.setServiceEndTime(DateUtils.addYears(deliveryInfoVo.getServiceStartTime(), year)); + } + } + } diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java index e75721da..b05462d0 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/OrderInfoServiceImpl.java @@ -159,55 +159,89 @@ public class OrderInfoServiceImpl implements IOrderInfoService queryParams.setUpdatedAtEnd(dto.getQueryEndTime()); List orderInfos = orderInfoMapper.selectOrderInfoList(queryParams); - //查询代表处信息 - AgentInfo agentInfoQueryParams = new AgentInfo(); - agentInfoQueryParams.setAgentCodeList(orderInfos.stream().map(OrderInfo::getOrderAgentCode).collect(Collectors.toList())); - List agentInfos = agentInfoService.selectAgentInfoList(agentInfoQueryParams); - Map agentInfoMap = agentInfos.stream().collect(Collectors.toMap(AgentInfo::getAgentCode, Function.identity(), (v1, v2) -> v1)); - //查询客户信息 - CustomerInfo customerInfoQueryParams = new CustomerInfo(); - customerInfoQueryParams.setCustomerCodeList(orderInfos.stream().map(OrderInfo::getCustomerCode).collect(Collectors.toList())); - List customerInfos = customerInfoService.selectCustomerInfoList(customerInfoQueryParams); - Map customerInfoMap = customerInfos.stream().collect(Collectors.toMap(CustomerInfo::getCustomerCode, Function.identity(), (v1, v2) -> v1)); - - if (CollUtil.isNotEmpty(orderInfos)) { - return orderInfos.stream().map(orderInfo -> { - OrderInfoVo orderInfoVo = new OrderInfoVo(); - orderInfoVo.setOrderCode(orderInfo.getOrderCode()); - orderInfoVo.setOrderName(orderInfo.getOrderName()); - orderInfoVo.setVersionCode(orderInfo.getVersionCode()); - //todo 这里为固定值 待确认 - orderInfoVo.setBgProperty("1"); - AgentInfo agentInfo = agentInfoMap.get(orderInfo.getOrderAgentCode()); - if (agentInfo != null) { - //目前三个代表处都是同一个 - orderInfoVo.setOrderAgentCode(agentInfo.getAgentCode()); - orderInfoVo.setOrderAgentName(agentInfo.getAgentName()); - orderInfoVo.setDeliveredAgentCode(agentInfo.getAgentCode()); - orderInfoVo.setDeliveredAgentName(agentInfo.getAgentName()); - orderInfoVo.setRevenueAgentCode(agentInfo.getAgentCode()); - orderInfoVo.setRevenueAgentName(agentInfo.getAgentName()); - orderInfoVo.setSaleName(agentInfo.getContactPerson()); - orderInfoVo.setSaleEmail(agentInfo.getContactEmail()); - orderInfoVo.setSalePhone(agentInfo.getContactPhone()); - } - CustomerInfo customerInfo = customerInfoMap.get(orderInfo.getCustomerCode()); - if (customerInfo != null) { - orderInfoVo.setCustomerCode(customerInfo.getCustomerCode()); - orderInfoVo.setCustomerName(customerInfo.getCustomerName()); - orderInfoVo.setCustomerPostcode(customerInfo.getCustomerPostcode()); - orderInfoVo.setIndustryType(customerInfo.getIndustryType()); - orderInfoVo.setCustomerAddress(customerInfo.getAddress()); - orderInfoVo.setContactPerson(customerInfo.getContactPerson()); - orderInfoVo.setContactEmail(customerInfo.getContactEmail()); - orderInfoVo.setContactPhone(customerInfo.getContactPhone()); - } - return orderInfoVo; - }).collect(Collectors.toList()); + if (CollUtil.isEmpty(orderInfos)) { + return Collections.emptyList(); } + // 查询代表处信息 + Map agentInfoMap = queryAgentInfoMap(orderInfos); + // 查询客户信息 + Map customerInfoMap = queryCustomerInfoMap(orderInfos); - return Collections.emptyList(); + return orderInfos.stream().map(orderInfo -> { + OrderInfoVo orderInfoVo = new OrderInfoVo(); + orderInfoVo.setOrderCode(orderInfo.getOrderCode()); + orderInfoVo.setOrderName(orderInfo.getOrderName()); + orderInfoVo.setVersionCode(orderInfo.getVersionCode()); + // 固定值待确认 + orderInfoVo.setBgProperty("1"); + + // 设置代表处信息 + setAgentInfo(orderInfoVo, agentInfoMap.get(orderInfo.getOrderAgentCode())); + // 设置客户信息 + setCustomerInfo(orderInfoVo, customerInfoMap.get(orderInfo.getCustomerCode())); + + return orderInfoVo; + }).collect(Collectors.toList()); + } + + /** + * 查询代表处信息并构建映射 + */ + private Map queryAgentInfoMap(List orderInfos) { + AgentInfo agentInfoQueryParams = new AgentInfo(); + agentInfoQueryParams.setAgentCodeList(orderInfos.stream() + .map(OrderInfo::getOrderAgentCode) + .collect(Collectors.toList())); + List agentInfos = agentInfoService.selectAgentInfoList(agentInfoQueryParams); + return agentInfos.stream() + .collect(Collectors.toMap(AgentInfo::getAgentCode, Function.identity(), (v1, v2) -> v1)); + } + + /** + * 查询客户信息并构建映射 + */ + private Map queryCustomerInfoMap(List orderInfos) { + CustomerInfo customerInfoQueryParams = new CustomerInfo(); + customerInfoQueryParams.setCustomerCodeList(orderInfos.stream() + .map(OrderInfo::getCustomerCode) + .collect(Collectors.toList())); + List customerInfos = customerInfoService.selectCustomerInfoList(customerInfoQueryParams); + return customerInfos.stream() + .collect(Collectors.toMap(CustomerInfo::getCustomerCode, Function.identity(), (v1, v2) -> v1)); + } + + /** + * 设置代表处信息 + */ + private void setAgentInfo(OrderInfoVo orderInfoVo, AgentInfo agentInfo) { + if (agentInfo != null) { + orderInfoVo.setOrderAgentCode(agentInfo.getAgentCode()); + orderInfoVo.setOrderAgentName(agentInfo.getAgentName()); + orderInfoVo.setDeliveredAgentCode(agentInfo.getAgentCode()); + orderInfoVo.setDeliveredAgentName(agentInfo.getAgentName()); + orderInfoVo.setRevenueAgentCode(agentInfo.getAgentCode()); + orderInfoVo.setRevenueAgentName(agentInfo.getAgentName()); + orderInfoVo.setSaleName(agentInfo.getContactPerson()); + orderInfoVo.setSaleEmail(agentInfo.getContactEmail()); + orderInfoVo.setSalePhone(agentInfo.getContactPhone()); + } + } + + /** + * 设置客户信息 + */ + private void setCustomerInfo(OrderInfoVo orderInfoVo, CustomerInfo customerInfo) { + if (customerInfo != null) { + orderInfoVo.setCustomerCode(customerInfo.getCustomerCode()); + orderInfoVo.setCustomerName(customerInfo.getCustomerName()); + orderInfoVo.setCustomerPostcode(customerInfo.getCustomerPostcode()); + orderInfoVo.setIndustryType(customerInfo.getIndustryType()); + orderInfoVo.setCustomerAddress(customerInfo.getAddress()); + orderInfoVo.setContactPerson(customerInfo.getContactPerson()); + orderInfoVo.setContactEmail(customerInfo.getContactEmail()); + orderInfoVo.setContactPhone(customerInfo.getContactPhone()); + } } /** diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/vo/DeliveryInfoVo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/vo/DeliveryInfoVo.java index 8ba8f582..6ec7a48c 100644 --- a/ruoyi-sip/src/main/java/com/ruoyi/sip/vo/DeliveryInfoVo.java +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/vo/DeliveryInfoVo.java @@ -1,5 +1,7 @@ package com.ruoyi.sip.vo; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import java.util.Date; @@ -19,14 +21,25 @@ import java.util.Date; */ @Data public class DeliveryInfoVo { + //合同号 private String orderCode; //版本号 private String versionCode; //条码 private String serialNumber; + //服务级别 + private String serviceLevel; + //服务描述 + private String serviceDescribe; + //服务开始时间 - private Date startTime; + private Date serviceStartTime; //服务结束时间 - private Date endTime; + private Date serviceEndTime; + private Date lastUpdateTime; + @JsonIgnore + private Long orderId; + @JsonIgnore + private String productType; } diff --git a/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml index 94c271a0..6a1d8ef7 100644 --- a/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/manage/CustomerInfoMapper.xml @@ -24,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, customer_code, customer_name, customer_postcode, province, city, address, contact_person, contact_phone, contact_email, Industry_tyoe, remark, create_at, update_at, delete_at, status from customer_info + select id, customer_code, customer_name, customer_postcode, province, city, address, contact_person, contact_phone, contact_email, industry_type, remark, create_at, update_at, delete_at, status from customer_info + insert into delivery_list diff --git a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml index d3ec3819..b7002d74 100644 --- a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml @@ -42,6 +42,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select id, @@ -164,6 +189,18 @@ t1.product_code=#{productCode}) + insert into order_info diff --git a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml index d248a4e0..75ef0cd5 100644 --- a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml +++ b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml @@ -11,13 +11,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - select id, product_code, product_name, model, description, remark, created_at, updated_at, deleted_at from product_info + select id, product_code, product_name, model, description, remark, created_at, updated_at, deleted_at,value,type from product_info