Forráskód Böngészése

Merge branch 'test'

yzc 1 éve
szülő
commit
e2831fd94f
29 módosított fájl, 558 hozzáadás és 263 törlés
  1. 9 1
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountRunningWaterController.java
  2. 8 2
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java
  3. 25 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRunningWaterDto.java
  4. 10 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java
  5. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRequestFundsDetailVo.java
  6. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java
  7. 6 0
      hx-account/src/main/java/com/fjhx/account/entity/tax/po/TaxRefundDetails.java
  8. 6 2
      hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java
  9. 11 1
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRunningWaterService.java
  10. 23 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  11. 157 92
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  12. 34 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java
  13. 4 2
      hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml
  14. 1 2
      hx-account/src/main/resources/mapper/tax/TaxRefundDetailsMapper.xml
  15. 1 0
      hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml
  16. 6 0
      hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/ClaimContract.java
  17. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductSelectDto.java
  18. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  19. 40 0
      hx-sale/src/main/java/com/fjhx/sale/entity/statement/vo/ProfitSettlementVo.java
  20. 5 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  21. 22 3
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java
  22. 1 1
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractProductMapper.java
  23. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java
  24. 2 2
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  25. 18 18
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  26. 13 11
      hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsPdfServiceImpl.java
  27. 43 77
      hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java
  28. 42 23
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml
  29. 50 25
      hx-sale/src/main/resources/mapper/contract/ContractProductMapper.xml

+ 9 - 1
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRunningWaterController.java

@@ -71,7 +71,7 @@ public class AccountRunningWaterController {
      * 账户资金流水表编辑
      */
     @PostMapping("/edit")
-    public void edit(@RequestBody AccountRunningWater accountRunningWaterDto) {
+    public void edit(@RequestBody AccountRunningWaterDto accountRunningWaterDto) {
         accountRunningWaterService.edit(accountRunningWaterDto);
     }
 
@@ -107,4 +107,12 @@ public class AccountRunningWaterController {
         accountRunningWaterService.taxRefund(dto);
     }
 
+    /**
+     * 内部转账
+     */
+    @PostMapping("/internalTransfer")
+    public void internalTransfer(@RequestBody AccountRunningWaterDto dto) {
+        accountRunningWaterService.internalTransfer(dto);
+    }
+
 }

+ 8 - 2
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountPaymentDto.java

@@ -38,8 +38,14 @@ public class AccountPaymentDto extends AccountPayment {
      */
     private String accountOpening;
 
+    /**
+     * 是否往来 1是 0不是
+     */
+    private Integer isTransaction;
 
-
-
+    /**
+     * 往来单位id
+     */
+    private Long transactionDeptId;
 
 }

+ 25 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRunningWaterDto.java

@@ -5,6 +5,7 @@ import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -22,4 +23,28 @@ public class AccountRunningWaterDto extends AccountRunningWater {
      */
     List<TaxRefundDetails> taxRefundDetailsList;
 
+    /**
+     * 转入账户-管理表ID
+     */
+    private Long inAccountManagementId;
+    /**
+     * 转入金额
+     */
+    private BigDecimal inAmount;
+
+    /**
+     * 转入币种(字典account_currency)
+     */
+    private String inCurrency;
+
+    /**
+     * 手续费金额
+     */
+    private BigDecimal commissionAmount;
+
+    /**
+     * 手续费币种(字典account_currency)
+     */
+    private String commissionCurrency;
+
 }

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

@@ -105,4 +105,14 @@ public class AccountRunningWater extends BasePo {
     @TableField(exist = false)
     private Integer count;
 
+    /**
+     * 是否往来 1是 0不是
+     */
+    private Integer isTransaction;
+
+    /**
+     * 往来单位id
+     */
+    private Long transactionDeptId;
+
 }

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

@@ -30,4 +30,9 @@ public class AccountRequestFundsDetailVo extends AccountRequestFundsDetail {
      * 汇率
      */
     private BigDecimal rate;
+
+    /**
+     * 操作人
+     */
+    private String userName;
 }

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

@@ -102,4 +102,9 @@ public class AccountRunningWaterVo extends AccountRunningWater {
      * 销售合同id集合
      */
     private String contractIds;
+
+    /**
+     * 往来部门名称
+     */
+    private String transactionDeptName;
 }

+ 6 - 0
hx-account/src/main/java/com/fjhx/account/entity/tax/po/TaxRefundDetails.java

@@ -47,4 +47,10 @@ public class TaxRefundDetails extends BasePo {
      */
     @TableField(exist = false)
     private String currency;
+
+    /**
+     * 操作人
+     */
+    @TableField(exist = false)
+    private String userName;
 }

+ 6 - 2
hx-account/src/main/java/com/fjhx/account/entity/transaction/po/Transaction.java

@@ -5,6 +5,8 @@ import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 往来管理
@@ -36,12 +38,12 @@ public class Transaction extends BasePo {
     /**
      * 往来金额
      */
-    private String amount;
+    private BigDecimal amount;
 
     /**
      * 是否流水 1是 0否
      */
-    private String isFlowingWater;
+    private Integer isFlowingWater;
 
     /**
      * 往来账户
@@ -53,4 +55,6 @@ public class Transaction extends BasePo {
      */
     private String remark;
 
+    private Long accountRunningWaterId;
+
 }

+ 11 - 1
hx-account/src/main/java/com/fjhx/account/service/account/AccountRunningWaterService.java

@@ -45,7 +45,7 @@ public interface AccountRunningWaterService extends BaseService<AccountRunningWa
     /**
      * 账户资金流水表编辑
      */
-    void edit(AccountRunningWater accountRunningWater);
+    void edit(AccountRunningWaterDto accountRunningWaterDto);
 
     /**
      * 账户资金流水表删除
@@ -66,4 +66,14 @@ public interface AccountRunningWaterService extends BaseService<AccountRunningWa
      * 退税添加
      */
     void taxRefund(AccountRunningWaterDto dto);
+
+    /**
+     * 内部转账
+     */
+    void internalTransfer(AccountRunningWaterDto dto);
+
+    /**
+     * 操作余额
+     */
+    void changeRemainder(AccountRunningWater accountRunningWater);
 }

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

@@ -16,11 +16,13 @@ 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.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.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.file.utils.ObsFileUtil;
@@ -62,6 +64,9 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     @Autowired
     private AccountManagementService accountManagementService;
 
+    @Autowired
+    private TransactionService transactionService;
+
     @Override
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
 
@@ -224,8 +229,26 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
         accountRunningWater.setBusinessId(accountPaymentDto.getId());
         //添加流水类型
         accountRunningWater.setType("10");
+        //赋值是否往来
+        accountRunningWater.setIsTransaction(accountPaymentDto.getIsTransaction());
+        accountRunningWater.setTransactionDeptId(accountPaymentDto.getTransactionDeptId());
         accountRunningWaterService.save(accountRunningWater);
 
+        //如果是往来
+        if (ObjectUtil.isNotEmpty(accountRunningWater.getIsTransaction()) && 1 == accountRunningWater.getIsTransaction()) {
+            //创建往来数据
+            Transaction transaction = new Transaction();
+            transaction.setDepartmentId(accountRunningWater.getTransactionDeptId());
+            transaction.setType("10".equals(accountRunningWater.getStatus()) ? 0 : 1);
+            transaction.setCurrency(accountRunningWater.getCurrency());
+            transaction.setAmount(accountRunningWater.getAmount());
+            transaction.setIsFlowingWater(1);
+            transaction.setAccountId(accountRunningWater.getAccountManagementId());
+            transaction.setRemark(accountRunningWater.getRemarks());
+            transaction.setAccountRunningWaterId(accountRunningWater.getId());
+            transactionService.save(transaction);
+        }
+
     }
 
 

+ 157 - 92
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -17,11 +17,15 @@ import com.fjhx.account.entity.account.po.AccountRemainder;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.fjhx.account.entity.tax.po.TaxRefundDetails;
+import com.fjhx.account.entity.transaction.po.Transaction;
+import com.fjhx.account.entity.transaction.po.TransactionDepartment;
 import com.fjhx.account.mapper.account.AccountRunningWaterMapper;
 import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.account.service.account.AccountRemainderService;
 import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.account.service.tax.TaxRefundDetailsService;
+import com.fjhx.account.service.transaction.TransactionDepartmentService;
+import com.fjhx.account.service.transaction.TransactionService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
 import com.fjhx.common.enums.PushBusinessTypeEnum;
@@ -71,6 +75,10 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     private AccountManagementService accountManagementService;
     @Autowired
     private TaxRefundDetailsService taxRefundDetailsService;
+    @Autowired
+    private TransactionService transactionService;
+    @Autowired
+    private TransactionDepartmentService transactionDepartmentService;
 
     @Override
     public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
@@ -179,6 +187,11 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         if (ObjectUtil.isNotEmpty(corporation)) {
             result.setCorporationName(corporation.getName());
         }
+        //赋值往来单位名称
+        TransactionDepartment transactionDepartment = transactionDepartmentService.getById(result.getTransactionDeptId());
+        if (ObjectUtil.isNotEmpty(transactionDepartment)) {
+            result.setTransactionDeptName(transactionDepartment.getName());
+        }
         return result;
     }
 
@@ -225,6 +238,21 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
 
         this.save(dto);
 
+        //如果是往来
+        if (ObjectUtil.isNotEmpty(dto.getIsTransaction()) && 1 == dto.getIsTransaction()) {
+            //创建往来数据
+            Transaction transaction = new Transaction();
+            transaction.setDepartmentId(dto.getTransactionDeptId());
+            transaction.setType("10".equals(dto.getStatus()) ? 0 : 1);
+            transaction.setCurrency(dto.getCurrency());
+            transaction.setAmount(dto.getAmount());
+            transaction.setIsFlowingWater(1);
+            transaction.setAccountId(dto.getAccountManagementId());
+            transaction.setRemark(dto.getRemarks());
+            transaction.setAccountRunningWaterId(dto.getId());
+            transactionService.save(transaction);
+        }
+
         // 发送消息推送
         sendSocket(dto);
     }
@@ -272,69 +300,40 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
      */
     @Override
     @DSTransactional
-    public void edit(AccountRunningWater accountRunningWaterDto) {
+    public void edit(AccountRunningWaterDto accountRunningWaterDto) {
         //先回滚历史数据
         //获取历史的流水信息信息
         AccountRunningWater oldAccountRunningWater = getById(accountRunningWaterDto.getId());
-        //获取余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, oldAccountRunningWater.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, oldAccountRunningWater.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("历史数据 该账户不存在此币种,请前往资金账户添加");
-        }
-        boolean update = false;
-        if ("10".equals(oldAccountRunningWater.getStatus())) {
-            BigDecimal subtract = accountRemainder.getRemainder().subtract(oldAccountRunningWater.getAmount());
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("修改前数据 账户余额不足");
-            }
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + oldAccountRunningWater.getAmount())
-                    .setSql("change_remainder = " + oldAccountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-                    .apply("remainder - {0} >= 0", oldAccountRunningWater.getAmount())
-            );
-        } else {
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + oldAccountRunningWater.getAmount())
-                    .setSql("change_remainder = " + oldAccountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-            );
-        }
-        Assert.eqTrue(update, "余额回滚操作失败");
+        //回滚余额 修改操作类型 收入变支出 支出变收入
+        String status = "10".equals(oldAccountRunningWater.getStatus()) ? "20" : "10";
+        oldAccountRunningWater.setStatus(status);
+        //回滚原数据
+        changeRemainder(oldAccountRunningWater);
+
         //再操作修改后数据
-        //获取余额
-        AccountRemainder accountRemainder1 = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, accountRunningWaterDto.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountRunningWaterDto.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("修改后数据 该账户不存在此币种,请前往资金账户添加");
-        }
-        boolean update1 = false;
-        if ("10".equals(accountRunningWaterDto.getStatus())) {
-            update1 = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + accountRunningWaterDto.getAmount())
-                    .setSql("change_remainder = " + accountRunningWaterDto.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder1.getId())
-            );
-        } else {
-            BigDecimal subtract = accountRemainder1.getRemainder().subtract(accountRunningWaterDto.getAmount());
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("修改后数据 账户余额不足");
-            }
-            update1 = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + accountRunningWaterDto.getAmount())
-                    .setSql("change_remainder = " + accountRunningWaterDto.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder1.getId())
-                    .apply("remainder - {0} >= 0", accountRunningWaterDto.getAmount())
-            );
-        }
-        Assert.eqTrue(update1, "余额修改操作失败");
+        changeRemainder(accountRunningWaterDto);
 
         this.updateById(accountRunningWaterDto);
+
+        //修改往来信息
+        if (0 == accountRunningWaterDto.getIsTransaction()) {
+            //如果不是往来(删除往来数据,防止原来是往来改为不是往来)
+            transactionService.remove(q -> q.eq(Transaction::getAccountRunningWaterId, accountRunningWaterDto.getId()));
+        } else {
+            //如果是往来(添加/修改)往来信息,防止原来不是往来修改成往来
+            Transaction transaction = transactionService.getOne(q -> q.eq(Transaction::getAccountRunningWaterId, accountRunningWaterDto.getId()));
+            transaction = ObjectUtil.isNotEmpty(transaction) ? transaction : new Transaction();
+
+            transaction.setDepartmentId(accountRunningWaterDto.getTransactionDeptId());
+            transaction.setType("10".equals(accountRunningWaterDto.getStatus()) ? 0 : 1);
+            transaction.setCurrency(accountRunningWaterDto.getCurrency());
+            transaction.setAmount(accountRunningWaterDto.getAmount());
+            transaction.setIsFlowingWater(1);
+            transaction.setAccountId(accountRunningWaterDto.getAccountManagementId());
+            transaction.setRemark(accountRunningWaterDto.getRemarks());
+            transaction.setAccountRunningWaterId(accountRunningWaterDto.getId());
+            transactionService.saveOrUpdate(transaction);
+        }
     }
 
     @DSTransactional
@@ -343,45 +342,19 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         AccountRunningWater accountRunningWater = getById(id);
         Assert.notEmpty(accountRunningWater, "获取不到该流水信息");
 
+        //回滚余额 修改操作类型 收入变支出 支出变收入
+        String status = "10".equals(accountRunningWater.getStatus()) ? "20" : "10";
+        accountRunningWater.setStatus(status);
 
-        // 修改账户余额表的余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, accountRunningWater.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountRunningWater.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
-        }
-        BigDecimal amount = accountRunningWater.getAmount();
-        String status = accountRunningWater.getStatus();
-        BigDecimal remainder = accountRemainder.getRemainder();
+        //操作余额
+        changeRemainder(accountRunningWater);
 
-        accountRemainder.setStatus(status);
-        accountRemainder.setChangeRemainder(amount);
-
-        boolean update = false;
-        if ("10".equals(accountRunningWater.getStatus())) {
-            BigDecimal subtract = remainder.subtract(amount);
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("账户余额不足");
-            }
+        this.removeById(id);
 
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + accountRunningWater.getAmount())
-                    .setSql("change_remainder = " + accountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-                    .apply("remainder - {0} >= 0", accountRunningWater.getAmount())
-            );
-        } else {
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + accountRunningWater.getAmount())
-                    .setSql("change_remainder = " + accountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-            );
+        //删除往来
+        if (1 == accountRunningWater.getIsTransaction()) {
+            transactionService.remove(q -> q.eq(Transaction::getAccountRunningWaterId, id));
         }
-        Assert.eqTrue(update, "余额操作失败操作失败");
-
-        this.removeById(id);
     }
 
     /**
@@ -480,4 +453,96 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         taxRefundDetailsService.saveBatch(taxRefundDetailsList);
     }
 
+    /**
+     * 内部转账
+     */
+    @DSTransactional
+    @Override
+    public void internalTransfer(AccountRunningWaterDto dto) {
+        //生成转出流水
+        dto.setStatus("20");//支出
+        dto.setType("50");//内部转账
+        //操作余额
+        changeRemainder(dto);
+        this.save(dto);
+
+        //如果手续费不为0生成手续费
+        if (ObjectUtil.isNotEmpty(dto.getCommissionAmount()) && dto.getCommissionAmount().compareTo(BigDecimal.ZERO) != 0) {
+            AccountRunningWater commissionAccountRunningWater = new AccountRunningWater();
+            commissionAccountRunningWater.setStatus("20");
+            commissionAccountRunningWater.setType("50");//内部转账
+            commissionAccountRunningWater.setRemarks(dto.getRemarks());
+            commissionAccountRunningWater.setTransactionTime(dto.getTransactionTime());
+
+            commissionAccountRunningWater.setAccountManagementId(dto.getAccountManagementId());
+            commissionAccountRunningWater.setAmount(dto.getCommissionAmount());
+            Assert.notEmpty(dto.getCommissionCurrency(), "手续费币种不能为空");
+            commissionAccountRunningWater.setCurrency(dto.getCommissionCurrency());
+            commissionAccountRunningWater.setRemarks("手续费");
+            //操作余额
+            changeRemainder(commissionAccountRunningWater);
+            this.save(commissionAccountRunningWater);
+        }
+
+        //生成收入流水
+        AccountRunningWater inAccountRunningWater = new AccountRunningWater();
+        inAccountRunningWater.setStatus("10");
+        inAccountRunningWater.setType("50");//内部转账
+        inAccountRunningWater.setRemarks(dto.getRemarks());
+        inAccountRunningWater.setTransactionTime(dto.getTransactionTime());
+
+        inAccountRunningWater.setAccountManagementId(dto.getInAccountManagementId());
+        inAccountRunningWater.setAmount(dto.getInAmount());
+        Assert.notEmpty(dto.getInCurrency(), "收入币种不能为空");
+        inAccountRunningWater.setCurrency(dto.getInCurrency());
+        //操作余额
+        changeRemainder(inAccountRunningWater);
+        this.save(inAccountRunningWater);
+    }
+
+    /**
+     * 余额操作
+     */
+    @Override
+    public void changeRemainder(AccountRunningWater accountRunningWater) {
+        // 修改账户余额表的余额
+        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
+                .eq(AccountRemainder::getAccountManagementId, accountRunningWater.getAccountManagementId())
+                .eq(AccountRemainder::getCurrency, accountRunningWater.getCurrency())
+        );
+        if (ObjectUtil.isEmpty(accountRemainder)) {
+            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
+        }
+        BigDecimal amount = accountRunningWater.getAmount();
+        String status = accountRunningWater.getStatus();
+        BigDecimal remainder = accountRemainder.getRemainder();
+
+        accountRemainder.setStatus(status);
+        accountRemainder.setChangeRemainder(amount);
+
+        boolean update = false;
+        if ("10".equals(accountRunningWater.getStatus())) {
+            //收入操作
+            update = accountRemainderService.update(q -> q
+                    .setSql("remainder = remainder + " + accountRunningWater.getAmount())
+                    .setSql("change_remainder = " + accountRunningWater.getAmount())
+                    .eq(AccountRemainder::getId, accountRemainder.getId())
+            );
+        } else {
+            //支出操作
+            BigDecimal subtract = remainder.subtract(amount);
+            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
+                throw new ServiceException("账户余额不足");
+            }
+
+            update = accountRemainderService.update(q -> q
+                    .setSql("remainder = remainder - " + accountRunningWater.getAmount())
+                    .setSql("change_remainder = " + accountRunningWater.getAmount())
+                    .eq(AccountRemainder::getId, accountRemainder.getId())
+                    .apply("remainder - {0} >= 0", accountRunningWater.getAmount())
+            );
+        }
+        Assert.eqTrue(update, "余额操作失败,请重试!!!");
+    }
+
 }

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

@@ -1,21 +1,26 @@
 package com.fjhx.account.service.transaction.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.po.AccountManagement;
+import com.fjhx.account.entity.account.po.AccountRunningWater;
 import com.fjhx.account.entity.transaction.dto.TransactionDto;
 import com.fjhx.account.entity.transaction.dto.TransactionSelectDto;
 import com.fjhx.account.entity.transaction.po.Transaction;
 import com.fjhx.account.entity.transaction.vo.TransactionVo;
 import com.fjhx.account.mapper.transaction.TransactionMapper;
 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.utils.ExchangeRateUtil;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -34,6 +39,8 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
     private AccountManagementService accountManagementService;
     @Autowired
     private TransactionDepartmentService transactionDepartmentService;
+    @Autowired
+    private AccountRunningWaterService accountRunningWaterService;
 
     @Override
     public Page<TransactionVo> getPage(TransactionSelectDto dto) {
@@ -68,7 +75,34 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
     }
 
     @Override
+    @DSTransactional
     public void add(TransactionDto transactionDto) {
+        //如果是流水就创建流水数据
+        if (1 == transactionDto.getIsFlowingWater()) {
+            AccountRunningWater accountRunningWater = new AccountRunningWater();
+            accountRunningWater.setAccountManagementId(transactionDto.getAccountId());
+            accountRunningWater.setStatus(transactionDto.getType() == 0 ? "10" : "20");
+            accountRunningWater.setCurrency(transactionDto.getCurrency());
+            accountRunningWater.setAmount(transactionDto.getAmount());
+            accountRunningWater.setRemarks(transactionDto.getRemark());
+            accountRunningWater.setIsTransaction(1);
+            accountRunningWater.setTransactionDeptId(transactionDto.getDepartmentId());
+
+            accountRunningWater.setClaimAmount(BigDecimal.ZERO);
+            accountRunningWater.setReceived("20");
+            accountRunningWater.setIsClaim(0);
+
+            accountRunningWater.setRate(ExchangeRateUtil.getCnyToCodeRate(accountRunningWater.getCurrency()));
+
+            accountRunningWaterService.save(accountRunningWater);
+
+            //赋值流水id
+            transactionDto.setAccountRunningWaterId(accountRunningWater.getId());
+
+            //操作余额
+            accountRunningWaterService.changeRemainder(accountRunningWater);
+        }
+
         this.save(transactionDto);
     }
 

+ 4 - 2
hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml

@@ -102,8 +102,10 @@
             arw.create_time,
             arw.update_user,
             arw.update_time,
-            am.name accountManagementName,
-            am.corporation_id
+            am.name                       accountManagementName,
+            am.corporation_id,
+            ifnull(arw.is_transaction, 0) isTransaction,
+            arw.transaction_dept_id
         from account_running_water arw
                  left join account_management am on arw.account_management_id = am.id
         where arw.id = #{id}

+ 1 - 2
hx-account/src/main/resources/mapper/tax/TaxRefundDetailsMapper.xml

@@ -16,8 +16,7 @@
 
     <select id="getSumMoneyByContractIds" resultType="com.fjhx.account.entity.tax.po.TaxRefundDetails">
         SELECT
-            t1.contract_id,
-            t1.amount,
+            t1.*,
             t2.rate AS rate
         FROM
             tax_refund_details t1

+ 1 - 0
hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml

@@ -41,6 +41,7 @@
 
     <select id="getPayDetailList" resultType="com.fjhx.purchase.entity.pay.po.Pay">
         SELECT
+            t1.*,
             IFNULL( t1.money, 0 ) AS amount,
             IFNULL( t2.rate, 1 ) AS rate,
             IFNULL( t2.currency, "CNY" ) AS currency

+ 6 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/claim/po/ClaimContract.java

@@ -56,4 +56,10 @@ public class ClaimContract extends BasePo {
      */
     @TableField(exist = false)
     private BigDecimal rate;
+
+    /**
+     * 操作人
+     */
+    @TableField(exist = false)
+    private String userName;
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductSelectDto.java

@@ -50,4 +50,9 @@ public class ContractProductSelectDto extends BaseSelectDto {
      * 采购状态
      */
     private Integer purchaseStatus;
+
+    /**
+     * 是否到账 0:未到账  1已到账
+     */
+    private String isArrival;
 }

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

@@ -367,6 +367,11 @@ public class Contract extends BasePo {
     private String sellCorporationName;
 
     /**
+     * 流程id
+     */
+    private Long flowId;
+
+    /**
      * 创建时间英文
      */
     @TableField(exist = false)

+ 40 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/statement/vo/ProfitSettlementVo.java

@@ -1,9 +1,19 @@
 package com.fjhx.sale.entity.statement.vo;
 
+import com.fjhx.account.entity.account.po.AccountRequestFundsDetail;
+import com.fjhx.account.entity.account.vo.AccountRequestFundsDetailVo;
+import com.fjhx.account.entity.tax.po.TaxRefundDetails;
+import com.fjhx.common.entity.currency.po.CurrencyRate;
+import com.fjhx.purchase.entity.pay.po.Pay;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.sale.entity.claim.po.ClaimContract;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Currency;
+import java.util.List;
 
 @Getter
 @Setter
@@ -120,4 +130,34 @@ public class ProfitSettlementVo {
      * 税率
      */
     private BigDecimal rate;
+
+    /**
+     * 到账认领列表
+     */
+    private List<ClaimContract> claimList;
+
+    /**
+     * 退税列表
+     */
+    private List<TaxRefundDetails> taxReturnList;
+
+    /**
+     * 采购列表
+     */
+    private List<Purchase> purchaseList;
+
+    /**
+     * 付款列表
+     */
+    private List<Pay> payList;
+
+    /**
+     * 请款列表
+     */
+    private List<AccountRequestFundsDetailVo> accountRequestFundsDetailList;
+
+    /**
+     * 币种列表
+     */
+    private List<CurrencyRate> currencyList;
 }

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -76,6 +76,11 @@ public class ContractFlow extends FlowDelegate {
     @Override
     public Long start(Long flowId, JSONObject submitData) {
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
+
+        contract.setIssue("1");//默认直接下发到交接单
+
+        contract.setFlowId(flowId);
+
         if (StringUtils.isEmpty(contract.getCurrency())) {
             throw new ServiceException("币种不能为空");
         }

+ 22 - 3
hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java

@@ -36,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -90,6 +91,10 @@ public class ContractUpdateFlow extends FlowDelegate {
     public Long start(Long flowId, JSONObject submitData) {
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
 
+        contract.setIssue("1");//默认直接下发到交接单
+
+        contract.setFlowId(flowId);
+
         // 原合同id不能为空
         Long oldContractId = contract.getOldContractId();
         if (oldContractId == null) {
@@ -294,14 +299,14 @@ public class ContractUpdateFlow extends FlowDelegate {
             List<Long> claimIds = claimContractList.stream().map(ClaimContract::getClaimId).collect(Collectors.toList());
             List<Long> claimContractIds = claimContractList.stream().map(ClaimContract::getId).collect(Collectors.toList());
             //取出到账认领数据
-            List<Claim> claims = claimService.list(q -> q.in(Claim::getId, claimIds));
+            List<Claim> claims = claimService.list(q -> q.in(Claim::getId, CollectionUtils.isEmpty(claimIds) ? Arrays.asList("0000") : claimIds));
             for (Claim c : claims) {
                 //查询流水数据
                 AccountRunningWater accountRunningWater = accountRunningWaterService.getById(c.getBusinessId());
                 BigDecimal sumClaimMoney = accountRunningWater.getClaimAmount().subtract(c.getAmount());
                 //更新流水数据为认领状态---已认领金额还原
                 AccountRunningWater water = new AccountRunningWater();
-                if (accountRunningWater.getAmount().compareTo(sumClaimMoney) > 0) {
+                if (sumClaimMoney.compareTo(BigDecimal.ZERO) > 0) {
                     water.setIsClaim(2);//部分认领
                 } else {
                     water.setIsClaim(0);//未认领
@@ -316,7 +321,6 @@ public class ContractUpdateFlow extends FlowDelegate {
             claimService.remove(q -> q.in(Claim::getId, claimIds));
         }
 
-
         oldContract.setUpId(temOldId);
         oldContract.setIsShow(1);//隐藏旧合同
         contractService.updateContract(oldContract);
@@ -365,6 +369,13 @@ public class ContractUpdateFlow extends FlowDelegate {
         reject(businessId);
     }
 
+    /**
+     * 作废
+     *
+     * @param flowId     流程id
+     * @param businessId 业务id
+     * @param flowStatus 流程状态枚举
+     */
     @Override
     public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
         super.cancellation(flowId, businessId, flowStatus);
@@ -374,6 +385,14 @@ public class ContractUpdateFlow extends FlowDelegate {
                 .set(BasePo::getUpdateTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
+        //合同变更作废需要还原旧合同状态 为审批通过
+        Contract contract = contractService.getById(businessId);
+        contractService.update(q -> q
+                .eq(Contract::getId, contract.getOldContractId())
+                .set(Contract::getStatus, FlowStatusEnum1.PASS.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
     }
 
     /**

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

@@ -23,7 +23,7 @@ public interface ContractProductMapper extends BaseMapper<ContractProduct> {
     /**
      * 外销合同-产品分页
      */
-    Page<ContractProductVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractProduct> wrapper);
+    Page<ContractProductVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractProduct> wrapper, @Param("isArrival") String isArrival);
 
     /**
      * 根据合同产品ID集合查询合同产品

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java

@@ -82,7 +82,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
             commissionRuleService.remove(Wrappers.<CommissionRule>lambdaQuery()
                     .eq(CommissionRule::getCommissionId,cm.getId())
             );
-        }else  if (commissionDto.getSettlementStatus() == 1){
+        }else if (commissionDto.getSettlementStatus() == 1){
             saveOrUpdate(commissionDto);
         }
 

+ 2 - 2
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -94,7 +94,7 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
             }
         }
         //下发交接单过滤
-        wrapper.eq("t2", Contract::getIssue, 1);
+//        wrapper.eq("t2", Contract::getIssue, 1);
         return commPage(wrapper, dto);
     }
 
@@ -157,7 +157,7 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
             }
         }
         wrapper.groupBy("t1.id");
-        Page<ContractProductVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        Page<ContractProductVo> page = this.baseMapper.getPage(dto.getPage(), wrapper,dto.getIsArrival());
         List<ContractProductVo> list = page.getRecords();
 
         if (list.size() == 0) {

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

@@ -59,7 +59,6 @@ import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
 import com.fjhx.sale.entity.contract.po.ContractShipment;
 import com.fjhx.sale.entity.contract.vo.*;
-import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.entity.statement.dto.ProfitSettlementDto;
@@ -326,7 +325,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             }
 
             // 赋值流程id
-            flowExampleService.setFlowId(list, ContractVo::setFlowId);
+            List<ContractVo> collect = list.stream().filter(item -> Objects.isNull(item.getFlowId())).collect(Collectors.toList());
+            flowExampleService.setFlowId(collect, ContractVo::setFlowId);
             //赋值原卖方公司名称 多公司
             corporationService.attributeAssign(list, ContractVo::getSellCorporationId, (item, corporation) -> {
                 item.setSellCorporationName(corporation.getName());
@@ -1640,7 +1640,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         }
         List<ContractVo> contractVos = BeanUtil.copyToList(contractList, ContractVo.class);
         // 赋值流程id
-        flowExampleService.setFlowId(contractVos, ContractVo::setFlowId);
+        List<ContractVo> collect = contractVos.stream().filter(item -> Objects.isNull(item.getFlowId())).collect(Collectors.toList());
+        flowExampleService.setFlowId(collect, ContractVo::setFlowId);
         return contractVos;
     }
 
@@ -1673,16 +1674,15 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
     /**
      * 头部统计客户金额
-     *
      * @return
      */
     @Override
     public Map<String, Object> getHeadCustomerStatistics(ContractSelectDto dto) {
-        Map<String, Object> map = new HashMap<>();
-        map.put("sumAmount", BigDecimal.ZERO);
-        map.put("sumArrivalAmount", BigDecimal.ZERO);
-        map.put("sumQuantity", BigDecimal.ZERO);
-        map.put("list", new ArrayList<>());
+        Map<String,Object> map = new HashMap<>();
+        map.put("sumAmount",BigDecimal.ZERO);
+        map.put("sumArrivalAmount",BigDecimal.ZERO);
+        map.put("sumQuantity",BigDecimal.ZERO);
+        map.put("list",new ArrayList<>());
 
         List<Long> authIdList = customerService.getAuthIdList();
         if (authIdList.size() == 0) {
@@ -1691,7 +1691,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         IWrapper<Contract> wrapper = getWrapper();
         wrapper.in("t1", Contract::getBuyCorporationId, authIdList);
         wrapper.eq("t1", Contract::getIsChange, "0");//列表只展示未变更得数据
-        wrapper.ne("t1", Contract::getIsShow, 1);
+        wrapper.ne("t1",Contract::getIsShow,1);
         wrapper.between("t1", Contract::getStatus, FlowStatusEnum1.DRAFT.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
         if (StringUtils.isNotEmpty(dto.getStatus())) {
             wrapper.eq("t1", Contract::getStatus, dto.getStatus());
@@ -1713,18 +1713,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         List<ContractVo> list;
         list = baseMapper.getCustomerMoney(wrapper);
 
-        if (CollectionUtils.isNotEmpty(list)) {
-            BigDecimal sumAmount = list.stream().map(ContractVo::getSumAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal sumQuantity = list.stream().map(ContractVo::getSumQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal sumClaimMoney = list.stream().map(ContractVo::getSumClaimMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+        if(CollectionUtils.isNotEmpty(list)){
+            BigDecimal sumAmount = list.stream().map(ContractVo::getSumAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+            BigDecimal sumQuantity = list.stream().map(ContractVo::getSumQuantity).reduce(BigDecimal.ZERO,BigDecimal::add);
+            BigDecimal sumClaimMoney = list.stream().map(ContractVo::getSumClaimMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
             //赋值原卖方公司名称 多公司
             corporationService.attributeAssign(list, ContractVo::getSellCorporationId, (item, corporation) -> {
                 item.setSellCorporationName(corporation.getName());
             });
-            map.put("sumAmount", sumAmount);
-            map.put("sumArrivalAmount", sumClaimMoney);
-            map.put("sumQuantity", sumQuantity);
-            map.put("list", list);
+            map.put("sumAmount",sumAmount);
+            map.put("sumArrivalAmount",sumClaimMoney);
+            map.put("sumQuantity",sumQuantity);
+            map.put("list",list);
         }
         return map;
     }

+ 13 - 11
hx-sale/src/main/java/com/fjhx/sale/service/documents/impl/DocumentsPdfServiceImpl.java

@@ -30,7 +30,7 @@ import java.util.Map;
  * 单证PDF数据存放表 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-26
  */
 @Service
@@ -52,6 +52,7 @@ public class DocumentsPdfServiceImpl extends ServiceImpl<DocumentsPdfMapper, Doc
 
     /**
      * 查询详情
+     *
      * @param id 单证ID
      * @return
      */
@@ -64,26 +65,27 @@ public class DocumentsPdfServiceImpl extends ServiceImpl<DocumentsPdfMapper, Doc
 
     /**
      * 报关委托书详情
+     *
      * @param id
      * @return
      */
     @Override
-    public Map<String,Object> powerDetail(Long id) {
-        DocumentsPdf documentsPdf = this.getOne(Wrappers.<DocumentsPdf>query().lambda().eq(DocumentsPdf::getDocumentId,id).eq(DocumentsPdf::getDataType,1));
+    public Map<String, Object> powerDetail(Long id) {
+        DocumentsPdf documentsPdf = this.getOne(Wrappers.<DocumentsPdf>query().lambda().eq(DocumentsPdf::getDocumentId, id).eq(DocumentsPdf::getDataType, 1));
         DocumentsPdfVo result = BeanUtil.toBean(documentsPdf, DocumentsPdfVo.class);
-        if(ObjectUtil.isEmpty(result)){
-            Map<String,Object> map = documentsService.getContractDataById(id);
+        if (ObjectUtil.isEmpty(result)) {
+            Map<String, Object> map = documentsService.getContractDataById(id);
             //查询单证数据
             DocumentsProduct documentsProduct = documentsProductService.getMaxMoneyData(id);
-            if(MapUtils.isEmpty(map)||ObjectUtil.isEmpty(documentsProduct)){
+            if (MapUtils.isEmpty(map) || ObjectUtil.isEmpty(documentsProduct)) {
                 throw new ServiceException("数据异常,请联系管理员");
             }
-            map.put("customerCode",documentsProduct.getCustomsCode());
-            map.put("productName", StringUtils.equals(documentsProduct.getDescribes(),"无")?documentsProduct.getSubDescribe():documentsProduct.getDescribes());
-            map.put("productQuantity",documentsProduct.getQuantity());
+            map.put("customerCode", documentsProduct.getCustomsCode());
+            map.put("productName", StringUtils.equals(documentsProduct.getDescribes(), "无") ? documentsProduct.getSubDescribe() : documentsProduct.getDescribes());
+            map.put("productQuantity", documentsProduct.getQuantity());
             return map;
-        }else{
-            Map<String,Object> map = JSON.parseObject(result.getContent());
+        } else {
+            Map<String, Object> map = JSON.parseObject(result.getContent());
             return map;
         }
     }

+ 43 - 77
hx-sale/src/main/java/com/fjhx/sale/service/statement/impl/SaleStatementServiceImpl.java

@@ -76,20 +76,11 @@ public class SaleStatementServiceImpl implements SaleStatementService {
     private PayDetailService payDetailService;
 
     @Autowired
-    private ClaimService claimService;
-
-    @Autowired
-    private PurchaseDetailService purchaseDetailService;
-
-    @Autowired
     private PurchaseService purchaseService;
 
     @Autowired
     private AccountRequestFundsDetailService accountRequestFundsDetailService;
-    @Autowired
-    private AccountRequestFundsService accountRequestFundsService;
-    @Autowired
-    private AccountPaymentService accountPaymentService;
+
 
     @Override
     public Page<ProfitSettlementVo> getProfitSettlement(ProfitSettlementDto dto) {
@@ -109,19 +100,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         });
         // 获取默认税率
         Map<String, BigDecimal> defaultRateMap = new HashMap<>();
-
-        // 获取税率明细
-        Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
-
         //赋值合同到账金额、退税金额、采购金额
         setContractArrivalAndRefundMoney(list);
-
-//        // 赋值采购合同金额和支付货款
-//        setPurchaseAmountAndPayForGoods(list, detailsRateMap);
-
         // 计算
         calculation(list);
-
         // 转page
         return toPage(contractPage, list);
     }
@@ -218,63 +200,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
      * 赋值合同到账金额、退税金额、采购金额
      */
     private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list) {
+        List<CurrencyRate> currencyRateList = currencyRateService.list();
 
-//        // 合同id
-//        List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
-//
-//        // 根据合同id获取到账认领明细列表
-//        List<ClaimContract> claimContractList = claimContractService.list(q ->
-//                q.in(ClaimContract::getContractId, contractIdList));
-//
-//        if (claimContractList.size() == 0) {
-//            return;
-//        }
-//
-//        // 到账认领明细id列表
-//        List<Long> claimIdList = claimContractList.stream()
-//                .map(ClaimContract::getClaimId).distinct().collect(Collectors.toList());
-//
-//        // 到账认领列表
-//        List<Claim> claimList = claimService.listByIds(claimIdList);
-//
-//        // 到账认领id 币种 map
-//        Map<Long, String> claimIdCurrencyMap = claimList.stream()
-//                .collect(Collectors.toMap(BaseIdPo::getId, Claim::getCurrency));
-//
-//        // 合同id 到账认领明细列表 map
-//        Map<Long, List<ClaimContract>> contractIdClaimContractListMap =
-//                claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
-//
-//        for (ProfitSettlementVo profitSettlementVo : list) {
-//
-//            // 合同id
-//            Long contractId = profitSettlementVo.getContractId();
-//
-//            // 到账认领
-//            List<ClaimContract> itemClaimContractList = contractIdClaimContractListMap.getOrDefault(contractId, new ArrayList<>());
-//
-//            // 汇率币种map
-//            Map<String, BigDecimal> map = detailsRateMap.get(contractId);
-//
-//            BigDecimal contractArrival = itemClaimContractList.stream().map(claimContract -> {
-//
-//                // 根据到账认领id获取币种
-//                String currency = claimIdCurrencyMap.get(claimContract.getClaimId());
-//
-//                // 根据币种获取汇率
-//                BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
-//
-//                // 获取认领金额
-//                BigDecimal money = claimContract.getMoney();
-//
-//                // 返回兑人民币后金额
-//                return rate.multiply(money);
-//
-//            }).reduce(BigDecimal.ZERO, BigDecimal::add);
-//
-//            profitSettlementVo.setContractArrival(contractArrival);
-//
-//        }
+        List<String> currencyList = new ArrayList<>();
         // 合同id
         List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
         //通过合同ID查询到账认领合同的数据
@@ -290,6 +218,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
         Map<Long, List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getDataResourceId));
 
         for (ProfitSettlementVo p : list) {
+            currencyList.add(p.getCurrency());
             if (StringUtil.isNotEmpty(p.getCurrencyRateJson())) {//取设置的汇率
                 List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(p.getCurrencyRateJson(), CurrencyRate.class);
                 Map<String, BigDecimal> assignCurrencyRatesMap = assignCurrencyRatesList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
@@ -307,6 +236,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
+                    p.setClaimList(cList);
+                    currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
                 }
                 /**
                  * 处理退税金额
@@ -322,6 +255,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
+                    p.setTaxReturnList(rList);
+                    currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
                 }
                 /**
                  * 处理采购金额
@@ -338,7 +275,8 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
-
+                    p.setPurchaseList(pList);
+                    currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
                     /**
                      * 处理支付款金额
                      */
@@ -354,6 +292,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                             return rate.multiply(money);
                         }).reduce(BigDecimal.ZERO, BigDecimal::add);
                         p.setPayForGoods(payAmount);
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
+                        p.setPayList(payList);
+                        currencyList.addAll(payList.stream().map(Pay::getCurrency).collect(Collectors.toList()));
                     }
                 }
                 /**
@@ -370,6 +312,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
+                    p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
+                    currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
                 }
             } else {//取数据汇率
                 /**
@@ -390,6 +336,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setContractArrival(contractArrival);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(cList, ClaimContract::getCreateUser, ClaimContract::setUserName);
+                    p.setClaimList(cList);
+                    currencyList.addAll(cList.stream().map(ClaimContract::getCurrency).collect(Collectors.toList()));
                 }
                 /**
                  * 处理退税金额
@@ -405,6 +355,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setTaxReturnMoney(taxReturnMoney);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(rList, TaxRefundDetails::getCreateUser, TaxRefundDetails::setUserName);
+                    p.setTaxReturnList(rList);
+                    currencyList.addAll(rList.stream().map(TaxRefundDetails::getCurrency).collect(Collectors.toList()));
                 }
                 /**
                  * 处理采购金额
@@ -421,7 +375,8 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setPurchaseAmount(purchaseAmount);
-
+                    p.setPurchaseList(pList);
+                    currencyList.addAll(pList.stream().map(Purchase::getCurrency).collect(Collectors.toList()));
                     /**
                      * 处理支付款金额
                      */
@@ -437,6 +392,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                             return rate.multiply(money);
                         }).reduce(BigDecimal.ZERO, BigDecimal::add);
                         p.setPayForGoods(payAmount);
+                        // 赋值业务员名称
+                        UserUtil.assignmentNickName(payList, Pay::getCreateUser, Pay::setUserName);
+                        p.setPayList(payList);
+                        currencyList.addAll(payList.stream().map(Pay::getCurrency).collect(Collectors.toList()));
                     }
                 }
                 /**
@@ -453,8 +412,15 @@ public class SaleStatementServiceImpl implements SaleStatementService {
                         return rate.multiply(money);
                     }).reduce(BigDecimal.ZERO, BigDecimal::add);
                     p.setOtherExpenses(otherExpenses);
+                    // 赋值业务员名称
+                    UserUtil.assignmentNickName(accountRequestFundsDetailVos, AccountRequestFundsDetailVo::getCreateUser, AccountRequestFundsDetailVo::setUserName);
+                    p.setAccountRequestFundsDetailList(accountRequestFundsDetailVos);
+                    currencyList.addAll(accountRequestFundsDetailVos.stream().map(AccountRequestFundsDetailVo::getCurrency).collect(Collectors.toList()));
                 }
             }
+            p.setCurrencyList(currencyRateList.stream()
+                    .filter((CurrencyRate c) ->currencyList.contains(c.getType()))
+                    .collect(Collectors.toList()));
         }
     }
 

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

@@ -241,30 +241,49 @@
     </select>
 
     <select id="getCustomerMoney" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
-        SELECT t1.sell_corporation_id                                   AS sellCorporationId,
-               IFNULL(SUM(t1.amount * t1.rate), 0)                      AS sumAmount,
-               IFNULL(count(1), 0)                                      AS sumQuantity,
-               (SELECT IFNULL(SUM(IFNULL(cc.money, 0) * IFNULL(cc.rate, 1)), 0)
-                FROM claim_contract cc
-                WHERE FIND_IN_SET(cc.contract_id, GROUP_CONCAT(t1.id))) AS sumClaimMoney
-        FROM (SELECT t1.*,
-                     IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) AS amountCNY,
-                     CASE
+        SELECT
+            t1.sell_corporation_id AS sellCorporationId,
+            IFNULL( SUM( t1.amount * t1.rate ), 0 ) AS sumAmount,
+            IFNULL( count( 1 ), 0 ) AS sumQuantity,
+            (
+            SELECT
+            IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( cc.rate, 1 )), 0 )
+            FROM
+            claim_contract cc
+            WHERE
+            FIND_IN_SET( cc.contract_id, GROUP_CONCAT( t1.id ) )
+            ) AS sumClaimMoney
+        FROM
+                (
+                SELECT
+                    t1.*,
+                    IFNULL( t1.amount, 0 ) * IFNULL( t1.rate, 0 ) AS amountCNY,
+                    CASE
 
-                         WHEN (IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) - t1.sumClaimMoney) &lt;= 0 THEN
-                             20
-                         WHEN t1.sumClaimMoney = 0 THEN
-                             0
-                         ELSE 10
-                         END                                   AS refundStatusNew
-              FROM (SELECT t1.*,
-                           (SELECT IFNULL(SUM(IFNULL(cc.money, 0) * IFNULL(arw.rate, 1)), 0)
-                            FROM claim_contract cc
-                                     LEFT JOIN claim c ON cc.claim_id = c.id
-                                     LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
-                            WHERE cc.contract_id = t1.id) AS sumClaimMoney
-                    FROM contract t1) t1) t1
-            ${ew.customSqlSegment}
+                    WHEN ( IFNULL( t1.amount, 0 ) * IFNULL( t1.rate, 0 ) - t1.sumClaimMoney ) &lt;= 0 THEN
+                    20
+                    WHEN t1.sumClaimMoney = 0 THEN
+                    0 ELSE 10
+                    END AS refundStatusNew
+                FROM
+                        (
+                        SELECT
+                        t1.*,
+                        (
+                        SELECT
+                        IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
+                        FROM
+                        claim_contract cc
+                        LEFT JOIN claim c ON cc.claim_id = c.id
+                        LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
+                        WHERE
+                        cc.contract_id = t1.id
+                        ) AS sumClaimMoney
+                FROM
+                    contract t1
+                    ) t1
+                ) t1
+        ${ew.customSqlSegment}
     </select>
     <update id="updateContract" parameterType="com.fjhx.sale.entity.contract.po.Contract">
         update contract

+ 50 - 25
hx-sale/src/main/resources/mapper/contract/ContractProductMapper.xml

@@ -3,37 +3,62 @@
 <mapper namespace="com.fjhx.sale.mapper.contract.ContractProductMapper">
 
     <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractProductVo">
-        SELECT t1.id,
-               t2.create_time     AS contractTime,
-               t1.contract_id,
-               t1.product_id,
-               t2.`code`          AS contractCode,
-               t2.user_name       AS userName,
-               t2.create_user     AS salesmanId,
-               t2.version         AS contractVersion,
-               t1.expend_quantity AS expendQuantity,
-               (SELECT create_time
-                FROM claim_contract
-                WHERE contract_id = t2.id
-                ORDER BY create_time DESC
-                                     LIMIT 1)               AS claimTime,
-               t2.contract_template_id AS contractTemplateId,
-               t1.quantity,
-                (SELECT
-                    if(sum( pd.count ) is null,0,sum( pd.count ))
+        SELECT
+            *
+        FROM
+            (
+                SELECT
+                    t1.id,
+                    t2.create_time AS contractTime,
+                    t1.contract_id,
+                    t1.product_id,
+                    t2.`code` AS contractCode,
+                    t2.user_name AS userName,
+                    t2.create_user AS salesmanId,
+                    t2.version AS contractVersion,
+                    t1.expend_quantity AS expendQuantity,
+                    ( SELECT create_time FROM claim_contract WHERE contract_id = t2.id ORDER BY create_time DESC LIMIT 1 ) AS claimTime,
+            t2.contract_template_id AS contractTemplateId,
+            t1.quantity,
+            (
+                SELECT
+                    IF
+                        (
+                            sum( pd.count ) IS NULL,
+                            0,
+                            sum( pd.count ))
                 FROM
                     bytesailing_purchase.purchase_detail pd
-                    LEFT JOIN bytesailing_purchase.purchase p ON pd.purchase_id = p.id
+                        LEFT JOIN bytesailing_purchase.purchase p ON pd.purchase_id = p.id
                 WHERE
                     p.purchase_status = 10
-                    and pd.data_resource_id = t1.id
-                ) as startPurchaseCount
-        FROM contract_product t1
+                  AND pd.data_resource_id = t1.id
+            ) AS startPurchaseCount,
+            (
+                SELECT
+                    IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
+                FROM
+                    claim_contract cc
+                        LEFT JOIN claim c ON cc.claim_id = c.id
+                        LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
+                WHERE
+                    cc.contract_id = t2.id
+            ) / t2.amount * 100 AS ad,
+		t2.advance_ratio AS advanceRatio
+        FROM
+            contract_product t1
             LEFT JOIN contract t2
-            LEFT JOIN claim_contract co
-        on co.contract_id = t2.id
-            ON t1.contract_id = t2.id
+            LEFT JOIN claim_contract co ON co.contract_id = t2.id ON t1.contract_id = t2.id
             ${ew.customSqlSegment}
+            ) t1
+        <where>
+            <if test="isArrival neq null and isArrival==1 ">
+                t1.ad &lt; t1.advanceRatio
+            </if>
+            <if test="isArrival neq null and isArrival==2 ">
+                t1.ad > t1.advanceRatio
+            </if>
+        </where>
     </select>
 
     <select id="getEHSDPage" resultType="com.fjhx.sale.entity.contract.vo.ContractProductVo">