Browse Source

Merge remote-tracking branch 'origin/master'

caozj 1 year ago
parent
commit
a5e15810e5
49 changed files with 1323 additions and 76 deletions
  1. 20 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountPaymentRecordsController.java
  2. 1 2
      hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionDepartmentController.java
  3. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java
  4. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsDto.java
  5. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsSelectDto.java
  6. 1 0
      hx-account/src/main/java/com/fjhx/account/entity/account/enums/PaymentStatusEnum.java
  7. 54 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountPaymentRecords.java
  8. 10 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java
  9. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountPaymentRecordsVo.java
  10. 10 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java
  11. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionDepartmentVo.java
  12. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionVo.java
  13. 3 2
      hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java
  14. 17 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountPaymentRecordsMapper.java
  15. 17 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountPaymentRecordsService.java
  16. 21 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentRecordsServiceImpl.java
  17. 64 24
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  18. 63 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  19. 1 1
      hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionDepartmentService.java
  20. 19 2
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionDepartmentServiceImpl.java
  21. 7 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java
  22. 53 23
      hx-account/src/main/java/com/fjhx/account/service/write/impl/WriteOffRecordsServiceImpl.java
  23. 4 0
      hx-account/src/main/resources/mapper/account/AccountPaymentRecordsMapper.xml
  24. 5 0
      hx-customer/src/main/java/com/fjhx/customer/entity/customer/vo/CustomerVo.java
  25. 14 2
      hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java
  26. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java
  27. 4 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java
  28. 0 0
      hx-sale/src/main/java/com/fjhx/sale/a-json/ContractInvoiceApi.json
  29. 0 0
      hx-sale/src/main/java/com/fjhx/sale/a-json/ContractInvoiceDetailsApi.json
  30. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractInvoiceController.java
  31. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractInvoiceDetailsController.java
  32. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDetailsDto.java
  33. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDetailsSelectDto.java
  34. 25 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDto.java
  35. 22 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceSelectDto.java
  36. 43 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractInvoice.java
  37. 43 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractInvoiceDetails.java
  38. 34 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractInvoiceDetailsVo.java
  39. 32 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractInvoiceVo.java
  40. 43 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractInvoiceDetailsMapper.java
  41. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractInvoiceMapper.java
  42. 63 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractInvoiceDetailsService.java
  43. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractInvoiceService.java
  44. 79 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractInvoiceDetailsServiceImpl.java
  45. 168 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractInvoiceServiceImpl.java
  46. 1 13
      hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java
  47. 46 0
      hx-sale/src/main/resources/mapper/contract/ContractInvoiceDetailsMapper.xml
  48. 22 0
      hx-sale/src/main/resources/mapper/contract/ContractInvoiceMapper.xml
  49. 5 6
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

+ 20 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountPaymentRecordsController.java

@@ -0,0 +1,20 @@
+package com.fjhx.account.controller.account;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 打款记录 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@RestController
+@RequestMapping("/accountPaymentRecords")
+public class AccountPaymentRecordsController {
+
+
+}

+ 1 - 2
hx-account/src/main/java/com/fjhx/account/controller/transaction/TransactionDepartmentController.java

@@ -3,7 +3,6 @@ package com.fjhx.account.controller.transaction;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.transaction.dto.TransactionDepartmentDto;
 import com.fjhx.account.entity.transaction.dto.TransactionDepartmentSelectDto;
-import com.fjhx.account.entity.transaction.po.TransactionDepartment;
 import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
 import com.fjhx.account.service.transaction.TransactionDepartmentService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
@@ -31,7 +30,7 @@ public class TransactionDepartmentController {
      * 往来单位列表
      */
     @GetMapping("/list")
-    public List<TransactionDepartment> list() {
+    public List<TransactionDepartmentVo> list() {
         return transactionDepartmentService.getList();
     }
 

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java

@@ -48,4 +48,9 @@ public class AccountPaymentDto extends AccountPayment {
      */
     private Long transactionDeptId;
 
+    /**
+     * 往来单位类型 0往来单位 1多公司
+     */
+    private Integer deptType;
+
 }

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录新增编辑入参实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsDto extends AccountPaymentRecords {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentRecordsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录列表查询入参实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsSelectDto extends BaseSelectDto {
+
+}

+ 1 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/enums/PaymentStatusEnum.java

@@ -8,6 +8,7 @@ import java.util.Map;
 //打款状态
 public enum PaymentStatusEnum {
     UNDER_REVIEW("20", "未打款"),
+    PARTIAL("15", "部分打款"),
     REJECT("10", "已打款"),
     ;
     private String key;

+ 54 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountPaymentRecords.java

@@ -0,0 +1,54 @@
+package com.fjhx.account.entity.account.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 打款记录
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+@TableName("account_payment_records")
+public class AccountPaymentRecords extends BasePo {
+
+    /**
+     * 打款id
+     */
+    private Long accountPaymentId;
+
+    /**
+     * 打款账户id
+     */
+    private Long accountManagementId;
+    /**
+     * 币种
+     */
+    private String currency;
+    /**
+     * 打款金额
+     */
+    private BigDecimal amount;
+    /**
+     * 打款时间
+     */
+    private Date expensesTime;
+    /**
+     * 是否往来
+     */
+    private Integer isTransaction;
+    /**
+     * 摘要
+     */
+    private String remark;
+
+}

+ 10 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java

@@ -115,4 +115,14 @@ public class AccountRunningWater extends BasePo {
      */
     private Long transactionDeptId;
 
+    /**
+     * 往来单位类型 0往来单位 1多公司
+     */
+    private Integer deptType;
+
+    /**
+     * 打款记录id
+     */
+    private Long accountPaymentRecordsId;
+
 }

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountPaymentRecordsVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.account.vo;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 打款记录列表查询返回值实体
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Getter
+@Setter
+public class AccountPaymentRecordsVo extends AccountPaymentRecords {
+
+}

+ 10 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java

@@ -57,4 +57,14 @@ public class Transaction extends BasePo {
 
     private Long accountRunningWaterId;
 
+    /**
+     * 归属公司
+     */
+    private Long corporationId;
+
+    /**
+     * 往来单位类型 0往来单位 1多公司
+     */
+    private Integer deptType;
+
 }

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionDepartmentVo.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class TransactionDepartmentVo extends TransactionDepartment {
 
+    /**
+     * 单位类型 0往来单位 1多公司
+     */
+    private Integer deptType;
+
 }

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/entity/transaction/vo/TransactionVo.java

@@ -24,4 +24,9 @@ public class TransactionVo extends Transaction {
      */
     private String accountName;
 
+    /**
+     * 归属公司 名称
+     */
+    private String corporationName;
+
 }

+ 3 - 2
hx-account/src/main/java/com/fjhx/account/flow/AccountRequestFundsFlow.java

@@ -198,16 +198,17 @@ public class AccountRequestFundsFlow extends FlowDelegate {
         accountPayment.setInterbankNumber(accountRequestFunds.getInterbankNumber());
         accountPayment.setDataUser(accountRequestFunds.getCreateUser());
         accountPayment.setApplyForTime(accountRequestFunds.getCreateTime());
+        accountPayment.setAmount(BigDecimal.ZERO);
 
         // 如果是核销 核销数据审批通过后,根据“核销总额 - 预支总额”生成“待打款”数据
         if ("3".equals(accountRequestFunds.getType())) {
             BigDecimal subtract = accountRequestFunds.getTotal().subtract(accountRequestFunds.getAdvanceAmounts());
-            accountPayment.setAmount(subtract);
+            accountPayment.setIncomeAmount(subtract);
             if (subtract.compareTo(BigDecimal.ZERO) <= 0) {//不生成打款数据
                 return;
             }
         } else {
-            accountPayment.setAmount(accountRequestFunds.getTotal());
+            accountPayment.setIncomeAmount(accountRequestFunds.getTotal());
         }
 
         accountPaymentService.save(accountPayment);

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountPaymentRecordsMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.mapper.account;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+
+
+/**
+ * <p>
+ * 打款记录 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+public interface AccountPaymentRecordsMapper extends BaseMapper<AccountPaymentRecords> {
+
+}

+ 17 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountPaymentRecordsService.java

@@ -0,0 +1,17 @@
+package com.fjhx.account.service.account;
+
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 打款记录 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+public interface AccountPaymentRecordsService extends BaseService<AccountPaymentRecords> {
+
+}

+ 21 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentRecordsServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.account.service.account.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.entity.account.po.AccountPaymentRecords;
+import com.fjhx.account.mapper.account.AccountPaymentRecordsMapper;
+import com.fjhx.account.service.account.AccountPaymentRecordsService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 打款记录 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-04
+ */
+@Service
+public class AccountPaymentRecordsServiceImpl extends ServiceImpl<AccountPaymentRecordsMapper, AccountPaymentRecords> implements AccountPaymentRecordsService {
+
+}

+ 64 - 24
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -11,20 +11,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.dto.AccountPaymentDto;
 import com.fjhx.account.entity.account.dto.AccountRequestFundsSelectDto;
 import com.fjhx.account.entity.account.enums.PaymentStatusEnum;
-import com.fjhx.account.entity.account.po.AccountManagement;
-import com.fjhx.account.entity.account.po.AccountPayment;
-import com.fjhx.account.entity.account.po.AccountRemainder;
-import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.account.po.*;
 import com.fjhx.account.entity.account.vo.AccountPaymentVo;
 import com.fjhx.account.entity.transaction.po.Transaction;
 import com.fjhx.account.mapper.account.AccountPaymentMapper;
-import com.fjhx.account.service.account.AccountManagementService;
-import com.fjhx.account.service.account.AccountPaymentService;
-import com.fjhx.account.service.account.AccountRemainderService;
-import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.account.*;
 import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.exception.ServiceException;
@@ -33,6 +28,7 @@ import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -66,6 +62,8 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
     @Autowired
     private TransactionService transactionService;
+    @Autowired
+    private AccountPaymentRecordsService accountPaymentRecordsService;
 
     @Override
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
@@ -139,19 +137,19 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         AccountPayment AccountPayment = baseMapper.detail(id);
         AccountPaymentVo result = BeanUtil.toBean(AccountPayment, AccountPaymentVo.class);
 
-        if (ObjectUtil.isNotEmpty(result.getAccountManagementId())){
+        if (ObjectUtil.isNotEmpty(result.getAccountManagementId())) {
             //查询实际打款的付款账户名称;
             AccountManagement accountManagement = accountManagementService.getById(result.getAccountManagementId());
-            if (ObjectUtil.isNotEmpty(accountManagement)){
+            if (ObjectUtil.isNotEmpty(accountManagement)) {
                 result.setAccountManagementName(accountManagement.getName());
             }
 
         }
 
-        if (ObjectUtil.isNotEmpty(result.getBusinessManagementId())){
+        if (ObjectUtil.isNotEmpty(result.getBusinessManagementId())) {
             //查询业务中选中的付款账户名称;
             AccountManagement accountManagement = accountManagementService.getById(result.getBusinessManagementId());
-            if (ObjectUtil.isNotEmpty(accountManagement)){
+            if (ObjectUtil.isNotEmpty(accountManagement)) {
                 result.setBusinessManagementName(accountManagement.getName());
             }
 
@@ -161,11 +159,13 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
     /**
      * 打款功能
+     *
      * @param accountPaymentDto
      */
     @Override
     @DSTransactional
-    public void add(AccountPaymentDto accountPaymentDto) {
+    public synchronized void add(AccountPaymentDto accountPaymentDto) {
+        Assert.notEmpty(accountPaymentDto.getId(), "打款id不能为空");
 
         AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
                 .eq(AccountRemainder::getAccountManagementId, accountPaymentDto.getAccountManagementId())
@@ -181,9 +181,39 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
             throw new ServiceException("账户余额不足");
         }
 
-        // TODO 只要发起就是已打款(后期可能要修改)
-        accountPaymentDto.setStatus(PaymentStatusEnum.REJECT.getKey());
-        updateById(accountPaymentDto);
+        //刷新打款信息
+        AccountPayment oldAccountPayment = this.getById(accountPaymentDto.getId());
+        //如果是未打款把已打款金额改成0(修复旧数据)
+        if (oldAccountPayment.getStatus().equals(PaymentStatusEnum.UNDER_REVIEW.getKey())) {
+            oldAccountPayment.setAmount(BigDecimal.ZERO);
+        }
+        BigDecimal add = oldAccountPayment.getAmount().add(accountPaymentDto.getAmount());
+        if (add.compareTo(oldAccountPayment.getIncomeAmount()) > 0) {
+            throw new ServiceException("打款金额不能大于待打款金额");
+        }
+        //修改打款状态
+        if (add.compareTo(oldAccountPayment.getIncomeAmount()) >= 0) {
+            oldAccountPayment.setStatus(PaymentStatusEnum.REJECT.getKey());
+        } else {
+            oldAccountPayment.setStatus(PaymentStatusEnum.PARTIAL.getKey());
+        }
+        //赋值已打款金额
+        oldAccountPayment.setAmount(add);
+        //赋值最后一次打款时间、
+        oldAccountPayment.setExpensesTime(accountPaymentDto.getExpensesTime());
+        updateById(oldAccountPayment);
+
+        //创建打款记录
+        AccountPaymentRecords accountPaymentRecords = new AccountPaymentRecords();
+        accountPaymentRecords.setAccountPaymentId(accountPaymentDto.getId());
+        accountPaymentRecords.setAmount(accountPaymentDto.getAmount());
+
+        accountPaymentRecords.setAccountManagementId(accountPaymentDto.getAccountManagementId());
+        accountPaymentRecords.setCurrency(accountPaymentDto.getCurrency());
+        accountPaymentRecords.setExpensesTime(accountPaymentDto.getExpensesTime());
+        accountPaymentRecords.setIsTransaction(accountPaymentDto.getIsTransaction());
+        accountPaymentRecords.setRemark(accountPaymentDto.getRemark());
+        accountPaymentRecordsService.save(accountPaymentRecords);
 
         // 赋值变更金额
         accountRemainder.setChangeRemainder(accountPaymentDto.getAmount());
@@ -194,10 +224,10 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         accountRemainderService.updateById(accountRemainder);
 
         // 添加附件信息
-        ObsFileUtil.saveFile(accountPaymentDto.getFileList(), accountPaymentDto.getId());
+        ObsFileUtil.saveFile(accountPaymentDto.getFileList(), accountPaymentRecords.getId());
 
         // 添加资金流水表的数据
-        addAccountRunningWater(accountPaymentDto);
+        addAccountRunningWater(accountPaymentDto, accountPaymentRecords);
     }
 
     @Override
@@ -213,25 +243,27 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     /**
      * 添加资金流水表的数据
      */
-    private void  addAccountRunningWater(AccountPaymentDto accountPaymentDto){
+    private void addAccountRunningWater(AccountPaymentDto accountPaymentDto, AccountPaymentRecords accountPaymentRecords) {
 
         AccountRunningWater accountRunningWater = new AccountRunningWater();
-        accountRunningWater.setAccountManagementId(accountPaymentDto.getAccountManagementId());
+        accountRunningWater.setAccountManagementId(accountPaymentRecords.getAccountManagementId());
         //打款的状态都是支出
         accountRunningWater.setStatus("20");
-        accountRunningWater.setAmount(accountPaymentDto.getAmount());
-        accountRunningWater.setCurrency(accountPaymentDto.getCurrency());
+        accountRunningWater.setAmount(accountPaymentRecords.getAmount());
+        accountRunningWater.setCurrency(accountPaymentRecords.getCurrency());
         accountRunningWater.setOpeningBank(accountPaymentDto.getOpeningBank());
         accountRunningWater.setAccountOpening(accountPaymentDto.getAccountOpening());
         accountRunningWater.setName(accountPaymentDto.getName());
-        accountRunningWater.setTransactionTime(accountPaymentDto.getExpensesTime());
-        accountRunningWater.setRemarks(accountPaymentDto.getRemark());
+        accountRunningWater.setTransactionTime(accountPaymentRecords.getExpensesTime());
+        accountRunningWater.setRemarks(accountPaymentRecords.getRemark());
         accountRunningWater.setBusinessId(accountPaymentDto.getId());
+        accountRunningWater.setAccountPaymentRecordsId(accountPaymentRecords.getId());
         //添加流水类型
         accountRunningWater.setType("10");
         //赋值是否往来
         accountRunningWater.setIsTransaction(accountPaymentDto.getIsTransaction());
         accountRunningWater.setTransactionDeptId(accountPaymentDto.getTransactionDeptId());
+        accountRunningWater.setDeptType(accountRunningWater.getDeptType());
         accountRunningWaterService.save(accountRunningWater);
 
         //如果是往来
@@ -246,6 +278,14 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
             transaction.setAccountId(accountRunningWater.getAccountManagementId());
             transaction.setRemark(accountRunningWater.getRemarks());
             transaction.setAccountRunningWaterId(accountRunningWater.getId());
+
+            Assert.notEmpty(accountPaymentDto.getDeptType(), "往来单位类型不能为空");
+            transaction.setDeptType(accountPaymentDto.getDeptType());
+
+            //赋值归属公司
+            AccountManagement accountManagement = accountManagementService.getById(accountPaymentRecords.getAccountManagementId());
+            transaction.setCorporationId(accountManagement.getCorporationId());
+
             transactionService.save(transaction);
         }
 

+ 63 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -250,6 +250,14 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
             transaction.setAccountId(dto.getAccountManagementId());
             transaction.setRemark(dto.getRemarks());
             transaction.setAccountRunningWaterId(dto.getId());
+
+            Assert.notEmpty(dto.getDeptType(), "往来单位类型不能为空");
+            transaction.setDeptType(dto.getDeptType());
+
+            //赋值归属公司
+            AccountManagement accountManagement = accountManagementService.getById(dto.getAccountManagementId());
+            transaction.setCorporationId(accountManagement.getCorporationId());
+
             transactionService.save(transaction);
         }
 
@@ -459,11 +467,15 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     @DSTransactional
     @Override
     public void internalTransfer(AccountRunningWaterDto dto) {
+        AccountManagement outAccountManagement = accountManagementService.getById(dto.getAccountManagementId());
+        AccountManagement inAccountManagement = accountManagementService.getById(dto.getInAccountManagementId());
+
         //生成转出流水
         dto.setStatus("20");//支出
         dto.setType("50");//内部转账
         //操作余额
         changeRemainder(dto);
+
         this.save(dto);
 
         //如果手续费不为0生成手续费
@@ -497,7 +509,58 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         inAccountRunningWater.setCurrency(dto.getInCurrency());
         //操作余额
         changeRemainder(inAccountRunningWater);
+
         this.save(inAccountRunningWater);
+
+        //如果是往来
+        if (ObjectUtil.isNotEmpty(dto.getIsTransaction()) && 1 == dto.getIsTransaction()) {
+            dto.setDeptType(1);
+            dto.setTransactionDeptId(inAccountManagement.getCorporationId());
+            this.updateById(dto);
+            inAccountRunningWater.setDeptType(1);
+            inAccountRunningWater.setTransactionDeptId(outAccountManagement.getCorporationId());
+            this.updateById(inAccountRunningWater);
+
+            //转入转出归属公司不同生成往来记录
+            if (inAccountManagement.getCorporationId() != outAccountManagement.getCorporationId()) {
+                //创建转入往来数据
+                Transaction transaction = new Transaction();
+                transaction.setType(1);//支出
+                transaction.setCurrency(dto.getCurrency());
+                transaction.setAmount(dto.getAmount());
+                transaction.setIsFlowingWater(1);
+                transaction.setAccountId(dto.getAccountManagementId());
+                transaction.setRemark(dto.getRemarks());
+                transaction.setAccountRunningWaterId(dto.getId());
+                transaction.setDeptType(1);
+
+                //赋值归属公司(转出账户归属公司)
+                transaction.setCorporationId(outAccountManagement.getCorporationId());
+                //赋值往来单位(转入账户归属公司)
+                transaction.setDepartmentId(inAccountManagement.getCorporationId());
+
+                transactionService.save(transaction);
+
+                //创建转出往来数据
+                Transaction transaction1 = new Transaction();
+                transaction1.setType(0);//收入
+                transaction1.setCurrency(inAccountRunningWater.getCurrency());
+                transaction1.setAmount(inAccountRunningWater.getAmount());
+                transaction1.setIsFlowingWater(1);
+                transaction1.setAccountId(inAccountRunningWater.getAccountManagementId());
+                transaction1.setRemark(inAccountRunningWater.getRemarks());
+                transaction1.setAccountRunningWaterId(inAccountRunningWater.getId());
+                transaction1.setDeptType(1);
+
+                //赋值归属公司(转入账户归属公司)
+                transaction1.setCorporationId(inAccountManagement.getCorporationId());
+                //赋值往来单位(转出账户归属公司)
+                transaction1.setDepartmentId(outAccountManagement.getCorporationId());
+
+                transactionService.save(transaction1);
+            }
+        }
+
     }
 
     /**

+ 1 - 1
hx-account/src/main/java/com/fjhx/account/service/transaction/TransactionDepartmentService.java

@@ -22,7 +22,7 @@ public interface TransactionDepartmentService extends BaseService<TransactionDep
     /**
      * 往来单位列表
      */
-    List<TransactionDepartment> getList();
+    List<TransactionDepartmentVo> getList();
 
     /**
      * 往来单位分页

+ 19 - 2
hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionDepartmentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.account.service.transaction.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.transaction.dto.TransactionDepartmentDto;
@@ -8,7 +9,10 @@ import com.fjhx.account.entity.transaction.po.TransactionDepartment;
 import com.fjhx.account.entity.transaction.vo.TransactionDepartmentVo;
 import com.fjhx.account.mapper.transaction.TransactionDepartmentMapper;
 import com.fjhx.account.service.transaction.TransactionDepartmentService;
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.service.corporation.CorporationService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -24,10 +28,23 @@ import java.util.List;
 @Service
 public class TransactionDepartmentServiceImpl extends ServiceImpl<TransactionDepartmentMapper, TransactionDepartment> implements TransactionDepartmentService {
 
+    @Autowired
+    private CorporationService corporationService;
+
     @Override
-    public List<TransactionDepartment> getList() {
+    public List<TransactionDepartmentVo> getList() {
         List<TransactionDepartment> list = this.list();
-        return list;
+        List<TransactionDepartmentVo> transactionDepartmentVos = BeanUtil.copyToList(list, TransactionDepartmentVo.class);
+        transactionDepartmentVos.forEach(item -> item.setDeptType(0));
+        List<Corporation> corporationList = corporationService.list();
+        for (Corporation corporation : corporationList) {
+            TransactionDepartmentVo transactionDepartmentVo = new TransactionDepartmentVo();
+            transactionDepartmentVo.setId(corporation.getId());
+            transactionDepartmentVo.setName(corporation.getName());
+            transactionDepartmentVo.setDeptType(1);
+            transactionDepartmentVos.add(transactionDepartmentVo);
+        }
+        return transactionDepartmentVos;
     }
 
     @Override

+ 7 - 0
hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java

@@ -15,6 +15,7 @@ import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.account.service.transaction.TransactionDepartmentService;
 import com.fjhx.account.service.transaction.TransactionService;
+import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.utils.ExchangeRateUtil;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +42,8 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
     private TransactionDepartmentService transactionDepartmentService;
     @Autowired
     private AccountRunningWaterService accountRunningWaterService;
+    @Autowired
+    private CorporationService corporationService;
 
     @Override
     public Page<TransactionVo> getPage(TransactionSelectDto dto) {
@@ -71,6 +74,10 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
         accountManagementService.attributeAssign(records, TransactionVo::getAccountId, (item, account) -> {
             item.setAccountName(account.getName());
         });
+        //赋值归属公司名称
+        corporationService.attributeAssign(records, TransactionVo::getCorporationId, (item, corporation) -> {
+            item.setCorporationName(corporation.getName());
+        });
         return page;
     }
 

+ 53 - 23
hx-account/src/main/java/com/fjhx/account/service/write/impl/WriteOffRecordsServiceImpl.java

@@ -5,17 +5,15 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.account.entity.account.po.AccountPayment;
-import com.fjhx.account.entity.account.po.AccountRemainder;
-import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.account.po.*;
+import com.fjhx.account.entity.transaction.po.Transaction;
 import com.fjhx.account.entity.write.dto.WriteOffRecordsDto;
 import com.fjhx.account.entity.write.dto.WriteOffRecordsSelectDto;
 import com.fjhx.account.entity.write.po.WriteOffRecords;
 import com.fjhx.account.entity.write.vo.WriteOffRecordsVo;
 import com.fjhx.account.mapper.write.WriteOffRecordsMapper;
-import com.fjhx.account.service.account.AccountPaymentService;
-import com.fjhx.account.service.account.AccountRemainderService;
-import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.account.*;
+import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.account.service.write.WriteOffRecordsService;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.utils.Assert;
@@ -26,6 +24,7 @@ import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -47,6 +46,12 @@ public class WriteOffRecordsServiceImpl extends ServiceImpl<WriteOffRecordsMappe
     private AccountRemainderService accountRemainderService;
     @Autowired
     private AccountRunningWaterService accountRunningWaterService;
+    @Autowired
+    private AccountPaymentRecordsService accountPaymentRecordsService;
+    @Autowired
+    private AccountManagementService accountManagementService;
+    @Autowired
+    private TransactionService transactionService;
 
     @Override
     public Page<WriteOffRecordsVo> getPage(WriteOffRecordsSelectDto dto) {
@@ -73,28 +78,53 @@ public class WriteOffRecordsServiceImpl extends ServiceImpl<WriteOffRecordsMappe
         Assert.notEmpty(accountPayment, "查询不到打款信息");
         //修改打款状态为未打款
         accountPayment.setStatus("20");
+        //清空已打款金额
+        accountPayment.setAmount(BigDecimal.ZERO);
         accountPaymentService.updateById(accountPayment);
-        //清理历史附件
-        ObsFileUtil.removeFile(accountPayment.getId());
-        //赋值之前的打款时间
+
+        //赋值最后一次打款时间
         writeOffRecordsDto.setAccountPaymentDate(accountPayment.getExpensesTime());
         this.save(writeOffRecordsDto);
-        //根据币种回滚余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
-                .eq(AccountRemainder::getAccountManagementId, accountPayment.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountPayment.getCurrency()));
-        // 如果不存在这条数据则返回币种不存在
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
-        }
-        accountRemainderService.update(q -> q
-                .eq(AccountRemainder::getId, accountRemainder.getId())
-                .setSql("remainder = remainder + " + accountPayment.getAmount())
+
+        List<AccountPaymentRecords> accountPaymentRecordsList = accountPaymentRecordsService.list(
+                q -> q.eq(AccountPaymentRecords::getAccountPaymentId, accountPayment.getId())
         );
+        for (AccountPaymentRecords accountPaymentRecords : accountPaymentRecordsList) {
+            //清理历史附件
+            ObsFileUtil.removeFile(accountPaymentRecords.getId());
+            AccountManagement accountManagement = accountManagementService.getById(accountPaymentRecords.getAccountManagementId());
+            if (ObjectUtil.isEmpty(accountManagement)) {
+                throw new ServiceException("资金账户不存在:" + accountPaymentRecords.getAccountManagementId());
+            }
+            //根据币种回滚余额
+            AccountRemainder accountRemainder = accountRemainderService.getOne(Wrappers.<AccountRemainder>lambdaQuery()
+                    .eq(AccountRemainder::getAccountManagementId, accountPaymentRecords.getAccountManagementId())
+                    .eq(AccountRemainder::getCurrency, accountPaymentRecords.getCurrency()));
+            // 如果不存在这条数据则返回币种不存在
+            if (ObjectUtil.isEmpty(accountRemainder)) {
+                String format = String.format("账户%s不存在币种(%s),请前往资金账户添加", accountManagement.getName(), accountPaymentRecords.getCurrency());
+                throw new ServiceException(format);
+            }
+            accountRemainderService.update(q -> q
+                    .eq(AccountRemainder::getId, accountRemainder.getId())
+                    .setSql("remainder = remainder + " + accountPaymentRecords.getAmount())
+            );
+        }
         //删除打款对应的流水
-        AccountRunningWater accountRunningWater = accountRunningWaterService.getOne(q -> q.eq(AccountRunningWater::getBusinessId, accountPayment.getId()));
-        Assert.notEmpty(accountRunningWater, "查询不到打款流水信息");
-        accountRunningWaterService.removeById(accountRunningWater);
+        List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(q -> q.eq(AccountRunningWater::getBusinessId, accountPayment.getId()));
+        Assert.notEmpty(accountRunningWaterList, "查询不到打款流水信息");
+        for (AccountRunningWater accountRunningWater : accountRunningWaterList) {
+            //删除往来信息
+            Integer isTransaction = accountRunningWater.getIsTransaction();
+            isTransaction = ObjectUtil.isEmpty(isTransaction) ? 0 : isTransaction;
+            if (1 == isTransaction) {
+                Transaction transaction = transactionService.getOne(q -> q.eq(Transaction::getAccountRunningWaterId, accountRunningWater.getId()));
+                if (ObjectUtil.isNotEmpty(transaction)) {
+                    transactionService.removeById(transaction.getId());
+                }
+            }
+            accountRunningWaterService.removeById(accountRunningWater);
+        }
     }
 
 }

+ 4 - 0
hx-account/src/main/resources/mapper/account/AccountPaymentRecordsMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.account.mapper.account.AccountPaymentRecordsMapper">
+</mapper>

+ 5 - 0
hx-customer/src/main/java/com/fjhx/customer/entity/customer/vo/CustomerVo.java

@@ -56,4 +56,9 @@ public class CustomerVo extends Customer implements SetCustomizeAreaName {
      * 客户状态 字典值
      */
     private String statusVal;
+
+    /**
+     * 国旗
+     */
+    private String countryIcon;
 }

+ 14 - 2
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java

@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.area.entity.po.CustomizeArea;
+import com.fjhx.area.service.CustomizeAreaService;
 import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.coding.bo.CustomerCodeAndCountryId;
@@ -67,6 +69,8 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
 
     @Autowired
     private DictTenantDataService dictTenantDataService;
+    @Autowired
+    private CustomizeAreaService customizeAreaService;
 
 
     /**
@@ -177,8 +181,8 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
     @Override
     public CustomerVo detail(Long id) {
         //查询客户表的信息
-        Customer Customer = this.getById(id);
-        CustomerVo result = BeanUtil.toBean(Customer, CustomerVo.class);
+        Customer customer = this.getById(id);
+        CustomerVo result = BeanUtil.toBean(customer, CustomerVo.class);
         if (ObjectUtil.isEmpty(result)) {
             throw new ServiceException("没有找到该用户信息");
         }
@@ -186,7 +190,15 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
         List<CustomerUser> customerUserList = customerUserService.list(Wrappers.<CustomerUser>lambdaQuery()
                 .eq(CustomerUser::getCustomerId, result.getId()));
         result.setCustomerUserList(customerUserList);
+        //赋值国省市信息
         CustomizeAreaUtil.setAreaName(result);
+        //赋值国旗信息
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        CustomizeArea country = customizeAreaService.getById(result.getCountryId());
+        DynamicDataSourceContextHolder.poll();
+        if (ObjectUtil.isNotEmpty(country)) {
+            result.setCountryIcon(country.getIcon());
+        }
         return result;
     }
 

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java

@@ -156,7 +156,7 @@ public class PayFlow extends FlowDelegate {
             payment.setType(PaymentTypeEnum.REJECT.getKey());
             payment.setStatus(PaymentStatusEnum.UNDER_REVIEW.getKey());
             payment.setCorporationId(pay.getCorporationId());
-            payment.setAmount(pay.getAmount());
+            payment.setAmount(BigDecimal.ZERO);
             payment.setIncomeAmount(pay.getAmount());
             payment.setName(pay.getName());
             payment.setDataUser(pay.getCreateUser());

+ 4 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/invoice/impl/InvoiceServiceImpl.java

@@ -20,9 +20,12 @@ import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
 import com.fjhx.purchase.service.invoice.InvoiceService;
 import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.annotation.LogicIgnore;
+import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
+import lombok.experimental.Delegate;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -137,6 +140,7 @@ public class InvoiceServiceImpl extends ServiceImpl<InvoiceMapper, Invoice> impl
      */
     @Override
     @DSTransactional
+    @LogicIgnore
     public void edit(Invoice invoice) {
         this.updateById(invoice);
         invoiceDetailsService.remove(Wrappers.<InvoiceDetails>query().lambda().eq(InvoiceDetails::getInvoiceId,invoice.getId()));

File diff suppressed because it is too large
+ 0 - 0
hx-sale/src/main/java/com/fjhx/sale/a-json/ContractInvoiceApi.json


File diff suppressed because it is too large
+ 0 - 0
hx-sale/src/main/java/com/fjhx/sale/a-json/ContractInvoiceDetailsApi.json


+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractInvoiceController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractInvoiceService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 合同发票管理 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@RestController
+@RequestMapping("/contractInvoice")
+public class ContractInvoiceController {
+
+    @Autowired
+    private ContractInvoiceService contractInvoiceService;
+
+    /**
+     * 合同发票管理分页
+     */
+    @PostMapping("/page")
+    public Page<ContractInvoiceVo> page(@RequestBody ContractInvoiceSelectDto dto) {
+        return contractInvoiceService.getPage(dto);
+    }
+
+    /**
+     * 合同发票管理明细
+     */
+    @PostMapping("/detail")
+    public ContractInvoiceVo detail(@RequestBody BaseSelectDto dto) {
+        return contractInvoiceService.detail(dto.getId());
+    }
+
+    /**
+     * 合同发票管理新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractInvoiceDto contractInvoiceDto) {
+        contractInvoiceService.add(contractInvoiceDto);
+    }
+
+    /**
+     * 合同发票管理编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractInvoiceDto contractInvoiceDto) {
+        contractInvoiceService.edit(contractInvoiceDto);
+    }
+
+    /**
+     * 合同发票管理删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractInvoiceService.delete(dto.getId());
+    }
+
+}

+ 68 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractInvoiceDetailsController.java

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractInvoiceDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 合同发票明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@RestController
+@RequestMapping("/contractInvoiceDetails")
+public class ContractInvoiceDetailsController {
+
+    @Autowired
+    private ContractInvoiceDetailsService contractInvoiceDetailsService;
+
+    /**
+     * 合同发票明细分页
+     */
+    @PostMapping("/page")
+    public Page<ContractInvoiceDetailsVo> page(@RequestBody ContractInvoiceDetailsSelectDto dto) {
+        return contractInvoiceDetailsService.getPage(dto);
+    }
+
+    /**
+     * 合同发票明细明细
+     */
+    @PostMapping("/detail")
+    public ContractInvoiceDetailsVo detail(@RequestBody BaseSelectDto dto) {
+        return contractInvoiceDetailsService.detail(dto.getId());
+    }
+
+    /**
+     * 合同发票明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractInvoiceDetailsDto contractInvoiceDetailsDto) {
+        contractInvoiceDetailsService.add(contractInvoiceDetailsDto);
+    }
+
+    /**
+     * 合同发票明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractInvoiceDetailsDto contractInvoiceDetailsDto) {
+        contractInvoiceDetailsService.edit(contractInvoiceDetailsDto);
+    }
+
+    /**
+     * 合同发票明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractInvoiceDetailsService.delete(dto.getId());
+    }
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同发票明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceDetailsDto extends ContractInvoiceDetails {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDetailsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同发票明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceDetailsSelectDto extends BaseSelectDto {
+
+}

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoice;
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 合同发票管理新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceDto extends ContractInvoice {
+
+    /**
+     * 发票列表
+     */
+    private List<ContractInvoiceDetails> invoiceDetailsList;
+
+}

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractInvoiceSelectDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 合同发票管理列表查询入参实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceSelectDto extends BaseSelectDto {
+
+    /**
+     * 发票类型
+     */
+    private Integer invoiceType;
+
+}

+ 43 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractInvoice.java

@@ -0,0 +1,43 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 合同发票管理
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+@TableName("contract_invoice")
+public class ContractInvoice extends BasePo {
+
+    /**
+     * 供应商ID
+     */
+    private Long customerId;
+
+    /**
+     * 开票金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 发票类型 字典invoice_type
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 43 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractInvoiceDetails.java

@@ -0,0 +1,43 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 合同发票明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+@TableName("contract_invoice_details")
+public class ContractInvoiceDetails extends BasePo {
+
+    /**
+     * 发票管理id
+     */
+    private Long invoiceId;
+
+    /**
+     * 采购合同id
+     */
+    private Long contractId;
+
+    /**
+     * 关联金额
+     */
+    private BigDecimal money;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 34 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractInvoiceDetailsVo.java

@@ -0,0 +1,34 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 合同发票明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceDetailsVo extends ContractInvoiceDetails {
+
+    /**
+     * 合同编码
+     */
+    private String contractCode;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 总金额
+     */
+    private BigDecimal sumMoney;
+
+}

+ 32 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractInvoiceVo.java

@@ -0,0 +1,32 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoice;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 合同发票管理列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Getter
+@Setter
+public class ContractInvoiceVo extends ContractInvoice {
+
+    private List<ContractInvoiceDetailsVo> contractInvoiceDetailsVoList;
+
+    private String customerName;
+
+    /**
+     * 合同号多个
+     */
+    private String contractCodes;
+
+    /**
+     * 用户名
+     */
+    private String userName;
+}

+ 43 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractInvoiceDetailsMapper.java

@@ -0,0 +1,43 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 合同发票明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+public interface ContractInvoiceDetailsMapper extends BaseMapper<ContractInvoiceDetails> {
+
+    /**
+     * 合同发票明细分页
+     */
+    Page<ContractInvoiceDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractInvoiceDetails> wrapper);
+
+    /**
+     * 根据发票ID查询明细
+     * @param invoiceId
+     * @return
+     */
+    List<ContractInvoiceDetailsVo> getDetail(@Param("invoiceId")Long invoiceId);
+
+    /**
+     * 根据合同ids查询总发票金额
+     * @param contractIds
+     * @return
+     */
+    List<ContractInvoiceDetailsVo> getSumMoneyByContractIds(@Param("contractIds") List<Long> contractIds);
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractInvoiceMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 合同发票管理 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+public interface ContractInvoiceMapper extends BaseMapper<ContractInvoice> {
+
+    /**
+     * 合同发票管理分页
+     */
+    Page<ContractInvoiceVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractInvoice> wrapper);
+
+}

+ 63 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractInvoiceDetailsService.java

@@ -0,0 +1,63 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 合同发票明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+public interface ContractInvoiceDetailsService extends BaseService<ContractInvoiceDetails> {
+
+    /**
+     * 合同发票明细分页
+     */
+    Page<ContractInvoiceDetailsVo> getPage(ContractInvoiceDetailsSelectDto dto);
+
+    /**
+     * 合同发票明细明细
+     */
+    ContractInvoiceDetailsVo detail(Long id);
+
+    /**
+     * 合同发票明细新增
+     */
+    void add(ContractInvoiceDetailsDto contractInvoiceDetailsDto);
+
+    /**
+     * 合同发票明细编辑
+     */
+    void edit(ContractInvoiceDetailsDto contractInvoiceDetailsDto);
+
+    /**
+     * 合同发票明细删除
+     */
+    void delete(Long id);
+
+
+    /**
+     * 根据发票ID查询明细
+     * @param invoiceId
+     * @return
+     */
+    List<ContractInvoiceDetailsVo> getDetail(Long invoiceId);
+
+    /**
+     * 根据合同ids查询总发票金额
+     * @param contractIds
+     * @return
+     */
+    List<ContractInvoiceDetailsVo> getSumMoneyByContractIds(List<Long> contractIds);
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractInvoiceService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoice;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDto;
+
+
+/**
+ * <p>
+ * 合同发票管理 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+public interface ContractInvoiceService extends BaseService<ContractInvoice> {
+
+    /**
+     * 合同发票管理分页
+     */
+    Page<ContractInvoiceVo> getPage(ContractInvoiceSelectDto dto);
+
+    /**
+     * 合同发票管理明细
+     */
+    ContractInvoiceVo detail(Long id);
+
+    /**
+     * 合同发票管理新增
+     */
+    void add(ContractInvoiceDto contractInvoiceDto);
+
+    /**
+     * 合同发票管理编辑
+     */
+    void edit(ContractInvoiceDto contractInvoiceDto);
+
+    /**
+     * 合同发票管理删除
+     */
+    void delete(Long id);
+
+}

+ 79 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractInvoiceDetailsServiceImpl.java

@@ -0,0 +1,79 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import com.fjhx.sale.mapper.contract.ContractInvoiceDetailsMapper;
+import com.fjhx.sale.service.contract.ContractInvoiceDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDetailsDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 合同发票明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Service
+public class ContractInvoiceDetailsServiceImpl extends ServiceImpl<ContractInvoiceDetailsMapper, ContractInvoiceDetails> implements ContractInvoiceDetailsService {
+
+    @Override
+    public Page<ContractInvoiceDetailsVo> getPage(ContractInvoiceDetailsSelectDto dto) {
+        IWrapper<ContractInvoiceDetails> wrapper = getWrapper();
+        wrapper.orderByDesc("cid", ContractInvoiceDetails::getId);
+        Page<ContractInvoiceDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractInvoiceDetailsVo detail(Long id) {
+        ContractInvoiceDetails ContractInvoiceDetails = this.getById(id);
+        ContractInvoiceDetailsVo result = BeanUtil.toBean(ContractInvoiceDetails, ContractInvoiceDetailsVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractInvoiceDetailsDto contractInvoiceDetailsDto) {
+        this.save(contractInvoiceDetailsDto);
+    }
+
+    @Override
+    public void edit(ContractInvoiceDetailsDto contractInvoiceDetailsDto) {
+        this.updateById(contractInvoiceDetailsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 根据发票查询明细
+     * @param invoiceId
+     * @return
+     */
+    @Override
+    public List<ContractInvoiceDetailsVo> getDetail(Long invoiceId) {
+        return baseMapper.getDetail(invoiceId);
+    }
+
+    /**
+     * getSumMoneyByContractIds
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public List<ContractInvoiceDetailsVo> getSumMoneyByContractIds(List<Long> contractIds) {
+        return baseMapper.getSumMoneyByContractIds(contractIds);
+    }
+
+}

+ 168 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractInvoiceServiceImpl.java

@@ -0,0 +1,168 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.customer.entity.customer.po.Customer;
+import com.fjhx.customer.entity.customer.vo.CustomerFollowRecordsVo;
+import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.purchase.entity.invoice.po.Invoice;
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
+import com.fjhx.purchase.entity.invoice.vo.InvoiceVo;
+import com.fjhx.sale.entity.contract.po.ContractInvoice;
+import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo;
+import com.fjhx.sale.mapper.contract.ContractInvoiceMapper;
+import com.fjhx.sale.service.contract.ContractInvoiceDetailsService;
+import com.fjhx.sale.service.contract.ContractInvoiceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.annotation.LogicIgnore;
+import com.ruoyi.common.annotation.TenantIgnore;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import com.ruoyi.system.utils.UserUtil;
+import lombok.experimental.Delegate;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractInvoiceVo;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractInvoiceDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 合同发票管理 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-09-08
+ */
+@Service
+public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMapper, ContractInvoice> implements ContractInvoiceService {
+
+    @Autowired
+    private ContractInvoiceDetailsService contractInvoiceDetailsService;
+
+    @Autowired
+    private CustomerService customerService;
+    /**
+     * 分页
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<ContractInvoiceVo> getPage(ContractInvoiceSelectDto dto) {
+        IWrapper<ContractInvoice> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", Invoice::getCreateTime);
+        if(ObjectUtils.isNotEmpty(dto.getInvoiceType())){
+            wrapper.eq("t1", Invoice::getType,dto.getInvoiceType());
+        }
+        if(StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.keyword(dto.getKeyword(), new SqlField("t1.contractCodes"));
+        }
+        Page<ContractInvoiceVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<ContractInvoiceVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            //赋值客户名称
+            customerService.attributeAssign(list, ContractInvoiceVo::getCustomerId, (item, customer) -> {
+                item.setCustomerName(customer.getName());
+            });
+            UserUtil.assignmentNickName(list, BasePo::getCreateUser, ContractInvoiceVo::setUserName);
+        }
+        return page;
+    }
+
+    /**
+     * 明细
+     * @param id
+     * @return
+     */
+    @Override
+    public ContractInvoiceVo detail(Long id) {
+        ContractInvoice ContractInvoice = this.getById(id);
+        ContractInvoiceVo result = BeanUtil.toBean(ContractInvoice, ContractInvoiceVo.class);
+        if(ObjectUtils.isEmpty(result)){
+            throw new ServiceException("发票不存在");
+        }
+        Customer customer = customerService.getById(result.getCustomerId());
+        result.setCustomerName(ObjectUtils.isEmpty(customer)?"":customer.getName());
+        List<ContractInvoiceDetailsVo> invoiceDetailsVos = contractInvoiceDetailsService.getDetail(id);
+        List<Long> ids = invoiceDetailsVos.stream().distinct().map(ContractInvoiceDetailsVo::getContractId).collect(Collectors.toList());
+        List<ContractInvoiceDetailsVo> invoiceDetailsList = contractInvoiceDetailsService.getSumMoneyByContractIds(ids);
+        Map<Long, BigDecimal> invoiceMap = invoiceDetailsList.stream().collect(Collectors.toMap(ContractInvoiceDetailsVo::getContractId,ContractInvoiceDetailsVo::getSumMoney));
+        for(ContractInvoiceDetailsVo p:invoiceDetailsVos){
+            if(MapUtils.isNotEmpty(invoiceMap)){
+                p.setSumMoney(invoiceMap.getOrDefault(p.getContractId(), BigDecimal.ZERO));
+            }else{
+                p.setSumMoney(BigDecimal.ZERO);
+            }
+        }
+        result.setContractInvoiceDetailsVoList(invoiceDetailsVos);
+        return result;
+    }
+
+    /**
+     * 添加
+     * @param contractInvoiceDto
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ContractInvoiceDto contractInvoiceDto) {
+        this.save(contractInvoiceDto);
+        List<ContractInvoiceDetails> invoiceDetailsList = contractInvoiceDto.getInvoiceDetailsList();
+        if(CollectionUtils.isNotEmpty(invoiceDetailsList)){
+            invoiceDetailsList = invoiceDetailsList.stream()
+                    .peek(item -> item.setInvoiceId(contractInvoiceDto.getId()))
+                    .filter(item -> item.getMoney() != null && item.getMoney().compareTo(BigDecimal.ZERO) > 0)
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(invoiceDetailsList)) {
+                contractInvoiceDetailsService.saveBatch(invoiceDetailsList);
+            }
+        }
+    }
+
+    /**
+     * 修改
+     * @param contractInvoiceDto
+     */
+    @Override
+    @LogicIgnore
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(ContractInvoiceDto contractInvoiceDto) {
+        this.updateById(contractInvoiceDto);
+        contractInvoiceDetailsService.remove(Wrappers.<ContractInvoiceDetails>query().lambda().eq(ContractInvoiceDetails::getInvoiceId,contractInvoiceDto.getId()));
+        List<ContractInvoiceDetails> invoiceDetailsList = contractInvoiceDto.getInvoiceDetailsList();
+        if(CollectionUtils.isNotEmpty(invoiceDetailsList)){
+            for(ContractInvoiceDetails d:invoiceDetailsList){
+                d.setInvoiceId(contractInvoiceDto.getId());
+            }
+            contractInvoiceDetailsService.saveBatch(invoiceDetailsList);
+        }
+    }
+
+    /**
+     * 删除
+     * @param id
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+        contractInvoiceDetailsService.remove(Wrappers.<ContractInvoiceDetails>query().lambda().eq(ContractInvoiceDetails::getInvoiceId,id));
+    }
+
+}

+ 1 - 13
hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java

@@ -4,28 +4,20 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.account.entity.account.po.AccountPayment;
-import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
-import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
 import com.fjhx.account.entity.tax.po.TaxRefundDetails;
-import com.fjhx.account.service.account.AccountPaymentService;
 import com.fjhx.account.service.account.AccountRequestFundsDetailService;
-import com.fjhx.account.service.account.AccountRequestFundsService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.customer.service.customer.CustomerService;
-import com.fjhx.flow.enums.FlowStatusEnum;
 import com.fjhx.purchase.entity.pay.po.Pay;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.service.pay.PayDetailService;
-import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.sale.entity.claim.po.ClaimContract;
 import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
@@ -33,15 +25,12 @@ import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
-import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
 import com.fjhx.sale.entity.statement.vo.ProfitSettlementVo;
 import com.fjhx.sale.service.claim.ClaimContractService;
-import com.fjhx.sale.service.claim.ClaimService;
 import com.fjhx.sale.service.contract.ContractService;
 import com.fjhx.sale.service.statement.SaleStatementService;
 import com.github.pagehelper.util.StringUtil;
-import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -87,7 +76,6 @@ public class SaleStatementServiceImpl implements SaleStatementService {
 
     @Override
     public Page<ProfitSettlementVo> getProfitSettlement(ProfitSettlementDto dto) {
-
         Page<ContractVo> contractPage = contractService.getProfitSettlement(dto);
         List<ContractVo> records = contractPage.getRecords();
         if (records.size() == 0) {
@@ -601,7 +589,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         BigDecimal totalExpensesSumAmount = BigDecimal.ZERO;
         BigDecimal grossProfitMargin = BigDecimal.ZERO;
         for (ProfitSettlementVo p : list) {
-            contractSumAmount = contractSumAmount.add(ObjectUtil.isEmpty(p.getContractAmount())?BigDecimal.ZERO:p.getContractAmount());//合同金额
+            contractSumAmount = contractSumAmount.add(ObjectUtil.isEmpty(p.getContractAmount())?BigDecimal.ZERO:p.getContractAmount().multiply(p.getRate()));//合同金额
             contractArrivalSumAmount = contractArrivalSumAmount.add(ObjectUtil.isEmpty(p.getContractArrival())?BigDecimal.ZERO:p.getContractArrival());//合同到账
             taxReturnMoneySumAmount = taxReturnMoneySumAmount.add(ObjectUtil.isEmpty(p.getTaxReturnMoney())?BigDecimal.ZERO:p.getTaxReturnMoney());//退税
             otherIncomeSumAmount = otherIncomeSumAmount.add(ObjectUtil.isEmpty(p.getOtherIncome())?BigDecimal.ZERO:p.getOtherIncome());//其他收入

+ 46 - 0
hx-sale/src/main/resources/mapper/contract/ContractInvoiceDetailsMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.sale.mapper.contract.ContractInvoiceDetailsMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo">
+        select
+            cid.id,
+            cid.invoice_id,
+            cid.contract_id,
+            cid.money,
+            cid.remark,
+            cid.create_user,
+            cid.create_time,
+            cid.update_user,
+            cid.update_time
+        from contract_invoice_details cid
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getDetail" resultType="com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo">
+        SELECT
+            t1.*,
+            t2.`code` AS contractCode,
+            t2.amount AS contractAmount
+        FROM
+            contract_invoice_details t1
+                LEFT JOIN contract t2 ON t1.contract_id = t2.id
+        WHERE invoice_id = #{invoiceId}
+    </select>
+
+    <select id="getSumMoneyByContractIds" resultType="com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo">
+        SELECT
+            contract_id,
+            IFNULL(SUM(money),0) AS sumMoney
+        FROM
+        contract_invoice_details
+        <where>
+            <if test="contractIds neq null and contractIds.size() > 0">
+                <foreach collection="contractIds" item="contractId" open="contract_id IN (" separator="," close=")">
+                    #{contractId}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY
+        contract_id
+    </select>
+</mapper>

+ 22 - 0
hx-sale/src/main/resources/mapper/contract/ContractInvoiceMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.sale.mapper.contract.ContractInvoiceMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractInvoiceVo">
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    t1.*,
+                    GROUP_CONCAT( t3.`code` ) AS contractCodes
+                FROM
+                    contract_invoice t1
+                        LEFT JOIN contract_invoice_details t2 ON t1.id = t2.invoice_id
+                        LEFT JOIN contract t3 ON t2.contract_id = t3.id
+                GROUP BY
+                    t1.id
+            ) t1
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 5 - 6
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -170,12 +170,10 @@
     </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_customer.customer bc ON cc.buy_corporation_id = bc.id
+        SELECT ifnull(sum(cc.amount), 0) amount,
+               bc.name                   corporationName
+        FROM contract cc
+                 LEFT JOIN bytesailing_customer.customer bc ON cc.buy_corporation_id = bc.id
             ${ew.customSqlSegment}
     </select>
 
@@ -247,6 +245,7 @@
                  LEFT JOIN bytesailing_account.account_management am
                            ON arw.account_management_id = am.id AND am.del_flag = 0
         WHERE c.id = #{contractId}
+        group by arfd.id
         UNION ALL
         SELECT arw.id,
                arw.create_time,

Some files were not shown because too many files changed in this diff