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

杰生重构 合同付款分页

home 2 éve
szülő
commit
f8bdac8512

+ 2 - 2
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/contract/ContractPay.java

@@ -83,12 +83,12 @@ public class ContractPay extends StorageBaseEntity {
     /**
      * 银行卡号
      */
-    private String bankAccout;
+    private String bankAccount;
 
     /**
      * 账户名称
      */
-    private String bankAccoutName;
+    private String bankAccountName;
 
     /**
      * 开户行

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/contract/ContractPayController.java

@@ -67,6 +67,9 @@ public class ContractPayController {
         return R.success(result);
     }
 
+    /**
+     * 分页
+     */
     @PostMapping("/page")
     public R page(@RequestBody Condition condition) {
         Page<Map<String, Object>> result = contractPayService.getPage(condition);

+ 1 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractPayMapper.java

@@ -22,6 +22,6 @@ public interface ContractPayMapper extends BaseMapper<ContractPay> {
 
     List<SupplierInfo> getSupplierInfoList(@Param("ew") QueryWrapper<Object> wrapper);
 
-    Page<Map<String, Object>> getPage(Page<Object> page, QueryWrapper<Object> wrapper);
+    Page<Map<String, Object>> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<Object> wrapper);
 
 }

+ 26 - 12
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractPayMapper.xml

@@ -12,24 +12,38 @@
     </select>
 
     <select id="getPage" resultType="java.util.LinkedHashMap">
-        select c.code                                                                contractCode,
-               s.name                                                                supplierName,
-               c.complete_time                                                       completeTime,
-               c.account_date                                                        accountDate,
-               c.invoice_amount                                                      invoiceAmount,
-               m.name                                                                materialName,
-               m.spec                                                                materialSpec,
+        select c.id                                                                    contractId,
+               c.code                                                                  contractCode,
+               s.name                                                                  supplierName,
+               c.complete_time                                                         completeTime,
+               c.account_date                                                          accountDate,
+               c.invoice_amount                                                        invoiceAmount,
+               m.name                                                                  materialName,
+               m.spec                                                                  materialSpec,
                cd.quantity,
                cd.price,
-               c.amount_money                                                        amountMoney,
-               c.adjust_amount                                                       adjustAmount,
-               c.had_pay_amount                                                      hadPayAmount,
-               (c.amount_money - c.adjust_amount - c.back_amount - c.had_pay_amount) unpaidAmount,
-               c.apply_pay_amount                                                    applyPayAmount
+               c.amount_money                                                          amountMoney,
+               c.adjust_amount                                                         adjustAmount,
+               c.had_pay_amount                                                        hadPayAmount,
+               (c.adjust_amount - c.back_amount - c.had_pay_amount - c.express_amount) unpaidAmount,
+               c.apply_pay_amount                                                      applyPayAmount,
+               ifnull(t.batchCount, 0)                                                 batchCount,
+               ifnull(t.qualityTestingCount, 0)                                        qualityTestingCount,
+               ifnull(t.contractFileCount, 0)                                          contractFileCount
         from contract c
                  left join contract_details cd on cd.contract_id = c.id
                  left join material m on cd.material_id = m.id
                  left join supplier s on c.supplier_id = s.id
+                 left join (
+            select count(wb.id)               batchCount,
+                   count(qt.id)               qualityTestingCount,
+                   sum(if(ce.type = 3, 1, 0)) contractFileCount,
+                   wb.contract_id
+            from water_batch wb
+                     left join quality_testing qt on wb.id = qt.water_batch_id
+                     left join contract_enclosure ce on wb.contract_id = ce.contract_id
+            group by wb.contract_id
+        ) t on t.contract_id = c.id
             ${ew.customSqlSegment}
     </select>
 

+ 142 - 5
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractPayServiceImpl.java

@@ -1,5 +1,7 @@
 package com.fjhx.service.contract.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.Condition;
 import com.fjhx.base.StorageBaseEntity;
+import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.contract.Contract;
 import com.fjhx.entity.contract.ContractPay;
 import com.fjhx.enums.ContractPayStatusEnum;
@@ -20,6 +23,7 @@ import com.fjhx.params.contract.SupplierInfo;
 import com.fjhx.params.contract.SupplierStatisticsResult;
 import com.fjhx.service.contract.ContractPayService;
 import com.fjhx.service.contract.ContractService;
+import com.fjhx.utils.BigDecimalUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -79,7 +83,7 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
         List<Contract> contractList = contractService.list(Wrappers.<Contract>lambdaQuery()
                 .select(Contract::getAdjustAmount, Contract::getBackAmount, Contract::getHadPayAmount,
                         Contract::getExpressAmount, Contract::getCompleteTime, Contract::getAccountDate)
-                .lt(Contract::getPayStatus, ContractPayStatusEnum.COMPLETED)
+                .lt(Contract::getPayStatus, ContractPayStatusEnum.COMPLETED.getType())
                 .and(q -> q.eq(Contract::getAccountDate, 0)
                         .or(w -> w.gt(Contract::getAccountDate, 0)
                                 .eq(Contract::getStatus, ContractStatusEnum.COMPLETED.getType()))));
@@ -101,11 +105,11 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
                     DateStatisticsResult item = HISTORICAL_ACCOUNTING_PERIOD.equals(dateStatisticsResult.getType())
                             ? result.get(2) : dateStatisticsResult;
 
-                    if (contract.getAccountDate() == 0) {  // 未付预付款
-                        item.setUnpaidPayInAdvance(item.getUnpaidPayInAdvance().add(notHadPayAmount));
-                    } else { // 未付有账期
+                    // 未付有账期
+                    if (contract.getAccountDate() > 0) {
                         item.setUnpaidAccountingPeriod(item.getUnpaidAccountingPeriod().add(notHadPayAmount));
                     }
+
                     break;
                 }
             }
@@ -198,11 +202,39 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
     @Override
     public Page<Map<String, Object>> getPage(Condition condition) {
 
+        // 历史账期没有待付款记录
+        if (HISTORICAL_ACCOUNTING_PERIOD.equals(condition.getType())) {
+            return new Page<>();
+        }
+
+        Date date = new Date();
+
         QueryWrapper<Object> wrapper = Wrappers.query();
+
+        // 拼接合同查询条件
         splicingContractSelectCondition(wrapper);
 
+        // 拼接传入查询条件
+        splicingPageWrapper(wrapper, condition);
+
         Page<Map<String, Object>> page = baseMapper.getPage(condition.getPage(), wrapper);
 
+        List<Map<String, Object>> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        for (Map<String, Object> record : records) {
+            // 赋值付款期限
+            setTermsPayment(date, record);
+            // 质检是否完成
+            record.put("qualityTestingComplete", ObjectUtil.equals(record.get("batchCount"), record.get("qualityTestingCount")));
+            // 合同是否完成
+            record.put("contractComplete", Convert.toInt(record.get("contractFileCount")) > 0);
+            // 发票是否完成
+            record.put("invoiceComplete", BigDecimalUtil.ge(record.get("invoiceAmount"), record.get("adjustAmount")));
+        }
 
         return page;
     }
@@ -284,10 +316,115 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
      * 拼接合同查询条件
      */
     private void splicingContractSelectCondition(QueryWrapper<Object> wrapper) {
-        wrapper.lt("c.pay_status", ContractPayStatusEnum.COMPLETED)
+        wrapper.eq("c.del_flag", StatusConstant.NOT_DELETED)
+                .lt("c.pay_status", ContractPayStatusEnum.COMPLETED.getType())
                 .and(q -> q.eq("c.account_date", 0)
                         .or(w -> w.gt("c.account_date", 0)
                                 .eq("c.status", ContractStatusEnum.COMPLETED.getType())));
     }
 
+    /**
+     * 赋值付款期限
+     */
+    private void setTermsPayment(Date date, Map<String, Object> record) {
+        // 完成时间
+        Date completeTime = Convert.toDate(record.get("completeTime"));
+        // 账期
+        Integer accountDate = Convert.toInt(record.get("accountDate"));
+        // 完成时间到今天距离多少天
+        long day = DateUtil.betweenDay(completeTime, date, true);
+
+        // 赋值付钱期限(距离账期还要多少天,负值为超过付款日期多少天)
+        record.put("termsPayment", accountDate - day);
+    }
+
+    /**
+     * 拼接分页查询条件
+     */
+    private void splicingPageWrapper(QueryWrapper<Object> wrapper, Condition condition) {
+
+        Long supplierId = condition.getLong("supplierId");
+        Integer type = condition.getType();
+        String beginTime = condition.getStr("beginTime");
+        String endTime = condition.getStr("endTime");
+
+        Integer status = condition.getStatus();
+        Integer accountStatus = condition.getInt("accountStatus");
+
+        Date date = new Date();
+
+        // 付款时间:最后入库时间 + 账期
+        String whereTime = "date_add( c.complete_time , interval c.account_date day)";
+
+        wrapper
+                // 供应商
+                .eq(ObjectUtil.isNotEmpty(supplierId), "c.supplier_id", supplierId)
+                // 账期
+                .func(type != null, q -> {
+                    if (CURRENT_ACCOUNTING_PERIOD.equals(type)) {
+                        q.le(whereTime, endTime);
+                    } else {
+                        q.between(whereTime, beginTime, endTime);
+                    }
+                })
+
+                .func(q -> {
+                    // 可发起
+                    if (ObjectUtil.equals(status, 1)) {
+                        q.apply("c.apply_pay_amount = 0 " +
+                                "and t.batchCount = t.qualityTestingCount " +
+                                "and t.contractFileCount > 0 " +
+                                "and c.invoice_amount >= c.adjust_amount");
+                    }
+                    // 待补齐
+                    else if (ObjectUtil.equals(status, 2)) {
+                        q.apply("t.batchCount != t.qualityTestingCount " +
+                                "or t.contractFileCount <= 0 " +
+                                "or c.invoice_amount < c.adjust_amount");
+                    }
+                })
+
+                .func(q -> {
+                    // 本周期
+                    if (ObjectUtil.equals(accountStatus, 1)) {
+                        q.between(whereTime, getCurrentAccountBeginTime(date), getCurrentAccountEndTime(date));
+                    }
+                    // 上周期顺延
+                    else if (ObjectUtil.equals(accountStatus, 2)) {
+                        q.lt(whereTime, getCurrentAccountBeginTime(date));
+                    }
+                    // 其他(未来账期)
+                    else if (ObjectUtil.equals(accountStatus, 3)) {
+                        q.gt(whereTime, getCurrentAccountEndTime(date));
+                    }
+                })
+        ;
+    }
+
+
+    /**
+     * 获取当前账期开始时间
+     */
+    private Date getCurrentAccountBeginTime(Date date) {
+        // 本月1号
+        DateTime beginOfMonth = DateUtil.beginOfMonth(date);
+        // 距离月初有几天
+        long day = DateUtil.betweenDay(date, beginOfMonth, true);
+
+        return day > 15 ? DateUtil.offsetDay(beginOfMonth, 15) : beginOfMonth;
+    }
+
+    /**
+     * 获取当前账期结束时间
+     */
+    private Date getCurrentAccountEndTime(Date date) {
+        // 本月1号
+        DateTime beginOfMonth = DateUtil.beginOfMonth(date);
+        // 距离月初有几天
+        long day = DateUtil.betweenDay(date, beginOfMonth, true);
+
+        return day > 15 ? DateUtil.endOfMonth(date) : DateUtil.endOfDay(DateUtil.offsetDay(beginOfMonth, 14));
+    }
+
+
 }

+ 2 - 0
hx-service/storage/src/main/java/com/fjhx/apply/mapper/ApplyPurchaseMapper.xml

@@ -53,7 +53,9 @@
                (select pc.PurchaseQty - sum(st.Quantity)
                 from stock_tag st
                 where st.PurchaseBillNo = pc.PurchaseBillNo
+                  and st.RfidCode is not null
                   and pc.PurContractState != 3
+                  and st.IsDelete = 0
                )                              onWayQuantity,
                ifnull(pc.PurContractState, 0) purContractState,
                ap.ApplyAccount                applyAccount

+ 3 - 1
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackServiceImpl.java

@@ -216,10 +216,12 @@ public class StockBackServiceImpl extends ServiceImpl<StockBackMapper, StockBack
 
             // 循环得到具体某一卷物料
             for (StockBackDetails backDetails : stockBackDetailsList) {
+
+                backDetails.setMaterialId(materialId);
+
                 // id为空表示新增,赋值信息
                 if (ObjectUtil.isEmpty(backDetails.getId())) {
                     backDetails.setStockBackId(stockBackId);
-                    backDetails.setMaterialId(materialId);
                     backDetails.setOldMaterialMeters(BigDecimal.ZERO);
                 }
             }

+ 2 - 1
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockTransferServiceImpl.java

@@ -113,9 +113,10 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
 
         List<StockTransferDetails> stockTransferDetailsList = stockTransferVo.getStockTransferDetailsList();
         for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            stockTransferDetails.setMaterialId(stockTransferVo.getMaterialId());
+
             if (ObjectUtil.isEmpty(stockTransferDetails.getId())) {
                 stockTransferDetails.setOldQuantity(BigDecimal.ZERO);
-                stockTransferDetails.setMaterialId(stockTransferVo.getMaterialId());
                 stockTransferDetails.setStockTransferId(stockTransferVo.getId());
             }
         }