wxf 2 жил өмнө
parent
commit
d4c589f2e5

+ 10 - 1
hx-purchase/src/main/java/com/fjhx/purchase/controller/purchase/PurchaseController.java

@@ -20,7 +20,7 @@ import java.util.List;
  * 采购 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-06
  */
 @DS(SourceConstant.PURCHASE)
@@ -87,5 +87,14 @@ public class PurchaseController {
         return purchaseService.getListBySupplyId(supplyId);
     }
 
+    /**
+     * 货款账单
+     */
+    @PostMapping("/paymentBill")
+    public Page<PurchaseDto> paymentBill(@RequestBody PurchaseSelectDto purchaseDto) {
+        return purchaseService.paymentBill(purchaseDto);
+    }
+
+
 
 }

+ 24 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseDto.java

@@ -4,14 +4,37 @@ import com.fjhx.purchase.entity.purchase.po.Purchase;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 采购新增编辑入参实体
  *
- * @author 
+ * @author
  * @since 2023-04-06
  */
 @Getter
 @Setter
 public class PurchaseDto extends Purchase {
 
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 已收发票金额
+     */
+    private BigDecimal invoiceAmount;
+
+    /**
+     * 到货金额
+     */
+    private BigDecimal arrivalAmount;
+
+    /**
+     * 已付款金额
+     */
+    private BigDecimal paidAmount;
+
+
 }

+ 18 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/dto/PurchaseSelectDto.java

@@ -7,7 +7,7 @@ import lombok.Setter;
 /**
  * 采购列表查询入参实体
  *
- * @author 
+ * @author
  * @since 2023-04-06
  */
 @Getter
@@ -29,5 +29,22 @@ public class PurchaseSelectDto extends BaseSelectDto {
      */
     private Integer payStatus;
 
+    /**
+     * 供应商名称
+     */
+    private String supplyName;
+
+    /**
+     * 采购合同号
+     */
+    private String code;
+
+    /**
+     * 供应商Id
+     */
+    private Long supplyId;
+
+
+
 
 }

+ 27 - 1
hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseMapper.java

@@ -1,5 +1,7 @@
 package com.fjhx.purchase.mapper.purchase;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,13 +9,15 @@ import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
  * 采购 Mapper 接口
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-06
  */
 public interface PurchaseMapper extends BaseMapper<Purchase> {
@@ -23,4 +27,26 @@ public interface PurchaseMapper extends BaseMapper<Purchase> {
      */
     Page<PurchaseVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Purchase> wrapper);
 
+
+
+    /**
+     * 查询货款账单
+     * @param query
+     * @return
+     */
+    Page<PurchaseDto> paymentBill(@Param("page") Page<Object> page,@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 查询到货金额
+     * @param query
+     * @return
+     */
+    List<PurchaseDto> arrivalAmount(@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 查询已付款金额
+     * @param wrapper
+     * @return
+     */
+    List<PurchaseDto> paidAmount(@Param("ew") QueryWrapper<Object> wrapper);
 }

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchaseService.java

@@ -57,4 +57,9 @@ public interface PurchaseService extends BaseService<Purchase> {
      * @return
      */
     List<Purchase> getListBySupplyId(String supplyId);
+
+    /**
+     * 货款账单
+     */
+    Page<PurchaseDto> paymentBill(PurchaseSelectDto purchaseDto);
 }

+ 59 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -1,9 +1,11 @@
 package com.fjhx.purchase.service.purchase.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -317,6 +319,63 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         return list;
     }
 
+    /**
+     * 货款账单
+     */
+    @Override
+    public Page<PurchaseDto> paymentBill(PurchaseSelectDto purchaseDto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.eq(ObjectUtil.isNotEmpty(purchaseDto.getSupplyId()),"pu.supply_id",purchaseDto.getSupplyId());
+        query.eq(ObjectUtil.isNotEmpty(purchaseDto.getPayStatus()),"pu.pay_status",purchaseDto.getPayStatus());
+        query.like(StringUtils.isNotEmpty(purchaseDto.getKeyword()),"pu.code",purchaseDto.getKeyword());
+        query.groupBy("pu.id");
+        //查询采购信息与已收发票
+        Page<PurchaseDto> page = baseMapper.paymentBill(purchaseDto.getPage(),query);
+        List<PurchaseDto> records = page.getRecords();
+        if (records.size()==0){
+            return page;
+        }
+        //获取到所有的采购订单ID
+        List<Long> ids = records.stream().map(purchaseDto1 -> purchaseDto1.getId()).collect(Collectors.toList());
+        QueryWrapper<Object> wrapper = Wrappers.query();
+        wrapper.in("sw.business_id",ids);
+        wrapper.eq("sw.type",1);
+        wrapper.groupBy("sw.business_id");
+        //查询到货金额(已入库的采购数量*采购单价)
+        List<PurchaseDto> purchaseDtos = baseMapper.arrivalAmount(wrapper);
+        Map<Long, List<PurchaseDto>> arrivalMap = purchaseDtos.stream().collect(Collectors.groupingBy(PurchaseDto::getId));
+
+
+        //查询已付款金额()
+        QueryWrapper<Object> queryWrapper = Wrappers.query();
+        queryWrapper.in("pd.purchase_id",ids);
+        queryWrapper.eq("p.status",30);
+        queryWrapper.groupBy("pd.purchase_id");
+        List<PurchaseDto> purchaseDtos1 = baseMapper.paidAmount(queryWrapper);
+        Map<Long, List<PurchaseDto>> paidMap = purchaseDtos1.stream().collect(Collectors.groupingBy(PurchaseDto::getId));
+
+        //赋值到货金额与已付款金额
+        for (PurchaseDto record : records) {
+            //初始化到货金额与已付款金额
+            record.setArrivalAmount(new BigDecimal(0));
+            record.setPaidAmount(new BigDecimal(0));
+
+            //赋值到货金额
+            List<PurchaseDto>  arrivalList= arrivalMap.get(record.getId());
+            if (ObjectUtils.isNotEmpty(arrivalList)){
+                record.setArrivalAmount(arrivalList.get(0).getAmount());
+            }
+
+            //赋值已付款金额
+            List<PurchaseDto> paidList = paidMap.get(record.getId());
+            if (ObjectUtils.isNotEmpty(paidList)){
+                record.setPaidAmount(paidList.get(0).getAmount());
+            }
+        }
+
+        return page;
+    }
+
     @Override
     public Page<? extends DocumentaryData> getDocumentaryPage(JSONObject selectData, BaseSelectDto dto, List<Long> excludeBusinessId) {
         PurchaseDocumentaryBo bo = selectData.toJavaObject(PurchaseDocumentaryBo.class);

+ 35 - 0
hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml

@@ -7,5 +7,40 @@
         from purchase p
             ${ew.customSqlSegment}
     </select>
+    <select id="paymentBill" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
+        SELECT
+            pu.code,
+            bs.`name` supplyName,
+            pu.amount,
+            IFNULL(SUM(nd.money),0) invoiceAmount,
+            pu.pay_status  payStatus,
+            pu.id
+        FROM
+            purchase pu
+                LEFT JOIN bytesailing_supply.supplier_info bs ON pu.supply_id = bs.id
+                LEFT JOIN  invoice_details nd on pu.id = nd.purchase_id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="arrivalAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
+        SELECT
+            SUM(wd.receipt_quantity) * pd.price  amount,
+            pd.purchase_id id
+        FROM
+            bytesailing_wms.stock_wait sw
+                JOIN bytesailing_wms.stock_wait_details wd on sw.id = wd.stock_wait_id
+                join arrival_detail ad on wd.business_details_id = ad.id
+                join purchase_detail pd on ad.purchase_detail_id = pd.id
+            ${ew.customSqlSegment}
+    </select>
+    <select id="paidAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
+        SELECT
+            sum(pd.money) amount,
+            p.currency,
+            pd.purchase_id id
+        FROM
+            pay_detail pd
+                LEFT JOIN pay p ON pd.pay_id = p.id
+            ${ew.customSqlSegment}
+    </select>
 
 </mapper>

+ 40 - 7
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java

@@ -105,11 +105,44 @@ public class ContractController {
         return contractService.saleTrend(productInfoDto);
     }
 
-//    /**
-//     * 销售统计
-//     */
-//    @PostMapping("/saleTrend")
-//    public  List<Map<String, Object>> saleTrend(@RequestBody ProductInfoSelectDto productInfoDto) {
-//        return contractService.saleTrend(productInfoDto);
-//    }
+    /**
+     * 销售统计(数据看板-销售分析页面开发)
+     */
+    @PostMapping("/salesStatistics")
+    public  Map<String, Object>  salesStatistics(@RequestBody ContractDto dto) {
+        return contractService.salesStatistics(dto);
+    }
+
+
+    /**
+     * 国家销售统计(数据看板-销售分析页面开发)
+     */
+    @PostMapping("/countrySalesStatistics")
+    public  List<ContractDto>  countrySalesStatistics(@RequestBody ContractDto dto) {
+        return contractService.countrySalesStatistics(dto);
+    }
+
+    /**
+     * 客户销售统计(数据看板-销售分析页面开发)
+     */
+    @PostMapping("/customSalesStatistics")
+    public  List<ContractDto>  customSalesStatistics(@RequestBody ContractDto dto) {
+        return contractService.customSalesStatistics(dto);
+    }
+
+    /**
+     * 业务员销售统计(数据看板-销售分析页面开发)
+     */
+    @PostMapping("/salesmanSalesStatistics")
+    public  List<ContractDto>  salesmanSalesStatistics(@RequestBody ContractDto dto) {
+        return contractService.salesmanSalesStatistics(dto);
+    }
+
+    /**
+     * 产品销售统计(数据看板-销售分析页面开发)
+     */
+    @PostMapping("/productSalesStatistics")
+    public  List<ContractDto>  productSalesStatistics(@RequestBody ContractDto dto) {
+        return contractService.productSalesStatistics(dto);
+    }
 }

+ 29 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java

@@ -7,11 +7,39 @@ import lombok.Setter;
 /**
  * 外销合同表新增编辑入参实体
  *
- * @author 
+ * @author
  * @since 2023-04-17
  */
 @Getter
 @Setter
 public class ContractDto extends Contract {
+    /**
+     * 开始时间
+     */
+    private String beginTime;
 
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * 国家名称
+     */
+    private String countryName;
+
+    /**
+     * 客户名称
+     */
+    private String corporationName;
+
+    /**
+     * 业务员名称
+     */
+    private String userName;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -283,6 +283,11 @@ public class Contract extends BasePo {
     @TableField(exist = false)
     private List<ContractProject> contractProjectList;
 
+    /**
+     * 版本号
+     */
+    @TableField(exist = false)
+    private Integer count;
 
 
 }

+ 21 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java

@@ -2,6 +2,7 @@ package com.fjhx.sale.mapper.contract;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -55,4 +56,24 @@ public interface ContractMapper extends BaseMapper<Contract> {
      * @return
      */
     List<SaleQuotationVo> contractStatistics(@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 国家销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> countrySalesStatistics(@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 客户销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> customSalesStatistics(@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 业务员销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> salesmanSalesStatistics(@Param("ew") QueryWrapper<Object> query);
+
+    /**
+     * 产品销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> productSalesStatistics(@Param("ew") QueryWrapper<Object> query);
 }

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java

@@ -93,4 +93,29 @@ public interface ContractService extends BaseService<Contract> {
      * @param productInfoDto
      */
     List<Map<String, Object>> saleTrend(ProductInfoSelectDto productInfoDto);
+
+    /**
+     * 销售统计(数据看板-销售分析页面开发)
+     */
+    Map<String, Object>  salesStatistics(ContractDto dto);
+
+    /**
+     * 国家销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> countrySalesStatistics(ContractDto dto);
+
+    /**
+     * 客户销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> customSalesStatistics(ContractDto dto);
+
+    /**
+     * 业务员销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> salesmanSalesStatistics(ContractDto dto);
+
+    /**
+     * 产品销售统计(数据看板-销售分析页面开发)
+     */
+    List<ContractDto> productSalesStatistics(ContractDto dto);
 }

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

@@ -279,6 +279,108 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     }
 
     /**
+     * 销售统计(数据看板-销售分析页面开发)
+     */
+    @Override
+    public Map<String, Object> salesStatistics(ContractDto dto) {
+        //添加查询条件
+        QueryWrapper<Contract> query = Wrappers.<Contract>query();
+        selectTime(query,dto);
+        query.select("sum(amount) amount");
+
+        //查询销售额
+        Contract contract = baseMapper.selectOne(query);
+        query.clear();
+        //查询订单数
+        selectTime(query,dto);
+
+        Long count = baseMapper.selectCount(query);
+
+        //查询下单的客户人数
+        query.clear();
+        selectTime(query,dto);
+        query.select("count(DISTINCT(buy_corporation_id)) count");
+        Contract contract1 = baseMapper.selectOne(query);
+
+        //存放销售统计数据
+        Map<String,Object> map = new HashMap<>();
+        //初始化数据
+        map.put("amount",new BigDecimal(0));
+        map.put("contractCount",count);
+        map.put("customerCount",new BigDecimal(0));
+
+        //赋值
+        if (ObjectUtil.isNotEmpty(contract)){
+            map.put("amount",contract.getAmount());
+        }
+
+        if (ObjectUtil.isNotEmpty(contract1)){
+            map.put("customerCount",contract1.getCount());
+        }
+        return map;
+    }
+
+    /**
+     * 国家销售统计(数据看板-销售分析页面开发)
+     */
+    @Override
+    public List<ContractDto> countrySalesStatistics(ContractDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.ge("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getEndTime());
+        query.groupBy("cc.buy_country_id");
+        query.orderByDesc("amount");
+        //查询销售国家统计信息
+        List<ContractDto> contractDtoList =  baseMapper.countrySalesStatistics(query);
+        return contractDtoList;
+    }
+
+    /**
+     * 客户销售统计(数据看板-销售分析页面开发)
+     */
+    @Override
+    public List<ContractDto> customSalesStatistics(ContractDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.ge("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getEndTime());
+        query.groupBy("cc.buy_corporation_id");
+        query.orderByDesc("amount");
+        //查询销售国家统计信息
+        List<ContractDto> contractDtoList =  baseMapper.customSalesStatistics(query);
+        return contractDtoList;
+    }
+
+    /**
+     * 业务员销售统计(数据看板-销售分析页面开发)
+     */
+    @Override
+    public List<ContractDto> salesmanSalesStatistics(ContractDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.ge("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(cc.create_time,'%Y-%m')",dto.getEndTime());
+        query.groupBy("cc.create_user");
+        query.orderByDesc("amount");
+        //查询销售国家统计信息
+        List<ContractDto> contractDtoList =  baseMapper.salesmanSalesStatistics(query);
+        return contractDtoList;
+    }
+
+    /**
+     * 产品销售统计(数据看板-销售分析页面开发)
+     */
+    @Override
+    public List<ContractDto> productSalesStatistics(ContractDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.ge("DATE_FORMAT(cp.create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(cp.create_time,'%Y-%m')",dto.getEndTime());
+        query.groupBy("cp.product_id");
+        query.orderByDesc("amount");
+        //查询销售国家统计信息
+        List<ContractDto> contractDtoList =  baseMapper.productSalesStatistics(query);
+        return contractDtoList;
+    }
+
+    /**
      * 赋值外销合同信息
      *
      * @param contractPdfInfoVo param
@@ -483,4 +585,10 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         contractPdfInfoVo.setBeneficiaryAddress(accountManagement.getBeneficiaryAddress());
     }
 
+    //添加时间的查询条件
+    private void  selectTime(QueryWrapper<Contract> query,ContractDto dto){
+        query.ge("DATE_FORMAT(create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(create_time,'%Y-%m')",dto.getEndTime());
+    }
+
 }

+ 42 - 1
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -57,7 +57,7 @@
               buy_corporation_id = #{id}
                 and (DATE_FORMAT(create_time,'%Y-%m') >= #{beginTime} and #{endTime} >= DATE_FORMAT(create_time,'%Y-%m'))
         GROUP BY
-            time
+            TIME
     </select>
 
     <select id="contractStatistics" resultType="com.fjhx.sale.entity.sale.vo.SaleQuotationVo">
@@ -70,6 +70,47 @@
               left  JOIN  contract sq ON sq.buy_corporation_id = c.id
             ${ew.customSqlSegment}
     </select>
+    <select id="countrySalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
+        SELECT
+            sum(cc.amount) amount,
+            COUNT(cc.buy_country_id) count,
+            ai.name countryName
+
+        FROM
+            contract cc
+                LEFT JOIN bytesailing_base.area_info ai ON cc.buy_country_id = ai.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="customSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
+        SELECT
+            sum(cc.amount) amount,
+            bc.name corporationName
+        FROM
+            contract cc
+                LEFT JOIN bytesailing_common.corporation bc ON cc.buy_corporation_id = bc.id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="salesmanSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
+        SELECT
+            SUM(cc.amount) amount,
+            su.nick_name userName
+        FROM
+            contract cc
+                LEFT JOIN bytesailing_base.sys_user su ON cc.create_user = su.user_id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="productSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
+        SELECT
+            SUM(cp.amount) amount,
+            pi.name productName
+        FROM
+            contract_product cp
+                LEFT JOIN bytesailing_item.product_info pi ON cp.product_id = pi.id
+            ${ew.customSqlSegment}
+    </select>
 
 
 </mapper>