24282 3 meses atrás
pai
commit
be2a99897a

+ 25 - 0
jy-business/src/main/java/com/jy/business/capital/dao/CapitalTransactionsDao.java

@@ -9,8 +9,11 @@ import com.jy.business.capital.model.table.CapitalTransactionsTable;
 import com.jy.business.capital.model.vo.CapitalTransactionsVo;
 import com.jy.business.corporation.model.table.CorporationTable;
 import com.jy.framework.model.base.BaseDao;
+import com.jy.system.model.table.SysUserTable;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class CapitalTransactionsDao extends BaseDao<CapitalTransactionsMapper, CapitalTransactions> {
 
@@ -67,4 +70,26 @@ public class CapitalTransactionsDao extends BaseDao<CapitalTransactionsMapper, C
     public boolean capitalAccountExists(Long id) {
         return lambdaQuery().eq(CapitalTransactions::getCapitalAccountId, id).exists();
     }
+
+    public List<CapitalTransactionsVo> getByContract(List<Long> contractIdList) {
+        CapitalTransactionsTable ct = CapitalTransactionsTable.ct;
+        SysUserTable su = SysUserTable.su;
+
+        return sql(CapitalTransactionsVo.class)
+                .select(
+                        ct.all,
+                        su.nickname
+                )
+                .from(ct)
+                .leftJoin(su).on(ct.createUser.eq(su.id))
+                .where(
+                        ct.targetType.eq(70),
+                        ct.contractId.in(contractIdList)
+                )
+                .orderBy(
+                        ct.tradingTime.desc(),
+                        ct.id.desc()
+                )
+                .list();
+    }
 }

+ 5 - 0
jy-business/src/main/java/com/jy/business/capital/model/entity/CapitalTransactions.java

@@ -78,6 +78,11 @@ public class CapitalTransactions extends BaseIdPo {
     private String remark;
 
     /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
      * 订单id
      */
     private Long orderId;

+ 5 - 0
jy-business/src/main/java/com/jy/business/capital/model/table/CapitalTransactionsTable.java

@@ -60,6 +60,11 @@ public class CapitalTransactionsTable extends Table<CapitalTransactions> {
     public QueryColumn remark = this.field(CapitalTransactions::getRemark);
 
     /**
+     * 合同id
+     */
+    public QueryColumn contractId = this.field(CapitalTransactions::getContractId);
+
+    /**
      * 订单id
      */
     public QueryColumn orderId = this.field(CapitalTransactions::getOrderId);

+ 5 - 0
jy-business/src/main/java/com/jy/business/capital/model/vo/CapitalTransactionsVo.java

@@ -41,4 +41,9 @@ public class CapitalTransactionsVo extends CapitalTransactions {
      */
     private BigDecimal dateAmount;
 
+    /**
+     * 用户名称
+     */
+    private String nickname;
+
 }

+ 7 - 1
jy-business/src/main/java/com/jy/business/contract/controller/ContractInfoController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jy.business.contract.model.dto.ContractInfoDto;
 import com.jy.business.contract.model.dto.ContractInfoSelectDto;
 import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.model.vo.ContractStatisticsVo;
 import com.jy.business.contract.service.ContractInfoService;
 import com.jy.framework.model.base.BaseSelectDto;
 import jakarta.annotation.Resource;
@@ -20,7 +21,7 @@ import java.util.List;
  * 合同 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2025-06-10
  */
 @RestController
@@ -30,6 +31,11 @@ public class ContractInfoController {
     @Resource
     private ContractInfoService contractInfoService;
 
+    @GetMapping("/statistics")
+    public List<ContractStatisticsVo> getStatistics() {
+        return contractInfoService.getStatistics();
+    }
+
     /**
      * 合同列表
      */

+ 28 - 5
jy-business/src/main/java/com/jy/business/contract/dao/ContractInfoDao.java

@@ -1,15 +1,16 @@
 package com.jy.business.contract.dao;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.capital.model.table.CapitalTransactionsTable;
 import com.jy.business.contract.mapper.ContractInfoMapper;
 import com.jy.business.contract.model.dto.ContractInfoSelectDto;
 import com.jy.business.contract.model.entity.ContractInfo;
 import com.jy.business.contract.model.table.ContractDetailTable;
 import com.jy.business.contract.model.table.ContractInfoTable;
 import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.model.vo.ContractStatisticsVo;
 import com.jy.framework.model.base.BaseDao;
-import com.jy.system.service.AuthService;
-import jakarta.annotation.Resource;
+import com.jy.framework.mybatis.join.TempTable;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -17,8 +18,31 @@ import java.util.List;
 @Service
 public class ContractInfoDao extends BaseDao<ContractInfoMapper, ContractInfo> {
 
-    @Resource
-    private AuthService authService;
+    public List<ContractStatisticsVo> getStatistics() {
+        ContractInfoTable ci = ContractInfoTable.ci;
+        CapitalTransactionsTable ct = CapitalTransactionsTable.ct;
+
+        TempTable t = sql().select(
+                        _ifNull(_sum(ct.amount), 0).as(ContractStatisticsVo::getFundReceivedAmount),
+                        ci.sellerCompany
+                )
+                .from(ci)
+                .leftJoin(ct).on(ct.targetType.eq(70), ci.id.eq(ct.contractId))
+                .groupBy(ci.sellerCompany)
+                .toTable("t");
+
+        return sql(ContractStatisticsVo.class)
+                .select(
+                        ci.sellerCompany,
+                        _count(0).as(ContractStatisticsVo::getContractQuantity),
+                        _sum(ci.amount).as(ContractStatisticsVo::getContractAmount),
+                        t.field(ContractStatisticsVo::getFundReceivedAmount)
+                )
+                .from(ci)
+                .leftJoin(t).on(ci.sellerCompany.eq(t.field(ContractInfo::getSellerCompany)))
+                .groupBy(ci.sellerCompany)
+                .list();
+    }
 
     /**
      * 合同列表
@@ -81,5 +105,4 @@ public class ContractInfoDao extends BaseDao<ContractInfoMapper, ContractInfo> {
                 )
                 .one();
     }
-
 }

+ 9 - 1
jy-business/src/main/java/com/jy/business/contract/model/vo/ContractInfoVo.java

@@ -1,5 +1,6 @@
 package com.jy.business.contract.model.vo;
 
+import com.jy.business.capital.model.vo.CapitalTransactionsVo;
 import com.jy.business.contract.model.entity.ContractDetail;
 import com.jy.business.contract.model.entity.ContractInfo;
 import lombok.Getter;
@@ -11,7 +12,7 @@ import java.util.List;
 /**
  * 合同列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2025-06-10
  */
 @Getter
@@ -23,6 +24,13 @@ public class ContractInfoVo extends ContractInfo {
      */
     private BigDecimal costPrice;
 
+    /**
+     * 到账金额
+     */
+    private BigDecimal receivedAmount;
+
+    private List<CapitalTransactionsVo> capitalTransactionsList;
+
     private List<ContractDetail> list;
 
 }

+ 32 - 0
jy-business/src/main/java/com/jy/business/contract/model/vo/ContractStatisticsVo.java

@@ -0,0 +1,32 @@
+package com.jy.business.contract.model.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class ContractStatisticsVo {
+
+    /**
+     * 合同数量
+     */
+    private Integer contractQuantity;
+
+    /**
+     * 公司名称
+     */
+    private String sellerCompany;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 到账金额
+     */
+    private BigDecimal fundReceivedAmount;
+
+}

+ 4 - 1
jy-business/src/main/java/com/jy/business/contract/service/ContractInfoService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jy.business.contract.model.dto.ContractInfoDto;
 import com.jy.business.contract.model.dto.ContractInfoSelectDto;
 import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.model.vo.ContractStatisticsVo;
 
 import java.util.List;
 
@@ -12,11 +13,13 @@ import java.util.List;
  * 合同 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2025-06-10
  */
 public interface ContractInfoService {
 
+    List<ContractStatisticsVo> getStatistics();
+
     /**
      * 合同列表
      */

+ 1 - 0
jy-business/src/main/java/com/jy/business/contract/service/impl/ContractFundReceivedServiceImpl.java

@@ -88,6 +88,7 @@ public class ContractFundReceivedServiceImpl implements ContractFundReceivedServ
         capitalTransactionsDto.setType(1);
         capitalTransactionsDto.setAmount(dto.getReceivedAmount());
         capitalTransactionsDto.setTargetType(70);
+        capitalTransactionsDto.setContractId(dto.getContractId());
 
         dto.setCapitalTransactionsId(capitalTransactionsDto.getId());
         boolean update = contractFundReceivedDao.update(q -> q

+ 69 - 2
jy-business/src/main/java/com/jy/business/contract/service/impl/ContractInfoServiceImpl.java

@@ -1,26 +1,36 @@
 package com.jy.business.contract.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jy.business.capital.dao.CapitalTransactionsDao;
+import com.jy.business.capital.model.entity.CapitalTransactions;
+import com.jy.business.capital.model.vo.CapitalTransactionsVo;
 import com.jy.business.contract.dao.ContractDetailDao;
 import com.jy.business.contract.dao.ContractInfoDao;
 import com.jy.business.contract.model.dto.ContractInfoDto;
 import com.jy.business.contract.model.dto.ContractInfoSelectDto;
 import com.jy.business.contract.model.entity.ContractDetail;
 import com.jy.business.contract.model.vo.ContractInfoVo;
+import com.jy.business.contract.model.vo.ContractStatisticsVo;
 import com.jy.business.contract.service.ContractInfoService;
+import com.jy.framework.model.base.BaseIdPo;
 import com.jy.framework.utils.AssertUtil;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
  * 合同 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2025-06-10
  */
 @Service
@@ -32,6 +42,33 @@ public class ContractInfoServiceImpl implements ContractInfoService {
     @Resource
     private ContractDetailDao contractDetailDao;
 
+    @Resource
+    private CapitalTransactionsDao capitalTransactionsDao;
+
+    @Override
+    public List<ContractStatisticsVo> getStatistics() {
+        List<ContractStatisticsVo> list = contractInfoDao.getStatistics();
+
+        int contractQuantity = 0;
+        BigDecimal contractAmount = BigDecimal.ZERO;
+        BigDecimal fundReceivedAmount = BigDecimal.ZERO;
+
+        ContractStatisticsVo contractStatisticsVo = new ContractStatisticsVo();
+        for (ContractStatisticsVo item : list) {
+            contractQuantity = contractQuantity + item.getContractQuantity();
+            contractAmount = contractAmount.add(item.getContractAmount());
+            fundReceivedAmount = fundReceivedAmount.add(item.getFundReceivedAmount());
+        }
+
+        contractStatisticsVo.setContractQuantity(contractQuantity);
+        contractStatisticsVo.setContractAmount(contractAmount);
+        contractStatisticsVo.setFundReceivedAmount(fundReceivedAmount);
+        contractStatisticsVo.setSellerCompany("全部");
+
+        list.add(0, contractStatisticsVo);
+        return list;
+    }
+
     @Override
     public List<ContractInfoVo> getList(ContractInfoSelectDto dto) {
         return contractInfoDao.getList(dto);
@@ -39,7 +76,37 @@ public class ContractInfoServiceImpl implements ContractInfoService {
 
     @Override
     public Page<ContractInfoVo> getPage(ContractInfoSelectDto dto) {
-        return contractInfoDao.getPage(dto);
+        Page<ContractInfoVo> page = contractInfoDao.getPage(dto);
+        List<ContractInfoVo> records = page.getRecords();
+
+        if (records.isEmpty()) {
+            return page;
+        }
+
+        // 合同id
+        List<Long> idList = records.stream().map(BaseIdPo::getId).toList();
+        Map<Long, List<CapitalTransactionsVo>> map = capitalTransactionsDao.getByContract(idList)
+                .stream()
+                .collect(Collectors.groupingBy(CapitalTransactions::getContractId));
+
+        for (ContractInfoVo record : records) {
+            List<CapitalTransactionsVo> capitalTransactionsList = map.get(record.getId());
+
+            if (ObjectUtil.isEmpty(capitalTransactionsList)) {
+                record.setReceivedAmount(BigDecimal.ZERO);
+                record.setCapitalTransactionsList(Collections.emptyList());
+            } else {
+                record.setReceivedAmount(
+                        capitalTransactionsList.stream()
+                                .map(CapitalTransactions::getAmount)
+                                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                );
+
+                record.setCapitalTransactionsList(capitalTransactionsList);
+            }
+        }
+
+        return page;
     }
 
     @Override

+ 24 - 6
jy-ui/src/views/business/contract/info/index.vue

@@ -57,13 +57,21 @@ const columnConfig: ColumnConfigType[] = [
     label: '签订日期'
   },
   {
-    prop: 'startDate',
-    label: '开始日期'
+    prop: 'sellerCompany',
+    label: '归属公司'
   },
   {
-    prop: 'endDate',
-    label: '结束日期'
+    prop: 'customerName',
+    label: '客户'
   },
+  // {
+  //   prop: 'startDate',
+  //   label: '开始日期'
+  // },
+  // {
+  //   prop: 'endDate',
+  //   label: '结束日期'
+  // },
   {
     prop: 'currency',
     label: '币种'
@@ -73,6 +81,10 @@ const columnConfig: ColumnConfigType[] = [
     label: '汇率'
   },
   {
+    prop: 'amount',
+    label: '合同金额'
+  },
+  {
     prop: 'freightPrice',
     label: '运费'
   },
@@ -81,8 +93,14 @@ const columnConfig: ColumnConfigType[] = [
     label: '保险费'
   },
   {
-    prop: 'amount',
-    label: '金额'
+    prop: 'costPrice',
+    label: '成本价'
+  },
+  {
+    label: '预期收益',
+    formatter: (row) => {
+      return row.amount - row.costPrice
+    }
   },
   {
     width: 120,