Browse Source

消费报表

yq 2 years ago
parent
commit
d31ace3c36

+ 44 - 8
src/main/java/com/usky/dxtop/controller/web/business/DishController.java

@@ -10,15 +10,18 @@ import com.usky.dxtop.model.Dish;
 import com.usky.dxtop.model.Staff;
 import com.usky.dxtop.service.DishService;
 import com.usky.dxtop.service.StaffService;
+import com.usky.dxtop.service.vo.DishCollectExportVO;
 import com.usky.dxtop.service.vo.DishRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.Optional;
 
 /**
  * 消费模块
+ *
  * @author yq
  * @since 2021-09-09
  */
@@ -27,7 +30,6 @@ import java.util.Optional;
 public class DishController {
 
 
-
     @Autowired
     private DishService dishService;
 
@@ -36,37 +38,40 @@ public class DishController {
 
     /**
      * 记录查询
+     *
      * @param dishRequest
      * @return
      */
     @PostMapping("page")
-    public ApiResult<CommonPage<Dish>> page(@Validated @RequestBody DishRequest dishRequest){
+    public ApiResult<CommonPage<Dish>> page(@Validated @RequestBody DishRequest dishRequest) {
         return ApiResult.success(dishService.page(dishRequest));
     }
 
     /**
      * 消费详情
+     *
      * @param seq
      * @return
      */
     @GetMapping(value = "/{seq}")
-    public ApiResult<Dish> one(@PathVariable Long seq){
+    public ApiResult<Dish> one(@PathVariable Long seq) {
         return ApiResult.success(dishService.one(seq));
     }
 
 
-
     /**
      * 消费汇总统计
+     *
      * @return
      */
     @GetMapping(value = "/collect")
-    public ApiResult collect(){
+    public ApiResult collect() {
         return ApiResult.success(dishService.collect());
     }
 
     /**
      * 批量修改消息状态
+     *
      * @return
      */
     @PutMapping
@@ -74,20 +79,51 @@ public class DishController {
         Staff staff = staffService.one(userId, null, null);
         Optional.ofNullable(staff).orElseThrow(() -> new CustomException("用户信息不存在"));
         LambdaUpdateWrapper<Dish> updateWrapper = Wrappers.lambdaUpdate();
-        updateWrapper.set(Dish::getMessageFlag,true)
-                .eq(Dish::getCard,staff.getCardId());
+        updateWrapper.set(Dish::getMessageFlag, true)
+                .eq(Dish::getCard, staff.getCardId());
         return ApiResult.success(dishService.update(updateWrapper));
     }
 
     /**
      * 导出
+     *
      * @param dishRequest
      * @return
      */
     @PostMapping("/export")
-    public ApiResult<String> export(@RequestBody DishRequest dishRequest){
+    public ApiResult<String> export(@RequestBody DishRequest dishRequest) {
         return ApiResult.success(dishService.export(dishRequest));
     }
 
+
+    /**
+     * 日报表分页
+     * @param current 页数
+     * @param size 条数
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @return
+     */
+    @GetMapping("/dayCollect")
+    public ApiResult<CommonPage<DishCollectExportVO>> dayCollect(
+            @RequestParam Integer current,
+            @RequestParam Integer size,
+            @RequestParam(required = false) Date startTime,
+            @RequestParam(required = false) Date endTime) {
+        return ApiResult.success(dishService.collect(current,size,startTime,endTime));
+    }
+
+    /**
+     * 日报表导出
+      * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @return
+     */
+    @GetMapping("/exportDyaCollect")
+    public ApiResult<String> exportDyaCollect(@RequestParam(required = false) Date startTime,
+                                              @RequestParam(required = false) Date endTime){
+        return ApiResult.success(dishService.dayCollectExport(startTime,endTime));
+    }
+
 }
 

+ 20 - 0
src/main/java/com/usky/dxtop/service/DishService.java

@@ -3,8 +3,10 @@ package com.usky.dxtop.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.model.Dish;
+import com.usky.dxtop.service.vo.DishCollectExportVO;
 import com.usky.dxtop.service.vo.DishRequest;
 
+import java.util.Date;
 import java.util.Map;
 
 
@@ -47,4 +49,22 @@ public interface DishService extends IService<Dish> {
 
 
     String export(DishRequest dishRequest);
+
+    /**
+     * 日报表统计
+     * @param current
+     * @param size
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    CommonPage<DishCollectExportVO> collect(Integer current,Integer size,Date startTime,Date endTime);
+
+    /**
+     * 日报表统计导出
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    String dayCollectExport(Date startTime,Date endTime);
 }

+ 93 - 4
src/main/java/com/usky/dxtop/service/impl/DishServiceImpl.java

@@ -3,6 +3,7 @@ package com.usky.dxtop.service.impl;
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,6 +22,7 @@ import com.usky.dxtop.service.DishService;
 import com.usky.dxtop.service.ISysAsyncTaskService;
 import com.usky.dxtop.service.SysFileService;
 import com.usky.dxtop.service.emun.AsyncResultType;
+import com.usky.dxtop.service.vo.DishCollectExportVO;
 import com.usky.dxtop.service.vo.DishExport;
 import com.usky.dxtop.service.vo.DishRequest;
 import ma.glasnost.orika.MapperFacade;
@@ -34,10 +36,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -95,6 +94,96 @@ public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements Di
         return String.valueOf(taskId);
     }
 
+    @Override
+    public CommonPage<DishCollectExportVO> collect(Integer current, Integer size, Date startTime, Date endTime) {
+        IPage<Map<String,Object>> page = new Page<>(current, size);
+        String dateType  = "DATE(create_time) reportDate";
+        QueryWrapper<Dish> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select(dateType,
+                        "cast(sum(amt) AS decimal(15,2)) as totalMoney",
+                        "sum(if(shop_name = '餐厅', amt, 0)) as canteen",
+                        "sum(if(shop_name = '6F', amt, 0)) as sixFloor",
+                        "sum(if(shop_name = '1F便利店', amt, 0)) as oneCircle",
+                        "sum(if(shop_name = '1F咖啡店', amt, 0)) as oneCoffee",
+                        "'日' as collectType")
+                .between(null != startTime && null != endTime,"create_time",startTime,endTime)
+                .groupBy("reportDate")
+                .orderByDesc("reportDate");
+        IPage<Map<String, Object>> mapIPage = baseMapper.selectMapsPage(page, queryWrapper);
+        String jsonStr = JSON.toJSONString(mapIPage.getRecords());
+        List<DishCollectExportVO> orderReports = JSON.parseArray(jsonStr, DishCollectExportVO.class);
+        return new CommonPage<>(orderReports,page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public String dayCollectExport(Date startTime, Date endTime) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysUser user = loginUser.getUser();
+        Long taskId = sysAsyncTaskService.getId(user.getUserName(), "消费日报表");
+        if (null == taskId) {
+            throw new CustomException("获取次数太多了请稍后获取");
+        }
+        ((DishServiceImpl) AopContext.currentProxy()).syncDishCollect(taskId,startTime,endTime);
+        return String.valueOf(taskId);
+    }
+
+
+    @Async
+    public void syncDishCollect(Long taskId, Date startTime,Date endTime){
+        Workbook workbook = null;
+        try {
+            ExportParams params = new ExportParams(null, "消费日报表");
+            workbook = ExcelExportUtil.exportBigExcel(params, DishCollectExportVO.class,
+                    (o, i) -> {
+                        CommonPage<DishCollectExportVO> page = this.collect(i,30,startTime,endTime);
+                        return new ArrayList<>(page.getRecords());
+                    },null);
+            if (null != workbook) {
+                String fileName = String.format("%s.xls", "消费日报表");
+                MultipartFile multipartFile = ExcelUtils.downLoadExcel(workbook, fileName);
+                uploadCollect(multipartFile,taskId);
+            } else {
+                sysAsyncTaskService.sendResult(taskId, false, "表格数据为空", AsyncResultType.TEXT);
+            }
+        } catch (Exception e) {
+            log.error("导出文件失败", e);
+            sysAsyncTaskService.sendResult(taskId, false, "导出订单文件失败", AsyncResultType.TEXT);
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    log.error("===export spec=== 关闭workbook失败", e);
+                }
+            }
+        }
+    }
+
+    public void uploadCollect(MultipartFile multipartFile, Long taskId){
+        List<MultipartFile> list = new ArrayList<>();
+        list.add(multipartFile);
+        String batchNo = sysFileService.generateBatchNo();
+        SysFile sysFile = new SysFile();
+        sysFile.setBatchNo(batchNo);
+        sysFile.setFiles(list);
+        sysFile.setUploadType(SysFileServiceImpl.FILE);
+        sysFile.setBusinessType("消费日报表");
+        sysFile.setExpriceAt(DateUtils.addDays(new Date(), 3));
+        List<SysFile> sysFileList = sysFileService.addFile(sysFile);
+        long count = sysFileList.stream().filter(sysFileDTO -> !sysFileDTO.getSuccess()).count();
+        if (count > 0) {
+            sysAsyncTaskService.sendResult(taskId, false, "上传文件失败", AsyncResultType.TEXT);
+            return;
+        }
+        List<String> idList = sysFileList.stream().map(sf -> sf.getId().toString()).collect(Collectors.toList());
+        boolean active = sysFileService.active(batchNo,idList);
+        if (active) {
+            sysAsyncTaskService.sendResult(taskId, true, batchNo, AsyncResultType.FILE);
+        } else {
+            sysAsyncTaskService.sendResult(taskId, false, "上传文件失败", AsyncResultType.TEXT);
+        }
+    }
+
 
     @Async
     public void syncDish(Long taskId, DishRequest dishRequest){

+ 47 - 0
src/main/java/com/usky/dxtop/service/vo/DishCollectExportVO.java

@@ -0,0 +1,47 @@
+package com.usky.dxtop.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class DishCollectExportVO {
+
+
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", height = 6, width = 20)
+    private String reportDate;
+
+    /**
+     * 报表类型
+     */
+    @Excel(name = "报表类型", height = 6, width = 20)
+    private String collectType;
+    /**
+     * 总金额
+     */
+    @Excel(name = "总金额", height = 6, width = 20)
+    private Double totalMoney;
+    /**
+     * 餐厅
+     */
+    @Excel(name = "餐厅", height = 6, width = 20)
+    private Double canteen;
+    /**
+     * 6楼
+     */
+    @Excel(name = "6F", height = 6, width = 20)
+    private Double sixFloor;
+    /**
+     * 1楼便利店
+     */
+    @Excel(name = "1F便利店", height = 6, width = 20)
+    private Double oneCircle;
+    /**
+     * 咖啡店
+     */
+    @Excel(name = "1F咖啡店", height = 6, width = 20)
+    private Double oneCoffee;
+
+}

+ 1 - 1
src/main/resources/application-dev.properties

@@ -96,7 +96,7 @@ dx.copyrightYear: 2021
 dx.demoEnabled: true
 dx.addressEnabled: false
 dx.captchaType: math
-dx.profile: C:/Users/yq/Desktop/
+dx.profile: C:/Users/pc/Desktop/
 
 # mq
 spring.rabbitmq.host=101.133.214.75