caozj před 2 roky
rodič
revize
70601c0945
25 změnil soubory, kde provedl 669 přidání a 13 odebrání
  1. 0 5
      hx-ehsd/src/main/java/com/fjhx/ehsd/entity/purchase/po/EhsdPurchase.java
  2. 10 0
      hx-ehsd/src/main/java/com/fjhx/ehsd/mapper/purchase/EhsdPurchaseProductMapper.java
  3. 10 0
      hx-ehsd/src/main/java/com/fjhx/ehsd/service/purchase/EhsdPurchaseProductService.java
  4. 15 0
      hx-ehsd/src/main/java/com/fjhx/ehsd/service/purchase/impl/EhsdPurchaseProductServiceImpl.java
  5. 16 0
      hx-ehsd/src/main/resources/mapper/purchase/EhsdPurchaseProductMapper.xml
  6. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/vo/PurchaseDetailVo.java
  7. 1 0
      hx-purchase/src/main/resources/mapper/purchase/PurchaseDetailMapper.xml
  8. 4 0
      hx-sale/pom.xml
  9. 0 0
      hx-sale/src/main/java/com/fjhx/sale/a-json/ContractBudgetApi.json
  10. 68 0
      hx-sale/src/main/java/com/fjhx/sale/controller/contract/ContractBudgetController.java
  11. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractBudgetDto.java
  12. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractBudgetSelectDto.java
  13. 1 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractProductSelectDto.java
  14. 6 6
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  15. 98 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractBudget.java
  16. 128 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractBudgetVo.java
  17. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractBudgetMapper.java
  18. 7 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/contract/ContractMapper.java
  19. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractBudgetService.java
  20. 7 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/ContractService.java
  21. 58 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractBudgetServiceImpl.java
  22. 3 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java
  23. 86 0
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  24. 30 0
      hx-sale/src/main/resources/mapper/contract/ContractBudgetMapper.xml
  25. 10 2
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

+ 0 - 5
hx-ehsd/src/main/java/com/fjhx/ehsd/entity/purchase/po/EhsdPurchase.java

@@ -119,11 +119,6 @@ public class EhsdPurchase extends BasePo {
     private Integer payStatus;
 
     /**
-     * 到货状态 0未到货  10 部分到货  20已到货
-     */
-    private Integer arrivalStatus;
-
-    /**
      * 采购总金额
      */
     private BigDecimal amount;

+ 10 - 0
hx-ehsd/src/main/java/com/fjhx/ehsd/mapper/purchase/EhsdPurchaseProductMapper.java

@@ -7,6 +7,10 @@ import com.fjhx.ehsd.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -23,4 +27,10 @@ public interface EhsdPurchaseProductMapper extends BaseMapper<EhsdPurchaseProduc
      */
     Page<EhsdPurchaseProductVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<EhsdPurchaseProduct> wrapper);
 
+    /**
+     * 查询采购产品总金额,通过数据来源ID
+     * @param contractIds
+     * @return
+     */
+    Map<Long, BigDecimal> getGroupSumAmount(List<Long> contractIds);
 }

+ 10 - 0
hx-ehsd/src/main/java/com/fjhx/ehsd/service/purchase/EhsdPurchaseProductService.java

@@ -7,6 +7,10 @@ import com.fjhx.ehsd.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.ehsd.entity.purchase.dto.EhsdPurchaseProductSelectDto;
 import com.fjhx.ehsd.entity.purchase.dto.EhsdPurchaseProductDto;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -43,4 +47,10 @@ public interface EhsdPurchaseProductService extends BaseService<EhsdPurchaseProd
      */
     void delete(Long id);
 
+    /**
+     * 查询采购产品总金额,通过数据来源ID
+     * @param contractIds
+     * @return
+     */
+    Map<Long, BigDecimal> getGroupSumAmount(List<Long> contractIds);
 }

+ 15 - 0
hx-ehsd/src/main/java/com/fjhx/ehsd/service/purchase/impl/EhsdPurchaseProductServiceImpl.java

@@ -12,6 +12,10 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.ehsd.entity.purchase.dto.EhsdPurchaseProductDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -54,4 +58,15 @@ public class EhsdPurchaseProductServiceImpl extends ServiceImpl<EhsdPurchaseProd
         this.removeById(id);
     }
 
+    /**
+     * 查询采购产品总金额,通过数据来源ID
+     * @param contractIds
+     * @return
+     */
+    @Override
+    public Map<Long, BigDecimal> getGroupSumAmount(List<Long> contractIds) {
+        return baseMapper.getGroupSumAmount(contractIds);
+    }
+
+
 }

+ 16 - 0
hx-ehsd/src/main/resources/mapper/purchase/EhsdPurchaseProductMapper.xml

@@ -21,4 +21,20 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getGroupSumAmount" resultType="java.util.Map">
+        SELECT
+            SUM(amount) ,
+            data_resource_id
+        FROM
+            ehsd_purchase_product
+        WHERE
+        t2.`status` &gt;= 30
+        AND t2.`status` &lt; 88
+        <if test="contractIds neq null and contractIds.size() > 0">
+            <foreach collection="contractIds" item="contractId" open="AND data_resource_id IN (" separator="," close=")">
+                #{contractId}
+            </foreach>
+        </if>
+        GROUP BY data_resource_id
+    </select>
 </mapper>

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/vo/PurchaseDetailVo.java

@@ -36,6 +36,11 @@ public class PurchaseDetailVo extends PurchaseDetail {
     private BigDecimal sumCount;
 
     /**
+     * 总采购金额
+     */
+    private BigDecimal sumAmount;
+
+    /**
      * 产品定义
      */
     private Integer productDefinition;

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

@@ -39,6 +39,7 @@
     <select id="getSumCountInDataResourceIds" resultType="com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo">
         SELECT
             sum( t1.count ) AS sumCount,
+            sum( t1.amount ) AS sumAmount,
             t1.data_resource_id
         FROM
             purchase_detail t1

+ 4 - 0
hx-sale/pom.xml

@@ -38,6 +38,10 @@
             <artifactId>hx-purchase</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-ehsd</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
hx-sale/src/main/java/com/fjhx/sale/a-json/ContractBudgetApi.json


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

@@ -0,0 +1,68 @@
+package com.fjhx.sale.controller.contract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.contract.ContractBudgetService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 外销合同--预算 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@RestController
+@RequestMapping("/contractBudget")
+public class ContractBudgetController {
+
+    @Autowired
+    private ContractBudgetService contractBudgetService;
+
+    /**
+     * 外销合同--预算分页
+     */
+    @PostMapping("/page")
+    public Page<ContractBudgetVo> page(@RequestBody ContractBudgetSelectDto dto) {
+        return contractBudgetService.getPage(dto);
+    }
+
+    /**
+     * 外销合同--预算明细
+     */
+    @PostMapping("/detail")
+    public ContractBudgetVo detail(@RequestBody BaseSelectDto dto) {
+        return contractBudgetService.detail(dto.getId());
+    }
+
+    /**
+     * 外销合同--预算新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContractBudgetDto contractBudgetDto) {
+        contractBudgetService.add(contractBudgetDto);
+    }
+
+    /**
+     * 外销合同--预算编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContractBudgetDto contractBudgetDto) {
+        contractBudgetService.edit(contractBudgetDto);
+    }
+
+    /**
+     * 外销合同--预算删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contractBudgetService.delete(dto.getId());
+    }
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同--预算新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class ContractBudgetDto extends ContractBudget {
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.contract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外销合同--预算列表查询入参实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class ContractBudgetSelectDto extends BaseSelectDto {
+
+}

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

@@ -14,4 +14,5 @@ import lombok.Setter;
 @Setter
 public class ContractProductSelectDto extends BaseSelectDto {
 
+    private String ids;
 }

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

@@ -77,17 +77,17 @@ public class Contract extends BasePo {
     /**
      * 卖方国家表id
      */
-    private Long sellCountryId;
+    private String sellCountryId;
 
     /**
      * 卖方省份id
      */
-    private Long sellProvinceId;
+    private String sellProvinceId;
 
     /**
      * 卖方城市id
      */
-    private Long sellCityId;
+    private String sellCityId;
 
     /**
      * 卖方详细地址
@@ -115,17 +115,17 @@ public class Contract extends BasePo {
     /**
      * 买方国家表id
      */
-    private Long buyCountryId;
+    private String buyCountryId;
 
     /**
      * 买方省份id
      */
-    private Long buyProvinceId;
+    private String buyProvinceId;
 
     /**
      * 买方城市id
      */
-    private Long buyCityId;
+    private String buyCityId;
 
     /**
      * 买方详细地址

+ 98 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/ContractBudget.java

@@ -0,0 +1,98 @@
+package com.fjhx.sale.entity.contract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外销合同--预算
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+@TableName("contract_budget")
+public class ContractBudget extends BasePo {
+
+    /**
+     * 外销合同ID
+     */
+    private Long contractId;
+
+    /**
+     * 拖车费币种
+     */
+    private String trailerFeeCurrency;
+
+    /**
+     * 拖车费
+     */
+    private BigDecimal trailerFee;
+
+    /**
+     * 报关费币种
+     */
+    private String customsFeeCurrency;
+
+    /**
+     * 报关费
+     */
+    private BigDecimal customsFee;
+
+    /**
+     * 代理费币种
+     */
+    private String agencyFeeCurrency;
+
+    /**
+     * 代理费
+     */
+    private BigDecimal agencyFee;
+
+    /**
+     * 港杂费币种
+     */
+    private String portMixedFeeCurrency;
+
+    /**
+     * 港杂费
+     */
+    private BigDecimal portMixedFee;
+
+    /**
+     * 验货红包币种
+     */
+    private String inspectionRedPackCurrency;
+
+    /**
+     * 验货红包
+     */
+    private BigDecimal inspectionRedPack;
+
+    /**
+     * 佣金币种
+     */
+    private String commissionCurrency;
+
+    /**
+     * 佣金
+     */
+    private BigDecimal commission;
+
+    /**
+     * 其他币种
+     */
+    private String otherCurrency;
+
+    /**
+     * 其他
+     */
+    private BigDecimal other;
+
+}

+ 128 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractBudgetVo.java

@@ -0,0 +1,128 @@
+package com.fjhx.sale.entity.contract.vo;
+
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 外销合同--预算列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Getter
+@Setter
+public class ContractBudgetVo extends Contract {
+    /**
+     * 拖车费币种
+     */
+    private String trailerFeeCurrency;
+
+    /**
+     * 拖车费
+     */
+    private BigDecimal trailerFee;
+
+    /**
+     * 报关费币种
+     */
+    private String customsFeeCurrency;
+
+    /**
+     * 报关费
+     */
+    private BigDecimal customsFee;
+
+    /**
+     * 代理费币种
+     */
+    private String agencyFeeCurrency;
+
+    /**
+     * 代理费
+     */
+    private BigDecimal agencyFee;
+
+    /**
+     * 港杂费币种
+     */
+    private String portMixedFeeCurrency;
+
+    /**
+     * 港杂费
+     */
+    private BigDecimal portMixedFee;
+
+    /**
+     * 验货红包币种
+     */
+    private String inspectionRedPackCurrency;
+
+    /**
+     * 验货红包
+     */
+    private BigDecimal inspectionRedPack;
+
+    /**
+     * 佣金币种
+     */
+    private String commissionCurrency;
+
+    /**
+     * 佣金
+     */
+    private BigDecimal commission;
+
+    /**
+     * 其他币种
+     */
+    private String otherCurrency;
+
+    /**
+     * 其他
+     */
+    private BigDecimal other;
+
+    /**
+     * 订单ID
+     */
+    private Long contractId;
+
+    /**
+     * 尔泓应付货款
+     */
+    private BigDecimal ehsdSumAmount;
+
+    /**
+     * 其他租户应付货款
+     */
+    private BigDecimal otherumAmount;
+
+    /**
+     * 毛利
+     */
+    private BigDecimal gross;
+
+    /**
+     * 毛利率
+     */
+    private BigDecimal grossRate;
+
+    /**
+     * 支出总计
+     */
+    private BigDecimal expenditureAmount;
+
+    /**
+     * 收入总计
+     */
+    private BigDecimal incomeAmount;
+
+    /**
+     * 应退税金额
+     */
+    private BigDecimal RefundableAmount;
+}

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

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外销合同--预算 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface ContractBudgetMapper extends BaseMapper<ContractBudget> {
+
+    /**
+     * 外销合同--预算分页
+     */
+    Page<ContractBudgetVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ContractBudget> wrapper);
+
+}

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

@@ -6,6 +6,8 @@ import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.ruoyi.common.annotation.TenantIgnore;
@@ -31,6 +33,11 @@ public interface ContractMapper extends BaseMapper<Contract> {
     Page<ContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
 
     /**
+     * 利润预算表
+     */
+    Page<ContractBudgetVo> getProfitBudgetPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contract> wrapper);
+
+    /**
      * 根据客户ID查询未包装的订单
      * @param customerId
      * @return

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

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.contract;
+
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetSelectDto;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetDto;
+
+
+/**
+ * <p>
+ * 外销合同--预算 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+public interface ContractBudgetService extends BaseService<ContractBudget> {
+
+    /**
+     * 外销合同--预算分页
+     */
+    Page<ContractBudgetVo> getPage(ContractBudgetSelectDto dto);
+
+    /**
+     * 外销合同--预算明细
+     */
+    ContractBudgetVo detail(Long id);
+
+    /**
+     * 外销合同--预算新增
+     */
+    void add(ContractBudgetDto contractBudgetDto);
+
+    /**
+     * 外销合同--预算编辑
+     */
+    void edit(ContractBudgetDto contractBudgetDto);
+
+    /**
+     * 外销合同--预算删除
+     */
+    void delete(Long id);
+
+}

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

@@ -9,6 +9,8 @@ import com.fjhx.sale.entity.commission.dto.CommissionDto;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
@@ -34,6 +36,11 @@ public interface ContractService extends BaseService<Contract> {
     Page<ContractVo> getPage(ContractSelectDto dto);
 
     /**
+     * 外销合同表分页
+     */
+    Page<ContractBudgetVo> getProfitBudgetPage(ContractSelectDto dto);
+
+    /**
      * 外销合同表明细
      */
     ContractVo detail(Long id);

+ 58 - 0
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractBudgetServiceImpl.java

@@ -0,0 +1,58 @@
+package com.fjhx.sale.service.contract.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.contract.po.ContractBudget;
+import com.fjhx.sale.mapper.contract.ContractBudgetMapper;
+import com.fjhx.sale.service.contract.ContractBudgetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.contract.dto.ContractBudgetDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 外销合同--预算 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-17
+ */
+@Service
+public class ContractBudgetServiceImpl extends ServiceImpl<ContractBudgetMapper, ContractBudget> implements ContractBudgetService {
+
+    @Override
+    public Page<ContractBudgetVo> getPage(ContractBudgetSelectDto dto) {
+        IWrapper<ContractBudget> wrapper = getWrapper();
+        wrapper.orderByDesc("cb", ContractBudget::getId);
+        Page<ContractBudgetVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ContractBudgetVo detail(Long id) {
+        ContractBudget ContractBudget = this.getOne(Wrappers.<ContractBudget>query().lambda().eq(com.fjhx.sale.entity.contract.po.ContractBudget::getContractId,id));
+        ContractBudgetVo result = BeanUtil.toBean(ContractBudget, ContractBudgetVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContractBudgetDto contractBudgetDto) {
+        this.save(contractBudgetDto);
+    }
+
+    @Override
+    public void edit(ContractBudgetDto contractBudgetDto) {
+        this.updateById(contractBudgetDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

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

@@ -135,6 +135,9 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
         if(StringUtils.isNotEmpty(dto.getKeyword())){
             wrapper.keyword(dto.getKeyword(),new SqlField("t1.`contractCode`"),new SqlField("t1.`userName`"));
         }
+        if(StringUtils.isNotEmpty(dto.getKeyword())){
+            wrapper.in("t1.id",Arrays.asList(dto.getIds()));
+        }
         Page<ContractProductVo> page = this.baseMapper.getEHSDPage(dto.getPage(), wrapper);
         List<ContractProductVo> list = page.getRecords();
         if(CollectionUtils.isNotEmpty(list)){

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

@@ -3,6 +3,7 @@ package com.fjhx.sale.service.contract.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -16,22 +17,29 @@ import com.fjhx.account.service.account.AccountManagementService;
 import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.entity.currency.po.CurrencyRate;
 import com.fjhx.common.entity.documentary.bo.DocumentaryData;
 import com.fjhx.common.enums.FlowStatusEnum;
 import com.fjhx.common.service.corporation.CorporationService;
+import com.fjhx.common.service.currency.CurrencyRateService;
 import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
 import com.fjhx.customer.entity.customer.dto.CustomerDto;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.ehsd.entity.purchase.po.EhsdPurchaseProduct;
+import com.fjhx.ehsd.service.purchase.EhsdPurchaseProductService;
 import com.fjhx.file.entity.FileInfoVo;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
 import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.entity.contract.vo.ContractBudgetVo;
 import com.fjhx.sale.entity.contract.vo.ContractDocumentaryVo;
 import com.fjhx.sale.entity.contract.vo.ContractPdfInfoVo;
 import com.fjhx.sale.entity.contract.vo.ContractVo;
@@ -42,6 +50,7 @@ import com.fjhx.sale.service.contract.ContractService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
@@ -54,6 +63,7 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -94,6 +104,15 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Autowired
     private AccountManagementService accountManagementService;
 
+    @Autowired
+    private EhsdPurchaseProductService ehsdPurchaseProductService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private CurrencyRateService currencyRateService;
+
     /**
      * 分页
      *
@@ -152,6 +171,73 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         return page;
     }
 
+    /**
+     * 利润预算
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<ContractBudgetVo> getProfitBudgetPage(ContractSelectDto dto) {
+        if(StringUtils.isEmpty(SecurityUtils.getTenantId())){
+            throw new ServiceException("租户ID不能为空");
+        }
+        IWrapper<Contract> wrapper = getWrapper();
+        wrapper.orderByDesc("t1", Contract::getCreateTime);
+        wrapper.between("t1", Contract::getStatus, FlowStatusEnum.PASS.getKey(), FlowStatusEnum.CANCELLATION.getKey() - 1);
+        Page<ContractBudgetVo> page = this.baseMapper.getProfitBudgetPage(dto.getPage(), wrapper);
+        List<ContractBudgetVo> list = page.getRecords();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<Long> contractIds = list.stream().map(ContractBudgetVo::getContractId).collect(Collectors.toList());
+            Map<Long,BigDecimal> ehsdAmountMap = ehsdPurchaseProductService.getGroupSumAmount(contractIds);
+            List<PurchaseDetailVo> otherAmountList = purchaseDetailService.getSumCountInDataResourceIds(contractIds);
+            Map<Long,BigDecimal> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId,PurchaseDetailVo::getSumCount));
+            List<CurrencyRate> currencyRateList = currencyRateService.getList();
+            Map<String,BigDecimal> currencyRateMap = currencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType,CurrencyRate::getRate));
+            for(ContractBudgetVo v : list){
+                v.setRefundableAmount(BigDecimal.ZERO);//先设置退税金额
+                if(MapUtils.isNotEmpty(ehsdAmountMap)){    //计算EHSD租户应付货款
+                    v.setEhsdSumAmount(ehsdAmountMap.getOrDefault(v.getContractId(),null));
+                }
+                if(MapUtils.isNotEmpty(otherAmountMap)){  //计算其他租户应付货款
+                    v.setOtherumAmount(otherAmountMap.getOrDefault(v.getContractId(),null));
+                }
+                if(StringUtils.isNotEmpty(v.getCurrencyRateJson())){//如果此条合同有汇率了
+                    Map<String,Object> map = JSON.parseObject(v.getCurrencyRateJson());
+                    //计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
+                    v.setIncomeAmount(v.getAmount().multiply(new BigDecimal(map.getOrDefault(v.getCurrency(), BigDecimal.ONE).toString())).add(v.getRefundableAmount()));
+                    //计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
+                    v.setExpenditureAmount(v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
+                            (v.getCustomsFee().multiply(new BigDecimal(map.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getAgencyFee().multiply(new BigDecimal(map.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getPortMixedFee().multiply(new BigDecimal(map.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getInspectionRedPack().multiply(new BigDecimal(map.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getCommission().multiply(new BigDecimal(map.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getOther().multiply(new BigDecimal(map.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getEhsdSumAmount()).add
+                            (v.getOtherumAmount()));
+                }else{//没有汇率取默认汇率
+                    //计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
+                    v.setIncomeAmount(v.getAmount().multiply(currencyRateMap.getOrDefault(v.getContractId(),new BigDecimal("1"))).add(v.getRefundableAmount()));
+                    //计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
+                    v.setExpenditureAmount(v.getTrailerFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
+                            (v.getCustomsFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getAgencyFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getPortMixedFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getInspectionRedPack().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getCommission().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getOther().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
+                            (v.getEhsdSumAmount()).add
+                            (v.getOtherumAmount()));
+                }
+                //计算毛利 收入-支出
+                v.setGross(v.getExpenditureAmount().subtract(v.getIncomeAmount()));
+                //计算毛利率 毛利/收入
+                v.setGrossRate(v.getGross().divide(v.getIncomeAmount(), RoundingMode.CEILING));
+            }
+        }
+        return page;
+    }
+
     @Override
     public ContractVo detail(Long id) {
         Contract Contract = this.getById(id);

+ 30 - 0
hx-sale/src/main/resources/mapper/contract/ContractBudgetMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.sale.mapper.contract.ContractBudgetMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
+        select
+            cb.id,
+            cb.contract_id,
+            cb.trailer_fee_currency,
+            cb.trailer_fee,
+            cb.customs_fee_currency,
+            cb.customs_fee,
+            cb.agency_fee_currency,
+            cb.agency_fee,
+            cb.port_mixed_fee_currency,
+            cb.port_mixed_fee,
+            cb.inspection_red_pack_currency,
+            cb.inspection_red_pack,
+            cb.commission_currency,
+            cb.commission,
+            cb.other_currency,
+            cb.other,
+            cb.create_user,
+            cb.create_time,
+            cb.update_time,
+            cb.update_user
+        from contract_budget cb
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

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

@@ -10,11 +10,19 @@
             ${ew.customSqlSegment}
     </select>
 
-    <select id="getProfitBudgetPage" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
+    <select id="getProfitBudgetPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
         SELECT
-            t1.*
+            t1.id AS contractId,
+            t1.`code`,
+            t1.buy_corporation_id ,
+            t1.user_name,
+            t1.amount,
+            t1.currency,
+            t1.currency_rate_json,
+            t2.*
         FROM
             contract t1
+        LEFT JOIN contract_budget t2 ON t1.id = t2.contract_id
         ${ew.customSqlSegment}
     </select>
 

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů