Browse Source

添加了报价单的数据

wxf 2 years ago
parent
commit
679ad12540
23 changed files with 400 additions and 15 deletions
  1. 4 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRemainder.java
  2. 3 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  3. 34 1
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  4. 1 0
      hx-account/src/main/resources/mapper/account/AccountRemainderMapper.xml
  5. 2 1
      hx-customer/pom.xml
  6. 1 5
      hx-customer/src/main/java/com/fjhx/customer/controller/customer/CustomerController.java
  7. 11 0
      hx-customer/src/main/java/com/fjhx/customer/entity/customer/dto/CustomerDto.java
  8. 3 0
      hx-customer/src/main/java/com/fjhx/customer/service/customer/CustomerService.java
  9. 9 1
      hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java
  10. 40 0
      hx-sale/src/main/java/com/fjhx/sale/controller/sale/SaleQuotationController.java
  11. 11 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  12. 1 1
      hx-sale/src/main/java/com/fjhx/sale/entity/documents/po/DocumentsProduct.java
  13. 1 1
      hx-sale/src/main/java/com/fjhx/sale/entity/quotation/po/QuotationPay.java
  14. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/sale/vo/SaleQuotationVo.java
  15. 15 1
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  16. 15 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/sale/SaleQuotationMapper.java
  17. 13 1
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  18. 20 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  19. 33 0
      hx-sale/src/main/java/com/fjhx/sale/service/sale/SaleQuotationService.java
  20. 127 1
      hx-sale/src/main/java/com/fjhx/sale/service/sale/impl/SaleQuotationServiceImpl.java
  21. 26 0
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  22. 1 1
      hx-sale/src/main/resources/mapper/documents/DocumentsProductMapper.xml
  23. 24 0
      hx-sale/src/main/resources/mapper/sale/SaleQuotationMapper.xml

+ 4 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRemainder.java

@@ -40,4 +40,8 @@ public class AccountRemainder extends BasePo {
      */
      */
     private BigDecimal changeRemainder;
     private BigDecimal changeRemainder;
 
 
+    /**
+     * 交易状态:10 收入,20支出
+     */
+    private String status ;
 }
 }

+ 3 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -163,6 +163,8 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         accountRemainder.setChangeRemainder(accountPaymentDto.getAmount());
         accountRemainder.setChangeRemainder(accountPaymentDto.getAmount());
         //修改账户-余额表的中余额
         //修改账户-余额表的中余额
         accountRemainder.setRemainder( accountRemainder.getRemainder().subtract(accountPaymentDto.getAmount()));
         accountRemainder.setRemainder( accountRemainder.getRemainder().subtract(accountPaymentDto.getAmount()));
+        //打款的交易状态都是支出
+        accountRemainder.setStatus("20");
         accountRemainderService.add(accountRemainder);
         accountRemainderService.add(accountRemainder);
 
 
         //添加资金流水表的数据
         //添加资金流水表的数据
@@ -186,6 +188,7 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
 
         AccountRunningWater accountRunningWater = new AccountRunningWater();
         AccountRunningWater accountRunningWater = new AccountRunningWater();
         accountRunningWater.setAccountManagementId(accountPaymentDto.getAccountManagementId());
         accountRunningWater.setAccountManagementId(accountPaymentDto.getAccountManagementId());
+        //打款的状态都是支出
         accountRunningWater.setStatus("20");
         accountRunningWater.setStatus("20");
         accountRunningWater.setAmount(accountPaymentDto.getAmount());
         accountRunningWater.setAmount(accountPaymentDto.getAmount());
         accountRunningWater.setCurrency(accountPaymentDto.getCurrency());
         accountRunningWater.setCurrency(accountPaymentDto.getCurrency());

+ 34 - 1
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -3,11 +3,16 @@ package com.fjhx.account.service.account.impl;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.account.entity.account.po.AccountRemainder;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.mapper.account.AccountRunningWaterMapper;
 import com.fjhx.account.mapper.account.AccountRunningWaterMapper;
+import com.fjhx.account.service.account.AccountRemainderService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
@@ -15,6 +20,7 @@ import com.fjhx.account.entity.account.dto.AccountRunningWaterSelectDto;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterDto;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
 
 
 
 
 /**
 /**
@@ -27,6 +33,8 @@ import cn.hutool.core.bean.BeanUtil;
  */
  */
 @Service
 @Service
 public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWaterMapper, AccountRunningWater> implements AccountRunningWaterService {
 public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWaterMapper, AccountRunningWater> implements AccountRunningWaterService {
+    @Autowired
+    private AccountRemainderService accountRemainderService;
 
 
     @Override
     @Override
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
@@ -51,9 +59,34 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         AccountRunningWaterVo result = baseMapper.getDetail(id);
         AccountRunningWaterVo result = baseMapper.getDetail(id);
         return result;
         return result;
     }
     }
-
+    /**
+     * 账户资金流水表新增
+     */
     @Override
     @Override
+    @Transactional(rollbackFor = {Exception.class})
     public void add(AccountRunningWaterDto accountRunningWaterDto) {
     public void add(AccountRunningWaterDto accountRunningWaterDto) {
+
+        //修改账户余额表的余额
+        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
+                .eq(AccountRemainder::getAccountManagementId,accountRunningWaterDto.getAccountManagementId())
+                .eq(AccountRemainder::getCurrency,accountRunningWaterDto.getCurrency())
+        );
+        if (ObjectUtil.isEmpty(accountRemainder)){
+            throw new ServiceException("账户余额不足");
+        }
+        accountRemainder.setStatus(accountRunningWaterDto.getStatus());
+        //修改变更余额
+        accountRemainder.setChangeRemainder(accountRunningWaterDto.getAmount());
+        if (accountRunningWaterDto.getStatus().equals("10")){
+            accountRemainder.setRemainder(accountRemainder.getRemainder().add(accountRunningWaterDto.getAmount()));
+        }else if (accountRunningWaterDto.getStatus().equals("20")){
+           if (accountRemainder.getRemainder().compareTo(accountRunningWaterDto.getAmount()) ==-1){
+               throw new ServiceException("账户余额不足");
+           }else {
+               accountRemainder.setRemainder(accountRemainder.getRemainder().subtract(accountRunningWaterDto.getAmount()));
+           }
+        }
+        accountRemainderService.updateById(accountRemainder);
         this.save(accountRunningWaterDto);
         this.save(accountRunningWaterDto);
     }
     }
 
 

+ 1 - 0
hx-account/src/main/resources/mapper/account/AccountRemainderMapper.xml

@@ -7,6 +7,7 @@
             ar.account_management_id,
             ar.account_management_id,
             ar.currency,
             ar.currency,
             ar.remainder,
             ar.remainder,
+            ar.status,
             ar.change_remainder,
             ar.change_remainder,
             ar.create_user,
             ar.create_user,
             ar.create_time,
             ar.create_time,

+ 2 - 1
hx-customer/pom.xml

@@ -22,7 +22,8 @@
             <groupId>com.fjhx</groupId>
             <groupId>com.fjhx</groupId>
             <artifactId>hx-common</artifactId>
             <artifactId>hx-common</artifactId>
         </dependency>
         </dependency>
-
     </dependencies>
     </dependencies>
 
 
+
+
 </project>
 </project>

+ 1 - 5
hx-customer/src/main/java/com/fjhx/customer/controller/customer/CustomerController.java

@@ -12,6 +12,7 @@ import com.fjhx.customer.service.customer.CustomerService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -79,7 +80,6 @@ public class CustomerController {
     }
     }
 
 
 
 
-
     /**
     /**
      * 客户分配
      * 客户分配
      */
      */
@@ -88,10 +88,6 @@ public class CustomerController {
             customerService.updateById(dto);
             customerService.updateById(dto);
     }
     }
 
 
-    /**
-     * 最新跟进(客户画像)
-     */
-
 
 
 
 
 }
 }

+ 11 - 0
hx-customer/src/main/java/com/fjhx/customer/entity/customer/dto/CustomerDto.java

@@ -6,6 +6,7 @@ import com.fjhx.customer.entity.customer.po.CustomerUser;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -19,4 +20,14 @@ import java.util.List;
 public class CustomerDto extends Customer {
 public class CustomerDto extends Customer {
 
 
     private List<CustomerUser> customerUserList;
     private List<CustomerUser> customerUserList;
+
+    /**
+     * 开始时间
+     */
+    private String beginTime;
+
+    /**
+     * 开始时间
+     */
+    private String endTime;
 }
 }

+ 3 - 0
hx-customer/src/main/java/com/fjhx/customer/service/customer/CustomerService.java

@@ -8,6 +8,7 @@ import com.fjhx.customer.entity.customer.dto.CustomerSelectDto;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -49,4 +50,6 @@ public interface CustomerService extends BaseService<Customer> {
      * 私海客户表分页(添加权限自己看自己)
      * 私海客户表分页(添加权限自己看自己)
      */
      */
     Page<CustomerVo> privateSeaPage(CustomerSelectDto dto);
     Page<CustomerVo> privateSeaPage(CustomerSelectDto dto);
+
+
 }
 }

+ 9 - 1
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java

@@ -1,10 +1,13 @@
 package com.fjhx.customer.service.customer.impl;
 package com.fjhx.customer.service.customer.impl;
 
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fjhx.area.utils.AreaUtil;
 import com.fjhx.area.utils.AreaUtil;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.customer.entity.customer.dto.CustomerUserDto;
 import com.fjhx.customer.entity.customer.dto.CustomerUserDto;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.entity.customer.po.CustomerUser;
 import com.fjhx.customer.entity.customer.po.CustomerUser;
@@ -25,9 +28,11 @@ import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.math.BigDecimal;
 import java.rmi.ServerException;
 import java.rmi.ServerException;
 import java.security.Security;
 import java.security.Security;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -43,6 +48,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
     private CustomerUserService customerUserService;
     private CustomerUserService customerUserService;
 
 
 
 
+
     /**
     /**
      * 查询客户的列表
      * 查询客户的列表
      * @param dto
      * @param dto
@@ -159,6 +165,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
         return page;
         return page;
     }
     }
 
 
+
     //添加客户用户表的信息
     //添加客户用户表的信息
     private void  saveCustomerUse(CustomerDto customerDto){
     private void  saveCustomerUse(CustomerDto customerDto){
         List<CustomerUser> customerUserDtoList = customerDto.getCustomerUserList();
         List<CustomerUser> customerUserDtoList = customerDto.getCustomerUserList();
@@ -166,4 +173,5 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
         customerUserService.saveBatch(customerUserDtoList);
         customerUserService.saveBatch(customerUserDtoList);
     }
     }
 
 
+
 }
 }

+ 40 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/sale/SaleQuotationController.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.controller.sale;
 package com.fjhx.sale.controller.sale;
 
 
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
@@ -9,6 +10,9 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.sale.service.sale.SaleQuotationService;
 import com.fjhx.sale.service.sale.SaleQuotationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
+import java.util.List;
+import java.util.Map;
+
 
 
 /**
 /**
  * <p>
  * <p>
@@ -25,6 +29,7 @@ public class SaleQuotationController {
     @Autowired
     @Autowired
     private SaleQuotationService saleQuotationService;
     private SaleQuotationService saleQuotationService;
 
 
+
     /**
     /**
      * 报价表分页
      * 报价表分页
      */
      */
@@ -49,4 +54,39 @@ public class SaleQuotationController {
         saleQuotationService.copy(saleQuotationDto);
         saleQuotationService.copy(saleQuotationDto);
     }
     }
 
 
+    /**
+     * 最新跟进(客户画像)
+     */
+    @PostMapping("/latestFollowUp")
+    public List<Map<String,Object>> latestFollowUp(@RequestBody CustomerDto dto) {
+        return  saleQuotationService.latestFollowUp(dto);
+    }
+
+    /**
+     * 销售统计(客户画像)
+     */
+    @PostMapping("/salesStatistics")
+    public Map<String, Object> salesStatistics(@RequestBody CustomerDto dto) {
+        return saleQuotationService.salesStatistics(dto);
+    }
+
+
+    /**
+     * 销售走势(客户画像)
+     */
+    @PostMapping("/salesTrend")
+    public Map<String,Object> salesTrend(@RequestBody CustomerDto dto) {
+        return saleQuotationService.salesTrend(dto);
+    }
+
+    /**
+     * 销售明细(客户画像)
+     */
+    @PostMapping("/saleDetail")
+    public Map<String,Object> saleDetail(@RequestBody CustomerDto dto) {
+//        return saleQuotationService.saleDetail(dto);
+        return null;
+    }
+
+
 }
 }

+ 11 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -9,7 +9,7 @@ import java.math.BigDecimal;
 /**
 /**
  * 外销合同表列表查询返回值实体
  * 外销合同表列表查询返回值实体
  *
  *
- * @author 
+ * @author
  * @since 2023-04-17
  * @since 2023-04-17
  */
  */
 @Getter
 @Getter
@@ -27,6 +27,11 @@ public class ContractVo extends Contract {
     private String sellCorporationName;
     private String sellCorporationName;
 
 
     /**
     /**
+     * 时间
+     */
+    private String time;
+
+    /**
      * 合同产品数量
      * 合同产品数量
      */
      */
     private BigDecimal cpQuantity;
     private BigDecimal cpQuantity;
@@ -40,4 +45,9 @@ public class ContractVo extends Contract {
      * 合同产品ID
      * 合同产品ID
      */
      */
     private Long contractProductId;
     private Long contractProductId;
+
+    /**
+     * 合同个数
+     */
+    private Long contractCount;
 }
 }

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/documents/po/DocumentsProduct.java

@@ -33,7 +33,7 @@ public class DocumentsProduct extends BasePo {
     /**
     /**
      * 货物描述
      * 货物描述
      */
      */
-    private String describe;
+    private String describes;
 
 
     /**
     /**
      * 货物副描述
      * 货物副描述

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/quotation/po/QuotationPay.java

@@ -22,7 +22,6 @@ public class QuotationPay extends BasePo {
 
 
     /**
     /**
      * 收费项目
      * 收费项目
-
      */
      */
     private String payName;
     private String payName;
 
 
@@ -31,6 +30,7 @@ public class QuotationPay extends BasePo {
      */
      */
     private BigDecimal amount;
     private BigDecimal amount;
 
 
+
     /**
     /**
      * 付款条件
      * 付款条件
      */
      */

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sale/vo/SaleQuotationVo.java

@@ -24,6 +24,11 @@ public class SaleQuotationVo extends SaleQuotation {
     private  String userName;
     private  String userName;
 
 
     /**
     /**
+     *  时间
+     */
+    private  String time;
+
+    /**
      * 商品-报价单关联表信息
      * 商品-报价单关联表信息
      */
      */
     private List<QuotationProduct> quotationProductList;
     private List<QuotationProduct> quotationProductList;

+ 15 - 1
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -1,9 +1,11 @@
 package com.fjhx.sale.mapper.contract;
 package com.fjhx.sale.mapper.contract;
 
 
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
+import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -15,7 +17,7 @@ import java.util.List;
  * 外销合同表 Mapper 接口
  * 外销合同表 Mapper 接口
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2023-04-17
  * @since 2023-04-17
  */
  */
 public interface ContractMapper extends BaseMapper<Contract> {
 public interface ContractMapper extends BaseMapper<Contract> {
@@ -32,4 +34,16 @@ public interface ContractMapper extends BaseMapper<Contract> {
      */
      */
     List<ContractVo> getNoPackContractByCustomerId(@Param("customerId")String customerId);
     List<ContractVo> getNoPackContractByCustomerId(@Param("customerId")String customerId);
 
 
+    /**
+     * 查询销售额(合同总金额)
+     * @param id (买方公司ID)
+     */
+    ContractVo getSalesTotal(Long id);
+
+    /**
+     * 查询指定客户的每月合同总额
+     * @param dto
+     */
+    @TenantIgnore
+    List<ContractVo> getAmount(CustomerDto dto);
 }
 }

+ 15 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/sale/SaleQuotationMapper.java

@@ -1,6 +1,7 @@
 package com.fjhx.sale.mapper.sale;
 package com.fjhx.sale.mapper.sale;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,8 @@ import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
+import java.util.List;
+
 
 
 /**
 /**
  * <p>
  * <p>
@@ -24,4 +27,16 @@ public interface SaleQuotationMapper extends BaseMapper<SaleQuotation> {
      */
      */
     Page<SaleQuotationVo> getPage(@Param("page") Page<Object> page, @Param("ew") LambdaQueryWrapper<SaleQuotation> wrapper);
     Page<SaleQuotationVo> getPage(@Param("page") Page<Object> page, @Param("ew") LambdaQueryWrapper<SaleQuotation> wrapper);
 
 
+    /**
+     * 查询这个客户的报价次数
+     * @param id (客户ID)
+     */
+    Integer getCount(Long id);
+
+    /**
+     * 查询指定客户的每月报价总额
+     * @param dto
+     * @return
+     */
+    List<SaleQuotationVo> getAmount(CustomerDto dto);
 }
 }

+ 13 - 1
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -1,6 +1,7 @@
 package com.fjhx.sale.service.contract;
 package com.fjhx.sale.service.contract;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.Contract;
@@ -16,7 +17,7 @@ import java.util.List;
  * 外销合同表 服务类
  * 外销合同表 服务类
  * </p>
  * </p>
  *
  *
- * @author 
+ * @author
  * @since 2023-04-17
  * @since 2023-04-17
  */
  */
 public interface ContractService extends BaseService<Contract> {
 public interface ContractService extends BaseService<Contract> {
@@ -63,4 +64,15 @@ public interface ContractService extends BaseService<Contract> {
      */
      */
     ContractPdfInfoVo getContractPdfInfo(Long id);
     ContractPdfInfoVo getContractPdfInfo(Long id);
 
 
+    /**
+     * 查询销售额(合同总金额)
+     * @param id(买方公司ID)
+     */
+    ContractVo  getSalesTotal(Long id);
+
+    /**
+     * 查询指定客户的每月合同总额
+     * @param dto
+     */
+    List<ContractVo> getAmount(CustomerDto dto);
 }
 }

+ 20 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.common.entity.documentary.bo.DocumentaryData;
 import com.fjhx.common.service.contract.ContractTemplateService;
 import com.fjhx.common.service.contract.ContractTemplateService;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
 import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
+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.service.product.ProductInfoService;
 import com.fjhx.item.service.product.ProductInfoService;
@@ -199,6 +200,25 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     }
     }
 
 
     /**
     /**
+     * 查询销售额(合同总金额)
+     * @param id (买方公司ID)
+     */
+    @Override
+    public ContractVo getSalesTotal(Long id) {
+        return baseMapper.getSalesTotal(id);
+    }
+
+    /**
+     * 查询指定客户的每月合同总额
+     * @param dto
+     */
+    @Override
+    public List<ContractVo> getAmount(CustomerDto dto) {
+
+        return baseMapper.getAmount(dto);
+    }
+
+    /**
      * 赋值外销合同信息
      * 赋值外销合同信息
      *
      *
      * @param contractPdfInfoVo param
      * @param contractPdfInfoVo param

+ 33 - 0
hx-sale/src/main/java/com/fjhx/sale/service/sale/SaleQuotationService.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.service.sale;
 package com.fjhx.sale.service.sale;
 
 
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,6 +8,9 @@ import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationSelectDto;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationSelectDto;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
 
 
+import java.util.List;
+import java.util.Map;
+
 
 
 /**
 /**
  * <p>
  * <p>
@@ -47,4 +51,33 @@ public interface SaleQuotationService extends BaseService<SaleQuotation> {
      * 报价单的复制功能
      * 报价单的复制功能
      */
      */
     void copy(SaleQuotationDto saleQuotationDto);
     void copy(SaleQuotationDto saleQuotationDto);
+
+    /**
+     * 查询这个客户的报价次数
+     * @param id (客户ID)
+     */
+    Integer getCount(Long id);
+
+    /**
+     * 查询指定客户的每月报价总额
+     * @param dto
+     * @return
+     */
+    List<SaleQuotationVo> getAmount(CustomerDto dto);
+
+
+    /**
+     * 最新跟进(客户画像)
+     */
+    List<Map<String,Object>> latestFollowUp(CustomerDto dto);
+
+    /**
+     * 销售统计(客户画像)
+     */
+    Map<String, Object> salesStatistics(CustomerDto dto);
+
+    /**
+     * 销售走势(客户画像)
+     */
+    Map<String, Object> salesTrend(CustomerDto dto);
 }
 }

+ 127 - 1
hx-sale/src/main/java/com/fjhx/sale/service/sale/impl/SaleQuotationServiceImpl.java

@@ -1,12 +1,19 @@
 package com.fjhx.sale.service.sale.impl;
 package com.fjhx.sale.service.sale.impl;
 
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.account.controller.utils.DateUtils;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.customer.entity.customer.dto.CustomerDto;
+import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
 import com.fjhx.sale.entity.quotation.po.QuotationProduct;
 import com.fjhx.sale.entity.quotation.po.QuotationProduct;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
 import com.fjhx.sale.mapper.sale.SaleQuotationMapper;
 import com.fjhx.sale.mapper.sale.SaleQuotationMapper;
+import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.quotation.QuotationPayService;
 import com.fjhx.sale.service.quotation.QuotationPayService;
 import com.fjhx.sale.service.quotation.QuotationProductService;
 import com.fjhx.sale.service.quotation.QuotationProductService;
 import com.fjhx.sale.service.sale.SaleQuotationService;
 import com.fjhx.sale.service.sale.SaleQuotationService;
@@ -24,7 +31,9 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
 import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 
 
 /**
 /**
@@ -43,6 +52,10 @@ public class SaleQuotationServiceImpl extends ServiceImpl<SaleQuotationMapper, S
     @Autowired
     @Autowired
     private QuotationPayService quotationPayService;
     private QuotationPayService quotationPayService;
 
 
+    @Autowired
+    private ContractService contractService;
+
+
     /**
     /**
      * 报价表分页
      * 报价表分页
      */
      */
@@ -137,4 +150,117 @@ public class SaleQuotationServiceImpl extends ServiceImpl<SaleQuotationMapper, S
 
 
     }
     }
 
 
+    /**
+     * 查询这个客户的报价次数
+     * @param id (客户ID)
+     */
+    @Override
+    public Integer getCount(Long id) {
+      return  baseMapper.getCount(id);
+    }
+
+    /**
+     * 查询指定客户的每月报价总额
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<SaleQuotationVo> getAmount(CustomerDto dto) {
+        return baseMapper.getAmount(dto);
+    }
+
+    /**
+     * 最新跟进(客户画像)
+     */
+    @Override
+    public List<Map<String,Object>> latestFollowUp(CustomerDto dto) {
+
+//        //切换数据源
+//        DynamicDataSourceContextHolder.push(SourceConstant.SALE);
+//        //查询这个客户的报价列表
+//        saleQuotationService.page(,Wrappers.<SaleQuotation>lambdaQuery()
+//                .eq(SaleQuotation::getBuyCorporationId,dto.getId()).orderByDesc(SaleQuotation::getCreateTime));
+//
+//        //查询客户的合同列表
+//        contractService.list();
+        return null;
+    }
+
+    /**
+     * 销售统计(客户画像)
+     */
+    @Override
+    public Map<String, Object> salesStatistics(CustomerDto dto) {
+        Map<String,Object> map = new HashMap<>();
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.SALE);
+        //查询这个客户的销售额(合同总金额)及成交合同数量
+        ContractVo contractVo = contractService.getSalesTotal(dto.getId());
+        map.put("contractVo",contractVo);
+
+        //查询这个客户的报价次数
+        Integer count = this.getCount(dto.getId());
+        DynamicDataSourceContextHolder.poll();
+        map.put("count",count);
+        return map;
+    }
+    /**
+     * 报价销售走势(客户画像)
+     */
+    @Override
+    public Map<String, Object> salesTrend(CustomerDto dto) {
+        Map<String, Object> map = new HashMap<>();
+
+        List<String> monthBetweenDate = DateUtils.getMonthBetweenDate(DateUtil.offsetMonth(new Date(), -12), new Date());
+
+        //存放报价的数据;
+        List<Map<String,Object>> saleQuotationList = new ArrayList<>();
+        //存放报价的数据;
+        List<Map<String,Object>> contractList = new ArrayList<>();
+
+        dto.setBeginTime(DateUtil.format(DateUtil.offsetMonth(new Date(), -12),"yy-MM"));
+        dto.setEndTime(DateUtil.format(new Date(),"yy-MM"));
+        //查询指定客户的每月报价总额
+        List<SaleQuotationVo> saleQuotationVoList = this.getAmount(dto);
+
+        Map<String, List<SaleQuotationVo>> saleQuotationVoMap = saleQuotationVoList.stream()
+                .collect(Collectors.groupingBy(item->DateUtil.format(item.getCreateTime(),"yyyy-MM")));
+
+        //查询指定客户的每月合同总额
+        List<ContractVo> contractVoList = contractService.getAmount(dto);
+        Map<String, List<ContractVo>> contractVoMap = contractVoList.stream()
+                .collect(Collectors.groupingBy(item->DateUtil.format(item.getCreateTime(),"yyyy-MM")));
+
+        //赋值每个月的值
+        for (String month : monthBetweenDate) {
+            //存放每月的报价总额
+            Map<String,Object> saleQuotationMap = new HashMap<>();
+            //每月的金额初始化的值为0
+            saleQuotationMap.put("month",month);
+            saleQuotationMap.put("saleAmount",new BigDecimal(0));
+            List<SaleQuotationVo> saleQuotationVos = saleQuotationVoMap.get(month);
+            //给每月的报价金额赋值
+            if (ObjectUtil.isNotEmpty(saleQuotationVos)){
+                saleQuotationMap.put("saleAmount",saleQuotationVos.get(0).getAmount());
+            }
+            saleQuotationList.add(saleQuotationMap);
+
+            //存放每月的合同总额
+            Map<String,Object> contractMap = new HashMap<>();
+            //每月的金额初始化的值为0
+            contractMap.put("month",month);
+            contractMap.put("contractAmount",new BigDecimal(0));
+            List<ContractVo> contractVoList1 = contractVoMap.get(month);
+            if (ObjectUtil.isNotEmpty(contractVoList1)){
+                contractMap.put("contractAmount",contractVoList1.get(0).getAmount());
+            }
+            contractList.add(contractMap);
+        }
+        map.put("contractList",contractList);
+        map.put("saleQuotationList",saleQuotationList);
+        return map;
+    }
+
+
+
 }
 }

+ 26 - 0
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -32,5 +32,31 @@
         GROUP BY t1.id
         GROUP BY t1.id
     </select>
     </select>
 
 
+    <select id="getSalesTotal" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            SUM(amount) amount,
+            currency,
+            count(*) contractCount
+        FROM
+            contract
+        WHERE
+            buy_corporation_id = #{id} and status = 30 and del_flag  = 0
+        GROUP BY
+            buy_corporation_id
+    </select>
+
+    <select id="getAmount" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT
+            SUM(amount) amount,
+            DATE_FORMAT(create_time,'%Y-%m') time
+        FROM
+            contract
+        WHERE
+              buy_corporation_id = #{id}
+                and (DATE_FORMAT(create_time,'%Y-%m') >= #{beginTime} and #{endTime} >= DATE_FORMAT(create_time,'%Y-%m'))
+        GROUP BY
+            time
+    </select>
+
 
 
 </mapper>
 </mapper>

+ 1 - 1
hx-sale/src/main/resources/mapper/documents/DocumentsProductMapper.xml

@@ -6,7 +6,7 @@
             dp.id,
             dp.id,
             dp.business_id,
             dp.business_id,
             dp.documents_id,
             dp.documents_id,
-            dp.describe,
+            dp.describes,
             dp.sub_describe,
             dp.sub_describe,
             dp.customs_code,
             dp.customs_code,
             dp.price,
             dp.price,

+ 24 - 0
hx-sale/src/main/resources/mapper/sale/SaleQuotationMapper.xml

@@ -40,4 +40,28 @@
             ${ew.customSqlSegment}
             ${ew.customSqlSegment}
     </select>
     </select>
 
 
+    <select id="getCount" resultType="java.lang.Integer">
+        <!-- 查询报价次数(报价审批已通过的)-->
+        SELECT
+        COUNT(*)
+        FROM
+        sale_quotation
+        WHERE
+        buy_corporation_id = #{id} and `status` = 30 and del_flag = 0
+        GROUP BY
+        buy_corporation_id
+    </select>
+
+    <select id="getAmount" resultType="com.fjhx.sale.entity.sale.vo.SaleQuotationVo">
+        SELECT
+            SUM( amount ) amount,
+            DATE_FORMAT(create_time,'%Y-%m') time
+        FROM
+            sale_quotation
+        WHERE buy_corporation_id = #{id}
+                and (DATE_FORMAT(create_time,'%Y-%m')>= #{beginTime} and #{endTime} >= DATE_FORMAT(create_time,'%Y-%m'))
+        GROUP BY
+            time
+    </select>
+
 </mapper>
 </mapper>