2 Комити c357cadc6b ... d644e51923

Аутор SHA1 Порука Датум
  caotao d644e51923 Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server пре 2 дана
  caotao 0080605cb0 营业统计日报完善 пре 2 дана

+ 87 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/business/DailyBusinessStatisticsController.java

@@ -0,0 +1,87 @@
+package com.yc.ship.module.trade.controller.admin.business;
+
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.framework.operatelog.core.annotations.OperateLog;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsReqVO;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO;
+import com.yc.ship.module.trade.service.business.DailyBusinessStatisticsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.apache.commons.io.IOUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+import java.io.IOException;
+import java.util.List;
+
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 营业统计日报")
+@RestController
+@RequestMapping("/trade/business")
+@Validated
+public class DailyBusinessStatisticsController {
+    @Resource
+    private DailyBusinessStatisticsService dailyBusinessStatisticsService;
+
+    @PostMapping("/dailyBusinessStatistics/page")
+    @Operation(summary = "获得营业统计日报分页")
+    public CommonResult<PageResult<DailyBusinessStatisticsRespVO>> getDailyBusinessStatisticsPage(@RequestBody DailyBusinessStatisticsReqVO pageReqVO) {
+        PageResult<DailyBusinessStatisticsRespVO> pageResult = dailyBusinessStatisticsService.getDailyBusinessStatisticsPage(pageReqVO);
+        return success(pageResult);
+    }
+
+    @GetMapping("/dailyBusinessStatistics/export-excel")
+    @Operation(summary = "导出营业统计日报 Excel")
+    @OperateLog(type = EXPORT,enable = false)
+    public void exportDailyBusinessStatisticsList(@Valid DailyBusinessStatisticsReqVO pageReqVO, HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DailyBusinessStatisticsRespVO> list = dailyBusinessStatisticsService.getDailyBusinessStatisticsPage(pageReqVO).getList();
+        // 计算合计
+        DailyBusinessStatisticsRespVO total = new DailyBusinessStatisticsRespVO();
+        total.setSourceName("合计");
+        int totalAdultCount = 0, totalChildCount = 0, totalInfantCount = 0, totalWithCount = 0;
+        int totalLeaderCount = 0, totalFreeCount = 0, totalFreeNum = 0, totalTotalCount = 0;
+        int totalActualAmount = 0, totalValidCount = 0;
+
+        for (DailyBusinessStatisticsRespVO item : list) {
+            totalAdultCount += item.getAdultCount() == null ? 0 : item.getAdultCount();
+            totalChildCount += item.getChildCount() == null ? 0 : item.getChildCount();
+            totalInfantCount += item.getInfantCount() == null ? 0 : item.getInfantCount();
+            totalWithCount += item.getWithCount() == null ? 0 : item.getWithCount();
+            totalLeaderCount += item.getLeaderCount() == null ? 0 : item.getLeaderCount();
+            totalFreeCount += item.getFreeCount() == null ? 0 : item.getFreeCount();
+            totalFreeNum += item.getFreeNum() == null ? 0 : item.getFreeNum();
+            totalTotalCount += item.getTotalCount() == null ? 0 : item.getTotalCount();
+            totalActualAmount += item.getActualAmount() == null ? 0 : item.getActualAmount();
+            totalValidCount += item.getValidCount() == null ? 0 : item.getValidCount();
+        }
+
+        total.setAdultCount(totalAdultCount);
+        total.setChildCount(totalChildCount);
+        total.setInfantCount(totalInfantCount);
+        total.setWithCount(totalWithCount);
+        total.setLeaderCount(totalLeaderCount);
+        total.setFreeCount(totalFreeCount);
+        total.setFreeNum(totalFreeNum);
+        total.setTotalCount(totalTotalCount);
+        total.setActualAmount(totalActualAmount);
+        total.setValidCount(totalValidCount);
+
+        list.add(total);
+
+        // 导出 Excel
+        ExcelUtils.write(response, "营业统计日报.xls", "数据", DailyBusinessStatisticsRespVO.class,
+                BeanUtils.toBean(list, DailyBusinessStatisticsRespVO.class));
+    }
+
+}

+ 18 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/business/vo/DailyBusinessStatisticsReqVO.java

@@ -0,0 +1,18 @@
+package com.yc.ship.module.trade.controller.admin.business.vo;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 营业统计日报 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DailyBusinessStatisticsReqVO  extends PageParam {
+    @Schema(description = "航次ID", example = "13069")
+    private String voyageId;
+    @Schema(description = "航线ID", example = "11291")
+    private Long routeId;
+}

+ 48 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/business/vo/DailyBusinessStatisticsRespVO.java

@@ -0,0 +1,48 @@
+package com.yc.ship.module.trade.controller.admin.business.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 营业统计日报 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DailyBusinessStatisticsRespVO {
+    @Schema(description = "组团社ID")
+    private String sourceId;
+    @Schema(description = "组团社")
+    @ExcelProperty("组团社")
+    private String sourceName;
+    @Schema(description = "成人数")
+    @ExcelProperty("成人数")
+    private Integer adultCount;
+    @Schema(description = "儿童数")
+    @ExcelProperty("儿童数")
+    private Integer childCount;
+    @Schema(description = "婴儿数")
+    @ExcelProperty("婴儿数")
+    private Integer infantCount;
+    @Schema(description = "陪同数")
+    @ExcelProperty("陪同数")
+    private Integer withCount;
+    @Schema(description = "领队数")
+    @ExcelProperty("领队数")
+    private Integer leaderCount;
+    //TODO 免票人数现在没有统计,直接取0
+    @Schema(description = "免票")
+    @ExcelProperty("免票")
+    private Integer freeCount;
+    @Schema(description = "16免1")
+    @ExcelProperty("16免1")
+    private Integer freeNum;
+    @Schema(description = "总人数")
+    @ExcelProperty("总人数")
+    private Integer totalCount;
+    @Schema(description = "营业额(含税)")
+    @ExcelProperty("营业额(含税)")
+    private Integer actualAmount;
+    @Schema(description = "有效人数")
+    @ExcelProperty("有效人数")
+    private Integer validCount;
+}

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -7,6 +7,8 @@ import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.module.ota.controller.admin.distributor.vo.DistributorPageReqVO;
 import com.yc.ship.module.otc.api.agency.dto.AgencyUserLoginInfoRespDTO;
 import com.yc.ship.module.product.api.dto.CategoryRespDTO;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsReqVO;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.check.CheckOrderPageVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.otc.PrintRespVO;
@@ -221,4 +223,11 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
      * @return
      */
     OrderTotalRespVO selectTotal1ByOrderIds(@Param("orderIds") List<Long> orderIds);
+
+    /**
+     * 获取营业统计日报
+     * @param
+     * @return
+     */
+    IPage<DailyBusinessStatisticsRespVO> getDailyBusinessStatisticsPage(IPage<DailyBusinessStatisticsRespVO> page,@Param("vo")  DailyBusinessStatisticsReqVO pageReqVO);
 }

+ 13 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/business/DailyBusinessStatisticsService.java

@@ -0,0 +1,13 @@
+package com.yc.ship.module.trade.service.business;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsReqVO;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO;
+
+import javax.validation.Valid;
+import java.io.File;
+
+public interface DailyBusinessStatisticsService {
+    PageResult<DailyBusinessStatisticsRespVO> getDailyBusinessStatisticsPage(DailyBusinessStatisticsReqVO pageReqVO);
+
+}

+ 29 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/business/DailyBusinessStatisticsServiceImpl.java

@@ -0,0 +1,29 @@
+package com.yc.ship.module.trade.service.business;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsReqVO;
+import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.InputStream;
+
+@Service
+@Validated
+public class DailyBusinessStatisticsServiceImpl implements DailyBusinessStatisticsService {
+    @Resource
+    private TradeOrderMapper tradeOrderMapper;
+
+    @Override
+    public PageResult<DailyBusinessStatisticsRespVO> getDailyBusinessStatisticsPage(DailyBusinessStatisticsReqVO pageReqVO) {
+        IPage<DailyBusinessStatisticsRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<DailyBusinessStatisticsRespVO> resultPage = tradeOrderMapper.getDailyBusinessStatisticsPage(page, pageReqVO);
+        return new PageResult<>(resultPage.getRecords(), resultPage.getTotal());
+    }
+
+}

+ 37 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -458,6 +458,43 @@
         </if>
     </sql>
 
+    <select id="getDailyBusinessStatisticsPage"
+            resultType="com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO">
+        SELECT
+            td.source_id AS sourceId,
+            td.source_name as sourceName,
+            IFNULL(tot.free_num, 0) AS freeNum,
+            0 AS freeCount,
+            IFNULL(topay.actual_amount, 0) AS actualAmount,
+            COUNT(1) AS totalCount,
+            SUM(CASE WHEN tv.type IN ('adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS adultCount,
+            SUM(CASE WHEN tv.type IN ('childTake','childPlus','childNonTake') THEN 1 ELSE 0 END) AS childCount,
+            SUM(CASE WHEN tv.type = 'with' THEN 1 ELSE 0 END) AS withCount,
+            SUM(CASE WHEN tv.type = 'leader' THEN 1 ELSE 0 END) AS leaderCount,
+            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
+            COUNT(1) - IFNULL(tot.free_num, 0) AS validCount
+        FROM trade_order td
+                 INNER JOIN trade_order_user tou ON td.id = tou.order_id AND tou.deleted = 0
+                 LEFT JOIN trade_detail tdl ON td.id = tdl.order_id AND tdl.deleted = 0
+                 LEFT JOIN trade_visitor tv ON tdl.id = tv.detail_id AND tv.deleted = 0
+                 left join trade_order_total tot on td.id = tot.old_order_id and tot.deleted = 0
+                 LEFT JOIN (SELECT order_id, SUM(pay_amount) AS actual_amount
+                            FROM trade_order_pay
+                            WHERE pay_status = 1 GROUP BY order_id) topay ON td.id = topay.order_id
+        WHERE
+            td.deleted = 0
+            AND tv.type IS NOT NULL
+            AND td.order_status > 0
+        <if test="vo.voyageId != null and vo.voyageId != ''">
+            AND td.voyage_id = #{vo.voyageId}
+        </if>
+        <if test="vo.routeId != null and vo.routeId != ''">
+            AND exists (select 1 from product_voyage top where top.id = td.voyage_id and top.route_id = #{vo.routeId})
+        </if>
+        GROUP BY td.source_id;
+
+    </select>
+
     <select id="getTradeOrderUserPage"
             resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO">
         SELECT td.*,toa.audit_time auditTime,tou.contact_name,tou.credential_no,tou.mobile,count(tdl.id) num,sum(CASE WHEN tdl.voucher_status in (1,2,3,4,6,8,9) THEN	1 ELSE 0 END) realnum,(tr.origin_amount-tr.refund_amount) feeAmount,tdl.product_name,tdl.spec_type,ifnull(tr.origin_amount-tr.refund_amount,0) realAmount