gongdecai %!s(int64=3) %!d(string=hai) anos
pai
achega
32c220000d

+ 6 - 0
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sys/ExpenditureService.java

@@ -6,10 +6,13 @@ import com.iotechn.unimall.core.annotation.HttpParam;
 import com.iotechn.unimall.core.annotation.HttpParamType;
 import com.iotechn.unimall.core.annotation.param.NotNull;
 import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.dto.StatisticsView;
 import com.iotechn.unimall.data.model.Page;
 import com.iotechn.unimall.data.domain.ExpenditureManageDO;
 import com.iotechn.unimall.data.dto.ExpenditureManageDTO;
 
+import java.util.List;
+
 /**
  * Generate Code By Unimall
  */
@@ -28,6 +31,9 @@ public interface ExpenditureService {
             @HttpParam(name = "page", type = HttpParamType.COMMON, description = "页码", valueDef = "1") Integer page,
             @HttpParam(name = "limit", type = HttpParamType.COMMON, description = "页码长度", valueDef = "20") Integer limit,
             @NotNull @HttpParam(name = "adminId", type = HttpParamType.ADMIN_ID, description = "管理员ID") Long adminId) throws ServiceException;
+    @HttpMethod(description = "查询", permission = "expenditure:expenditure:list", permissionParentName = "其他", permissionName = "Expenditure")
+    public List<StatisticsView> listStatistics(
+            @HttpParam(name = "StatisticsView", type = HttpParamType.COMMON, description = "StatisticsView") StatisticsView statisticsView) throws ServiceException;
 
     @HttpMethod(description = "添加", permission = "expenditure:expenditure:create", permissionParentName = "其他", permissionName = "Expenditure")
     public ExpenditureManageDO create(

+ 169 - 21
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/sys/ExpenditureServiceImpl.java

@@ -4,6 +4,9 @@ package com.iotechn.unimall.admin.api.sys;
 import com.iotechn.unimall.core.exception.AdminServiceException;
 import com.iotechn.unimall.core.exception.ExceptionDefinition;
 import com.iotechn.unimall.core.exception.ServiceException;
+import com.iotechn.unimall.data.domain.ProductSalesDO;
+import com.iotechn.unimall.data.dto.StatisticsView;
+import com.iotechn.unimall.data.mapper.ProductSalesMapper;
 import com.iotechn.unimall.data.model.Page;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -15,8 +18,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.apache.ibatis.session.RowBounds;
 import org.springframework.beans.BeanUtils;
-import java.util.Date;
-import java.util.List;
+import org.springframework.util.CollectionUtils;
+import tk.mybatis.mapper.util.StringUtil;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Generate Code By Unimall
@@ -26,9 +33,11 @@ public class ExpenditureServiceImpl implements ExpenditureService {
 
     @Autowired
     private ExpenditureManageMapper expenditureManageMapper;
+    @Autowired
+    private ProductSalesMapper productSalesMapper;
 
     @Override
-    public boolean delete(Long id,  Long adminId) throws ServiceException {
+    public boolean delete(Long id, Long adminId) throws ServiceException {
         return expenditureManageMapper.deleteById(id) > 0;
     }
 
@@ -43,28 +52,167 @@ public class ExpenditureServiceImpl implements ExpenditureService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ExpenditureManageDO create(ExpenditureManageDTO insertDTO, Long adminId) throws ServiceException {
-         Date now = new Date();
-         ExpenditureManageDO insertDO = new ExpenditureManageDO();
-         BeanUtils.copyProperties(insertDTO, insertDO);
-         insertDO.setGmtUpdate(now);
-         insertDO.setGmtCreate(now);
-         if (expenditureManageMapper.insert(insertDO) > 0) {
-             return insertDO;
-         }
-         throw new AdminServiceException(ExceptionDefinition.ADMIN_UNKNOWN_EXCEPTION);
+        Date now = new Date();
+        ExpenditureManageDO insertDO = new ExpenditureManageDO();
+        BeanUtils.copyProperties(insertDTO, insertDO);
+        insertDO.setGmtUpdate(now);
+        insertDO.setGmtCreate(now);
+        if (expenditureManageMapper.insert(insertDO) > 0) {
+            return insertDO;
+        }
+        throw new AdminServiceException(ExceptionDefinition.ADMIN_UNKNOWN_EXCEPTION);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String edit(ExpenditureManageDTO editDTO,Long adminId) throws ServiceException {
-         Date now = new Date();
-         ExpenditureManageDO updateDO = new ExpenditureManageDO();
-         BeanUtils.copyProperties(editDTO, updateDO);
-         updateDO.setGmtUpdate(now);
-         if (expenditureManageMapper.updateById(updateDO) > 0) {
-             return "ok";
-         }
-         throw new AdminServiceException(ExceptionDefinition.ADMIN_UNKNOWN_EXCEPTION);
+    public String edit(ExpenditureManageDTO editDTO, Long adminId) throws ServiceException {
+        Date now = new Date();
+        ExpenditureManageDO updateDO = new ExpenditureManageDO();
+        BeanUtils.copyProperties(editDTO, updateDO);
+        updateDO.setGmtUpdate(now);
+        if (expenditureManageMapper.updateById(updateDO) > 0) {
+            return "ok";
+        }
+        throw new AdminServiceException(ExceptionDefinition.ADMIN_UNKNOWN_EXCEPTION);
+    }
+
+
+    @Override
+    public List<StatisticsView> listStatistics(StatisticsView statisticsView) throws ServiceException {
+        List<StatisticsView> statisticsViews = new ArrayList<>();
+        Wrapper<ExpenditureManageDO> wrapper = new EntityWrapper<ExpenditureManageDO>();
+        if (statisticsView != null && StringUtil.isNotEmpty(statisticsView.getStartDate())) {
+            wrapper.and("DATE_FORMAT(expenditure_date,'%Y%m%d') >= DATE_FORMAT('" + statisticsView.getStartDate() + "','%Y%m%d')");
+        }
+        if (statisticsView != null && StringUtil.isNotEmpty(statisticsView.getEndDate())) {
+            wrapper.and("DATE_FORMAT(expenditure_date,'%Y%m%d') <= DATE_FORMAT('" + statisticsView.getEndDate() + "','%Y%m%d')");
+
+        }
+        wrapper.groupBy("expenditure_date");
+        wrapper.orderBy("expenditure_date", true);
+        List<ExpenditureManageDO> list = expenditureManageMapper.selectList(wrapper);
+
+        Wrapper<ProductSalesDO> wrapper1 = new EntityWrapper<ProductSalesDO>();
+        if (statisticsView != null && StringUtil.isNotEmpty(statisticsView.getStartDate())) {
+            wrapper1.and("DATE_FORMAT(sale_date,'%Y%m%d') >= DATE_FORMAT('" + statisticsView.getStartDate() + "','%Y%m%d')");
+        }
+        if (statisticsView != null && StringUtil.isNotEmpty(statisticsView.getEndDate())) {
+            wrapper1.and("DATE_FORMAT(sale_date,'%Y%m%d') <= DATE_FORMAT('" + statisticsView.getEndDate() + "','%Y%m%d')");
+
+        }
+        wrapper.groupBy("sale_date");
+        wrapper.orderBy("sale_date", true);
+        List<ProductSalesDO> list1 = productSalesMapper.selectList(wrapper1);
+
+        if (!CollectionUtils.isEmpty(list) && !CollectionUtils.isEmpty(list1)) {
+            // 获取支出日期
+            List<String> dateList = list.stream().map(ExpenditureManageDO::getExpenditureDate).collect(Collectors.toList());
+            // 获取收款日期
+            List<String> dateSalesList = list1.stream().map(ProductSalesDO::getSaleDate).collect(Collectors.toList());
+            for (int i = 0; i < dateSalesList.size(); i++) {
+                if (!dateList.contains(dateSalesList.get(i))) {
+                    dateList.add(dateSalesList.get(i));
+                }
+            }
+            Collections.sort(dateList);
+            for (int i = 0; i < dateList.size(); i++) {
+                String date = dateList.get(i);
+                Wrapper<ProductSalesDO> salesDOWrapper = new EntityWrapper<ProductSalesDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ProductSalesDO> salesDOS = productSalesMapper.selectList(salesDOWrapper);
+                Wrapper<ExpenditureManageDO> expenditureManageDOWrapper = new EntityWrapper<ExpenditureManageDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ExpenditureManageDO> expenditureManageDOS = expenditureManageMapper.selectList(expenditureManageDOWrapper);
+                double saleSum = 0d;
+                double expenditureSum = 0d;
+                if (!CollectionUtils.isEmpty(salesDOS)) {
+                    for (int j = 0; j < salesDOS.size(); j++) {
+                        saleSum = saleSum + salesDOS.get(j).getPaidAmount();
+                    }
+                }
+
+                if (!CollectionUtils.isEmpty(expenditureManageDOS)) {
+                    for (int j = 0; j < expenditureManageDOS.size(); j++) {
+                        expenditureSum = expenditureSum + expenditureManageDOS.get(j).getExpenditureAmount();
+                    }
+                }
+                StatisticsView statisticsView1 = new StatisticsView();
+                statisticsView1.setStaticDate(date);
+                statisticsView1.setRevenueAmount(saleSum);
+                statisticsView1.setExpenditureAmount(expenditureSum);
+                statisticsView1.setReceipts(saleSum - expenditureSum);
+                statisticsViews.add(statisticsView1);
+
+            }
+        } else if (!CollectionUtils.isEmpty(list) && CollectionUtils.isEmpty(list1)) {
+// 获取支出日期
+            List<String> dateList = list.stream().map(ExpenditureManageDO::getExpenditureDate).collect(Collectors.toList());
+
+            for (int i = 0; i < dateList.size(); i++) {
+                String date = dateList.get(i);
+                Wrapper<ProductSalesDO> salesDOWrapper = new EntityWrapper<ProductSalesDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ProductSalesDO> salesDOS = productSalesMapper.selectList(salesDOWrapper);
+                Wrapper<ExpenditureManageDO> expenditureManageDOWrapper = new EntityWrapper<ExpenditureManageDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ExpenditureManageDO> expenditureManageDOS = expenditureManageMapper.selectList(expenditureManageDOWrapper);
+                double saleSum = 0d;
+                double expenditureSum = 0d;
+                if (!CollectionUtils.isEmpty(salesDOS)) {
+                    for (int j = 0; j < salesDOS.size(); j++) {
+                        saleSum = saleSum + salesDOS.get(j).getPaidAmount();
+                    }
+                }
+
+                if (!CollectionUtils.isEmpty(expenditureManageDOS)) {
+                    for (int j = 0; j < expenditureManageDOS.size(); j++) {
+                        expenditureSum = expenditureSum + expenditureManageDOS.get(j).getExpenditureAmount();
+                    }
+                }
+                StatisticsView statisticsView1 = new StatisticsView();
+                statisticsView1.setStaticDate(date);
+                statisticsView1.setRevenueAmount(saleSum);
+                statisticsView1.setExpenditureAmount(expenditureSum);
+                statisticsView1.setReceipts(saleSum - expenditureSum);
+                statisticsViews.add(statisticsView1);
+
+            }
+        } else if (CollectionUtils.isEmpty(list) && !CollectionUtils.isEmpty(list1)) {
+            // 获取收款日期
+            List<String> dateList = list1.stream().map(ProductSalesDO::getSaleDate).collect(Collectors.toList());
+            for (int i = 0; i < dateList.size(); i++) {
+                String date = dateList.get(i);
+                Wrapper<ProductSalesDO> salesDOWrapper = new EntityWrapper<ProductSalesDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ProductSalesDO> salesDOS = productSalesMapper.selectList(salesDOWrapper);
+                Wrapper<ExpenditureManageDO> expenditureManageDOWrapper = new EntityWrapper<ExpenditureManageDO>();
+                salesDOWrapper.eq("sale_date", date);
+                List<ExpenditureManageDO> expenditureManageDOS = expenditureManageMapper.selectList(expenditureManageDOWrapper);
+                double saleSum = 0d;
+                double expenditureSum = 0d;
+                if (!CollectionUtils.isEmpty(salesDOS)) {
+                    for (int j = 0; j < salesDOS.size(); j++) {
+                        saleSum = saleSum + salesDOS.get(j).getPaidAmount();
+                    }
+                }
+
+                if (!CollectionUtils.isEmpty(expenditureManageDOS)) {
+                    for (int j = 0; j < expenditureManageDOS.size(); j++) {
+                        expenditureSum = expenditureSum + expenditureManageDOS.get(j).getExpenditureAmount();
+                    }
+                }
+                StatisticsView statisticsView1 = new StatisticsView();
+                statisticsView1.setStaticDate(date);
+                statisticsView1.setRevenueAmount(saleSum);
+                statisticsView1.setExpenditureAmount(expenditureSum);
+                statisticsView1.setReceipts(saleSum - expenditureSum);
+                statisticsViews.add(statisticsView1);
+
+            }
+        }
+
+        return statisticsViews;
     }
 
+
 }

+ 31 - 0
unimall-data/src/main/java/com/iotechn/unimall/data/dto/StatisticsView.java

@@ -0,0 +1,31 @@
+package com.iotechn.unimall.data.dto;
+
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * Generate Code By Unimall
+ */
+@Data
+public class StatisticsView extends SuperDTO {
+
+     /* 日期 */
+    private String staticDate;
+     /* 收入金额 */
+    private Double revenueAmount;
+     /* 支出金额 */
+    private Double expenditureAmount;
+    /* 实收 */
+    private Double receipts;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private String startDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private String endDate;
+}

+ 1 - 1
unimall-launcher/src/main/resources/application.properties

@@ -1,4 +1,4 @@
-server.port=8089
+server.port=8080
 
 logging.path=/opt/logs
 logging.file=unimall.log