浏览代码

Merge remote-tracking branch 'origin/master'

Administrator 1 年之前
父节点
当前提交
4849edfbf3

+ 38 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/doumu/StatisticsController.java

@@ -0,0 +1,38 @@
+package com.ruoyi.web.controller.doumu;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.service.IDoumuProductInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/system/statistics")
+public class StatisticsController {
+
+    @Autowired
+    private IDoumuProductInfoService doumuProductInfoService;
+
+    /**
+     * pc首页各环节数量统计
+     */
+    @PreAuthorize("@ss.hasPermi('system:statistics:link')")
+    @GetMapping(value = "/link")
+    public AjaxResult link(String dateType)
+    {
+        return doumuProductInfoService.link(dateType);
+    }
+
+    /**
+     * pc首页本月各环节进度情况
+     */
+    @PreAuthorize("@ss.hasPermi('system:statistics:monthLink')")
+    @GetMapping(value = "/monthLink")
+    public AjaxResult monthLink()
+    {
+        return doumuProductInfoService.monthLink();
+    }
+}

+ 59 - 5
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -3,11 +3,9 @@ package com.ruoyi.common.utils;
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
@@ -188,4 +186,60 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+
+    /***
+     * 获取本周、本月、当前季度、年度的开始时间
+     * @param dateType 1:当天,2:本周,3:本月,4:当前季度,5:年度
+     * @return (yyyy-MM-dd)
+     */
+    public static String getTime(String dateType) {
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if ("1".equals(dateType)) {
+            //今日
+            LocalDateTime dayStart = now.with(LocalTime.MIN);
+            //LocalDateTime dayEnd = now.with(LocalTime.MAX);
+            return dayStart.format(fmt) ;
+        } else if ("2".equals(dateType)) {
+            //本周
+            int dayOfWeek = now.getDayOfWeek().getValue();
+            LocalDateTime weekStart = now.minusDays(dayOfWeek - 1).with(LocalTime.MIN);
+            //LocalDateTime weekEnd = now.plusDays(7 - dayOfWeek).with(LocalTime.MAX);
+            return weekStart.format(fmt) ;
+        } else if ("3".equals(dateType)) {
+            //本月
+            LocalDateTime monthStart = now.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
+            //LocalDateTime monthEnd = now.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
+            return monthStart.format(fmt) ;
+        } else if ("4".equals(dateType)) {
+            //本季度
+            LocalDate date = LocalDate.now();
+            LocalDate quarterStart = getStartOrEndDayOfQuarter(date, true);
+            //LocalDate quarterEnd = getStartOrEndDayOfQuarter(date, false);
+            return quarterStart.format(fmt) ;
+        } else {
+            //本年
+            LocalDateTime yearStart = now.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
+            //LocalDateTime yearEnd = now.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX);
+            return yearStart.format(fmt);
+        }
+    }
+
+    public static LocalDate getStartOrEndDayOfQuarter(LocalDate today, Boolean isFirst) {
+        LocalDate resDate = LocalDate.now();
+        if (today == null) {
+            today = resDate;
+        }
+        Month month = today.getMonth();
+        Month firstMonthOfQuarter = month.firstMonthOfQuarter();
+        Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
+        if (isFirst) {
+            resDate = LocalDate.of(today.getYear(), firstMonthOfQuarter, 1);
+        } else {
+            resDate = LocalDate.of(today.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(today.isLeapYear()));
+        }
+        return resDate;
+    }
+
 }

+ 35 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/DoumuProductInfo.java

@@ -20,6 +20,9 @@ public class DoumuProductInfo extends BaseEntity
     /** ID */
     private Long productId;
 
+    /** 微信标识 */
+    private String openid;
+
     /** 订单号 */
     @Excel(name = "订单号")
     private String orderNumber;
@@ -79,6 +82,14 @@ public class DoumuProductInfo extends BaseEntity
     @Excel(name = "订单状态", readConverterExp = "1=未支付,2=已支付,3=已结束")
     private String status;
 
+    /** 商品名称 */
+    @Excel(name = "商品名称")
+    private String goodsName;
+
+    /** 订单金额(元) */
+    @Excel(name = "订单金额(元)")
+    private Double totalPrice;
+
 
     /** 快递单号 */
     @Excel(name = "快递单号")
@@ -267,6 +278,30 @@ public class DoumuProductInfo extends BaseEntity
         this.quantity = quantity;
     }
 
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
     @Override
     public String toString() {
         return "DoumuProductInfo{" +

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IDoumuProductInfoService.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.service;
 
 import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.system.domain.DoumuProductInfo;
 import com.ruoyi.system.domain.vo.DoumuProductInfoVo;
 
@@ -61,4 +63,8 @@ public interface IDoumuProductInfoService
     public int deleteDoumuProductInfoByProductId(Long productId);
 
     int editFlow(DoumuProductInfoVo doumuProductInfoVo);
+
+    AjaxResult link(String dateType);
+
+    AjaxResult monthLink();
 }

+ 85 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DoumuProductInfoServiceImpl.java

@@ -1,13 +1,20 @@
 package com.ruoyi.system.service.impl;
 
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.system.domain.DoumuProductFj;
 import com.ruoyi.system.domain.vo.DoumuProductInfoVo;
 import com.ruoyi.system.mapper.DoumuProductFjMapper;
+import com.ruoyi.system.mapper.SysDictDataMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.DoumuProductInfoMapper;
@@ -29,6 +36,9 @@ public class DoumuProductInfoServiceImpl implements IDoumuProductInfoService
     @Autowired
     private DoumuProductFjMapper doumuProductFjMapper;
 
+    @Autowired
+    private SysDictDataMapper dictDataMapper;
+
     /**
      * 查询痘姆古陶信息
      *
@@ -156,4 +166,79 @@ public class DoumuProductInfoServiceImpl implements IDoumuProductInfoService
         String flowType = doumuProductInfoVo.getFlowType();
         return doumuProductInfoMapper.updateDoumuProductInfoFlowList(productIdList,flowType);
     }
+
+    @Override
+    public AjaxResult link(String dateType) {
+        Map<String,Object> map = new HashMap<>();
+        String startTime = DateUtils.getTime(dateType);
+        String endTime = DateUtils.getTime("1");
+        //查询时间内地数据
+        SysDictData dictData = new SysDictData();
+        dictData.setDictType("liuch");
+        List<SysDictData> sysDictDataList = dictDataMapper.selectDictDataList(dictData);
+        //计算总数
+        DoumuProductInfo doumuProductInfo = new DoumuProductInfo();
+        doumuProductInfo.setBeginTime(startTime);
+        doumuProductInfo.setEndTime(endTime);
+        List<DoumuProductInfo> doumuProductInfoList = doumuProductInfoMapper.selectDoumuProductInfoList(doumuProductInfo);
+        if(doumuProductInfoList==null || doumuProductInfoList.size()<=0){
+            map.put("all",0);
+            for (SysDictData sysDictData : sysDictDataList) {
+                map.put(sysDictData.getDictValue(),0);
+            }
+            return AjaxResult.success(map);
+        }
+        map.put("all",doumuProductInfoList.size());
+        for (SysDictData sysDictData : sysDictDataList) {
+            int num = 0;
+            for (DoumuProductInfo productInfo : doumuProductInfoList) {
+                if(sysDictData.getDictValue().equals(productInfo.getFlowType())){
+                    num++;
+                }
+            }
+            map.put(sysDictData.getDictValue(),num);
+        }
+        return AjaxResult.success(map);
+    }
+
+    @Override
+    public AjaxResult monthLink() {
+        Map<String,Object> map = new HashMap<>();
+        String startTime = DateUtils.getTime("3");
+        String endTime = DateUtils.getTime("1");
+        //查询时间内地数据
+        SysDictData dictData = new SysDictData();
+        dictData.setDictType("liuch");
+        List<SysDictData> sysDictDataList = dictDataMapper.selectDictDataList(dictData);
+        //计算总数
+        DoumuProductInfo doumuProductInfo = new DoumuProductInfo();
+        doumuProductInfo.setBeginTime(startTime);
+        doumuProductInfo.setEndTime(endTime);
+        List<DoumuProductInfo> doumuProductInfoList = doumuProductInfoMapper.selectDoumuProductInfoList(doumuProductInfo);
+        if(doumuProductInfoList==null || doumuProductInfoList.size()<=0){
+            for (SysDictData sysDictData : sysDictDataList) {
+                map.put(sysDictData.getDictValue(),"0%");
+            }
+            return AjaxResult.success(map);
+        }
+
+        int count = doumuProductInfoList.size();
+        BigDecimal num1 = new BigDecimal(count);
+        for (SysDictData sysDictData : sysDictDataList) {
+            int num = 0;
+            for (DoumuProductInfo productInfo : doumuProductInfoList) {
+                if(sysDictData.getDictValue().equals(productInfo.getFlowType())){
+                    num++;
+                }
+            }
+            BigDecimal num2 = new BigDecimal(num);
+            double result = Double.parseDouble(((num1.divide(num2,2,BigDecimal.ROUND_HALF_UP))).toString());
+            // 创建DecimalFormat对象并设置格式化模式为"0%"
+            DecimalFormat decimalFormat = new DecimalFormat("0%");
+            // 使用DecimalFormat对象进行格式化操作
+            String percentage = decimalFormat.format((result));
+            map.put(sysDictData.getDictValue(),percentage);
+        }
+        return AjaxResult.success(map);
+    }
 }

+ 14 - 1
ruoyi-system/src/main/resources/mapper/system/DoumuProductInfoMapper.xml

@@ -6,6 +6,7 @@
 
     <resultMap type="DoumuProductInfo" id="DoumuProductInfoResult">
         <result property="productId"    column="product_id"    />
+        <result property="openid"    column="openid"    />
         <result property="orderNumber"    column="order_number"    />
         <result property="name"    column="name"    />
         <result property="deliveryType"    column="delivery_type"    />
@@ -22,6 +23,8 @@
         <result property="lat"    column="lat"    />
         <result property="flowType"    column="flow_type"    />
         <result property="status"    column="status"    />
+        <result property="goodsName"    column="goods_name"    />
+        <result property="totalPrice"    column="total_price"    />
         <result property="mailNo"    column="mail_no"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
@@ -34,7 +37,8 @@
     </resultMap>
 
     <sql id="selectDoumuProductInfoVo">
-        select product_id,order_number, name, delivery_type, phonenumber,quantity,province_id,province,city_id,city,county_id,county,lon,lat,status, address, flow_type, mail_no, create_by, create_time, update_by, update_time, remark from doumu_product_info
+        select product_id,openid,order_number, name, delivery_type, phonenumber,quantity,province_id,province,city_id,city,county_id,county,lon,lat,status, address,
+               flow_type,goods_name,total_price, mail_no, create_by, create_time, update_by, update_time, remark from doumu_product_info
     </sql>
 
     <select id="selectDoumuProductInfoList" parameterType="DoumuProductInfo" resultMap="DoumuProductInfoResult">
@@ -66,6 +70,7 @@
     <insert id="insertDoumuProductInfo" parameterType="DoumuProductInfo" useGeneratedKeys="true" keyProperty="productId">
         insert into doumu_product_info
         <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="openid != null "> openid,</if>
             <if test="orderNumber != null "> order_number,</if>
             <if test="name != null and name != ''">name,</if>
             <if test="deliveryType != null">delivery_type,</if>
@@ -82,6 +87,8 @@
             <if test="lat != null">lat,</if>
             <if test="flowType != null">flow_type,</if>
             <if test="status != null">status,</if>
+            <if test="goodsName != null">goods_name,</if>
+            <if test="totalPrice != null and totalPrice != 0">total_price,</if>
             <if test="mailNo != null">mailNo,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
@@ -90,6 +97,7 @@
             <if test="remark != null">remark,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="openid != null "> #{openid},</if>
             <if test="orderNumber != null ">#{orderNumber},</if>
             <if test="name != null and name != ''">#{name},</if>
             <if test="deliveryType != null">#{deliveryType},</if>
@@ -106,6 +114,8 @@
             <if test="lat != null">#{lat},</if>
             <if test="flowType != null">#{flowType},</if>
             <if test="status != null">#{status},</if>
+            <if test="goodsName != null">#{goodsName},</if>
+            <if test="totalPrice != null and totalPrice != 0">#{totalPrice},</if>
             <if test="mailNo != null">#{mailNo},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
@@ -118,6 +128,7 @@
     <update id="updateDoumuProductInfo" parameterType="DoumuProductInfo">
         update doumu_product_info
         <trim prefix="SET" suffixOverrides=",">
+            <if test="openid != null "> openid = #{openid},</if>
             <if test="orderNumber != null  and orderNumber != ''"> order_number = #{orderNumber},</if>
             <if test="name != null and name != ''">name = #{name},</if>
             <if test="deliveryType != null">delivery_type = #{deliveryType},</if>
@@ -134,6 +145,8 @@
             <if test="lat != null">lat = #{lat},</if>
             <if test="flowType != null">flow_type = #{flowType},</if>
             <if test="status != null">status = #{status},</if>
+            <if test="goodsName != null">goods_name = #{goodsName},</if>
+            <if test="totalPrice != null and totalPrice != 0">total_price = #{totalPrice},</if>
             <if test="mailNo != null">mailNo = #{mailNo},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>