he2802 2 年 前
コミット
7210f9adb1

+ 20 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java

@@ -78,6 +78,26 @@ public class TopOrderStatisticsController extends BaseController {
 //        return getDataTable(list);
 //    }
 
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("机构订单金额统计")
+    @GetMapping("/moneyByTenant")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyTenantStatistics(bo);
+        return getDataTable(list);
+    }
 
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("机构订单数量统计")
+    @GetMapping("/numByTenant")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumTenantStatistics(bo);
+        return getDataTable(list);
+    }
 
 }

+ 12 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java

@@ -67,5 +67,17 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
 
     List<TopOrderStatisticsNumVo> getNumStatistics(TopOrderStatisticsBo bo);
 
+    List<TopOrderStatisticsMoneyVo> getTenantStatistics(TopOrderStatisticsBo bo);
+
+    BigDecimal getSingleTenantStatistics(TopOrderStatisticsBo bo);
+
     Long getNumStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
+
+    List<TopOrderStatisticsNumVo> getTenantStatisticsOrderNum(TopOrderStatisticsBo bo);
+
+    Long getSingleTenantStatisticsOrderNum(TopOrderStatisticsBo bo);
+
+    Long getNumStatisticsTotalWithBo(TopOrderStatisticsBo bo);
+
+    BigDecimal getMoneyStatisticsWithBo(TopOrderStatisticsBo bo);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java

@@ -143,4 +143,8 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
     List<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo);
 
     List<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo);
+
+	List<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo);
 }

+ 162 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -2297,6 +2297,168 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         return numVos;
     }
 
+    @Override
+    public List<TopOrderStatisticsMoneyVo> orderMoneyTenantStatistics(TopOrderStatisticsBo bo) {
+        //筛选时间处理
+        if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
+            //没有选择时间范围,默认为当前时间向前推30天
+            Long nowTime = DateUtils.getNowTime();
+            Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
+            bo.setStartTime(dayBefore);
+            bo.setEndTime(nowTime);
+        }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
+            switch (bo.getTimeSign()){
+                case 1://本周
+                    Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
+                    bo.setStartTime(timeInterval.get("start"));
+                    bo.setEndTime(timeInterval.get("end"));
+                    break;
+                case 2://本月
+                    Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
+                    bo.setStartTime(toMonthZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                case 3://本年
+                    Long toYearZeroTime = DateUtils.getToYearZeroTime();
+                    bo.setStartTime(toYearZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                default :
+                    break;
+            }
+        }
+
+        List<TopOrderStatisticsMoneyVo> moneyVos = baseMapper.getTenantStatistics(bo);
+        if (CollectionUtils.isEmpty(moneyVos)){
+            return new ArrayList<>();
+        }
+        //订单总额
+        BigDecimal moneyTotal = baseMapper.getMoneyStatisticsWithBo(bo);
+        moneyVos.forEach(item -> {
+            if (item.getMoney().compareTo(BigDecimal.ZERO) == 0){
+                return;
+            }
+            //环比
+            item.setWeekRate("100%");
+            Long startTime = bo.getStartTime();
+            Long endTime = bo.getEndTime();
+            Long time = endTime - startTime;
+            TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
+            topOrderStatisticsBo.setStartTime(startTime - time);
+            topOrderStatisticsBo.setEndTime(startTime);
+            topOrderStatisticsBo.setCreateNo(item.getCreateNo());
+            topOrderStatisticsBo.setTenantId(item.getTenantId());
+            BigDecimal money = baseMapper.getSingleTenantStatistics(topOrderStatisticsBo);
+            if (money.compareTo(BigDecimal.ZERO) > 0){
+                BigDecimal subtract = item.getMoney().subtract(money);
+                BigDecimal divide = subtract.divide(money,2, RoundingMode.HALF_UP);
+                String s = divide.multiply(new BigDecimal("100")).toString();
+                item.setWeekRate(s+"%");
+            }
+
+            //同比
+            item.setYearRate("100%");
+            Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
+            Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
+            topOrderStatisticsBo.setStartTime(startBefore);
+            topOrderStatisticsBo.setEndTime(endBefore);
+            topOrderStatisticsBo.setCreateNo(item.getCreateNo());
+            topOrderStatisticsBo.setTenantId(item.getTenantId());
+            BigDecimal money2 = baseMapper.getSingleTenantStatistics(topOrderStatisticsBo);
+            if (money2.compareTo(BigDecimal.ZERO) > 0){
+                BigDecimal subtract = item.getMoney().subtract(money2);
+                BigDecimal divide = subtract.divide(money2,2, RoundingMode.HALF_UP);
+                String s = divide.multiply(new BigDecimal("100")).toString();
+                item.setYearRate(s+"%");
+            }
+
+            //占比
+            BigDecimal divide = item.getMoney().divide(moneyTotal, 2, RoundingMode.HALF_UP);
+            String s = divide.multiply(new BigDecimal("100")).toString();
+            item.setOccupationRate(s+"%");
+        });
+        return moneyVos;
+    }
+
+    @Override
+    public List<TopOrderStatisticsNumVo> orderNumTenantStatistics(TopOrderStatisticsBo bo) {
+        if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
+            //没有选择时间范围,默认为当前时间向前推30天
+            Long nowTime = DateUtils.getNowTime();
+            Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
+            bo.setStartTime(dayBefore);
+            bo.setEndTime(nowTime);
+        }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
+            switch (bo.getTimeSign()){
+                case 1://本周
+                    Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
+                    bo.setStartTime(timeInterval.get("start"));
+                    bo.setEndTime(timeInterval.get("end"));
+                    break;
+                case 2://本月
+                    Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
+                    bo.setStartTime(toMonthZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                case 3://本年
+                    Long toYearZeroTime = DateUtils.getToYearZeroTime();
+                    bo.setStartTime(toYearZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                default :
+                    break;
+            }
+        }
+
+        List<TopOrderStatisticsNumVo> numVos = baseMapper.getTenantStatisticsOrderNum(bo);
+        if (CollectionUtils.isEmpty(numVos)){
+            return new ArrayList<>();
+        }
+        //订单总数量
+        Long numTotal = baseMapper.getNumStatisticsTotalWithBo(bo);
+        numVos.forEach(item -> {
+            if (ObjectUtils.isNull(item.getOrderNum()) || item.getOrderNum() == 0){
+                return;
+            }
+            //环比
+            item.setWeekRate("100%");
+            Long startTime = bo.getStartTime();
+            Long endTime = bo.getEndTime();
+            Long time = endTime - startTime;
+            TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
+            topOrderStatisticsBo.setStartTime(startTime - time);
+            topOrderStatisticsBo.setEndTime(startTime);
+
+            topOrderStatisticsBo.setCustomerId(item.getCustomerId());
+            Long num = baseMapper.getSingleTenantStatisticsOrderNum(topOrderStatisticsBo);
+            if (num > 0){
+                Long subtract = item.getOrderNum() - num;
+                BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
+                String s = divide.multiply(new BigDecimal("100")).toString();
+                item.setWeekRate(s+"%");
+            }
+            //同比
+            item.setYearRate("100%");
+            Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
+            Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
+            topOrderStatisticsBo.setStartTime(startBefore);
+            topOrderStatisticsBo.setEndTime(endBefore);
+            Long num2 = baseMapper.getSingleTenantStatisticsOrderNum(topOrderStatisticsBo);
+            if (num2 > 0){
+                Long subtract = item.getOrderNum() - num2;
+                BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num2),2, RoundingMode.HALF_UP);
+                String s = divide.multiply(new BigDecimal("100")).toString();
+                item.setWeekRate(s+"%");
+            }
+
+            //占比
+            BigDecimal divide = new BigDecimal(item.getOrderNum()).divide(new BigDecimal(numTotal), 2, RoundingMode.HALF_UP);
+            String s = divide.multiply(new BigDecimal("100")).toString();
+            item.setOccupationRate(s+"%");
+        });
+        return numVos;
+    }
+
 
     private TopOrderGoodsUpVo getGoodsUp(TopOldOrderGoods orderGoods,List<TopOldOrderStudyVo> studyVos){
         TopOrderGoodsUpVo vo = BeanUtil.toBean(orderGoods, TopOrderGoodsUpVo.class);

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderStatisticsMoneyVo.java

@@ -39,4 +39,7 @@ public class TopOrderStatisticsMoneyVo implements Serializable {
 
     @ApiModelProperty("业务员名称")
     private String createUsername;
+
+    @ApiModelProperty("企业ID")
+    private String tenantId;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderStatisticsNumVo.java

@@ -31,4 +31,13 @@ public class TopOrderStatisticsNumVo implements Serializable {
     @ApiModelProperty("占比")
     private String occupationRate;
 
+    @ApiModelProperty("机构名称")
+    private String tenantName;
+
+    @ApiModelProperty("业务号")
+    private String createNo;
+
+    @ApiModelProperty("业务员名称")
+    private String createUsername;
+
 }

+ 137 - 4
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -834,22 +834,155 @@
             (
                 SELECT
                     tenant_id,
-                    SUM( order_price ) total_price
+                    SUM( order_received - order_refunded ) money
+                    <if test="tenantId != null and tenantId != ''">
+                        , create_no,any_value(too.create_username) as create_username
+                    </if>
                 FROM
-                    v_top_order
+                 v_top_order
                 WHERE
                     1 = 1
-                  AND create_time BETWEEN #{startTime}
+                    AND `status` = 1
+                    AND check_status = 1
+                    AND check_time BETWEEN #{startTime}
                     AND #{endTime}
                 <if test="tenantId != null and tenantId != ''">
                     AND tenant_id = #{tenantId}
                 </if>
                 GROUP BY
                     tenant_id
+                <if test="tenantId != null and tenantId != ''">
+                    , create_no
+                </if>
                 ORDER BY
-                    total_price DESC
+                     money DESC
             ) vo
                 LEFT JOIN sys_tenant st ON vo.tenant_id = st.tenant_id
     </select>
 
+
+    <select id="getSingleTenantStatistics" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="BigDecimal">
+        SELECT
+        IFNULL(SUM( vo.order_received - vo.order_refunded ),0) money
+        FROM
+        v_top_order vo
+        WHERE
+        1 = 1
+        AND vo.`status` = 1
+        AND vo.check_status = 1
+        AND vo.check_time BETWEEN #{startTime}
+        AND #{endTime}
+        <if test="tenantId != null and tenantId != ''">
+            AND vo.tenant_id = #{tenantId}
+        </if>
+        <if test="createNo != null and createNo != ''">
+            AND vo.create_no = #{createNo}
+        </if>
+    </select>
+
+    <select id="getTenantStatisticsOrderNum" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOrderStatisticsNumVo">
+        SELECT
+        vo.*,
+        st.tenant_name
+        FROM
+        (
+        SELECT
+        tenant_id,
+        COUNT( * ) order_num
+        <if test="tenantId != null and tenantId != ''">
+            , create_no,any_value(create_username) as create_username
+        </if>
+        FROM
+        v_top_order
+        WHERE
+        1 = 1
+        AND `status` = 1
+        AND check_status = 1
+        <if test="startTime != null and startTime != ''">
+            AND check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND check_time &lt;= #{endTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
+        GROUP BY
+        tenant_id
+        <if test="tenantId != null and tenantId != ''">
+            , create_no
+        </if>
+        ORDER BY
+        order_num DESC
+        ) vo
+        LEFT JOIN sys_tenant st ON vo.tenant_id = st.tenant_id
+    </select>
+
+    <select id="getSingleTenantStatisticsOrderNum" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="java.lang.Long">
+        SELECT
+        IFNULL(COUNT( * ),0)
+        FROM
+        v_top_order
+        WHERE
+        1 = 1
+        AND `status` = 1
+        AND check_status = 1
+        <if test="startTime != null and startTime != ''">
+            AND check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND check_time &lt;= #{endTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
+        <if test="createNo != null and createNo != ''">
+            AND create_no = #{createNo}
+        </if>
+    </select>
+
+    <select id="getNumStatisticsTotalWithBo" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="java.lang.Long">
+
+        SELECT
+        IFNULL(COUNT(*),0)
+        FROM
+        v_top_order
+        WHERE
+        `status` = 1
+        AND check_status = 1
+        <if test="startTime != null and startTime != ''">
+            AND check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND check_time &lt;= #{endTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
+    </select>
+
+    <select id="getMoneyStatisticsWithBo" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="java.math.BigDecimal">
+
+        SELECT
+        IFNULL(SUM( order_received - order_refunded ),0)
+        FROM
+        v_top_order
+        WHERE
+        `status` = 1
+        AND check_status = 1
+        <if test="startTime != null and startTime != ''">
+            AND check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND check_time &lt;= #{endTime}
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
+    </select>
 </mapper>