Browse Source

Merge remote-tracking branch 'origin/master'

caozj 1 year ago
parent
commit
e007e5f3de
47 changed files with 1117 additions and 106 deletions
  1. 8 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountRunningWaterController.java
  2. 66 0
      hx-account/src/main/java/com/fjhx/account/controller/loan/LoanInfoController.java
  3. 46 0
      hx-account/src/main/java/com/fjhx/account/controller/repayment/RepaymentRecordsController.java
  4. 50 0
      hx-account/src/main/java/com/fjhx/account/entity/account/enums/AccountRunningWaterEnum.java
  5. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/loan/dto/LoanInfoDto.java
  6. 27 0
      hx-account/src/main/java/com/fjhx/account/entity/loan/dto/LoanInfoSelectDto.java
  7. 64 0
      hx-account/src/main/java/com/fjhx/account/entity/loan/po/LoanInfo.java
  8. 32 0
      hx-account/src/main/java/com/fjhx/account/entity/loan/vo/LoanInfoVo.java
  9. 17 0
      hx-account/src/main/java/com/fjhx/account/entity/repayment/dto/RepaymentRecordsDto.java
  10. 21 0
      hx-account/src/main/java/com/fjhx/account/entity/repayment/dto/RepaymentRecordsSelectDto.java
  11. 54 0
      hx-account/src/main/java/com/fjhx/account/entity/repayment/po/RepaymentRecords.java
  12. 22 0
      hx-account/src/main/java/com/fjhx/account/entity/repayment/vo/RepaymentRecordsVo.java
  13. 5 0
      hx-account/src/main/java/com/fjhx/account/entity/transaction/dto/TransactionSelectDto.java
  14. 5 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRunningWaterMapper.java
  15. 26 0
      hx-account/src/main/java/com/fjhx/account/mapper/loan/LoanInfoMapper.java
  16. 26 0
      hx-account/src/main/java/com/fjhx/account/mapper/repayment/RepaymentRecordsMapper.java
  17. 5 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountRunningWaterService.java
  18. 67 32
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java
  19. 43 0
      hx-account/src/main/java/com/fjhx/account/service/loan/LoanInfoService.java
  20. 132 0
      hx-account/src/main/java/com/fjhx/account/service/loan/impl/LoanInfoServiceImpl.java
  21. 31 0
      hx-account/src/main/java/com/fjhx/account/service/repayment/RepaymentRecordsService.java
  22. 88 0
      hx-account/src/main/java/com/fjhx/account/service/repayment/impl/RepaymentRecordsServiceImpl.java
  23. 3 0
      hx-account/src/main/java/com/fjhx/account/service/transaction/impl/TransactionServiceImpl.java
  24. 63 52
      hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml
  25. 22 0
      hx-account/src/main/resources/mapper/loan/LoanInfoMapper.xml
  26. 20 0
      hx-account/src/main/resources/mapper/repayment/RepaymentRecordsMapper.xml
  27. 2 1
      hx-account/src/main/resources/mapper/transaction/TransactionMapper.xml
  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. 9 0
      hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionController.java
  31. 1 1
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractController.java
  32. 4 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java
  33. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  34. 4 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractInvoice.java
  35. 5 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractInvoiceVo.java
  36. 9 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  37. 16 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  38. 2 2
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractUpdateFlow.java
  39. 6 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionMapper.java
  40. 1 1
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  41. 9 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionService.java
  42. 32 0
      hx-sale/src/main/java/com/fjhx/sale/service/commission/impl/CommissionServiceImpl.java
  43. 1 1
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  44. 12 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractInvoiceServiceImpl.java
  45. 20 9
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  46. 12 0
      hx-sale/src/main/resources/mapper/commission/CommissionMapper.xml
  47. 7 7
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

+ 8 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRunningWaterController.java

@@ -115,4 +115,12 @@ public class AccountRunningWaterController {
         accountRunningWaterService.internalTransfer(dto);
     }
 
+    /**
+     * 结汇
+     */
+    @PostMapping("/exchangeSettlement")
+    public void exchangeSettlement(@RequestBody AccountRunningWaterDto dto) {
+        accountRunningWaterService.exchangeSettlement(dto);
+    }
+
 }

+ 66 - 0
hx-account/src/main/java/com/fjhx/account/controller/loan/LoanInfoController.java

@@ -0,0 +1,66 @@
+package com.fjhx.account.controller.loan;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.loan.dto.LoanInfoDto;
+import com.fjhx.account.entity.loan.dto.LoanInfoSelectDto;
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import com.fjhx.account.entity.loan.vo.LoanInfoVo;
+import com.fjhx.account.service.loan.LoanInfoService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 借款信息 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@RestController
+@RequestMapping("/loanInfo")
+public class LoanInfoController {
+
+    @Autowired
+    private LoanInfoService loanInfoService;
+
+    /**
+     * 借款信息分页
+     */
+    @PostMapping("/page")
+    public Page<LoanInfoVo> page(@RequestBody LoanInfoSelectDto dto) {
+        return loanInfoService.getPage(dto);
+    }
+
+    /**
+     * 借款人列表
+     */
+    @PostMapping("/getLoanUserList")
+    public List<LoanInfo> getLoanUserList(@RequestBody LoanInfoSelectDto dto) {
+        return loanInfoService.getLoanUserList(dto);
+    }
+
+    /**
+     * 借款信息明细
+     */
+    @PostMapping("/detail")
+    public LoanInfoVo detail(@RequestBody BaseSelectDto dto) {
+        return loanInfoService.detail(dto.getId());
+    }
+
+    /**
+     * 借款信息新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody LoanInfoDto loanInfoDto) {
+        loanInfoService.add(loanInfoDto);
+    }
+
+}

+ 46 - 0
hx-account/src/main/java/com/fjhx/account/controller/repayment/RepaymentRecordsController.java

@@ -0,0 +1,46 @@
+package com.fjhx.account.controller.repayment;
+
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsDto;
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsSelectDto;
+import com.fjhx.account.entity.repayment.vo.RepaymentRecordsVo;
+import com.fjhx.account.service.repayment.RepaymentRecordsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 还款记录 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@RestController
+@RequestMapping("/repaymentRecords")
+public class RepaymentRecordsController {
+
+    @Autowired
+    private RepaymentRecordsService repaymentRecordsService;
+
+    /**
+     * 还款记录列表
+     */
+    @PostMapping("/list")
+    public List<RepaymentRecordsVo> list(@RequestBody RepaymentRecordsSelectDto dto) {
+        return repaymentRecordsService.getList(dto);
+    }
+
+    /**
+     * 还款记录新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody RepaymentRecordsDto repaymentRecordsDto) {
+        repaymentRecordsService.add(repaymentRecordsDto);
+    }
+
+}

+ 50 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/enums/AccountRunningWaterEnum.java

@@ -0,0 +1,50 @@
+package com.fjhx.account.entity.account.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+//请款审批状态
+public enum AccountRunningWaterEnum {
+    ACCOUNT_PAYMENT("10", "打款"),
+    RECEIVED_PAYMENT("20", "到款登记"),
+    CLAIM("30", "到账认领"),
+    TAX_REFUND("40", "退税"),
+    INTERNAL_TRANSFER("50", "内部转账"),
+    EXCHANGE_SETTLEMENT("60", "结汇"),
+    LOAN("70", "借款"),
+    REPAYMENT("80", "还款"),
+    ;
+    private static Map<String, String> map = new LinkedHashMap<>();
+    private String key;
+    private String value;
+
+    AccountRunningWaterEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<String, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (AccountRunningWaterEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.account.entity.loan.dto;
+
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 借款信息新增编辑入参实体
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Getter
+@Setter
+public class LoanInfoDto extends LoanInfo {
+
+}

+ 27 - 0
hx-account/src/main/java/com/fjhx/account/entity/loan/dto/LoanInfoSelectDto.java

@@ -0,0 +1,27 @@
+package com.fjhx.account.entity.loan.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 借款信息列表查询入参实体
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Getter
+@Setter
+public class LoanInfoSelectDto extends BaseSelectDto {
+
+    /**
+     * 归属公司id
+     */
+    private Long corporationId;
+
+    /**
+     * 还款状态 0未还款 1部分还款 2已还款
+     */
+    private Integer repaymentStatus;
+
+}

+ 64 - 0
hx-account/src/main/java/com/fjhx/account/entity/loan/po/LoanInfo.java

@@ -0,0 +1,64 @@
+package com.fjhx.account.entity.loan.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-15
+ */
+@Getter
+@Setter
+@TableName("loan_info")
+public class LoanInfo extends BasePo {
+
+    /**
+     * 多公司id
+     */
+    private Long corporationId;
+
+    /**
+     * 借款人
+     */
+    private String loanUserName;
+
+    /**
+     * 借款时间
+     */
+    private Date loanTime;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 付款(借款)账户
+     */
+    private Long loanAccountId;
+
+    /**
+     * 借款备注
+     */
+    private String remarks;
+
+    /**
+     * 还款状态 0未还款 1部分还款 2已还款
+     */
+    private Integer repaymentStatus;
+
+}

+ 32 - 0
hx-account/src/main/java/com/fjhx/account/entity/loan/vo/LoanInfoVo.java

@@ -0,0 +1,32 @@
+package com.fjhx.account.entity.loan.vo;
+
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 借款信息列表查询返回值实体
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Getter
+@Setter
+public class LoanInfoVo extends LoanInfo {
+
+    /**
+     * 归属公司名称
+     */
+    private String corporationName;
+
+    /**
+     * 付款账号名称
+     */
+    private String loanAccountName;
+
+    /**
+     * 创建人名称
+     */
+    private String createUserName;
+
+}

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

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

+ 21 - 0
hx-account/src/main/java/com/fjhx/account/entity/repayment/dto/RepaymentRecordsSelectDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.account.entity.repayment.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 还款记录列表查询入参实体
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Getter
+@Setter
+public class RepaymentRecordsSelectDto extends BaseSelectDto {
+
+    /**
+     * 借款id
+     */
+    private Long loanId;
+}

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

@@ -0,0 +1,54 @@
+package com.fjhx.account.entity.repayment.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-15
+ */
+@Getter
+@Setter
+@TableName("repayment_records")
+public class RepaymentRecords extends BasePo {
+
+    /**
+     * 借款id
+     */
+    private Long loanId;
+
+    /**
+     * 收款账户
+     */
+    private Long repaymentAccountId;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 还款时间
+     */
+    private Date repaymentTime;
+
+    /**
+     * 还款备注
+     */
+    private String remarks;
+
+}

+ 22 - 0
hx-account/src/main/java/com/fjhx/account/entity/repayment/vo/RepaymentRecordsVo.java

@@ -0,0 +1,22 @@
+package com.fjhx.account.entity.repayment.vo;
+
+import com.fjhx.account.entity.repayment.po.RepaymentRecords;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 还款记录列表查询返回值实体
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Getter
+@Setter
+public class RepaymentRecordsVo extends RepaymentRecords {
+
+    /**
+     * 登记
+     */
+    private String createUserName;
+
+}

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

@@ -28,4 +28,9 @@ public class TransactionSelectDto extends BaseSelectDto {
      */
     private Integer type;
 
+    /**
+     * 归属公司
+     */
+    private Long corporationId;
+
 }

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountRunningWaterMapper.java

@@ -39,4 +39,9 @@ public interface AccountRunningWaterMapper extends BaseMapper<AccountRunningWate
      * 账户资金流水表分页
      */
     List<AccountRunningWaterVo> getList(@Param("ew") QueryWrapper<Object> wrapper);
+
+    /**
+     * 修改合同结汇状态
+     */
+    void exchangeSettlementByContractId(@Param("contractId") Long contractId, @Param("status") Integer status);
 }

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/mapper/loan/LoanInfoMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.account.mapper.loan;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import com.fjhx.account.entity.loan.vo.LoanInfoVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 借款信息 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+public interface LoanInfoMapper extends BaseMapper<LoanInfo> {
+
+    /**
+     * 借款信息分页
+     */
+    Page<LoanInfoVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<LoanInfo> wrapper);
+
+}

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/mapper/repayment/RepaymentRecordsMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.account.mapper.repayment;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.account.entity.repayment.po.RepaymentRecords;
+import com.fjhx.account.entity.repayment.vo.RepaymentRecordsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 还款记录 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+public interface RepaymentRecordsMapper extends BaseMapper<RepaymentRecords> {
+
+    /**
+     * 还款记录列表
+     */
+    List<RepaymentRecordsVo> getList(@Param("ew") IWrapper<RepaymentRecords> wrapper);
+
+}

+ 5 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountRunningWaterService.java

@@ -76,4 +76,9 @@ public interface AccountRunningWaterService extends BaseService<AccountRunningWa
      * 操作余额
      */
     void changeRemainder(AccountRunningWater accountRunningWater);
+
+    /**
+     * 结汇
+     */
+    void exchangeSettlement(AccountRunningWaterDto dto);
 }

+ 67 - 32
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.bo.AccountRunningWaterBo;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterDto;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterSelectDto;
+import com.fjhx.account.entity.account.enums.AccountRunningWaterEnum;
 import com.fjhx.account.entity.account.po.AccountManagement;
 import com.fjhx.account.entity.account.po.AccountRemainder;
 import com.fjhx.account.entity.account.po.AccountRunningWater;
@@ -46,6 +47,7 @@ import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -80,8 +82,11 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
     @Autowired
     private TransactionDepartmentService transactionDepartmentService;
 
-    @Override
-    public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
+
+    /**
+     * 获取分页搜索条件
+     */
+    QueryWrapper<Object> getPageWrapper(AccountRunningWaterSelectDto dto) {
         QueryWrapper<Object> wrapper = Wrappers.query();
         // 资金账户
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getAccountManagementId()), "arw.account_management_id", dto.getAccountManagementId());
@@ -119,6 +124,12 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         else {
             wrapper.orderByDesc("arw.transaction_time", "arw.id");
         }
+        return wrapper;
+    }
+
+    @Override
+    public Page<AccountRunningWaterVo> getPage(AccountRunningWaterSelectDto dto) {
+        QueryWrapper<Object> wrapper = getPageWrapper(dto);
 
         Page<AccountRunningWaterVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<AccountRunningWaterVo> records = page.getRecords();
@@ -380,36 +391,8 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
 
     @Override
     public void exportExcel(AccountRunningWaterSelectDto dto, HttpServletResponse httpServletResponse) {
-        QueryWrapper<Object> wrapper = Wrappers.query();
-        //资金账户
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getAccountManagementId()), "arw.account_management_id", dto.getAccountManagementId());
-        //交易类型
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getStatus()), "arw.status", dto.getStatus());
-        //是否合同到账
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getReceived()), "arw.received", dto.getReceived());
-        //币种
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getCurrency()), "arw.currency", dto.getCurrency());
-        //是否认领
-        wrapper.eq(ObjectUtil.isNotEmpty(dto.getIsClaim()), "arw.is_claim", dto.getIsClaim());
-        //交易开始金额
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginAmount()), "arw.amount", dto.getBeginAmount());
-        //交易结束金额
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getEndAmount()), "arw.amount", dto.getEndAmount());
-        //交易开始时间
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getBeginTime()), "arw.create_time", dto.getBeginTime());
-        //交易结束金额
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getEndTime()), "arw.create_time", dto.getEndTime());
-        //对方账户名称
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getName()), "arw.name", dto.getName());
-        //摘要
-        wrapper.ge(ObjectUtil.isNotEmpty(dto.getRemarks()), "arw.name", dto.getRemarks());
-        if (StringUtils.isNotEmpty(dto.getKeyword())) {
-            wrapper.and(wrapper1 -> wrapper1.like("arw.remarks", dto.getKeyword()).or().like("arw.name", dto.getKeyword()));
-        }
-        if (ObjectUtil.isNotEmpty(dto.getDataType()) && dto.getDataType() == 1) {//到账认领数据
-            wrapper.eq("arw.received", 10);
-            wrapper.orderByAsc("arw.is_claim", "arw.create_time");
-        }
+        QueryWrapper<Object> wrapper = getPageWrapper(dto);
+
         List<AccountRunningWaterVo> records = this.baseMapper.getList(wrapper);
 
         //赋值字典数据
@@ -608,4 +591,56 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         Assert.eqTrue(update, "余额操作失败,请重试!!!");
     }
 
+    /**
+     * 结汇
+     */
+    @Override
+    public void exchangeSettlement(AccountRunningWaterDto dto) {
+        dto.setTransactionTime(new Date());
+
+        //生成转出流水
+        dto.setStatus("20");//支出
+        dto.setType(AccountRunningWaterEnum.EXCHANGE_SETTLEMENT.getKey());
+        //操作余额
+        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(AccountRunningWaterEnum.EXCHANGE_SETTLEMENT.getKey());
+            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("结汇手续费");
+            commissionAccountRunningWater.setBusinessId(dto.getBusinessId());
+            //操作余额
+            changeRemainder(commissionAccountRunningWater);
+            this.save(commissionAccountRunningWater);
+        }
+
+        //生成收入流水
+        AccountRunningWater inAccountRunningWater = new AccountRunningWater();
+        inAccountRunningWater.setStatus("10");
+        inAccountRunningWater.setType(AccountRunningWaterEnum.EXCHANGE_SETTLEMENT.getKey());
+        inAccountRunningWater.setRemarks(dto.getRemarks());
+        inAccountRunningWater.setTransactionTime(dto.getTransactionTime());
+        inAccountRunningWater.setAccountManagementId(dto.getInAccountManagementId());
+        inAccountRunningWater.setAmount(dto.getInAmount());
+        Assert.notEmpty(dto.getInCurrency(), "汇入入币种不能为空");
+        inAccountRunningWater.setCurrency(dto.getInCurrency());
+        inAccountRunningWater.setBusinessId(dto.getBusinessId());
+        //操作余额
+        changeRemainder(inAccountRunningWater);
+        this.save(inAccountRunningWater);
+        //修改合同为已结汇
+        DynamicDataSourceContextHolder.push(SourceConstant.SALE);
+        baseMapper.exchangeSettlementByContractId(dto.getBusinessId(), 1);
+        DynamicDataSourceContextHolder.poll();
+    }
+
 }

+ 43 - 0
hx-account/src/main/java/com/fjhx/account/service/loan/LoanInfoService.java

@@ -0,0 +1,43 @@
+package com.fjhx.account.service.loan;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.account.entity.loan.dto.LoanInfoDto;
+import com.fjhx.account.entity.loan.dto.LoanInfoSelectDto;
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import com.fjhx.account.entity.loan.vo.LoanInfoVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 借款信息 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+public interface LoanInfoService extends BaseService<LoanInfo> {
+
+    /**
+     * 借款信息分页
+     */
+    Page<LoanInfoVo> getPage(LoanInfoSelectDto dto);
+
+    /**
+     * 借款人列表
+     */
+    List<LoanInfo> getLoanUserList(LoanInfoSelectDto dto);
+
+    /**
+     * 借款信息明细
+     */
+    LoanInfoVo detail(Long id);
+
+    /**
+     * 借款信息新增
+     */
+    void add(LoanInfoDto loanInfoDto);
+
+}

+ 132 - 0
hx-account/src/main/java/com/fjhx/account/service/loan/impl/LoanInfoServiceImpl.java

@@ -0,0 +1,132 @@
+package com.fjhx.account.service.loan.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+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.enums.AccountRunningWaterEnum;
+import com.fjhx.account.entity.account.po.AccountManagement;
+import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.loan.dto.LoanInfoDto;
+import com.fjhx.account.entity.loan.dto.LoanInfoSelectDto;
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import com.fjhx.account.entity.loan.vo.LoanInfoVo;
+import com.fjhx.account.mapper.loan.LoanInfoMapper;
+import com.fjhx.account.service.account.AccountManagementService;
+import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.loan.LoanInfoService;
+import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.common.utils.Assert;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.common.utils.wrapper.SqlField;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 借款信息 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Service
+public class LoanInfoServiceImpl extends ServiceImpl<LoanInfoMapper, LoanInfo> implements LoanInfoService {
+
+    @Autowired
+    private CorporationService corporationService;
+    @Autowired
+    private AccountManagementService accountManagementService;
+    @Autowired
+    private AccountRunningWaterService accountRunningWaterService;
+
+    @Override
+    public Page<LoanInfoVo> getPage(LoanInfoSelectDto dto) {
+        IWrapper<LoanInfo> wrapper = getWrapper();
+        //归属公司
+        wrapper.eq(LoanInfo::getCorporationId, dto.getCorporationId());
+        //到款状态
+        wrapper.eq(LoanInfo::getRepaymentStatus, dto.getRepaymentStatus());
+        //关键字
+        wrapper.keyword(dto.getKeyword(),
+                new SqlField(LoanInfo::getLoanUserName),
+                new SqlField(LoanInfo::getAmount),
+                new SqlField(LoanInfo::getLoanTime)
+        );
+        //排序 借款时间>创建时间>id
+        wrapper.orderByDesc("li", LoanInfo::getLoanTime);
+        wrapper.orderByDesc("li", LoanInfo::getCreateTime);
+        wrapper.orderByDesc("li", LoanInfo::getId);
+        Page<LoanInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<LoanInfoVo> records = page.getRecords();
+        //赋值归属公司名称
+        corporationService.attributeAssign(records, LoanInfoVo::getCorporationId, (item, corporation) -> {
+            item.setCorporationName(corporation.getName());
+        });
+        //赋值创建人名称
+        UserUtil.assignmentNickName(records, LoanInfoVo::getCreateUser, LoanInfoVo::setCreateUserName);
+        return page;
+    }
+
+    /**
+     * 借款人列表
+     */
+    @Override
+    public List<LoanInfo> getLoanUserList(LoanInfoSelectDto dto) {
+        List<LoanInfo> list = this.list(q -> q
+                .select(LoanInfo::getLoanUserName)
+                .groupBy(LoanInfo::getLoanUserName)
+                .isNotNull(LoanInfo::getLoanUserName)
+                .eq(LoanInfo::getCreateUser, SecurityUtils.getUserId())
+                .like(LoanInfo::getLoanUserName, dto.getKeyword())
+        );
+        return list;
+    }
+
+    @Override
+    public LoanInfoVo detail(Long id) {
+        Assert.notEmpty(id, "借款id不能为空");
+        LoanInfo LoanInfo = this.getById(id);
+        LoanInfoVo result = BeanUtil.toBean(LoanInfo, LoanInfoVo.class);
+        //赋值归属公司名称
+        Corporation corporation = corporationService.getById(result.getCorporationId());
+        if (ObjectUtil.isNotEmpty(corporation)) {
+            result.setCorporationName(corporation.getName());
+        }
+        //赋值付款账号名称
+        AccountManagement accountManagement = accountManagementService.getById(result.getLoanAccountId());
+        if (ObjectUtil.isNotEmpty(accountManagement)) {
+            result.setLoanAccountName(accountManagement.getName());
+        }
+        return result;
+    }
+
+    @Override
+    @DSTransactional
+    public void add(LoanInfoDto loanInfoDto) {
+        loanInfoDto.setRepaymentStatus(0);
+        this.save(loanInfoDto);
+        //创建支出流水
+        AccountRunningWater accountRunningWater = new AccountRunningWater();
+        accountRunningWater.setStatus("20");
+        accountRunningWater.setType(AccountRunningWaterEnum.LOAN.getKey());
+        accountRunningWater.setRemarks(loanInfoDto.getRemarks());
+        accountRunningWater.setTransactionTime(loanInfoDto.getLoanTime());
+        accountRunningWater.setAccountManagementId(loanInfoDto.getLoanAccountId());
+        accountRunningWater.setAmount(loanInfoDto.getAmount());
+        Assert.notEmpty(loanInfoDto.getCurrency(), "借款币种不能为空");
+        accountRunningWater.setCurrency(loanInfoDto.getCurrency());
+        accountRunningWater.setBusinessId(loanInfoDto.getId());
+        //操作余额
+        accountRunningWaterService.changeRemainder(accountRunningWater);
+        accountRunningWaterService.save(accountRunningWater);
+    }
+
+}

+ 31 - 0
hx-account/src/main/java/com/fjhx/account/service/repayment/RepaymentRecordsService.java

@@ -0,0 +1,31 @@
+package com.fjhx.account.service.repayment;
+
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsDto;
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsSelectDto;
+import com.fjhx.account.entity.repayment.po.RepaymentRecords;
+import com.fjhx.account.entity.repayment.vo.RepaymentRecordsVo;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 还款记录 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+public interface RepaymentRecordsService extends BaseService<RepaymentRecords> {
+
+    /**
+     * 还款记录列表
+     */
+    List<RepaymentRecordsVo> getList(RepaymentRecordsSelectDto dto);
+
+    /**
+     * 还款记录新增
+     */
+    void add(RepaymentRecordsDto repaymentRecordsDto);
+
+}

+ 88 - 0
hx-account/src/main/java/com/fjhx/account/service/repayment/impl/RepaymentRecordsServiceImpl.java

@@ -0,0 +1,88 @@
+package com.fjhx.account.service.repayment.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.account.entity.account.enums.AccountRunningWaterEnum;
+import com.fjhx.account.entity.account.po.AccountRunningWater;
+import com.fjhx.account.entity.loan.po.LoanInfo;
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsDto;
+import com.fjhx.account.entity.repayment.dto.RepaymentRecordsSelectDto;
+import com.fjhx.account.entity.repayment.po.RepaymentRecords;
+import com.fjhx.account.entity.repayment.vo.RepaymentRecordsVo;
+import com.fjhx.account.mapper.repayment.RepaymentRecordsMapper;
+import com.fjhx.account.service.account.AccountRunningWaterService;
+import com.fjhx.account.service.loan.LoanInfoService;
+import com.fjhx.account.service.repayment.RepaymentRecordsService;
+import com.fjhx.common.utils.Assert;
+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;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 还款记录 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-09-15
+ */
+@Service
+public class RepaymentRecordsServiceImpl extends ServiceImpl<RepaymentRecordsMapper, RepaymentRecords> implements RepaymentRecordsService {
+
+    @Autowired
+    private AccountRunningWaterService accountRunningWaterService;
+    @Autowired
+    private LoanInfoService loanInfoService;
+
+    @Override
+    public List<RepaymentRecordsVo> getList(RepaymentRecordsSelectDto dto) {
+        IWrapper<RepaymentRecords> wrapper = getWrapper();
+        //借款id过滤
+        Assert.notEmpty(dto.getLoanId(), "借款id不能为空");
+        wrapper.eq(RepaymentRecords::getLoanId, dto.getLoanId());
+        //排序 付款时间>创建时间>id
+        wrapper.orderByDesc("rr", RepaymentRecords::getRepaymentTime);
+        wrapper.orderByDesc("rr", RepaymentRecords::getCreateTime);
+        wrapper.orderByDesc("rr", RepaymentRecords::getId);
+        List<RepaymentRecordsVo> list = this.baseMapper.getList(wrapper);
+        //赋值登记人名称
+        UserUtil.assignmentNickName(list, RepaymentRecordsVo::getCreateUser, RepaymentRecordsVo::setCreateUserName);
+        return list;
+    }
+
+    @Override
+    @DSTransactional
+    public void add(RepaymentRecordsDto repaymentRecordsDto) {
+        Assert.notEmpty(repaymentRecordsDto.getLoanId(), "借款id不能为空");
+        this.save(repaymentRecordsDto);
+        //创建收入流水
+        AccountRunningWater accountRunningWater = new AccountRunningWater();
+        accountRunningWater.setStatus("10");
+        accountRunningWater.setType(AccountRunningWaterEnum.REPAYMENT.getKey());
+        accountRunningWater.setRemarks(repaymentRecordsDto.getRemarks());
+        accountRunningWater.setTransactionTime(repaymentRecordsDto.getRepaymentTime());
+        accountRunningWater.setAccountManagementId(repaymentRecordsDto.getRepaymentAccountId());
+        accountRunningWater.setAmount(repaymentRecordsDto.getAmount());
+        Assert.notEmpty(repaymentRecordsDto.getCurrency(), "还款币种不能为空");
+        accountRunningWater.setCurrency(repaymentRecordsDto.getCurrency());
+        accountRunningWater.setBusinessId(repaymentRecordsDto.getId());
+        //操作余额
+        accountRunningWaterService.changeRemainder(accountRunningWater);
+        accountRunningWaterService.save(accountRunningWater);
+        //修改借款状态
+        LoanInfo loanInfo = loanInfoService.getById(repaymentRecordsDto.getLoanId());
+        List<RepaymentRecords> repaymentRecordsList = this.list(q -> q.eq(RepaymentRecords::getLoanId, repaymentRecordsDto.getLoanId()));
+        BigDecimal repaymentAmount = repaymentRecordsList.stream().map(RepaymentRecords::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        if (repaymentAmount.compareTo(loanInfo.getAmount()) < 0) {
+            loanInfo.setRepaymentStatus(1);//部分还款
+        } else {
+            loanInfo.setRepaymentStatus(2);//已还款
+        }
+        loanInfoService.updateById(loanInfo);
+    }
+
+}

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

@@ -16,6 +16,7 @@ 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.Assert;
 import com.fjhx.common.utils.ExchangeRateUtil;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -55,6 +56,7 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
         wrapper.eq(Transaction::getIsFlowingWater, dto.getIsFlowingWater());
         wrapper.eq(Transaction::getDepartmentId, dto.getDepartmentId());
         wrapper.eq(Transaction::getType, dto.getType());
+        wrapper.eq(Transaction::getCorporationId, dto.getCorporationId());
         //关键字搜索
         if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
             List<Long> accountIds = accountManagementService.listObject(AccountManagement::getId,
@@ -113,6 +115,7 @@ public class TransactionServiceImpl extends ServiceImpl<TransactionMapper, Trans
     @Override
     @DSTransactional
     public void add(TransactionDto transactionDto) {
+        Assert.notEmpty(transactionDto.getDeptType(), "往来部门类型不能为空");
         //如果是流水就创建流水数据
         if (1 == transactionDto.getIsFlowingWater()) {
             AccountRunningWater accountRunningWater = new AccountRunningWater();

+ 63 - 52
hx-account/src/main/resources/mapper/account/AccountRunningWaterMapper.xml

@@ -4,29 +4,30 @@
     <!--这段代码正常是不需要跨库查询的。但是一开始封装包的时候分装的不合理,pom里面包是不能互相引用的。account包继承sale包会出现依赖冲突,目前不好改动,只能跨库查询-->
     <select id="getPage" resultType="com.fjhx.account.entity.account.vo.AccountRunningWaterVo">
         SELECT arw.*,
-               IF
-                   (
-                           arw.type = 40,
-                           (SELECT GROUP_CONCAT(c.`code`)
-                            FROM tax_refund_details trd
-                                     LEFT JOIN bytesailing_sale.contract c ON c.id = trd.contract_id
-                            WHERE trd.account_running_water_id = arw.id),
-                           IF
-                               (
-                                       arw.type = 30, (SELECT GROUP_CONCAT(clc.contract_code)
-                                                       FROM bytesailing_sale.claim cl
-                                                                LEFT JOIN bytesailing_sale.claim_contract clc ON clc.claim_id = cl.id
-                                                       WHERE cl.business_id = arw.id),
-                                       (SELECT IF
-                                                   (
-                                                           t1.type = 20,
-                                                           (SELECT GROUP_CONCAT(c.`code`)
-                                                            FROM bytesailing_purchase.pay pa
-                                                                     LEFT JOIN bytesailing_purchase.pay_detail pad ON pad.pay_id = pa.id
-                                                               LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
-                                                               LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
-                                                               WHERE
-                                                               t1.business_id = pa.id ),(
+               if(arw.type = 60, (select c.`code` from bytesailing_sale.contract c where c.id = arw.business_id),
+                  IF
+                      (
+                              arw.type = 40,
+                              (SELECT GROUP_CONCAT(c.`code`)
+                               FROM tax_refund_details trd
+                                        LEFT JOIN bytesailing_sale.contract c ON c.id = trd.contract_id
+                               WHERE trd.account_running_water_id = arw.id),
+                              IF
+                                  (
+                                          arw.type = 30, (SELECT GROUP_CONCAT(clc.contract_code)
+                                                          FROM bytesailing_sale.claim cl
+                                                                   LEFT JOIN bytesailing_sale.claim_contract clc ON clc.claim_id = cl.id
+                                                          WHERE cl.business_id = arw.id),
+                                          (SELECT IF
+                                                      (
+                                                              t1.type = 20,
+                                                              (SELECT GROUP_CONCAT(c.`code`)
+                                                               FROM bytesailing_purchase.pay pa
+                                                                        LEFT JOIN bytesailing_purchase.pay_detail pad ON pad.pay_id = pa.id
+                                                                  LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
+                                                                  LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
+                                                                  WHERE
+                                                                  t1.business_id = pa.id ),(
 					SELECT
 						GROUP_CONCAT( t4.`code` )
 					FROM
@@ -37,33 +38,35 @@
 						t1.business_id = t2.id
 					)
 				) contractCodes
-                                        FROM account_payment t1
-                                        WHERE t1.id = arw.business_id)
-                               )
+                                           FROM account_payment t1
+                                           WHERE t1.id = arw.business_id)
+                                  )
+                      )
                    ) AS contractCodes,
-               IF
-                   (
-                           arw.type = 40,
-                           (SELECT GROUP_CONCAT(c.`id`)
-                            FROM tax_refund_details trd
-                                     LEFT JOIN bytesailing_sale.contract c ON c.id = trd.contract_id
-                            WHERE trd.account_running_water_id = arw.id),
-                           IF
-                               (
-                                       arw.type = 30, (SELECT GROUP_CONCAT(clc.contract_id)
-                                                       FROM bytesailing_sale.claim cl
-                                                                LEFT JOIN bytesailing_sale.claim_contract clc ON clc.claim_id = cl.id
-                                                       WHERE cl.business_id = arw.id),
-                                       (SELECT IF
-                                                   (
-                                                           t1.type = 20,
-                                                           (SELECT GROUP_CONCAT(c.`id`)
-                                                            FROM bytesailing_purchase.pay pa
-                                                                     LEFT JOIN bytesailing_purchase.pay_detail pad ON pad.pay_id = pa.id
-                                                               LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
-                                                               LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
-                                                               WHERE
-                                                               t1.business_id = pa.id ),(
+               if(arw.type = 60, (select c.`id` from bytesailing_sale.contract c where c.id = arw.business_id),
+                  IF
+                      (
+                              arw.type = 40,
+                              (SELECT GROUP_CONCAT(c.`id`)
+                               FROM tax_refund_details trd
+                                        LEFT JOIN bytesailing_sale.contract c ON c.id = trd.contract_id
+                               WHERE trd.account_running_water_id = arw.id),
+                              IF
+                                  (
+                                          arw.type = 30, (SELECT GROUP_CONCAT(clc.contract_id)
+                                                          FROM bytesailing_sale.claim cl
+                                                                   LEFT JOIN bytesailing_sale.claim_contract clc ON clc.claim_id = cl.id
+                                                          WHERE cl.business_id = arw.id),
+                                          (SELECT IF
+                                                      (
+                                                              t1.type = 20,
+                                                              (SELECT GROUP_CONCAT(c.`id`)
+                                                               FROM bytesailing_purchase.pay pa
+                                                                        LEFT JOIN bytesailing_purchase.pay_detail pad ON pad.pay_id = pa.id
+                                                                  LEFT JOIN bytesailing_purchase.purchase p ON pad.purchase_id = p.id
+                                                                  LEFT JOIN bytesailing_sale.contract c ON p.data_resource_id = c.id
+                                                                  WHERE
+                                                                  t1.business_id = pa.id ),(
 					SELECT
 						GROUP_CONCAT( t4.`id` )
 					FROM
@@ -74,9 +77,10 @@
 						t1.business_id = t2.id
 					)
 				) contractCodes
-                                        FROM account_payment t1
-                                        WHERE t1.id = arw.business_id)
-                               )
+                                           FROM account_payment t1
+                                           WHERE t1.id = arw.business_id)
+                                  )
+                      )
                    ) AS contractIds,
                am.alias accountManagementName,
                am.corporation_id
@@ -140,4 +144,11 @@
             LIMIT #{size}
     </select>
 
+    <!-- 要切换到sale库才能执行 -->
+    <update id="exchangeSettlementByContractId">
+        update contract
+        set is_exchange_settlement = #{status}
+        where id = #{contractId}
+    </update>
+
 </mapper>

+ 22 - 0
hx-account/src/main/resources/mapper/loan/LoanInfoMapper.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.account.mapper.loan.LoanInfoMapper">
+    <select id="getPage" resultType="com.fjhx.account.entity.loan.vo.LoanInfoVo">
+        select li.id,
+               li.corporation_id,
+               li.loan_user_name,
+               li.loan_time,
+               li.amount,
+               li.currency,
+               li.loan_account_id,
+               li.remarks,
+               li.repayment_status,
+               li.create_user,
+               li.create_time,
+               li.update_user,
+               li.update_time
+        from loan_info li
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 20 - 0
hx-account/src/main/resources/mapper/repayment/RepaymentRecordsMapper.xml

@@ -0,0 +1,20 @@
+<?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.repayment.RepaymentRecordsMapper">
+    <select id="getList" resultType="com.fjhx.account.entity.repayment.vo.RepaymentRecordsVo">
+        select rr.id,
+               rr.loan_id,
+               rr.repayment_account_id,
+               rr.amount,
+               rr.currency,
+               rr.repayment_time,
+               rr.remarks,
+               rr.create_user,
+               rr.create_time,
+               rr.update_user,
+               rr.update_time
+        from repayment_records rr
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 2 - 1
hx-account/src/main/resources/mapper/transaction/TransactionMapper.xml

@@ -13,7 +13,8 @@
                t.create_user,
                t.create_time,
                t.update_user,
-               t.update_time
+               t.update_time,
+               t.corporation_id
         from transaction t
             ${ew.customSqlSegment}
     </select>

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


+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/commission/CommissionController.java

@@ -33,6 +33,15 @@ public class CommissionController {
         return commissionService.getPage(dto);
     }
 
+    /**
+     * 业绩提成表头部统计
+     */
+    @PostMapping("/getHeadStatistics")
+    public CommissionVo getHeadStatistics(@RequestBody CommissionSelectDto dto) {
+        return commissionService.getHeadStatistics(dto);
+    }
+
+
 
 
 }

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

@@ -139,7 +139,7 @@ public class ContractController {
      * 国家销售统计(数据看板-销售分析页面开发)
      */
     @PostMapping("/countrySalesStatistics")
-    public List<ContractDto> countrySalesStatistics(@RequestBody ContractDto dto) {
+    public List<ContractVo> countrySalesStatistics(@RequestBody ContractDto dto) {
         return contractService.countrySalesStatistics(dto);
     }
 

+ 4 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractSelectDto.java

@@ -53,5 +53,9 @@ public class ContractSelectDto extends BaseSelectDto {
      * 合同类型
      */
     private String contractType;
+    /**
+     * 是否结汇 1是 0不是
+     */
+    private String isExchangeSettlement;
 
 }

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

@@ -376,4 +376,9 @@ public class Contract extends BasePo {
      */
     @TableField(exist = false)
     private String createTimeEn;
+
+    /**
+     * 是否结汇 1是 0不是
+     */
+    private String isExchangeSettlement;
 }

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

@@ -21,6 +21,10 @@ import lombok.Setter;
 public class ContractInvoice extends BasePo {
 
     /**
+     * 归属公司ID
+     */
+    private Long corporationId;
+    /**
      * 供应商ID
      */
     private Long customerId;

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

@@ -21,6 +21,11 @@ public class ContractInvoiceVo extends ContractInvoice {
     private String customerName;
 
     /**
+     * 归属公司名称
+     */
+    private String corporationName;
+
+    /**
      * 合同号多个
      */
     private String contractCodes;

+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -174,6 +174,15 @@ public class ContractVo extends Contract {
      * 总数
      */
     private BigDecimal sumQuantity;
+    /**
+     * 国家名称
+     */
+    private String countryName;
+    /**
+     * 国家图标
+     */
+    private String countryIcon;
+
 
 }
 

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

@@ -249,6 +249,22 @@ public class ContractFlow extends FlowDelegate {
         reStart1(contract);
     }
 
+    public void reStartUpdate(ContractDto contract) {
+        if (StringUtils.isEmpty(contract.getCurrency())) {
+            throw new ServiceException("币种不能为空");
+        }
+        // 保存合同产品
+        List<ContractProduct> contractProductList = contract.getContractProductList();
+
+        // 赋值待处理数量
+        if (CollectionUtils.isNotEmpty(contractProductList)) {
+            contractProductList.forEach(item -> item.setExpendQuantity(item.getQuantity()));
+        }
+
+        //调用公共代码
+        commStart(contract, 1);
+    }
+
     public void reStart1(ContractDto contract) {
         Long contractId = contract.getId();
         Assert.notEmpty(contractId, "合同id不能为空");

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

@@ -442,12 +442,12 @@ public class ContractUpdateFlow extends FlowDelegate {
     private void reStart(JSONObject submitData) {
         ContractDto contract = submitData.toJavaObject(ContractDto.class);
 
-        Assert.notEmpty(contract.getId(), "合同id不能为空");
+        Assert.notEmpty(contract.getOldContractId(), "合同id不能为空");
 
         //变更合同需要提前操作数据
         contract = opDate(contract);
 
-        contractFlow.reStart1(contract);
+        contractFlow.reStartUpdate(contract);
     }
 
     /**

+ 6 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/commission/CommissionMapper.java

@@ -24,4 +24,10 @@ public interface CommissionMapper extends BaseMapper<Commission> {
      */
     Page<CommissionVo> getPage(@Param("page") Page<Object> page, @Param("ew")QueryWrapper<Object> queryWrapper);
 
+    /**
+     * 头部统计
+     * @param queryWrapper
+     * @return
+     */
+    CommissionVo getHeadStatistics(@Param("ew")QueryWrapper<Object> queryWrapper);
 }

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

@@ -82,7 +82,7 @@ public interface ContractMapper extends BaseMapper<Contract> {
     /**
      * 国家销售统计(数据看板-销售分析页面开发)
      */
-    List<ContractDto> countrySalesStatistics(@Param("ew") QueryWrapper<Object> query);
+    List<ContractVo> countrySalesStatistics(@Param("ew") QueryWrapper<Object> query);
 
     /**
      * 客户销售统计(数据看板-销售分析页面开发)

+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/service/commission/CommissionService.java

@@ -7,6 +7,8 @@ import com.fjhx.sale.entity.commission.vo.CommissionVo;
 import com.fjhx.sale.entity.commission.dto.CommissionSelectDto;
 import com.fjhx.sale.entity.commission.dto.CommissionDto;
 
+import java.util.Map;
+
 
 /**
  * <p>
@@ -24,6 +26,13 @@ public interface CommissionService extends BaseService<Commission> {
     Page<CommissionVo> getPage(CommissionSelectDto dto);
 
     /**
+     * 头部统计
+     * @param dto
+     * @return
+     */
+    CommissionVo getHeadStatistics(CommissionSelectDto dto);
+
+    /**
      * 结算功能(添加业务提成表与业务提成规则表)
      */
     void settlement(CommissionDto commissionDto);

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

@@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Map;
 
 
 /**
@@ -50,6 +52,36 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
         return page;
     }
 
+    /**
+     * 头部统计
+     * @param dto
+     * @return
+     */
+    @Override
+    public CommissionVo getHeadStatistics(CommissionSelectDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.eq(ObjectUtil.isNotEmpty(dto.getUserId()), "c.user_id", dto.getUserId());
+        query.eq(ObjectUtil.isNotEmpty(dto.getTime()), "DATE_FORMAT(c.create_time,'%Y')", dto.getTime());
+        query.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"c.contract_code",dto.getKeyword());
+        query.orderByDesc("c.create_time");
+        CommissionVo commissionVo = this.baseMapper.getHeadStatistics(query);
+        if(ObjectUtil.isEmpty(commissionVo)){
+            return new CommissionVo();
+        }
+        // 毛利
+        BigDecimal grossProfit = commissionVo.getTotalIncome().subtract(commissionVo.getTotalExpenses());
+        commissionVo.setGrossGrofit(grossProfit);
+
+        if (commissionVo.getTotalIncome().equals(BigDecimal.ZERO)) {
+            commissionVo.setGrossRofitMargin(BigDecimal.ZERO);
+        } else {
+            commissionVo.setGrossRofitMargin(
+                    new BigDecimal("100").multiply(grossProfit).divide(commissionVo.getTotalIncome(), 2, RoundingMode.HALF_UP)
+            );
+        }
+        return commissionVo;
+    }
+
 
     /**
      * 结算功能(添加业务提成表与业务提成规则表,修改合同表的结算状态)

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

@@ -135,7 +135,7 @@ public interface ContractService extends BaseService<Contract> {
     /**
      * 国家销售统计(数据看板-销售分析页面开发)
      */
-    List<ContractDto> countrySalesStatistics(ContractDto dto);
+    List<ContractVo> countrySalesStatistics(ContractDto dto);
 
     /**
      * 客户销售统计(数据看板-销售分析页面开发)

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

@@ -3,6 +3,8 @@ 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.common.entity.corporation.po.Corporation;
+import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.entity.customer.vo.CustomerFollowRecordsVo;
 import com.fjhx.customer.service.customer.CustomerService;
@@ -10,6 +12,7 @@ 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.purchase.entity.subscribe.vo.SubscribeDetailVo;
 import com.fjhx.sale.entity.contract.po.ContractInvoice;
 import com.fjhx.sale.entity.contract.po.ContractInvoiceDetails;
 import com.fjhx.sale.entity.contract.vo.ContractInvoiceDetailsVo;
@@ -59,6 +62,9 @@ public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMappe
 
     @Autowired
     private CustomerService customerService;
+
+    @Autowired
+    private CorporationService corporationService;
     /**
      * 分页
      * @param dto
@@ -81,6 +87,10 @@ public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMappe
             customerService.attributeAssign(list, ContractInvoiceVo::getCustomerId, (item, customer) -> {
                 item.setCustomerName(customer.getName());
             });
+            //赋值归属公司
+            corporationService.attributeAssign(list, ContractInvoiceVo::getCorporationId, (item, corporation) -> {
+                item.setCorporationName(corporation.getName());
+            });
             UserUtil.assignmentNickName(list, BasePo::getCreateUser, ContractInvoiceVo::setUserName);
         }
         return page;
@@ -100,6 +110,8 @@ public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMappe
         }
         Customer customer = customerService.getById(result.getCustomerId());
         result.setCustomerName(ObjectUtils.isEmpty(customer)?"":customer.getName());
+        Corporation corporation = corporationService.getById(result.getCorporationId());
+        result.setCorporationName(ObjectUtils.isEmpty(corporation)?"":corporation.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);

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

@@ -337,6 +337,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         //过滤合同类型
         wrapper.eq("t1.contract_type", dto.getContractType());
 
+        //过滤是否结汇
+        wrapper.eq("t1", Contract::getIsExchangeSettlement, dto.getIsExchangeSettlement());
+
         Page<ContractVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ContractVo> list = page.getRecords();
         if (CollectionUtils.isNotEmpty(list)) {
@@ -849,22 +852,26 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
      */
     @Override
     public Map<String, Object> salesStatistics(ContractDto dto) {
+        List<Long> authIdList = customerService.getAuthIdList();
+        if(CollectionUtils.isEmpty(authIdList)){
+            return new HashMap<>();
+        }
+
         //添加查询条件
         QueryWrapper<Contract> query = Wrappers.<Contract>query();
-        selectTime(query, dto);
-        query.select("sum(amount) amount");
-
+        selectTime(query, dto,authIdList);
+        query.select("sum(amount*rate) amount");
         //查询销售额
         Contract contract = baseMapper.selectOne(query);
         query.clear();
         //查询订单数
-        selectTime(query, dto);
+        selectTime(query, dto,authIdList);
 
         Long count = baseMapper.selectCount(query);
 
         //查询下单的客户人数
         query.clear();
-        selectTime(query, dto);
+        selectTime(query, dto,authIdList);
         query.select("count(DISTINCT(buy_corporation_id)) count");
         Contract contract1 = baseMapper.selectOne(query);
 
@@ -877,7 +884,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
         //赋值
         if (ObjectUtil.isNotEmpty(contract)) {
-            map.put("amount", contract.getAmount());
+            map.put("amount", contract.getAmount().setScale(2, RoundingMode.HALF_UP));
         }
 
         if (ObjectUtil.isNotEmpty(contract1)) {
@@ -890,14 +897,14 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
      * 国家销售统计(数据看板-销售分析页面开发)
      */
     @Override
-    public List<ContractDto> countrySalesStatistics(ContractDto dto) {
+    public List<ContractVo> countrySalesStatistics(ContractDto dto) {
         QueryWrapper<Object> query = Wrappers.query();
         query.ge("DATE_FORMAT(cc.create_time,'%Y-%m')", dto.getBeginTime());
         query.le("DATE_FORMAT(cc.create_time,'%Y-%m')", dto.getEndTime());
         query.groupBy("cc.buy_country_id");
         query.orderByDesc("amount");
         //查询销售国家统计信息
-        List<ContractDto> contractDtoList = baseMapper.countrySalesStatistics(query);
+        List<ContractVo> contractDtoList = baseMapper.countrySalesStatistics(query);
         return contractDtoList;
     }
 
@@ -1461,7 +1468,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     }
 
     // 添加时间的查询条件
-    private void selectTime(QueryWrapper<Contract> query, ContractDto dto) {
+    private void selectTime(QueryWrapper<Contract> query, ContractDto dto,List<Long> authIdList) {
+        query.in("buy_corporation_id", authIdList);
+        query.eq("is_change", "0");//列表只展示未变更得数据
+        query.ne("is_show", 1);
+        query.between("status", FlowStatusEnum1.DRAFT.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
         query.ge("DATE_FORMAT(create_time,'%Y-%m')", dto.getBeginTime());
         query.le("DATE_FORMAT(create_time,'%Y-%m')", dto.getEndTime());
     }

+ 12 - 0
hx-sale/src/main/resources/mapper/commission/CommissionMapper.xml

@@ -8,4 +8,16 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getHeadStatistics" resultType="com.fjhx.sale.entity.commission.vo.CommissionVo">
+        SELECT
+            IFNULL( SUM( total_income ), 0 ) AS totalIncome,
+            IFNULL( SUM( total_expenses ), 0 ) AS totalExpenses,
+            IFNULL( SUM( after_sales_amount ), 0 ) AS afterSalesAmount,
+            IFNULL( SUM( public_amount ), 0 ) AS publicAmount,
+            IFNULL( SUM( have_overall_amount ), 0 ) AS haveOverallAmount,
+            IFNULL( SUM( departmental_commission ), 0 ) AS departmentalCommission,
+            IFNULL( SUM( personal_commission ), 0 ) AS personalCommission
+        FROM
+            commission c
+    </select>
 </mapper>

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

@@ -157,15 +157,15 @@
               left  JOIN  contract sq ON sq.buy_corporation_id = c.id
             ${ew.customSqlSegment}
     </select>
-    <select id="countrySalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
-        SELECT
-            sum(cc.amount) amount,
-            COUNT(cc.buy_country_id) count,
-            ai.name countryName
-
+    <select id="countrySalesStatistics" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+        SELECT sum(cc.amount) amount,
+               COUNT(cc.buy_country_id) count,
+            ai.name countryName,
+            ai.icon countryIcon
         FROM
             contract cc
-                LEFT JOIN bytesailing_base.customize_area ai ON cc.buy_country_id = ai.id
+            LEFT JOIN bytesailing_base.customize_area ai
+        ON cc.buy_country_id = ai.id
             ${ew.customSqlSegment}
     </select>
 

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