|
@@ -1,14 +1,17 @@
|
|
package com.fjhx.sale.service.contract.impl;
|
|
package com.fjhx.sale.service.contract.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import com.fjhx.account.controller.utils.DateUtils;
|
|
import com.fjhx.area.utils.AreaUtil;
|
|
import com.fjhx.area.utils.AreaUtil;
|
|
import com.fjhx.common.entity.corporation.po.Corporation;
|
|
import com.fjhx.common.entity.corporation.po.Corporation;
|
|
import com.fjhx.common.entity.documentary.bo.DocumentaryData;
|
|
import com.fjhx.common.entity.documentary.bo.DocumentaryData;
|
|
@@ -18,6 +21,8 @@ import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
|
|
import com.fjhx.customer.entity.customer.dto.CustomerDto;
|
|
import com.fjhx.customer.entity.customer.dto.CustomerDto;
|
|
import com.fjhx.customer.entity.customer.po.Customer;
|
|
import com.fjhx.customer.entity.customer.po.Customer;
|
|
import com.fjhx.customer.service.customer.CustomerService;
|
|
import com.fjhx.customer.service.customer.CustomerService;
|
|
|
|
+import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
|
|
|
|
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
|
|
import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
@@ -47,10 +52,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
-import java.util.Arrays;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Locale;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -231,6 +233,49 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * 销售趋势(数据看板-产品分析页面)
|
|
|
|
+ * @param productInfoDto
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public List<Map<String, Object>> saleTrend(ProductInfoSelectDto productInfoDto) {
|
|
|
|
+ //存放每月的月度销售额与月度销售量的列表
|
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ List<String> monthList = DateUtils.getMonthBetweenDate(productInfoDto.getBeginTime(),productInfoDto.getEndTime());
|
|
|
|
+ //查询月度销售额与月度销售量
|
|
|
|
+ QueryWrapper<ContractProduct> query = Wrappers.query();
|
|
|
|
+ String beginTime = DateUtil.format(productInfoDto.getBeginTime(), "yyyy-MM");
|
|
|
|
+ String endTime = DateUtil.format(productInfoDto.getEndTime(), "yyyy-MM");
|
|
|
|
+ query.ge("DATE_FORMAT(create_time,'%Y-%m')",beginTime);
|
|
|
|
+ query.le("DATE_FORMAT(create_time,'%Y-%m')",endTime);
|
|
|
|
+ query.select("DATE_FORMAT(create_time,'%Y-%m') time,ifnull(SUM(amount),0) contractAmount," +
|
|
|
|
+ "ifnull(SUM(quantity),0) contractQuantity");
|
|
|
|
+ query.groupBy("time");
|
|
|
|
+ List<ContractProduct> contractList = contractProductService.list(query);
|
|
|
|
+ Map<String, List<ContractProduct>> contractMap = contractList.stream().collect(Collectors.groupingBy(ContractProduct::getTime));
|
|
|
|
+
|
|
|
|
+ //给每月赋值月度销售额与月度销售量的值
|
|
|
|
+ for (String month : monthList) {
|
|
|
|
+ //存放每月的月度销售额与月度销售量的值
|
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
|
+ //赋值初使值
|
|
|
|
+ map.put("month",month);
|
|
|
|
+ map.put("contractAmount",new BigDecimal(0));
|
|
|
|
+ map.put("contractQuantity",new BigDecimal(0));
|
|
|
|
+
|
|
|
|
+ //赋值
|
|
|
|
+ List<ContractProduct> contracts = contractMap.get(month);
|
|
|
|
+ if (ObjectUtil.isNotEmpty(contracts)){
|
|
|
|
+ map.put("contractAmount",contracts.get(0).getContractAmount());
|
|
|
|
+ map.put("contractQuantity",contracts.get(0).getContractQuantity());
|
|
|
|
+ }
|
|
|
|
+ list.add(map);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 赋值外销合同信息
|
|
* 赋值外销合同信息
|
|
*
|
|
*
|
|
* @param contractPdfInfoVo param
|
|
* @param contractPdfInfoVo param
|