Переглянути джерело

商城订单统计2.0 版本

xgb 1 день тому
батько
коміт
e565408bc8

+ 31 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreStatisticsScrmController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -86,6 +87,36 @@ public class FsStoreStatisticsScrmController extends BaseController
         }
     }
 
+
+    @PreAuthorize("@ss.hasPermi('store:statistics:storeOrder')")
+    @GetMapping("/storeOrderStatistics")
+    public R storeOrderStatistics(FsStoreStatisticsParam param)
+    {
+
+        TimeUtils.TimeEntity timeEntity=TimeUtils.parseTimeTwo(param.getType()==null?null:param.getType().toString(),param.getStartTime(),param.getEndTime());
+        // 判断 员工是否为空
+        timeEntity.setCompanyUserId(param.getCompanyUserId());
+        timeEntity.setCompanyId(param.getCompanyId());
+        timeEntity.setDeptId(param.getDeptId());
+        timeEntity.setOrderType(param.getOrderType());
+        timeEntity.setOrderMedium(param.getOrderMedium());
+
+        Map<String,Object> map = timeEntity.toMap();
+        map.put("queryType",param.getQueryType());
+        map.put("amountType",param.getAmountType());
+
+        // 公司汇总
+        List<FsStoreOrderCountsVO> companyTableData = storeOrderService.selectFsStoreOrderGroupByCompanyId(map);
+
+        // 按部门汇总
+        List<FsStoreOrderCountsVO> deptTableData = storeOrderService.selectFsStoreOrderGroupByDeptId(map);
+
+        // 按员工汇总
+        List<FsStoreOrderCountsVO> userTableData = storeOrderService.selectFsStoreOrderGroupByUserId(map);
+
+        return R.ok().put("companyTableData",companyTableData).put("deptTableData",deptTableData).put("userTableData",userTableData);
+    }
+
     @PreAuthorize("@ss.hasPermi('store:statistics:storeProduct')")
     @GetMapping("/storeProduct")
     public R storeProduct(FsStoreStatisticsParam param)

+ 162 - 0
fs-common/src/main/java/com/fs/common/utils/TimeUtils.java

@@ -159,6 +159,121 @@ public class TimeUtils
         return new TimeEntity(sqlDateFormat, dateFormat, beginDate, endDate, cycleNum, beginTime, finalTime, null);
     }
 
+    /**
+     * @Description: 传日期优先使用日期,否则使用类型
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/19 10:33
+     */
+    public static TimeEntity parseTimeTwo(String type,String startTime,String endTime) {
+        Date beginDate = DateUtil.date();
+        Date endDate = DateUtil.date();
+        int cycleNum = 12;
+        String sqlDateFormat = "%Y%m%d";
+        String dateFormat = "yyyyMMdd";
+
+        if (StrUtil.isNotEmpty(startTime) && StrUtil.isNotEmpty(endTime)) {
+            Date start;
+            Date end;
+            if (startTime.length() == 6) {
+                start = DateUtil.parse(startTime, "yyyyMM");
+                end = DateUtil.endOfMonth(DateUtil.parse(endTime, "yyyyMM"));
+            } else {
+                start = DateUtil.parse(startTime);
+                end = DateUtil.parse(endTime);
+            }
+//            Integer startMonth = Integer.valueOf(DateUtil.format(start, "yyyyMM"));
+//            Integer endMonth = Integer.valueOf(DateUtil.format(end, "yyyyMM"));
+//            if (startMonth.equals(endMonth)) {
+//                sqlDateFormat = "%Y%m%d";
+//                dateFormat = "yyyyMMdd";
+//                Long diffDay = DateUtil.between(start, end, DateUnit.DAY);
+//                cycleNum = diffDay.intValue() + 1;
+//            } else {
+//                sqlDateFormat = "%Y%m";
+//                dateFormat = "yyyyMM";
+//                int diffYear = Integer.valueOf(endMonth.toString().substring(0, 4)) - Integer.valueOf(startMonth.toString().substring(0, 4));
+//                int diffMonth = endMonth % 100 - startMonth % 100 + 1;
+//                cycleNum = diffYear * 12 + diffMonth;
+//            }
+            beginDate = start;
+            endDate = end;
+        }else if (StrUtil.isNotEmpty(type)) {
+            if (type.matches("^[\\d]{8}$")){
+                sqlDateFormat = "%Y%m%d";
+                dateFormat = "yyyyMMdd";
+            }
+            switch (type) {
+                case "9":
+                    beginDate = DateUtil.beginOfYear(DateUtil.date());
+                    endDate = DateUtil.endOfYear(DateUtil.date());
+                    break;
+                case "10":
+                    beginDate = DateUtil.beginOfYear(DateUtil.offsetMonth(DateUtil.date(), -12));
+                    endDate = DateUtil.endOfYear(DateUtil.offsetMonth(DateUtil.date(), -12));
+                    break;
+                case "7":
+                    beginDate = DateUtil.beginOfQuarter(DateUtil.date());
+                    endDate = DateUtil.endOfQuarter(DateUtil.date());
+                    cycleNum = 3;
+                    break;
+                case "8":
+                    beginDate = DateUtil.beginOfQuarter(DateUtil.offsetMonth(DateUtil.date(), -3));
+                    endDate = DateUtil.endOfQuarter(DateUtil.offsetMonth(DateUtil.date(), -3));
+                    cycleNum = 3;
+                    break;
+                case "5":
+                    beginDate = DateUtil.beginOfMonth(DateUtil.date());
+                    endDate = DateUtil.endOfMonth(DateUtil.date());
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = (int) DateUtil.between(beginDate, endDate, DateUnit.DAY) + 1;
+                    break;
+                case "6":
+                    beginDate = DateUtil.beginOfMonth(DateUtil.offsetMonth(DateUtil.date(), -1));
+                    endDate = DateUtil.endOfMonth(DateUtil.offsetMonth(DateUtil.date(), -1));
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = (int) DateUtil.between(beginDate, endDate, DateUnit.DAY) + 1;
+                    break;
+                case "3":
+                    beginDate = DateUtil.beginOfWeek(DateUtil.date());
+                    endDate = DateUtil.endOfWeek(DateUtil.date());
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = 7;
+                    break;
+                case "4":
+                    beginDate = DateUtil.beginOfWeek(DateUtil.offsetWeek(DateUtil.date(), -1));
+                    endDate = DateUtil.endOfWeek(DateUtil.offsetWeek(DateUtil.date(), -1));
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = 7;
+                    break;
+                case "1":
+                    beginDate = DateUtil.beginOfDay(DateUtil.date());
+                    endDate = DateUtil.endOfDay(DateUtil.date());
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = 1;
+                    break;
+                case "2":
+                    beginDate = DateUtil.offsetDay(DateUtil.date(), -1);
+                    endDate = DateUtil.offsetDay(DateUtil.date(), -1);
+                    sqlDateFormat = "%Y%m%d";
+                    dateFormat = "yyyyMMdd";
+                    cycleNum = 1;
+                    break;
+                default:
+                    break;
+            }
+        }
+        Integer beginTime = Integer.valueOf(DateUtil.format(beginDate, dateFormat));
+        Integer finalTime = Integer.valueOf(DateUtil.format(endDate, dateFormat));
+        return new TimeEntity(sqlDateFormat, dateFormat, beginDate, endDate, cycleNum, beginTime, finalTime, null);
+    }
+
     public static class TimeEntity implements Serializable {
         public TimeEntity(String sqlDateFormat, String dateFormat, Date beginDate, Date endDate, Integer cycleNum, Integer beginTime, Integer finalTime, Long[] userIds) {
             this.sqlDateFormat = sqlDateFormat;
@@ -221,6 +336,53 @@ public class TimeUtils
          */
         private Long[] userIds;
 
+        private Long companyUserId;
+
+        private Long deptId;
+
+        /**
+         * 订单类型 字典表字段
+         */
+        String orderType;
+        /**
+         * 来源媒体 字典表字段
+         */
+        String orderMedium;
+
+        public String getOrderType() {
+            return orderType;
+        }
+
+        public void setOrderType(String orderType) {
+            this.orderType = orderType;
+        }
+
+        public String getOrderMedium() {
+            return orderMedium;
+        }
+
+        public void setOrderMedium(String orderMedium) {
+            this.orderMedium = orderMedium;
+        }
+
+        public Long getDeptId() {
+            return deptId;
+        }
+
+        public void setDeptId(Long companyDeptId) {
+            this.deptId = companyDeptId;
+        }
+
+        public Long getCompanyUserId() {
+            return companyUserId;
+        }
+
+        public void setCompanyUserId(Long companyUserId) {
+            this.companyUserId = companyUserId;
+        }
+
+
+
         public Integer getBeginTime() {
             return beginTime;
         }

+ 37 - 0
fs-company/src/main/java/com/fs/hisStore/controller/FsStoreStatisticsScrmController.java

@@ -50,6 +50,7 @@ public class FsStoreStatisticsScrmController extends BaseController
     private TokenService tokenService;
     @PreAuthorize("@ss.hasPermi('store:statistics:storeOrder')")
     @GetMapping("/storeOrder")
+    @Deprecated
     public R storeOrder(FsStoreStatisticsParam param)
     {
         if(StringUtils.isNotEmpty(param.getUserIds())){
@@ -94,6 +95,42 @@ public class FsStoreStatisticsScrmController extends BaseController
         }
     }
 
+    /**
+     * @Description: 商城订单统计 分别按员工 部门 公司进行统计
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/22 9:13
+     */
+    @PreAuthorize("@ss.hasPermi('store:statistics:storeOrder')")
+    @GetMapping("/storeOrderStatistics")
+    public R storeOrderStatistics(FsStoreStatisticsParam param)
+    {
+
+        TimeUtils.TimeEntity timeEntity=TimeUtils.parseTimeTwo(param.getType()==null?null:param.getType().toString(),param.getStartTime(),param.getEndTime());
+        // 判断 员工是否为空
+        timeEntity.setCompanyUserId(param.getCompanyUserId());
+        timeEntity.setCompanyId(param.getCompanyId());
+        timeEntity.setDeptId(param.getDeptId());
+        timeEntity.setOrderType(param.getOrderType());
+        timeEntity.setOrderMedium(param.getOrderMedium());
+
+        Map<String,Object> map = timeEntity.toMap();
+        map.put("queryType",param.getQueryType());
+        map.put("amountType",param.getAmountType());
+
+        // 公司汇总
+        List<FsStoreOrderCountsVO> companyTableData = storeOrderService.selectFsStoreOrderGroupByCompanyId(map);
+
+        // 按部门汇总
+        List<FsStoreOrderCountsVO> deptTableData = storeOrderService.selectFsStoreOrderGroupByDeptId(map);
+
+        // 按员工汇总
+        List<FsStoreOrderCountsVO> userTableData = storeOrderService.selectFsStoreOrderGroupByUserId(map);
+
+        return R.ok().put("companyTableData",companyTableData).put("deptTableData",deptTableData).put("userTableData",userTableData);
+    }
+
 
     @PreAuthorize("@ss.hasPermi('store:statistics:storeProduct')")
     @GetMapping("/storeProduct")

+ 7 - 2
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -9,7 +9,6 @@ import com.fs.api.param.OrderListParam;
 import com.fs.api.vo.OrderListVO;
 import com.fs.company.param.CompanyStatisticsParam;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
-import com.fs.his.domain.FsStoreOrder;
 import com.fs.his.vo.FsStoreOrderExcelVO;
 import com.fs.hisStore.domain.FsStoreOrderScrm;
 import com.fs.hisStore.domain.FsStoreOrderItemScrm;
@@ -1053,7 +1052,7 @@ public interface FsStoreOrderScrmMapper
      * **/
     List<OrderStatisticsVo> selectOrderSaleStatisticsList(@Param("param") OrderStatisticsParam param);
 
-    List<FsStoreOrderCountsVO> selectFsStoreOrderCountsByDept(Map<String, Object> map);
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByCompanyUserId(Map<String, Object> map);
 
     List<FsStoreOrderScrm> computePayMoney(@Param("customerIds")List<Long> customerIds);
 
@@ -1216,4 +1215,10 @@ public interface FsStoreOrderScrmMapper
             "        where order_code = #{orderCode}"+
             "</script>"})
     int updateFsStoreOrderByOrderCode(FsStoreOrderScrm fsStoreOrder);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByCompanyId(Map<String, Object> map);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByDeptId(Map<String, Object> map);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByUserId(Map<String, Object> map);
 }

+ 14 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreStatisticsParam.java

@@ -14,6 +14,15 @@ public class FsStoreStatisticsParam implements Serializable
     String startTime;
     String endTime;
     Long deptId;
+    Long companyId;
+
+    // 查询方式 下单时间-1 发货时间-2
+    private Integer queryType;
+    // 金额等于0-1 金额大于0-2
+    private Integer amountType;
+
+
+
     /**
      * 订单类型 字典表字段
      */
@@ -22,6 +31,11 @@ public class FsStoreStatisticsParam implements Serializable
      * 来源媒体 字典表字段
      */
     String orderMedium;
+    /**
+     * 销售员工Id
+     */
+    Long companyUserId;
+
 
 
 }

+ 6 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -282,4 +282,10 @@ public interface IFsStoreOrderScrmService
      * @param dtoList 订单数据
      * **/
     void importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByCompanyId(Map<String, Object>  map);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByDeptId(Map<String, Object> map);
+
+    List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByUserId(Map<String, Object> map);
 }

+ 16 - 3
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -1,7 +1,6 @@
 package com.fs.hisStore.service.impl;
 
 import cn.hutool.core.date.DateTime;
-import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.hutool.core.net.URLDecoder;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -32,7 +31,6 @@ import com.fs.company.mapper.CompanyUserUserMapper;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
-import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
@@ -3019,7 +3017,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
 
     @Override
     public List<FsStoreOrderCountsVO> selectFsStoreOrderCountsByDept(Map<String, Object> map,Long deptId) {
-        List<FsStoreOrderCountsVO> vos = fsStoreOrderMapper.selectFsStoreOrderCountsByDept(map);
+        List<FsStoreOrderCountsVO> vos = fsStoreOrderMapper.selectFsStoreOrderGroupByCompanyUserId(map);
         if (!vos.isEmpty()){
             List<FsStoreOrderCountsVO> totalVos = new ArrayList<>();
             //查询组名
@@ -3685,4 +3683,19 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService
            e.getStackTrace();
        }
     }
+
+    @Override
+    public List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByCompanyId(Map<String,Object> map) {
+        return fsStoreOrderMapper.selectFsStoreOrderGroupByCompanyId(map);
+    }
+
+    @Override
+    public List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByDeptId(Map<String, Object> map) {
+        return fsStoreOrderMapper.selectFsStoreOrderGroupByDeptId(map);
+    }
+
+    @Override
+    public List<FsStoreOrderCountsVO> selectFsStoreOrderGroupByUserId(Map<String, Object> map) {
+        return fsStoreOrderMapper.selectFsStoreOrderGroupByUserId(map);
+    }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderCountsVO.java

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 
 @Data
 public class FsStoreOrderCountsVO {
+    private Long id;
     private Long deptId; //不显示
     //员工名字[id] / 部门:部门名称
     private String name;
@@ -27,6 +28,10 @@ public class FsStoreOrderCountsVO {
     private Long cancelOrders;
     //取消金额
     private BigDecimal cancelAmount;
+    // 成交数
+    private Long completeOrders;
+    // 成交金额
+    private BigDecimal completeAmount;
     //成交未发货订单数
     private Long unshippedOrders;
     //成交未发货金额

+ 155 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -782,7 +782,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) a ORDER BY
         a.company_id DESC,a.totalNum DESC
     </select>
-    <select id="selectFsStoreOrderCountsByDept" resultType="com.fs.hisStore.vo.FsStoreOrderCountsVO">
+
+    <select id="selectFsStoreOrderGroupByCompanyUserId" resultType="com.fs.hisStore.vo.FsStoreOrderCountsVO">
         SELECT
         o.dept_id,
         CONCAT(o.nick_name, '[', o.company_user_id, ']') AS name,
@@ -891,6 +892,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         GROUP BY t.order_type
     </select>
 
+
+
+
     <update id="batchUpdateInOrderCode">
         UPDATE fs_store_order_scrm
         SET status = CASE
@@ -904,8 +908,158 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </update>
 
+    <select id="selectFsStoreOrderGroupByCompanyId" resultType="com.fs.hisStore.vo.FsStoreOrderCountsVO">
+        SELECT
+        company_company_id  AS id,
+        COALESCE(NULLIF(company_name, ''),'客户自购') AS name,
+        <include refid="selectFsStoreOrderConditions" />
+
+        FROM
+        (
+        SELECT so.*,c.company_name,a.audit_status,u.company_id as company_company_id
+        FROM
+        fs_store_order_scrm AS so
+        LEFT JOIN company_user u ON so.company_user_id = u.user_id
+        left join company c ON u.company_id = c.company_id
+        left join fs_store_order_audit_scrm a on a.order_id=so.id
+        where 1=1
+        <include refid="selectFsStoreOrderWhere" />
+
+
+        <if test="companyId != null  ">
+            AND u.company_id = #{companyId}
+        </if>
+
+
+        ) o GROUP BY o.company_company_id
+    </select>
+    <select id="selectFsStoreOrderGroupByDeptId" resultType="com.fs.hisStore.vo.FsStoreOrderCountsVO">
+        SELECT
+        company_dept_id AS id,
+        COALESCE(NULLIF(dept_name, ''),'客户自购') AS name,
+        <include refid="selectFsStoreOrderConditions" />
+        FROM
+        (
+        SELECT so.*,d.dept_id as company_dept_id,d.dept_name,a.audit_status
+        FROM
+        fs_store_order_scrm AS so
+        LEFT JOIN company_user u ON so.company_user_id = u.user_id
+        left join company_dept d ON d.dept_id = u.dept_id
+        left join fs_store_order_audit_scrm a on a.order_id=so.id
+        where 1=1
+        <include refid="selectFsStoreOrderWhere" />
+        <if test="companyId != null  ">
+            AND u.company_id = #{companyId}
+        </if>
+        <if test="orderType != null and orderType != ''">
+            AND so.order_type = #{orderType}
+        </if>
+
+        ) o GROUP BY o.company_dept_id
+    </select>
+
+    <select id="selectFsStoreOrderGroupByUserId" resultType="com.fs.hisStore.vo.FsStoreOrderCountsVO">
+        SELECT
+        company_user_id  AS id,
+        COALESCE(NULLIF(nick_name, ''),'客户自购') AS name,
+
+        <include refid="selectFsStoreOrderConditions" />
+
+        FROM
+        (
+        SELECT so.*,u.nick_name,u.dept_id company_dept_id,a.audit_status
+        FROM
+        fs_store_order_scrm AS so
+        LEFT JOIN company_user u ON so.company_user_id = u.user_id
+        left join fs_store_order_audit_scrm a on a.order_id=so.id
+        where 1=1
+        <include refid="selectFsStoreOrderWhere" />
+        <if test="companyUserId != null  ">
+            AND so.company_user_id = #{companyUserId}
+        </if>
+        <if test="deptId != null">
+            AND u.dept_id  = #{deptId}
+        </if>
+        <if test="companyId != null  ">
+            AND u.company_id = #{companyId}
+        </if>
+
+        ) o GROUP BY o.company_user_id
+    </select>
+
+    <!-- 总金额totalAmount 不包括取消金额和 退款金额 待支付-->
+    <!--  待支付-0 待发货-1 待收货-2 交易完成-3 ;退款中-(-1); 已退款-(-2) ;已取消- (-3);  -->
+    <!-- 成单金额 = 总金额  审核通过的,没有审核就是支付成功的 -->
+    <!-- 待审金额 (a.audit_status is null or a.audit_status = 4) null 审核未开启 4 审核成功-->
+    <!--  waitingOrders 待审核  -->
+    <!--  unPassedOrders 审核未过  -->
+    <!--  cancelAmount 取消  -->
+    <!-- unshippedAmount 成交未发货金额  -->
+    <!-- shippedAmount 发货金额 = 总金额   -->
+    <!-- 在途金额  transitAmount 货到付款订单 -->
+  <!--    成交金额=实际支付金额   -->
+    <sql id="selectFsStoreOrderConditions">
+        sum(case when o.status in (1,2,3,-1) and (o.audit_status is null or o.audit_status = 4) then 1 else 0 end) AS totalCalls,
+        sum(case when o.status in (1,2,3,-1) and  (o.audit_status is null or o.audit_status = 4) then o.pay_price+o.pay_delivery else 0 end) AS totalAmount,
+
+        SUM(CASE WHEN o.status IN (1,2,3,-1) and (o.audit_status is null or o.audit_status = 4) THEN o.pay_price+o.pay_delivery ELSE 0 END) AS validAmount,
+
+        COUNT(CASE WHEN o.audit_status in (0,2) THEN 1 END) AS waitingOrders,
+        SUM(CASE WHEN o.audit_status in (0,2) THEN o.pay_price ELSE 0 END) AS waitingAmount,
+
+        COUNT(CASE WHEN o.audit_status in (1,3) THEN 1 END) AS unPassedOrders,
+        SUM(CASE WHEN o.audit_status in (1,3) THEN o.pay_price ELSE 0 END) AS unPassedAmount,
+
+        COUNT(CASE WHEN o.status IN (-3) THEN 1 END) AS cancelOrders,
+        SUM(CASE WHEN o.status IN (-3) THEN o.pay_price ELSE 0 END) AS cancelAmount,
+
+        sum(case when o.status in (1,2,3,-1) and (o.audit_status is null or o.audit_status = 4) then 1 else 0 end) AS completeOrders,
+        sum(case when o.status in (1,2,3,-1) and  (o.audit_status is null or o.audit_status = 4) then o.pay_price else 0 end) AS completeAmount,
 
+        COUNT(CASE WHEN o.status = 1 THEN 1 END) AS unshippedOrders,
+        SUM(CASE WHEN o.status = 1 THEN o.pay_price ELSE 0 END) AS unshippedAmount,
 
+        COUNT(CASE WHEN o.status in (1,2,3,-1) and (o.audit_status is null or o.audit_status = 4) THEN 1 END) AS shippedOrders,
+        SUM(CASE WHEN o.status in (1,2,3,-1) and (o.audit_status is null or o.audit_status = 4) THEN o.pay_price+o.pay_delivery ELSE 0 END) AS shippedAmount,
+
+        COUNT(CASE WHEN o.status = 2 THEN 1 END) AS transitOrders,
+        SUM(CASE WHEN o.status = 2 THEN o.pay_delivery ELSE 0 END) AS transitAmount,
+
+        COUNT(CASE WHEN o.status = 3 THEN 1 END) AS receivedOrders,
+        SUM(CASE WHEN o.status = 3 THEN o.pay_price+o.pay_delivery ELSE 0 END) AS receivedAmount,
+
+        COUNT(CASE WHEN o.refund_status = -2 THEN 1 END) AS returnOrders,
+        SUM(CASE WHEN o.refund_status = -2 THEN o.refund_price ELSE 0 END) AS returnAmount,
+
+        COUNT(CASE WHEN o.status = 3 THEN 1 END) AS paybackOrders,
+        SUM(CASE WHEN o.status = 3 THEN o.pay_price+o.pay_delivery ELSE 0 END) AS paybackAmount
+    </sql>
+
+
+    <sql id="selectFsStoreOrderWhere">
+        <choose>
+            <when test="queryType != null and queryType==1">
+                and  (DATE_FORMAT(so.create_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime})
+            </when>
+            <when test="queryType != null and queryType==2">
+                and  (DATE_FORMAT(so.delivery_send_time,#{sqlDateFormat}) between #{beginTime} and #{finalTime})
+            </when>
+        </choose>
+        <choose>
+            <when test="amountType != null and amountType==1">
+                and  so.pay_price=0
+            </when>
+            <when test="amountType != null and amountType==2">
+                and so.pay_price &gt; 0
+            </when>
+        </choose>
+        <if test="orderType != null and orderType != ''">
+            AND so.order_type = #{orderType}
+        </if>
+        <if test="orderMedium != null and orderMedium != ''">
+            AND so.order_medium = #{orderMedium}
+        </if>
+    </sql>
 
 
 </mapper>