陶杰
2024-10-17 9cf68def59e9331dc470b06ece538ed5543e2526
1.小程序-供应商-统计
已修改6个文件
已添加2个文件
290 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/request/report/QueryAppSupplierDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/report/AppSupplierStatisticsVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/supplier/SupplierOrderDTO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/report/OrderReportService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/report/OrderReportMapper.xml 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/report/QueryAppSupplierDTO.java
对比新文件
@@ -0,0 +1,20 @@
package com.mzl.flower.dto.request.report;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class QueryAppSupplierDTO {
    @ApiModelProperty("供应商ID")
    private Long supplierId;
    @ApiModelProperty("当天的开始时间")
    private LocalDateTime startDateTime;
    @ApiModelProperty("当天的结束时间")
    private LocalDateTime endDateTime;
}
src/main/java/com/mzl/flower/dto/response/report/AppSupplierStatisticsVO.java
对比新文件
@@ -0,0 +1,30 @@
package com.mzl.flower.dto.response.report;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class AppSupplierStatisticsVO {
    @ApiModelProperty("总成交:花农售卖全部的底价合计")
    private String allSupplierAmount;
    @ApiModelProperty("本月成交:本月售卖的底价合计")
    private String curMonSupplierAmount;
    @ApiModelProperty("上月成交:上月售卖的底价合计")
    private String lastMonSupplierAmount;
    @ApiModelProperty("今日成交:今日售卖的底价合计")
    private String todaySupplierAmount;
    @ApiModelProperty("缺货(本月):本月质检缺货,并且web端审核通过的数量合计")
    private String curMonLackNum;
    @ApiModelProperty("上月质检缺货,并且web端审核通过的数量合计")
    private String lastMonLackNum;
    @ApiModelProperty("本月质检降级,并且web端审核通过的数量合计")
    private String curMonReduceNum;
    @ApiModelProperty("上月质检降级,并且web端审核通过的数量合计")
    private String lastMonReduceNum;
    @ApiModelProperty("本月质检补货,并且web端审核通过的数量合计")
    private String curMonReplaceNum;
    @ApiModelProperty("上月质检补货,并且web端审核通过的数量合计")
    private String lastMonReplaceNum;
}
src/main/java/com/mzl/flower/dto/response/supplier/SupplierOrderDTO.java
@@ -37,4 +37,27 @@
    @ApiModelProperty("今日配送总数")
    private Integer deliverTotal;
    @ApiModelProperty("总成交:花农售卖全部的底价合计")
    private String allSupplierAmount;
    @ApiModelProperty("本月成交:本月售卖的底价合计")
    private String curMonSupplierAmount;
    @ApiModelProperty("上月成交:上月售卖的底价合计")
    private String lastMonSupplierAmount;
    @ApiModelProperty("今日成交:今日售卖的底价合计")
    private String todaySupplierAmount;
    @ApiModelProperty("缺货(本月):本月质检缺货,并且web端审核通过的数量合计")
    private String curMonLackNum;
    @ApiModelProperty("上月质检缺货,并且web端审核通过的数量合计")
    private String lastMonLackNum;
    @ApiModelProperty("本月质检降级,并且web端审核通过的数量合计")
    private String curMonReduceNum;
    @ApiModelProperty("上月质检降级,并且web端审核通过的数量合计")
    private String lastMonReduceNum;
    @ApiModelProperty("本月质检补货,并且web端审核通过的数量合计")
    private String curMonReplaceNum;
    @ApiModelProperty("上月质检补货,并且web端审核通过的数量合计")
    private String lastMonReplaceNum;
}
src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
@@ -1,6 +1,7 @@
package com.mzl.flower.mapper.report;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.report.QueryAppSupplierDTO;
import com.mzl.flower.dto.response.report.*;
import com.mzl.flower.dto.request.report.QueryPartnerOrderDTO;
import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
@@ -29,4 +30,6 @@
    List<OrderSupplierReportResultVO> getOrderSupplierReport(@Param("dto") SupplierReportCalendarBO calendarBO);
    OrderSupplierReportResultVO getOrderSupplierCountReport(@Param("dto") SupplierReportCalendarBO calendarBO);
    AppSupplierStatisticsVO getAppSupplierAmountStatistics(@Param("dto") QueryAppSupplierDTO dto);
}
src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.dto.request.report.QueryAppSupplierDTO;
import com.mzl.flower.dto.request.report.QueryOrderDTO;
import com.mzl.flower.dto.request.report.QueryPartnerOrderDTO;
import com.mzl.flower.dto.request.report.QuerySupplierDTO;
@@ -16,6 +17,7 @@
import com.mzl.flower.service.report.OrderReportService;
import com.mzl.flower.utils.ExcelExportUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hpsf.Decimal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -341,6 +343,33 @@
            log.error(e.getMessage(), e);
        }
    }
    @Override
    public AppSupplierStatisticsVO getAppSupplierStatistics(QueryAppSupplierDTO dto) {
        // TODO
        // 总成交:花农售卖全部的底价合计,
        // 本月成交:本月售卖的底价合计,
        // 上月成交:上月售卖的底价合计,
        // 今日成交:今日售卖的底价合计,
        // 近30天成交扎数:最近30天扎数合计(已有),
        // 今日成交扎数(已有)
        // 缺货(本月):本月质检缺货,并且web端审核通过的数量合计,
        // 缺货(上月):上月质检缺货,并且web端审核通过的数量合计,
        // 降级(本月):本月质检降级,并且web端审核通过的数量合计,
        // 降级(上月):上月质检降级,并且web端审核通过的数量合计,
        // 补货(本月):本月质检补货,并且web端审核通过的数量合计,
        // 补货(上月):上月质检补货,并且web端审核通过的数量合计,
        // 当天的开始时间
        dto.setStartDateTime(getCurDayStartTime());
        // 当天的结束时间
        dto.setEndDateTime(getCurDayEndTime());
        return orderReportMapper.getAppSupplierAmountStatistics(dto);
    }
    // 计算 startDate 的前一天 17:00:00
    public static LocalDateTime calculateStartTime(LocalDateTime startDateTime) {
        // 获取 LocalDate 部分
@@ -370,5 +399,33 @@
        return endOfDay;
    }
    // 获取当天的开始时间
    public static LocalDateTime getCurDayStartTime() {
        LocalDateTime now = LocalDateTime.now();
        LocalTime cutoffTime = LocalTime.of(17, 0);
        if (now.toLocalTime().isAfter(cutoffTime)) {
            // 当前时间大于17:00
            return LocalDateTime.of(now.toLocalDate(), cutoffTime);
        } else {
            // 当前时间小于等于17:00
            return LocalDateTime.of(now.minusDays(1).toLocalDate(), cutoffTime);
        }
    }
    // 获取当天的结束时间
    public static LocalDateTime getCurDayEndTime() {
        LocalDateTime now = LocalDateTime.now();
        LocalTime cutoffTime = LocalTime.of(17, 0);
        if (now.toLocalTime().isAfter(cutoffTime)) {
            // 当前时间大于17:00,结束时间为明天17:00
            return LocalDateTime.of(now.plusDays(1).toLocalDate(), cutoffTime);
        } else {
            // 当前时间小于等于17:00,结束时间为当天17:00
            return LocalDateTime.of(now.toLocalDate(), cutoffTime);
        }
    }
}
  
src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
@@ -7,9 +7,11 @@
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.payment.*;
import com.mzl.flower.dto.request.report.QueryAppSupplierDTO;
import com.mzl.flower.dto.response.flower.ParamItemDTO;
import com.mzl.flower.dto.response.flower.StationStatisticDTO;
import com.mzl.flower.dto.response.payment.*;
import com.mzl.flower.dto.response.report.AppSupplierStatisticsVO;
import com.mzl.flower.dto.response.supplier.SupplierOrderDTO;
import com.mzl.flower.entity.payment.*;
import com.mzl.flower.entity.supplier.Station;
@@ -21,6 +23,7 @@
import com.mzl.flower.mapper.supplier.StationMapper;
import com.mzl.flower.service.BaseService;
import com.mzl.flower.service.flower.FlowerParamService;
import com.mzl.flower.service.report.OrderReportService;
import com.mzl.flower.utils.UUIDGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -73,6 +76,9 @@
    @Autowired
    private OrderItemSettlementService orderItemSettlementService;
    @Autowired
    private OrderReportService orderReportService;
    public void createDeliveryOrder(Order order) {
        String orderId = order.getId();
@@ -528,6 +534,12 @@
            LocalDateTime s1 = endDate.plusDays(-30);
            Integer dealCountDay30 = deliveryOrderItemMapper.getDoItemCount(supplierId, null, s1, endDate);
            dto.setDealCountDay30(dealCountDay30);
            // 供应商 总成交、本月成交、上月成交、今日成交、缺货(本月)、上月质检缺货、本月质检降级、上月质检降级、本月质检补货、上月质检补货
            QueryAppSupplierDTO appDto=new QueryAppSupplierDTO();
            appDto.setSupplierId(supplierId);
            final AppSupplierStatisticsVO appSupplierStatistics = orderReportService.getAppSupplierStatistics(appDto);
            BeanUtils.copyProperties(appSupplierStatistics,dto);
        }
        return dto;
src/main/java/com/mzl/flower/service/report/OrderReportService.java
@@ -1,13 +1,11 @@
package com.mzl.flower.service.report;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.report.QueryAppSupplierDTO;
import com.mzl.flower.dto.request.report.QueryOrderDTO;
import com.mzl.flower.dto.request.report.QuerySupplierDTO;
import com.mzl.flower.dto.request.report.QueryPartnerOrderDTO;
import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
import com.mzl.flower.dto.response.report.OrderPartnerReportResultVO;
import com.mzl.flower.dto.response.report.OrderReportResultVO;
import com.mzl.flower.dto.response.report.OrderSupplierReportResultVO;
import com.mzl.flower.dto.response.report.*;
import javax.servlet.http.HttpServletResponse;
@@ -46,4 +44,13 @@
    OrderSupplierReportResultVO getOrderSupplierClout(QuerySupplierDTO dto);
    void exportSupplierList(HttpServletResponse response, QuerySupplierDTO dto);
    /**
     * 获取App供应商那个统计数据
     * @param dto
     * @return
     */
    AppSupplierStatisticsVO getAppSupplierStatistics(QueryAppSupplierDTO dto);
}
src/main/resources/mapper/report/OrderReportMapper.xml
@@ -593,4 +593,134 @@
        )  s group by dateinfo,supplier_id
        ) s2
    </select>
    <select id="getAppSupplierAmountStatistics"
            resultType="com.mzl.flower.dto.response.report.AppSupplierStatisticsVO">
        select
          ( <include refid="all_supplier_amount"></include> ) as all_supplier_amount
        , (    <include refid="cur_mon_supplier_amount"></include> ) as cur_mon_supplier_amount
        , (    <include refid="last_mon_supplier_amount"></include> ) as last_mon_supplier_amount
        , (    <include refid="today_supplier_amount"></include> ) as today_supplier_amount
        , (    <include refid="cur_mon_lack_num"></include> ) as cur_mon_lack_num
        , (    <include refid="last_mon_lack_num"></include> ) as last_mon_lack_num
        , (    <include refid="cur_mon_reduce_num"></include> ) as cur_mon_reduce_num
        , ( <include refid="last_mon_reduce_num"></include> ) as last_mon_reduce_num
        , ( <include refid="cur_mon_replace_num"></include> ) as cur_mon_replace_num
        , (    <include refid="last_mon_replace_num"></include> ) as last_mon_replace_num
    </select>
    <!--供应商总价款-->
    <sql id="all_supplier_amount">
        select IFNULL(sum(oi.supplier_price*oi.num),0) as supplier_amount from t_order_item oi where oi.supplier_id=287
    </sql>
    <!--本月成交:本月售卖的底价合计-->
    <sql id="cur_mon_supplier_amount">
        select IFNULL(sum(oi.supplier_price*oi.num),0) as cur_mon_supplier_amount
        from t_order_item oi
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id = #{dto.supplierId}
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(LAST_DAY(CURRENT_DATE()), '%Y-%m-%d 17:00:00')
    </sql>
    <!--上月成交:上月售卖的底价合计-->
    <sql id="last_mon_supplier_amount">
        select IFNULL(sum(oi.supplier_price*oi.num),0) as last_mon_supplier_amount
        from t_order_item oi
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(DATE_SUB(DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01'), INTERVAL 1 DAY), '%Y-%m-%d 17:00:00')
    </sql>
    <!--今日成交:今日售卖的底价合计 // todo 需要根据当前时间判断今日的开始时间和结束时间-->
    <sql id="today_supplier_amount">
        select IFNULL(sum(oi.supplier_price*oi.num),0) as today_supplier_amount
        from t_order_item oi
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and o.payment_time &gt; #{dto.startDateTime}
        and o.payment_time &lt;= #{dto.endDateTime}
    </sql>
    <!--缺货(本月):本月质检缺货,并且web端审核通过的数量合计-->
    <sql id="cur_mon_lack_num">
        select IFNULL(sum(oic.num),0) as cur_mon_lack_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'lack' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(LAST_DAY(CURRENT_DATE()), '%Y-%m-%d 17:00:00')
    </sql>
    <!--缺货(上月):上月质检缺货,并且web端审核通过的数量合计-->
    <sql id="last_mon_lack_num">
        select IFNULL(sum(oic.num),0) as last_mon_lack_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'lack' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(DATE_SUB(DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01'), INTERVAL 1 DAY), '%Y-%m-%d 17:00:00')
    </sql>
    <!--降级(本月):本月质检降级,并且web端审核通过的数量合计-->
    <sql id="cur_mon_reduce_num">
        select IFNULL(sum(oic.num),0) as cur_mon_reduce_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'reduce' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(LAST_DAY(CURRENT_DATE()), '%Y-%m-%d 17:00:00')
    </sql>
<!--    降级(上月):上月质检降级,并且web端审核通过的数量合计-->
    <sql id="last_mon_reduce_num">
        select IFNULL(sum(oic.num),0) as last_mon_reduce_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'reduce' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(DATE_SUB(DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01'), INTERVAL 1 DAY), '%Y-%m-%d 17:00:00')
    </sql>
<!--    补货(本月):本月质检补货,并且web端审核通过的数量合计-->
    <sql id="cur_mon_replace_num">
        select IFNULL(sum(oic.num),0) as cur_mon_replace_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'replace' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(LAST_DAY(CURRENT_DATE()), '%Y-%m-%d 17:00:00')
    </sql>
   <!-- 补货(上月):上月质检补货,并且web端审核通过的数量合计-->
    <sql id="last_mon_replace_num">
        select IFNULL(sum(oic.num),0) as last_mon_replace_num
        from t_order_item_check oic
        left join t_order_item oi
        on oic.order_item_id=oi.ID
        left join t_order o
        on oi.order_id = o.id
        where oi.supplier_id =  #{dto.supplierId}
        and oic.type = 'replace' and oic.audit_status='AGREED'
        and o.payment_time &gt; DATE_FORMAT(LAST_DAY(DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH)), '%Y-%m-%d 17:00:00')
        and o.payment_time &lt;= DATE_FORMAT(DATE_SUB(DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01'), INTERVAL 1 DAY), '%Y-%m-%d 17:00:00')
    </sql>
</mapper>