Browse Source

快递应付汇总

yzc 11 months ago
parent
commit
fcaefb5920

+ 8 - 0
hx-common/src/main/java/com/fjhx/common/controller/logistics/LogisticsAmountController.java

@@ -43,4 +43,12 @@ public class LogisticsAmountController {
         logisticsAmountService.saveOrEdit(logisticsAmountDto);
         logisticsAmountService.saveOrEdit(logisticsAmountDto);
     }
     }
 
 
+    /**
+     * 物流发生额编辑
+     */
+    @PostMapping("/saveOrEditList")
+    public void saveOrEdit(@RequestBody List<LogisticsAmountDto> list) {
+        logisticsAmountService.saveOrEditList(list);
+    }
+
 }
 }

+ 5 - 0
hx-common/src/main/java/com/fjhx/common/controller/logistics/LogisticsEndingAmountController.java

@@ -32,4 +32,9 @@ public class LogisticsEndingAmountController {
         return logisticsEndingAmountService.logisticsRechargeSummary(dto);
         return logisticsEndingAmountService.logisticsRechargeSummary(dto);
     }
     }
 
 
+    @PostMapping("/logisticsPayableSummary")
+    List<JSONObject> logisticsPayableSummary(@RequestBody LogisticsEndingAmountSelectDto dto) {
+        return logisticsEndingAmountService.logisticsPayableSummary(dto);
+    }
+
 }
 }

+ 1 - 1
hx-common/src/main/java/com/fjhx/common/entity/logistics/dto/LogisticsEndingAmountSelectDto.java

@@ -17,5 +17,5 @@ public class LogisticsEndingAmountSelectDto extends BaseSelectDto {
     /**
     /**
      * 年份过滤
      * 年份过滤
      */
      */
-    private int year;
+    private Integer year;
 }
 }

+ 11 - 0
hx-common/src/main/java/com/fjhx/common/entity/logistics/vo/LogisticsEndingAmountVo.java

@@ -19,6 +19,17 @@ public class LogisticsEndingAmountVo extends LogisticsEndingAmount {
      * 预付金额
      * 预付金额
      */
      */
     private BigDecimal advanceAmount;
     private BigDecimal advanceAmount;
+
+    /**
+     * 付款金额
+     */
+    private BigDecimal paymentAmount;
+
+    /**
+     * 贷方发生额
+     */
+    private BigDecimal creditAmount;
+
     /**
     /**
      * 抵扣金额
      * 抵扣金额
      */
      */

+ 1 - 0
hx-common/src/main/java/com/fjhx/common/service/logistics/LogisticsAmountService.java

@@ -28,4 +28,5 @@ public interface LogisticsAmountService extends BaseService<LogisticsAmount> {
      */
      */
     void saveOrEdit(LogisticsAmountDto logisticsAmountDto);
     void saveOrEdit(LogisticsAmountDto logisticsAmountDto);
 
 
+    void saveOrEditList(List<LogisticsAmountDto> list);
 }
 }

+ 8 - 0
hx-common/src/main/java/com/fjhx/common/service/logistics/LogisticsEndingAmountService.java

@@ -18,5 +18,13 @@ import java.util.List;
  */
  */
 public interface LogisticsEndingAmountService extends BaseService<LogisticsEndingAmount> {
 public interface LogisticsEndingAmountService extends BaseService<LogisticsEndingAmount> {
 
 
+    /**
+     * 快递充值汇总
+     */
     List<JSONObject> logisticsRechargeSummary(LogisticsEndingAmountSelectDto dto);
     List<JSONObject> logisticsRechargeSummary(LogisticsEndingAmountSelectDto dto);
+
+    /**
+     * 快递应付账款汇总
+     */
+    List<JSONObject> logisticsPayableSummary(LogisticsEndingAmountSelectDto dto);
 }
 }

+ 28 - 3
hx-common/src/main/java/com/fjhx/common/service/logistics/impl/LogisticsAmountServiceImpl.java

@@ -1,5 +1,8 @@
 package com.fjhx.common.service.logistics.impl;
 package com.fjhx.common.service.logistics.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.entity.logistics.dto.LogisticsAmountDto;
 import com.fjhx.common.entity.logistics.dto.LogisticsAmountDto;
 import com.fjhx.common.entity.logistics.dto.LogisticsAmountSelectDto;
 import com.fjhx.common.entity.logistics.dto.LogisticsAmountSelectDto;
@@ -7,6 +10,8 @@ import com.fjhx.common.entity.logistics.po.LogisticsAmount;
 import com.fjhx.common.entity.logistics.vo.LogisticsAmountVo;
 import com.fjhx.common.entity.logistics.vo.LogisticsAmountVo;
 import com.fjhx.common.mapper.logistics.LogisticsAmountMapper;
 import com.fjhx.common.mapper.logistics.LogisticsAmountMapper;
 import com.fjhx.common.service.logistics.LogisticsAmountService;
 import com.fjhx.common.service.logistics.LogisticsAmountService;
+import com.fjhx.common.utils.Assert;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -28,7 +33,7 @@ public class LogisticsAmountServiceImpl extends ServiceImpl<LogisticsAmountMappe
         IWrapper<LogisticsAmount> wrapper = getWrapper();
         IWrapper<LogisticsAmount> wrapper = getWrapper();
 
 
         wrapper.eq("la", LogisticsAmount::getYear, dto.getYear());
         wrapper.eq("la", LogisticsAmount::getYear, dto.getYear());
-        wrapper.eq("la", LogisticsAmount::getLogisticsCompanyId, dto.getYear());
+        wrapper.eq("la", LogisticsAmount::getLogisticsCompanyId, dto.getLogisticsCompanyId());
 
 
         wrapper.orderByDesc("la", LogisticsAmount::getYear);
         wrapper.orderByDesc("la", LogisticsAmount::getYear);
         List<LogisticsAmountVo> list = this.baseMapper.getList(wrapper);
         List<LogisticsAmountVo> list = this.baseMapper.getList(wrapper);
@@ -36,8 +41,28 @@ public class LogisticsAmountServiceImpl extends ServiceImpl<LogisticsAmountMappe
     }
     }
 
 
     @Override
     @Override
-    public void saveOrEdit(LogisticsAmountDto logisticsAmountDto) {
-        this.saveOrUpdate(logisticsAmountDto);
+    public void saveOrEdit(LogisticsAmountDto dto) {
+        if (ObjectUtil.isEmpty(dto.getId())) {
+            if (this.count(q -> q.eq(LogisticsAmount::getYear, dto.getYear())) > 0) {
+                throw new ServiceException(StrUtil.format("已存在{}年的数据记录,请直接修改不要重复添加!", dto.getYear()));
+            }
+        }
+        this.saveOrUpdate(dto);
+    }
+
+    @DSTransactional
+    @Override
+    public void saveOrEditList(List<LogisticsAmountDto> list) {
+        for (LogisticsAmountDto dto : list) {
+            Assert.notEmpty(dto.getLogisticsCompanyId(), "物流公司不能为空!");
+            Assert.notEmpty(dto.getYear(), "年份不能为空!");
+            if (ObjectUtil.isEmpty(dto.getId())) {
+                if (this.count(q -> q.eq(LogisticsAmount::getYear, dto.getYear())) > 0) {
+                    throw new ServiceException(StrUtil.format("已存在{}年的数据记录,请直接修改不要重复添加!", dto.getYear()));
+                }
+            }
+            this.saveOrUpdate(dto);
+        }
     }
     }
 
 
 }
 }

+ 52 - 5
hx-common/src/main/java/com/fjhx/common/service/logistics/impl/LogisticsEndingAmountServiceImpl.java

@@ -9,10 +9,12 @@ import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.logistics.dto.LogisticsEndingAmountSelectDto;
 import com.fjhx.common.entity.logistics.dto.LogisticsEndingAmountSelectDto;
+import com.fjhx.common.entity.logistics.po.LogisticsAmount;
 import com.fjhx.common.entity.logistics.po.LogisticsCompanyInfo;
 import com.fjhx.common.entity.logistics.po.LogisticsCompanyInfo;
 import com.fjhx.common.entity.logistics.po.LogisticsEndingAmount;
 import com.fjhx.common.entity.logistics.po.LogisticsEndingAmount;
 import com.fjhx.common.entity.logistics.vo.LogisticsEndingAmountVo;
 import com.fjhx.common.entity.logistics.vo.LogisticsEndingAmountVo;
 import com.fjhx.common.mapper.logistics.LogisticsEndingAmountMapper;
 import com.fjhx.common.mapper.logistics.LogisticsEndingAmountMapper;
+import com.fjhx.common.service.logistics.LogisticsAmountService;
 import com.fjhx.common.service.logistics.LogisticsCompanyInfoService;
 import com.fjhx.common.service.logistics.LogisticsCompanyInfoService;
 import com.fjhx.common.service.logistics.LogisticsEndingAmountService;
 import com.fjhx.common.service.logistics.LogisticsEndingAmountService;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -42,6 +44,8 @@ public class LogisticsEndingAmountServiceImpl extends ServiceImpl<LogisticsEndin
 
 
     @Autowired
     @Autowired
     private LogisticsCompanyInfoService logisticsCompanyInfoService;
     private LogisticsCompanyInfoService logisticsCompanyInfoService;
+    @Autowired
+    private LogisticsAmountService logisticsAmountService;
 
 
     /**
     /**
      * 每月1日0点1分 赋值上月期末余额
      * 每月1日0点1分 赋值上月期末余额
@@ -83,6 +87,14 @@ public class LogisticsEndingAmountServiceImpl extends ServiceImpl<LogisticsEndin
             }
             }
             one.setEndingBalance(endingBalance);
             one.setEndingBalance(endingBalance);
 
 
+            //期末应付余额
+            BigDecimal endingPayableBalance = logisticsEndingAmountVo.getEndingPayableBalance();
+            if (ObjectUtil.isEmpty(endingPayableBalance)) {
+                endingPayableBalance = BigDecimal.ZERO;
+            }
+            one.setEndingPayableBalance(endingPayableBalance);
+
+
             this.saveOrUpdate(one);
             this.saveOrUpdate(one);
         }
         }
         SecurityUtils.clearTenantId();
         SecurityUtils.clearTenantId();
@@ -98,47 +110,77 @@ public class LogisticsEndingAmountServiceImpl extends ServiceImpl<LogisticsEndin
             dto.setYear(DateUtil.year(new Date()));
             dto.setYear(DateUtil.year(new Date()));
         }
         }
 
 
+        //费控 预付、付款 信息
         List<LogisticsEndingAmountVo> logisticsRechargeSummaryBos = baseMapper.logisticsRechargeSummary(dto);
         List<LogisticsEndingAmountVo> logisticsRechargeSummaryBos = baseMapper.logisticsRechargeSummary(dto);
         Map<Long, List<LogisticsEndingAmountVo>> logisticsRechargeMap = logisticsRechargeSummaryBos.stream()
         Map<Long, List<LogisticsEndingAmountVo>> logisticsRechargeMap = logisticsRechargeSummaryBos.stream()
                 .collect(Collectors.groupingBy(LogisticsEndingAmountVo::getLogisticsCompanyId));
                 .collect(Collectors.groupingBy(LogisticsEndingAmountVo::getLogisticsCompanyId));
 
 
-        List<LogisticsCompanyInfo> list = logisticsCompanyInfoService.list();
-
+        //快递公司 每月发生额
+        Map<Long, LogisticsAmount> logisticsAmountMap = logisticsAmountService.mapKEntity(LogisticsAmount::getLogisticsCompanyId, q -> q.eq(LogisticsAmount::getYear, dto.getYear()));
 
 
+        //遍历物流公司
+        List<LogisticsCompanyInfo> list = logisticsCompanyInfoService.list();
         for (LogisticsCompanyInfo logisticsCompanyInfo : list) {
         for (LogisticsCompanyInfo logisticsCompanyInfo : list) {
             JSONObject logisticsCompanyInfoJson = JSONObject.parseObject(JSONObject.toJSONString(logisticsCompanyInfo));
             JSONObject logisticsCompanyInfoJson = JSONObject.parseObject(JSONObject.toJSONString(logisticsCompanyInfo));
-            //赋值年初余额
+            //赋值年初余额,年初应付
             BigDecimal yearBeginBalance = BigDecimal.ZERO;
             BigDecimal yearBeginBalance = BigDecimal.ZERO;
-            String lastYearEndMonth = StrUtil.format("{}-12", dto.getYear() - 1);
+            BigDecimal yearBeginPayableBalance = BigDecimal.ZERO;
+
+            String lastYearEndMonth = StrUtil.format("{}-12", (dto.getYear() - 1));
             LogisticsEndingAmount lastYearEndAmount = this.getOne(q -> q
             LogisticsEndingAmount lastYearEndAmount = this.getOne(q -> q
                     .eq(LogisticsEndingAmount::getLogisticsCompanyId, logisticsCompanyInfo.getId())
                     .eq(LogisticsEndingAmount::getLogisticsCompanyId, logisticsCompanyInfo.getId())
                     .apply("DATE_FORMAT(account_date,'%Y-%m') = DATE_FORMAT( {0}, '%Y-%m' )", DateUtil.parse(lastYearEndMonth, "yyyy-MM"))
                     .apply("DATE_FORMAT(account_date,'%Y-%m') = DATE_FORMAT( {0}, '%Y-%m' )", DateUtil.parse(lastYearEndMonth, "yyyy-MM"))
             );
             );
             if (ObjectUtil.isNotEmpty(lastYearEndAmount)) {
             if (ObjectUtil.isNotEmpty(lastYearEndAmount)) {
                 yearBeginBalance = lastYearEndAmount.getEndingBalance();
                 yearBeginBalance = lastYearEndAmount.getEndingBalance();
+                yearBeginPayableBalance = lastYearEndAmount.getEndingPayableBalance();
             }
             }
             logisticsCompanyInfoJson.put("yearBeginBalance", yearBeginBalance);
             logisticsCompanyInfoJson.put("yearBeginBalance", yearBeginBalance);
+            logisticsCompanyInfoJson.put("yearBeginPayableBalance", yearBeginPayableBalance);
 
 
             //上一期末余额
             //上一期末余额
             BigDecimal lastEndingBalance = yearBeginBalance;
             BigDecimal lastEndingBalance = yearBeginBalance;
+            //上一期末应付余额
+            BigDecimal lastEndingPayableBalance = yearBeginPayableBalance;
 
 
             //赋值每一个月信息
             //赋值每一个月信息
             List<LogisticsEndingAmountVo> list1 = logisticsRechargeMap.getOrDefault(logisticsCompanyInfo.getId(), new ArrayList<>());
             List<LogisticsEndingAmountVo> list1 = logisticsRechargeMap.getOrDefault(logisticsCompanyInfo.getId(), new ArrayList<>());
             Map<Integer, LogisticsEndingAmountVo> collect = list1.stream().collect(Collectors.toMap(LogisticsEndingAmountVo::getAccountPeriodMonth, Function.identity()));
             Map<Integer, LogisticsEndingAmountVo> collect = list1.stream().collect(Collectors.toMap(LogisticsEndingAmountVo::getAccountPeriodMonth, Function.identity()));
             for (int i = 1; i <= 12; i++) {
             for (int i = 1; i <= 12; i++) {
                 LogisticsEndingAmountVo logisticsRecharge = collect.getOrDefault(i, new LogisticsEndingAmountVo());
                 LogisticsEndingAmountVo logisticsRecharge = collect.getOrDefault(i, new LogisticsEndingAmountVo());
+
+                //预付
                 BigDecimal advanceAmount = logisticsRecharge.getAdvanceAmount();
                 BigDecimal advanceAmount = logisticsRecharge.getAdvanceAmount();
                 if (advanceAmount == null) {
                 if (advanceAmount == null) {
                     advanceAmount = BigDecimal.ZERO;
                     advanceAmount = BigDecimal.ZERO;
                 }
                 }
+                //抵扣
                 BigDecimal deductionAmount = logisticsRecharge.getDeductionAmount();
                 BigDecimal deductionAmount = logisticsRecharge.getDeductionAmount();
                 if (deductionAmount == null) {
                 if (deductionAmount == null) {
                     deductionAmount = BigDecimal.ZERO;
                     deductionAmount = BigDecimal.ZERO;
                 }
                 }
+                //付款
+                BigDecimal paymentAmount = logisticsRecharge.getPaymentAmount();
+                if (paymentAmount == null) {
+                    paymentAmount = BigDecimal.ZERO;
+                }
 
 
-                //期末余额 = 期初余额 + 预付 - 抵扣
+                //期末余额 = 上期末余额 + 预付 - 抵扣
                 logisticsRecharge.setEndingBalance(lastEndingBalance.add(advanceAmount).subtract(deductionAmount));
                 logisticsRecharge.setEndingBalance(lastEndingBalance.add(advanceAmount).subtract(deductionAmount));
 
 
+                //获取 贷方发生额
+                LogisticsAmount logisticsAmount = logisticsAmountMap.getOrDefault(logisticsCompanyInfo.getId(), new LogisticsAmount());
+                JSONObject logisticsAmountJson = JSONObject.parseObject(JSONObject.toJSONString(logisticsAmount));
+                BigDecimal creditAmount = logisticsAmountJson.getBigDecimal(StrUtil.format("month{}Amount", i));
+                if (creditAmount == null) {
+                    creditAmount = BigDecimal.ZERO;
+                }
+                logisticsRecharge.setCreditAmount(creditAmount);
+
+                //期末应付余额 = 上期末应付余额 + 贷方发生额 - 付款 - 抵扣
+                BigDecimal endingPayableBalance = lastEndingPayableBalance.add(creditAmount).subtract(paymentAmount).subtract(deductionAmount);
+                logisticsRecharge.setEndingPayableBalance(endingPayableBalance);
+
                 logisticsCompanyInfoJson.put("" + i, logisticsRecharge);
                 logisticsCompanyInfoJson.put("" + i, logisticsRecharge);
             }
             }
 
 
@@ -147,4 +189,9 @@ public class LogisticsEndingAmountServiceImpl extends ServiceImpl<LogisticsEndin
 
 
         return outList;
         return outList;
     }
     }
+
+    @Override
+    public List<JSONObject> logisticsPayableSummary(LogisticsEndingAmountSelectDto dto) {
+        return logisticsRechargeSummary(dto);
+    }
 }
 }

+ 1 - 1
hx-common/src/main/resources/mapper/logistics/LogisticsEndingAmountMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.fjhx.common.mapper.logistics.LogisticsEndingAmountMapper">
 <mapper namespace="com.fjhx.common.mapper.logistics.LogisticsEndingAmountMapper">
     <select id="logisticsRechargeSummary"
     <select id="logisticsRechargeSummary"
             resultType="com.fjhx.common.entity.logistics.vo.LogisticsEndingAmountVo">
             resultType="com.fjhx.common.entity.logistics.vo.LogisticsEndingAmountVo">
-        SELECT cod.logistics_company_id, MONTH ( ap.expenses_time ) AS accountPeriodMonth, sum ( IF ( cc.is_advance = 1, cod.current_payable, 0 ) ) AS advanceAmount, sum ( IF ( cc.is_public_transfer = 1, cod.deduction_prepaid_tax, cod.deduction_prepaid )) AS deductionAmount
+        SELECT cod.logistics_company_id, month ( ap.expenses_time ) AS accountPeriodMonth, sum ( IF ( cc.is_advance = 1, cod.current_payable, 0 ) ) AS advanceAmount, sum ( IF ( cc.is_advance = 0, cod.current_payable, 0 ) ) AS paymentAmount, sum ( IF ( cc.is_public_transfer = 1, cod.deduction_prepaid_tax, cod.deduction_prepaid )) AS deductionAmount
         FROM
         FROM
             cost_control cc
             cost_control cc
             JOIN payment_type pt
             JOIN payment_type pt