Răsfoiți Sursa

工作台贸易与物流结算金额统计dubbo接口实现

xucaiqin 2 ani în urmă
părinte
comite
3ea6c558dc

+ 9 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementLogisticsMapper.java

@@ -3,12 +3,14 @@ package com.sckw.payment.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpSettlementLogistics;
 import com.sckw.payment.model.dto.LedgerUnitDto;
+import com.sckw.payment.model.dto.MoneyType;
 import com.sckw.payment.model.dto.SettlementLogisticsDto;
 import com.sckw.payment.model.vo.req.SettlementReq;
 import com.sckw.payment.model.vo.res.SettlementLogisticsSumVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -68,4 +70,11 @@ public interface KwpSettlementLogisticsMapper extends BaseMapper<KwpSettlementLo
      * @return
      */
     List<String> selectJoin(@Param("entId") Long entId, @Param("entTarget") Long entTarget);
+    /**
+     * @param entId    顶级企业id
+     * @param cur       当月/周
+     * @param pre       上月/周
+     * @param unitType 企业类型
+     */
+    List<MoneyType> sumMoneyType(@Param("entId") Long entId, @Param("cur") List<LocalDateTime> cur, @Param("pre") List<LocalDateTime> pre, @Param("unitType") Integer unitType);
 }

+ 10 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementTradeMapper.java

@@ -3,12 +3,14 @@ package com.sckw.payment.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpSettlementTrade;
 import com.sckw.payment.model.dto.LedgerUnitDto;
+import com.sckw.payment.model.dto.MoneyType;
 import com.sckw.payment.model.dto.SettlementTradeDto;
 import com.sckw.payment.model.vo.req.SettlementTradeReq;
 import com.sckw.payment.model.vo.res.SettlementSumVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -31,7 +33,7 @@ public interface KwpSettlementTradeMapper extends BaseMapper<KwpSettlementTrade>
 
     List<LedgerUnitDto> getListById(@Param("id") Long id);
 
-    SettlementTradeDto selectDetail(@Param("id") Long id, @Param("unitTYpe") Integer unitType);
+    SettlementTradeDto selectDetail(@Param("id") Long id, @Param("unitType") Integer unitType);
 
     /**
      * 根据双方企业查询
@@ -42,4 +44,11 @@ public interface KwpSettlementTradeMapper extends BaseMapper<KwpSettlementTrade>
      */
     List<String> selectJoin(@Param("entId") Long entId, @Param("entTarget") Long entTarget);
 
+    /**
+     * @param entId    顶级企业id
+     * @param cur       当月/周
+     * @param pre       上月/周
+     * @param unitType 企业类型
+     */
+    List<MoneyType> sumMoneyType(@Param("entId") Long entId, @Param("cur") List<LocalDateTime> cur, @Param("pre") List<LocalDateTime> pre, @Param("unitType") Integer unitType);
 }

+ 12 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/MoneyType.java

@@ -0,0 +1,12 @@
+package com.sckw.payment.model.dto;
+
+import java.math.BigDecimal;
+
+/**
+ * 按类型统计结算单金额
+ *
+ * @param money 金额
+ * @param type  1-当月/周 2-上月/周
+ */
+public record MoneyType(BigDecimal money, Integer type) {
+}

+ 12 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java

@@ -13,6 +13,7 @@ import com.sckw.payment.model.KwpSettlementLogistics;
 import com.sckw.payment.model.constant.LogisticsUnitType;
 import com.sckw.payment.model.constant.SettlementEnum;
 import com.sckw.payment.model.dto.LedgerUnitDto;
+import com.sckw.payment.model.dto.MoneyType;
 import com.sckw.payment.model.dto.SettlementLogisticsDto;
 import com.sckw.payment.model.vo.req.SettlementReq;
 import com.sckw.payment.model.vo.res.SettlementLogisticsStatusCountVo;
@@ -29,6 +30,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.*;
 
 /**
@@ -337,4 +339,14 @@ public class KwpSettlementLogisticsService {
     public List<String> checkOrder(Long entId, Long entTarget) {
         return settlementLogisticsMapper.selectJoin(entId, entTarget);
     }
+    /**
+     * @param entId    顶级企业id
+     * @param cur       当月/周
+     * @param pre       上月/周
+     * @param unitType 企业类型 2-销售 1-采购
+     */
+    public List<MoneyType> moneySum(Long entId, List<LocalDateTime> cur, List<LocalDateTime> pre, Integer unitType) {
+        return settlementLogisticsMapper.sumMoneyType(entId,  cur, pre,  unitType);
+
+    }
 }

+ 13 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java

@@ -26,6 +26,7 @@ import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -228,13 +229,14 @@ public class KwpSettlementTradeService {
     public void updateById(KwpSettlementTrade kwpSettlementTrade) {
         settlementTradeMapper.updateById(kwpSettlementTrade);
     }
+
     /**
      * @param entId     企业id 采购方
      * @param entTarget 另一方企业id 销售方
      * @return
      */
     public List<String> checkOrder(Long entId, Long entTarget) {
-        return settlementTradeMapper.selectJoin(entId,entTarget);
+        return settlementTradeMapper.selectJoin(entId, entTarget);
     }
 
     /**
@@ -260,4 +262,14 @@ public class KwpSettlementTradeService {
         List<SettlementWalletDto> settlementWallet = settlementWalletService.queryList(id, SettlementOrderTypeEnum.TRADE.getStatus(), TradingEnum.getPrefix(trading));
         return new SettlementDetailDto<>(settlementTradeDto, settlementWallet);
     }
+
+    /**
+     * @param entId    顶级企业id
+     * @param cur       当月/周
+     * @param pre       上月/周
+     * @param unitType 企业类型 2-销售 1-采购
+     */
+    public List<MoneyType> moneySum(Long entId, List<LocalDateTime> cur, List<LocalDateTime> pre, Integer unitType) {
+        return settlementTradeMapper.sumMoneyType(entId, cur, pre, unitType);
+    }
 }

+ 126 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/dubbo/PaymentDubboServiceImpl.java

@@ -4,20 +4,26 @@ import com.sckw.core.exception.BusinessException;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.model.constant.OrderEnum;
 import com.sckw.payment.api.model.dto.LedgerCount;
+import com.sckw.payment.api.model.dto.SettlementMoney;
+import com.sckw.payment.model.constant.LogisticsUnitType;
+import com.sckw.payment.model.constant.TradeUnitType;
 import com.sckw.payment.model.dto.LedgerSize;
+import com.sckw.payment.model.dto.MoneyType;
 import com.sckw.payment.service.KwpLedgerLogisticsService;
 import com.sckw.payment.service.KwpLedgerTradeService;
 import com.sckw.payment.service.KwpSettlementLogisticsService;
 import com.sckw.payment.service.KwpSettlementTradeService;
+import com.sckw.payment.utils.DateTimeUtil;
+import com.sckw.payment.utils.DecimalUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * @author xucaiqin
@@ -33,6 +39,23 @@ public class PaymentDubboServiceImpl implements PaymentDubboService {
     private final KwpSettlementLogisticsService settlementLogisticsService;
     private final KwpSettlementTradeService settlementTradeService;
 
+
+    private SettlementMoney change(List<MoneyType> moneyType) {
+        DecimalFormat df = new DecimalFormat("0.00");
+        BigDecimal curMoney = new BigDecimal("0.0"), preMoney = new BigDecimal("0.0");
+        for (MoneyType type : moneyType) {
+            if (type.type() == 1) {
+                curMoney = type.money();
+            } else {
+                preMoney = type.money();
+            }
+        }
+        int flag = curMoney.compareTo(preMoney) > 0 ? 1 : 2;
+
+        String percent = DecimalUtils.percent(curMoney.subtract(preMoney), preMoney);
+        return new SettlementMoney(df.format(curMoney), df.format(preMoney), percent, flag);
+    }
+
     @Override
     public Map<OrderEnum, List<String>> checkLedger(Long entId, Long entTarget) {
         if (Objects.isNull(entId) || Objects.isNull(entTarget)) {
@@ -65,5 +88,104 @@ public class PaymentDubboServiceImpl implements PaymentDubboService {
         LedgerSize ledgerSize = ledgerTradeService.count(entId);
         return new LedgerCount(ledgerSize.send(), ledgerSize.receive(), count.send(), count.receive());
     }
+
+
+    @Override
+    public SettlementMoney countSell(Long entId, Integer countType) {
+        log.info("销售统计:{} {}", entId, countType);
+        if (Objects.isNull(countType)) {
+            return new SettlementMoney("0.00", "0.00", "0.00%", 1);
+        }
+        List<LocalDateTime> cur = new ArrayList<>();
+        List<LocalDateTime> pre = new ArrayList<>();
+        //按周统计
+        if (countType == 1) {
+            cur.add(DateTimeUtil.getComputeDaysStart(-6));
+            cur.add(DateTimeUtil.getComputeDaysEnd(0));
+            pre.add(DateTimeUtil.getComputeDaysStart(-13));
+            pre.add(DateTimeUtil.getComputeDaysEnd(-7));
+        } else {
+            cur.add(DateTimeUtil.getComputeMonthStart(-1, 1));
+            cur.add(DateTimeUtil.getComputeMonthEnd(0, 0));
+            pre.add(DateTimeUtil.getComputeMonthStart(-2, 1));
+            pre.add(DateTimeUtil.getComputeMonthEnd(-1, 0));
+        }
+        List<MoneyType> moneyType = settlementTradeService.moneySum(entId, cur, pre, TradeUnitType.SELL);
+        return change(moneyType);
+    }
+
+    @Override
+    public SettlementMoney countPurchase(Long entId, Integer countType) {
+        log.info("采购统计:{} {}", entId, countType);
+        if (Objects.isNull(countType)) {
+            return new SettlementMoney("0.00", "0.00", "0.00%", 1);
+        }
+        List<LocalDateTime> cur = new ArrayList<>();
+        List<LocalDateTime> pre = new ArrayList<>();
+        //按周统计
+        if (countType == 1) {
+            cur.add(DateTimeUtil.getComputeDaysStart(-6));
+            cur.add(DateTimeUtil.getComputeDaysEnd(0));
+            pre.add(DateTimeUtil.getComputeDaysStart(-13));
+            pre.add(DateTimeUtil.getComputeDaysEnd(-7));
+        } else {
+            cur.add(DateTimeUtil.getComputeMonthStart(-1, 1));
+            cur.add(DateTimeUtil.getComputeMonthEnd(0, 0));
+            pre.add(DateTimeUtil.getComputeMonthStart(-2, 1));
+            pre.add(DateTimeUtil.getComputeMonthEnd(-1, 0));
+        }
+        List<MoneyType> moneyType = settlementTradeService.moneySum(entId, cur, pre, TradeUnitType.PURCHASE);
+        return change(moneyType);
+    }
+
+
+    @Override
+    public SettlementMoney countCarrier(Long entId, Integer countType) {
+        log.info("承运统计:{} {}", entId, countType);
+        if (Objects.isNull(countType)) {
+            return new SettlementMoney("0.00", "0.00", "0.00%", 1);
+        }
+        List<LocalDateTime> cur = new ArrayList<>();
+        List<LocalDateTime> pre = new ArrayList<>();
+        //按周统计
+        if (countType == 1) {
+            cur.add(DateTimeUtil.getComputeDaysStart(-6));
+            cur.add(DateTimeUtil.getComputeDaysEnd(0));
+            pre.add(DateTimeUtil.getComputeDaysStart(-13));
+            pre.add(DateTimeUtil.getComputeDaysEnd(-7));
+        } else {
+            cur.add(DateTimeUtil.getComputeMonthStart(-1, 1));
+            cur.add(DateTimeUtil.getComputeMonthEnd(0, 0));
+            pre.add(DateTimeUtil.getComputeMonthStart(-2, 1));
+            pre.add(DateTimeUtil.getComputeMonthEnd(-1, 0));
+        }
+        List<MoneyType> moneyType = settlementLogisticsService.moneySum(entId, cur, pre, LogisticsUnitType.CARRIER);
+        return change(moneyType);
+
+    }
+
+    @Override
+    public SettlementMoney countShipper(Long entId, Integer countType) {
+        log.info("托运统计:{} {}", entId, countType);
+        if (Objects.isNull(countType)) {
+            return new SettlementMoney("0.00", "0.00", "0.00%", 1);
+        }
+        List<LocalDateTime> cur = new ArrayList<>();
+        List<LocalDateTime> pre = new ArrayList<>();
+        //按周统计
+        if (countType == 1) {
+            cur.add(DateTimeUtil.getComputeDaysStart(-6));
+            cur.add(DateTimeUtil.getComputeDaysEnd(0));
+            pre.add(DateTimeUtil.getComputeDaysStart(-13));
+            pre.add(DateTimeUtil.getComputeDaysEnd(-7));
+        } else {
+            cur.add(DateTimeUtil.getComputeMonthStart(-1, 1));
+            cur.add(DateTimeUtil.getComputeMonthEnd(0, 0));
+            pre.add(DateTimeUtil.getComputeMonthStart(-2, 1));
+            pre.add(DateTimeUtil.getComputeMonthEnd(-1, 0));
+        }
+        List<MoneyType> moneyType = settlementLogisticsService.moneySum(entId, cur, pre, LogisticsUnitType.SHIPPER);
+        return change(moneyType);
+    }
 }
 

+ 33 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementLogisticsMapper.xml

@@ -251,4 +251,37 @@
               and lu2.top_ent_id = #{entTarget,jdbcType=BIGINT}
         </where>
     </select>
+
+    <select id="sumMoneyType" resultType="com.sckw.payment.model.dto.MoneyType">
+        select ifnull(sum(ksl.total_price - ksl.actual_price), '0') money,
+               1                                                    type
+        from kwp_settlement_logistics ksl
+                 inner join kwp_ledger_logistics kll on ksl.l_ledger_id = kll.id and kll.del_flag = 0
+                 inner join kwp_ledger_logistics_unit kllu on kll.id = kllu.l_ledger_id and kllu.del_flag = 0 and
+                                                              kllu.unit_type = #{unitType,jdbcType=INTEGER}
+        <where>
+            ksl.del_flag = 0
+              and kllu.top_ent_id = #{entId,jdbcType=BIGINT}
+              and ksl.create_time
+
+            <foreach collection="cur" item="item" open="between" close="" separator="and">
+                #{item,jdbcType=TIMESTAMP}
+            </foreach>
+        </where>
+        union all
+        select ifnull(sum(ksl.total_price - ksl.actual_price), '0') money,
+               2                                                    type
+        from kwp_settlement_logistics ksl
+                 inner join kwp_ledger_logistics kll on ksl.l_ledger_id = kll.id and kll.del_flag = 0
+                 inner join kwp_ledger_logistics_unit kllu on kll.id = kllu.l_ledger_id and kllu.del_flag = 0 and
+                                                              kllu.unit_type = #{unitType,jdbcType=INTEGER}
+        <where>
+            ksl.del_flag = 0
+              and kllu.top_ent_id = #{entId,jdbcType=BIGINT}
+              and ksl.create_time
+            <foreach collection="pre" item="item" open="between" close="" separator="and">
+                #{item,jdbcType=TIMESTAMP}
+            </foreach>
+        </where>
+    </select>
 </mapper>

+ 37 - 4
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementTradeMapper.xml

@@ -292,7 +292,7 @@
         from kwp_settlement_trade kst
                  inner join kwp_ledger_trade klt on kst.t_ledger_id = klt.id and klt.del_flag = 0
                  inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0 and
-                                                          kltu.unit_type = #{unitTYpe,jdbcType=INTEGER}
+                                                          kltu.unit_type = #{unitType,jdbcType=INTEGER}
         <where>
             kst.del_flag = 0
               and kst.id = #{id,jdbcType=BIGINT}
@@ -309,9 +309,42 @@
                                                            kltu2.unit_type = 2
         <where>
             kst.del_flag = 0
-            and kst.status != 3
-            and kltu.top_ent_id = #{entId,jdbcType=BIGINT}
-            and kltu2.top_ent_id = #{entTarget,jdbcType=BIGINT}
+              and kst.status != 3
+              and kltu.top_ent_id = #{entId,jdbcType=BIGINT}
+              and kltu2.top_ent_id = #{entTarget,jdbcType=BIGINT}
+        </where>
+    </select>
+
+    <select id="sumMoneyType" resultType="com.sckw.payment.model.dto.MoneyType">
+        select ifnull(sum(kst.total_price - kst.actual_price), '0') money,
+               1                                                    type
+        from kwp_settlement_trade kst
+                 inner join kwp_ledger_trade klt on kst.t_ledger_id = klt.id and klt.del_flag = 0
+                 inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0 and
+                                                          kltu.unit_type = #{unitType,jdbcType=INTEGER}
+        <where>
+            kst.del_flag = 0
+              and kltu.top_ent_id = #{entId,jdbcType=BIGINT}
+              and kst.create_time
+            <foreach collection="cur" item="item" open="between" close="" separator="and">
+                #{item,jdbcType=TIMESTAMP}
+            </foreach>
+        </where>
+        union all
+        select ifnull(sum(kst.total_price - kst.actual_price), '0') money,
+               2                                                    type
+        from kwp_settlement_trade kst
+                 inner join kwp_ledger_trade klt
+                            on kst.t_ledger_id = klt.id and klt.del_flag = 0
+                 inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0 and
+                                                          kltu.unit_type = #{unitType,jdbcType=INTEGER}
+        <where>
+            kst.del_flag = 0
+              and kltu.top_ent_id = #{entId,jdbcType=BIGINT}
+              and kst.create_time
+            <foreach collection="pre" item="item" open="between" close="" separator="and">
+                #{item,jdbcType=TIMESTAMP}
+            </foreach>
         </where>
     </select>
 </mapper>