gufj 2 mesiacov pred
rodič
commit
788ebaab91
21 zmenil súbory, kde vykonal 691 pridanie a 65 odobranie
  1. 7 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkExpenseController.java
  2. 14 2
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/MateDeliveryDayReportController.java
  3. 10 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/qry/BlinkInvoiceQry.java
  4. 81 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/BlinkPayStatementVO.java
  5. 77 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateDeliveryDayCostStructureVO.java
  6. 77 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateDeliveryMonthCostStructureVO.java
  7. 39 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateEmployeeRankParamVO.java
  8. 7 8
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateEmployeeRankVO.java
  9. 9 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkExpenseServiceImpl.java
  10. 110 4
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/MateDeliveryDayReportServiceImpl.java
  11. 26 16
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/MateDeliveryTaskServiceImpl.java
  12. 10 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkExpenseRepository.java
  13. 1 1
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkInvoiceRepository.java
  14. 36 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/MateDeliveryDayReportRepository.java
  15. 10 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkExpenseService.java
  16. 9 0
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IMateDeliveryDayReportService.java
  17. 20 0
      bound-link-api/blink-backend/src/main/resources/mapper/BlinkExpenseRepositoryMapper.xml
  18. 10 3
      bound-link-api/blink-backend/src/main/resources/mapper/BlinkInvoiceMapper.xml
  19. 134 31
      bound-link-api/blink-backend/src/main/resources/mapper/MateDeliveryDayReportMapper.xml
  20. 3 0
      bound-link-api/blink-backend/src/main/resources/mapper/MateDeliveryTaskRepositoryMapper.xml
  21. 1 0
      bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/json/serializer/DictValueVoTOSerializer.java

+ 7 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkExpenseController.java

@@ -5,6 +5,7 @@ import com.wx.blink.backend.domain.qry.BlinkExpenseQry;
 import com.wx.blink.backend.domain.qry.BlinkLoanApplyQry;
 import com.wx.blink.backend.domain.vo.BlinkExpenseStatementVO;
 import com.wx.blink.backend.domain.vo.BlinkLoanApplyVO;
+import com.wx.blink.backend.domain.vo.BlinkPayStatementVO;
 import com.wx.blink.backend.service.IBlinkExpenseService;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
@@ -66,4 +67,10 @@ public class BlinkExpenseController {
     public ResponseDTO<PageResult<BlinkExpenseStatementVO>> supportsExpenseStatementQueryPage(BlinkExpenseQry qry) {
         return ResponseDTO.ok(expenseService.supportsExpenseStatementQueryPage(qry));
     }
+
+    @Operation(summary = "付款申请流程列表")
+    @GetMapping("/supports/pay/statement/queryPage")
+    public ResponseDTO<PageResult<BlinkPayStatementVO>> supportsPayStatementQueryPage(BlinkExpenseQry qry) {
+        return ResponseDTO.ok(expenseService.supportsPayStatementQueryPage(qry));
+    }
 }

+ 14 - 2
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/MateDeliveryDayReportController.java

@@ -1,6 +1,7 @@
 
 package com.wx.blink.backend.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.wx.blink.backend.domain.dto.MateDeliveryDayReportDTO;
 import com.wx.blink.backend.domain.dto.MateDeliveryDayReportNormalDTO;
 import com.wx.blink.backend.domain.qry.MateDeliveryCommonQry;
@@ -83,7 +84,18 @@ public class MateDeliveryDayReportController {
 
     @Operation(summary = "每天的员工排名")
     @GetMapping("/supports/delivery/employee/rank")
-    public ResponseDTO<List<MateEmployeeRankVO>> supportsDeliveryEmployeeRank(String date) {
-        return ResponseDTO.ok(dayReportService.supportsDeliveryEmployeeRank(date));
+    public ResponseDTO<JSONObject> supportsDeliveryEmployeeRank(String date) {
+        JSONObject obj = new JSONObject();
+        obj.put("list", dayReportService.supportsDeliveryEmployeeRank(date));
+        return ResponseDTO.ok(obj);
+    }
+
+
+    @Operation(summary = "当月的员工排名")
+    @GetMapping("/supports/delivery/employee/month/rank")
+    public ResponseDTO<JSONObject> supportsDeliveryEmployeeMonthRank(String month) {
+        JSONObject obj = new JSONObject();
+        obj.put("list", dayReportService.supportsDeliveryEmployeeMonthRank(month));
+        return ResponseDTO.ok(obj);
     }
 }

+ 10 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/qry/BlinkInvoiceQry.java

@@ -26,6 +26,16 @@ public class BlinkInvoiceQry extends PageParam {
      */
     private Integer customerId;
 
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 项目名称
+     */
+    private String deliveryName;
+
     /**
      * 合同id
      */

+ 81 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/BlinkPayStatementVO.java

@@ -0,0 +1,81 @@
+package com.wx.blink.backend.domain.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.annoation.DataAdaptorMapping;
+import com.wx.blink.base.common.json.serializer.EmployeeLoginNameVoDeserializer;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class BlinkPayStatementVO {
+
+    /**
+     * 状态
+     */
+    private String state;
+
+    /**
+     * 付款金额
+     */
+    private BigDecimal payAmount;
+
+    /**
+     * 项目名称
+     */
+    private String deliveryName;
+
+    /**
+     * 合同名称
+     */
+    private String contractName;
+
+    /**
+     * 费用科目
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_EXPENSE_ACCOUNT_TYPE")
+    private String expenseSubject;
+
+    /**
+     * 收款账户类型
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_PAY_ACCOUNT_TYPE")
+    private String accountType;
+
+    /**
+     * 收款方名称
+     */
+    private String accountName;
+
+    /**
+     * 付款描述
+     */
+        private String statementDescribe;
+
+    /**
+     * 付款描述
+     */
+    private Date payDate;
+
+    /**
+     * 发起人
+     */
+    @JsonSerialize(using = EmployeeLoginNameVoDeserializer.class)
+    private String createBy;
+
+    /**
+     * 发起日期
+     */
+    private Date createDate;
+
+    /**
+     * 实例id
+     */
+    private String bizObjectId;
+
+    /**
+     * 流程编码
+     */
+    private String flowCode;
+}

+ 77 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateDeliveryDayCostStructureVO.java

@@ -64,4 +64,81 @@ public class MateDeliveryDayCostStructureVO {
      * 盈利金额
      */
     private BigDecimal profitAmount;
+
+    public BigDecimal getSalaryCost() {
+        if (salaryCost == null) {
+            salaryCost = BigDecimal.ZERO;
+        }
+        return salaryCost;
+    }
+
+    public BigDecimal getResidentFixedSubsidy() {
+        if (residentFixedSubsidy == null) {
+            residentFixedSubsidy = BigDecimal.ZERO;
+        }
+        return residentFixedSubsidy;
+    }
+
+    public BigDecimal getRent() {
+        if (rent == null) {
+            rent = BigDecimal.ZERO;
+        }
+        return rent;
+    }
+
+    public BigDecimal getCostExpense() {
+        if (costExpense == null) {
+            costExpense = BigDecimal.ZERO;
+        }
+        return costExpense;
+    }
+
+    public BigDecimal getJecnExpectOutput() {
+        if (jecnExpectOutput == null) {
+            jecnExpectOutput = BigDecimal.ZERO;
+        }
+        return jecnExpectOutput;
+    }
+
+    public BigDecimal getJecnActualOutput() {
+        if (jecnActualOutput == null) {
+            jecnActualOutput = BigDecimal.ZERO;
+        }
+        return jecnActualOutput;
+    }
+
+    public BigDecimal getAuthineExpectOutput() {
+        if (authineExpectOutput == null) {
+            authineExpectOutput = BigDecimal.ZERO;
+        }
+        return authineExpectOutput;
+    }
+
+    public BigDecimal getAuthineActualOutput() {
+        if (authineActualOutput == null) {
+            authineActualOutput = BigDecimal.ZERO;
+        }
+        return authineActualOutput;
+    }
+
+    public BigDecimal getSeaconExpectOutput() {
+        if (seaconExpectOutput == null) {
+            seaconExpectOutput = BigDecimal.ZERO;
+        }
+        return seaconExpectOutput;
+    }
+
+    public BigDecimal getSeaconActualOutput() {
+        if (seaconActualOutput == null) {
+            seaconActualOutput = BigDecimal.ZERO;
+        }
+        return seaconActualOutput;
+    }
+
+    public BigDecimal getProfitAmount() {
+        if (profitAmount == null) {
+            profitAmount = BigDecimal.ZERO;
+        }
+        return profitAmount;
+    }
 }

+ 77 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateDeliveryMonthCostStructureVO.java

@@ -81,4 +81,81 @@ public class MateDeliveryMonthCostStructureVO {
         this.seaconActualOutput = seaconActualOutput;
         this.profitAmount = profitAmount;
     }
+
+    public BigDecimal getSalaryCost() {
+        if (salaryCost == null) {
+            salaryCost = BigDecimal.ZERO;
+        }
+        return salaryCost;
+    }
+
+    public BigDecimal getResidentFixedSubsidy() {
+        if (residentFixedSubsidy == null) {
+            residentFixedSubsidy = BigDecimal.ZERO;
+        }
+        return residentFixedSubsidy;
+    }
+
+    public BigDecimal getRent() {
+        if (rent == null) {
+            rent = BigDecimal.ZERO;
+        }
+        return rent;
+    }
+
+    public BigDecimal getCostExpense() {
+        if (costExpense == null) {
+            costExpense = BigDecimal.ZERO;
+        }
+        return costExpense;
+    }
+
+    public BigDecimal getJecnExpectOutput() {
+        if (jecnExpectOutput == null) {
+            jecnExpectOutput = BigDecimal.ZERO;
+        }
+        return jecnExpectOutput;
+    }
+
+    public BigDecimal getJecnActualOutput() {
+        if (jecnActualOutput == null) {
+            jecnActualOutput = BigDecimal.ZERO;
+        }
+        return jecnActualOutput;
+    }
+
+    public BigDecimal getAuthineExpectOutput() {
+        if (authineExpectOutput == null) {
+            authineExpectOutput = BigDecimal.ZERO;
+        }
+        return authineExpectOutput;
+    }
+
+    public BigDecimal getAuthineActualOutput() {
+        if (authineActualOutput == null) {
+            authineActualOutput = BigDecimal.ZERO;
+        }
+        return authineActualOutput;
+    }
+
+    public BigDecimal getSeaconExpectOutput() {
+        if (seaconExpectOutput == null) {
+            seaconExpectOutput = BigDecimal.ZERO;
+        }
+        return seaconExpectOutput;
+    }
+
+    public BigDecimal getSeaconActualOutput() {
+        if (seaconActualOutput == null) {
+            seaconActualOutput = BigDecimal.ZERO;
+        }
+        return seaconActualOutput;
+    }
+
+    public BigDecimal getProfitAmount() {
+        if (profitAmount == null) {
+            profitAmount = BigDecimal.ZERO;
+        }
+        return profitAmount;
+    }
 }

+ 39 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateEmployeeRankParamVO.java

@@ -0,0 +1,39 @@
+
+package com.wx.blink.backend.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 请求参数
+ */
+@Data
+public class MateEmployeeRankParamVO {
+
+    /**
+     * 年月
+     */
+    private String yearMonth;
+
+    /**
+     * 当月区间起始天
+     */
+    private String firstDayThisMonth;
+
+    /**
+     * 当月区间最后一天
+     */
+    private String firstDayNextMonth;
+
+    public MateEmployeeRankParamVO() {
+    }
+
+    public MateEmployeeRankParamVO(String yearMonth, String firstDayThisMonth, String firstDayNextMonth) {
+        this.yearMonth = yearMonth;
+        this.firstDayThisMonth = firstDayThisMonth;
+        this.firstDayNextMonth = firstDayNextMonth;
+    }
+}

+ 7 - 8
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/vo/MateEmployeeRankVO.java

@@ -19,6 +19,12 @@ public class MateEmployeeRankVO {
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date submitDay;
 
+    /**
+     * 提报月份
+     */
+    @JsonFormat(pattern = "yyyy-MM")
+    private Date submitMonth;
+
     /**
      * 姓名
      */
@@ -42,7 +48,7 @@ public class MateEmployeeRankVO {
     /**
      * 提报人天数
      */
-    private BigDecimal unNormalSubmitDaysDescribe;
+    private String unNormalSubmitDaysDescribe;
 
     /**
      * 在岗时长
@@ -118,13 +124,6 @@ public class MateEmployeeRankVO {
         return unNormalSubmitDays;
     }
 
-    public BigDecimal getUnNormalSubmitDaysDescribe() {
-        if (unNormalSubmitDaysDescribe == null) {
-            return BigDecimal.ZERO;
-        }
-        return unNormalSubmitDaysDescribe;
-    }
-
     public BigDecimal getDutyDays() {
         if (dutyDays == null) {
             return BigDecimal.ZERO;

+ 9 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkExpenseServiceImpl.java

@@ -10,6 +10,7 @@ import com.wx.blink.backend.domain.qry.BlinkExpenseQry;
 import com.wx.blink.backend.domain.qry.BlinkLoanApplyQry;
 import com.wx.blink.backend.domain.vo.BlinkExpenseStatementVO;
 import com.wx.blink.backend.domain.vo.BlinkLoanApplyVO;
+import com.wx.blink.backend.domain.vo.BlinkPayStatementVO;
 import com.wx.blink.backend.objectmapper.BlinkExpenseMapper;
 import com.wx.blink.backend.repository.BlinkExpenseRepository;
 import com.wx.blink.backend.service.IBlinkExpenseService;
@@ -84,4 +85,12 @@ public class BlinkExpenseServiceImpl extends ServiceImpl<BlinkExpenseRepository,
         PageResult<BlinkExpenseStatementVO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
         return pageResult;
     }
+
+    @Override
+    public PageResult<BlinkPayStatementVO> supportsPayStatementQueryPage(BlinkExpenseQry qry) {
+        Page<?> page = BlinkPageUtil.convert2PageQuery(qry);
+        List<BlinkPayStatementVO> list = baseMapper.supportsPayStatementQueryPage(page,qry);
+        PageResult<BlinkPayStatementVO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
+        return pageResult;
+    }
 }

+ 110 - 4
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/MateDeliveryDayReportServiceImpl.java

@@ -28,10 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -485,6 +482,115 @@ public class MateDeliveryDayReportServiceImpl extends ServiceImpl<MateDeliveryDa
                     rank.setSeaconExpectOutput(result);
                 }
             }
+            //重新计算
+            rank.setProfitAmount(rank.getJecnExpectOutput().add(rank.getAuthineExpectOutput()).add(rank.getSeaconExpectOutput())
+                    .subtract(rank.getCostExpense()).subtract(rank.getResidentFixedSubsidy()).subtract(rank.getRent()).subtract(rank.getSalaryCost()));
+        }
+        rankList.sort(Comparator.comparing(MateEmployeeRankVO::getProfitAmount).reversed());
+        return rankList;
+    }
+
+    @Override
+    public List<MateEmployeeRankVO> supportsDeliveryEmployeeMonthRank(String month) {
+        //如果选择的是当前的月份
+        DateTime currentMonth = DateUtil.parse(DateUtil.format(new Date(), "yyyy-MM"), "yyyy-MM");
+        DateTime paramMonth;
+        if (StringUtils.isEmpty(month)) {
+            paramMonth = currentMonth;
+        } else {
+            paramMonth = DateUtil.parse(month, "yyyy-MM");
+        }
+        //第一个日期区间 前
+        String firstDayThisMonth;
+        //第二个日期区间 后
+        String firstDayNextMonth;
+        //计算人员的薪资成本 //计算当天的人员驻场补贴 //计算当天办结的报销 //计算各类项目的预计产值 //计算办公地租金 //计算盈利金额
+        if (currentMonth.compareTo(paramMonth) > 0) {
+            firstDayThisMonth = DateUtil.beginOfMonth(paramMonth).toDateStr();
+            firstDayNextMonth = DateUtil.endOfMonth(paramMonth).toDateStr();
+        } else {
+            firstDayThisMonth = DateUtil.beginOfMonth(currentMonth).toDateStr();
+            firstDayNextMonth = DateUtil.format(new Date(), "yyyy-MM-dd");
+        }
+        long differDays = DateUtil.betweenDay(
+                DateUtil.parse(firstDayThisMonth, "yyyy-MM-dd"),
+                DateUtil.parse(firstDayNextMonth, "yyyy-MM-dd"),
+                false);
+        int daysInMonth = java.time.LocalDate.parse(firstDayThisMonth).lengthOfMonth();
+        //组织参数
+        MateEmployeeRankParamVO param = new MateEmployeeRankParamVO(paramMonth.toString("yyyy-MM"),firstDayThisMonth,firstDayNextMonth);
+        //获取月在岗天数
+        List<MateEmployeeRankVO> rankList = baseMapper.queryEmployeeMonthDutyDays(param);
+        //任务类提报人天数 非任务类提报人天数 非任务类情况说明 固定补贴
+        List<MateEmployeeRankVO> submitList = baseMapper.queryEmployeeMonthSubmitDays(param);
+        //薪资成本
+        List<MateEmployeeDaySalaryVO> daySalaryList = baseMapper.queryEmployeeMonthSalaryList(param);
+        for (MateEmployeeDaySalaryVO daySalary : daySalaryList) {
+            BigDecimal dailySalary = daySalary.getSalary()
+                    .divide(new BigDecimal(daysInMonth), 2, RoundingMode.HALF_UP);
+            // 当天工资 = 日薪 * 实际工时 / 8
+            BigDecimal oneDaySalary = dailySalary
+                    .multiply(BigDecimal.valueOf(daySalary.getWorkHour()))
+                    .divide(new BigDecimal("8"), 2, RoundingMode.HALF_UP);
+            daySalary.setDaySalary(oneDaySalary);
+        }
+        //计算办公地租金
+        BigDecimal totalRent = new BigDecimal("10000");
+        BigDecimal dailyRent = totalRent
+                .multiply(BigDecimal.valueOf(differDays))
+                .divide(BigDecimal.valueOf(daysInMonth), 2, RoundingMode.HALF_UP)
+                .divide(BigDecimal.valueOf(rankList.size()), 2, RoundingMode.HALF_UP);
+        //费用报销 暂时不算
+        //杰成类预计产值 奥哲类预计产值 船务类预计产值
+        List<MateDeliveryCategoryEmployeeSubmitDaysVO> employeeList = baseMapper.queryCategoryEmployeeMonthSubmitDaysList(param);
+        //拼接数据
+        for (int i = 0; i < rankList.size(); i++) {
+            MateEmployeeRankVO rank = rankList.get(i);
+            rank.setSubmitMonth(paramMonth);
+            //任务类提报人天数 非任务类提报人天数 非任务类情况说明 固定补贴
+            Optional<MateEmployeeRankVO> item1 = submitList.stream()
+                    .filter(item -> rank.getPositionStaff().equals(item.getPositionStaff()))
+                    .findFirst();
+            item1.ifPresent(item -> {
+                rank.setNormalSubmitDays(item.getNormalSubmitDays());
+                rank.setUnNormalSubmitDays(item.getUnNormalSubmitDays());
+                rank.setUnNormalSubmitDaysDescribe(item.getUnNormalSubmitDaysDescribe());
+                rank.setResidentFixedSubsidy(item.getResidentFixedSubsidy());
+            });
+            //薪资成本
+//            Optional<MateEmployeeDaySalaryVO> item2 = daySalaryList.stream()
+//                    .filter(item -> rank.getPositionStaff().equals(item.getPositionStaff()))
+//                    .findFirst();
+//            item2.ifPresent(item -> {
+//                rank.setSalaryCost(item.getDaySalary());
+//            });
+            BigDecimal totalDaySalary = daySalaryList.stream()
+                    .filter(item -> rank.getPositionStaff().equals(item.getPositionStaff()))
+                    .map(MateEmployeeDaySalaryVO::getDaySalary)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            rank.setSalaryCost(totalDaySalary);
+            //租金
+            rank.setRent(dailyRent);
+            //杰成类预计产值 奥哲类预计产值 船务类预计产值
+            List<MateDeliveryCategoryEmployeeSubmitDaysVO> item3 = employeeList.stream().filter(item->item.getPositionStaff().equals(rank.getPositionStaff())).collect(Collectors.toList());
+            for (MateDeliveryCategoryEmployeeSubmitDaysVO categorySubmitDaysVO : item3) {
+                String category = categorySubmitDaysVO.getDeliveryCategory();
+                BigDecimal origin = categorySubmitDaysVO.getSubmitDays();
+                BigDecimal result;
+                if ("01".equals(category)) {
+                    result = origin.divide(BigDecimal.valueOf(8), 2, RoundingMode.HALF_UP)
+                            .multiply(BigDecimal.valueOf(800));
+                    rank.setJecnExpectOutput(result);
+                } else if ("02".equals(category)) {
+                    result = origin.divide(BigDecimal.valueOf(8), 2, RoundingMode.HALF_UP)
+                            .multiply(BigDecimal.valueOf(1000));
+                    rank.setAuthineExpectOutput(result);
+                } else if ("03".equals(category)) {
+                    result = origin.divide(BigDecimal.valueOf(8), 2, RoundingMode.HALF_UP)
+                            .multiply(BigDecimal.valueOf(800));
+                    rank.setSeaconExpectOutput(result);
+                }
+            }
             rank.setProfitAmount(rank.getJecnExpectOutput().add(rank.getAuthineExpectOutput()).add(rank.getSeaconExpectOutput())
                     .subtract(rank.getCostExpense()).subtract(rank.getResidentFixedSubsidy()).subtract(rank.getRent()).subtract(rank.getSalaryCost()));
         }

+ 26 - 16
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/MateDeliveryTaskServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.wx.blink.backend.constant.DeliveryTaskStageEnums;
-import com.wx.blink.backend.domain.dataobject.BlinkDeliveryTaskDefectDO;
 import com.wx.blink.backend.domain.dataobject.MateDeliveryDO;
 import com.wx.blink.backend.domain.dataobject.MateDeliveryTaskDO;
 import com.wx.blink.backend.domain.dataobject.MateDeliveryTaskPositionsDO;
@@ -583,13 +582,24 @@ public class MateDeliveryTaskServiceImpl extends ServiceImpl<MateDeliveryTaskRep
                     taskItem.setPlanEndDate(dto.getPlanEndDate());
                     taskItem.setActualStartDate(dto.getActualStartDate());
                     taskItem.setActualEndDate(dto.getActualEndDate());
-                    taskItem.setProgress(new BigDecimal(taskItem.getTaskProgress()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+                    taskItem.setProgress(new BigDecimal(taskItem.getTaskProgress() == null ? "0" : taskItem.getTaskProgress()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
                     ganteList.add(taskItem);
                 }
                 ganteList.add(staffItem);
             }
         }
-        return ganteList;
+        List<MateDeliveryTaskPositionsPermissionDTO> sortedDescList = new ArrayList<>();
+        if (CollectionUtil.isNotEmpty(ganteList)) {
+            sortedDescList = ganteList.stream()
+                    .sorted(Comparator.comparing(MateDeliveryTaskPositionsPermissionDTO::getPlanEndDate).reversed())
+                    .collect(Collectors.toList());
+//            Long increase = 0L;
+//            for (int i = 0; i < sortedDescList.size(); i++) {
+//                MateDeliveryTaskPositionsPermissionDTO staffItem = sortedDescList.get(i);
+//                staffItem.setId(increase + 1);
+//            }
+        }
+        return sortedDescList;
     }
 
     @Override
@@ -775,7 +785,7 @@ public class MateDeliveryTaskServiceImpl extends ServiceImpl<MateDeliveryTaskRep
 //        map.put("累计发生人天", actualDays);
 //        map.put("超预计人天数", actualDays.subtract(planDays).max(BigDecimal.ZERO));
 //        map.put("超期任务数", summaryV1List.stream().filter(item -> item.getTaskStatusTag().get(0).contains("超期")).count());
-        return ResponseDTO.ok(pageResult,map);
+        return ResponseDTO.ok(pageResult, map);
     }
 
     @Override
@@ -877,16 +887,16 @@ public class MateDeliveryTaskServiceImpl extends ServiceImpl<MateDeliveryTaskRep
         }
         PageResult<MateDeliveryTaskV1DTO> pageResult = BlinkPageUtil.convert2PageResult(page, taskV1List);
         LinkedHashMap<String, Object> map = new LinkedHashMap<>();
-
-        List<MateDeliveryTaskV1DTO> summaryV1List = baseMapper.queryDeliveryTaskV1List(null, qry);
-        BigDecimal planDays = summaryV1List.stream().map(MateDeliveryTaskV1DTO::getPlanDays).filter(Objects::nonNull).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
-        BigDecimal actualDays = summaryV1List.stream().map(MateDeliveryTaskV1DTO::getActualDays).filter(Objects::nonNull).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
-        map.put("任务总数", summaryV1List.size());
-        map.put("预计人天", planDays);
-        map.put("累计发生人天", actualDays);
-        map.put("超预计人天数", actualDays.subtract(planDays).max(BigDecimal.ZERO));
-        map.put("超期任务数", summaryV1List.stream().filter(item -> item.getTaskStatusTag().get(0).contains("超期")).count());
-        return ResponseDTO.ok(pageResult,map);
+//
+//        List<MateDeliveryTaskV1DTO> summaryV1List = baseMapper.queryDeliveryTaskV1List(null, qry);
+//        BigDecimal planDays = summaryV1List.stream().map(MateDeliveryTaskV1DTO::getPlanDays).filter(Objects::nonNull).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
+//        BigDecimal actualDays = summaryV1List.stream().map(MateDeliveryTaskV1DTO::getActualDays).filter(Objects::nonNull).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
+//        map.put("任务总数", summaryV1List.size());
+//        map.put("预计人天", planDays);
+//        map.put("累计发生人天", actualDays);
+//        map.put("超预计人天数", actualDays.subtract(planDays).max(BigDecimal.ZERO));
+//        map.put("超期任务数", summaryV1List.stream().filter(item -> item.getTaskStatusTag().get(0).contains("超期")).count());
+        return ResponseDTO.ok(pageResult, map);
     }
 
     @Override
@@ -1040,8 +1050,8 @@ public class MateDeliveryTaskServiceImpl extends ServiceImpl<MateDeliveryTaskRep
         for (MateDeliveryTaskPositionsPermissionDTO dto : list) {
             try {
                 // 将字符串转换为BigDecimal
-                BigDecimal taskProgress = new BigDecimal(dto.getTaskProgress());
-                BigDecimal planDays = new BigDecimal(dto.getPlanDays());
+                BigDecimal taskProgress = new BigDecimal(dto.getTaskProgress() == null ? "0" : dto.getTaskProgress());
+                BigDecimal planDays = new BigDecimal(dto.getPlanDays() == null ? "0" : dto.getPlanDays());
 
                 // 计算加权进度
                 totalWeightedProgress = totalWeightedProgress.add(taskProgress.multiply(planDays));

+ 10 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkExpenseRepository.java

@@ -7,6 +7,7 @@ import com.wx.blink.backend.domain.qry.BlinkExpenseQry;
 import com.wx.blink.backend.domain.qry.BlinkLoanApplyQry;
 import com.wx.blink.backend.domain.vo.BlinkExpenseStatementVO;
 import com.wx.blink.backend.domain.vo.BlinkLoanApplyVO;
+import com.wx.blink.backend.domain.vo.BlinkPayStatementVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Component;
 
@@ -39,4 +40,13 @@ public interface BlinkExpenseRepository extends BaseMapper<BlinkExpenseDO> {
      * @return
      */
     List<BlinkExpenseStatementVO> supportsExpenseStatementQueryPage(Page<?> page, BlinkExpenseQry qry);
+
+
+    /**
+     * 费用申请流程
+     * @param page
+     * @param qry
+     * @return
+     */
+    List<BlinkPayStatementVO> supportsPayStatementQueryPage(Page<?> page, BlinkExpenseQry qry);
 }

+ 1 - 1
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkInvoiceRepository.java

@@ -27,7 +27,7 @@ public interface BlinkInvoiceRepository extends BaseMapper<BlinkInvoiceDO> {
      * @param qry
      * @return
      */
-    List<BlinkInvoiceDTO> supportsInvoiceQueryPage(Page<?> page, BlinkInvoiceQry qry);
+    List<BlinkInvoiceDTO> supportsInvoiceQueryPage(Page<?> page,@Param("qry") BlinkInvoiceQry qry);
 
 
     /**

+ 36 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/MateDeliveryDayReportRepository.java

@@ -273,4 +273,40 @@ public interface MateDeliveryDayReportRepository extends BaseMapper<MateDelivery
      * @return
      */
     List<MateDeliveryCategoryEmployeeSubmitDaysVO> queryCategoryEmployeeSubmitDaysList(String date);
+
+
+    /**
+     * 获取月在岗天数
+     *
+     * @param param
+     * @return
+     */
+    List<MateEmployeeRankVO> queryEmployeeMonthDutyDays(MateEmployeeRankParamVO param);
+
+
+    /**
+     * 任务类提报人天数 非任务类提报人天数 非任务类情况说明 固定补贴
+     *
+     * @param param
+     * @return
+     */
+    List<MateEmployeeRankVO> queryEmployeeMonthSubmitDays(MateEmployeeRankParamVO param);
+
+
+    /**
+     * 薪资成本
+     *
+     * @param param
+     * @return
+     */
+    List<MateEmployeeDaySalaryVO> queryEmployeeMonthSalaryList(MateEmployeeRankParamVO param);
+
+
+    /**
+     * 杰成类预计产值 奥哲类预计产值 船务类预计产值
+     *
+     * @param param
+     * @return
+     */
+    List<MateDeliveryCategoryEmployeeSubmitDaysVO> queryCategoryEmployeeMonthSubmitDaysList(MateEmployeeRankParamVO param);
 }

+ 10 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkExpenseService.java

@@ -7,6 +7,7 @@ import com.wx.blink.backend.domain.qry.BlinkExpenseQry;
 import com.wx.blink.backend.domain.qry.BlinkLoanApplyQry;
 import com.wx.blink.backend.domain.vo.BlinkExpenseStatementVO;
 import com.wx.blink.backend.domain.vo.BlinkLoanApplyVO;
+import com.wx.blink.backend.domain.vo.BlinkPayStatementVO;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
 
@@ -70,4 +71,13 @@ public interface IBlinkExpenseService extends IService<BlinkExpenseDO> {
      * @return
      */
     PageResult<BlinkExpenseStatementVO> supportsExpenseStatementQueryPage(BlinkExpenseQry qry);
+
+
+    /**
+     * 付款申请流程列表
+     *
+     * @param qry
+     * @return
+     */
+    PageResult<BlinkPayStatementVO> supportsPayStatementQueryPage(BlinkExpenseQry qry);
 }

+ 9 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IMateDeliveryDayReportService.java

@@ -103,4 +103,13 @@ public interface IMateDeliveryDayReportService extends IService<MateDeliveryDayR
      * @return
      */
     List<MateEmployeeRankVO> supportsDeliveryEmployeeRank(String date);
+
+
+    /**
+     * 当月的员工排名
+     *
+     * @param month
+     * @return
+     */
+    List<MateEmployeeRankVO> supportsDeliveryEmployeeMonthRank(String month);
 }

+ 20 - 0
bound-link-api/blink-backend/src/main/resources/mapper/BlinkExpenseRepositoryMapper.xml

@@ -36,4 +36,24 @@
         where t2.state <![CDATA[<>]]> 5
         order by t2.finish_time desc
     </select>
+
+    <select id="supportsPayStatementQueryPage" resultType="com.wx.blink.backend.domain.vo.BlinkPayStatementVO">
+        select t2.state,
+        t1.pay_amount,
+        t1.delivery_name,
+        t1.contract_name,
+        t1.expense_subject,
+        t1.account_type,
+        t1.statement_describe,
+        t1.account_name,
+        t1.pay_date,
+        t1.create_by,
+        t1.create_time createDate,
+        t2.biz_objectid,
+        t2.flow_code
+        from l_pay_application t1
+        left join st_instance t2 on t1.flow_id = t2.biz_objectid
+        where t2.state <![CDATA[<>]]> 5
+        order by t2.finish_time desc
+    </select>
 </mapper>

+ 10 - 3
bound-link-api/blink-backend/src/main/resources/mapper/BlinkInvoiceMapper.xml

@@ -4,9 +4,16 @@
 
 
     <select id="supportsInvoiceQueryPage" resultType="com.wx.blink.backend.domain.dto.BlinkInvoiceDTO">
-        select t1.*,t2.customer_name from blink_invoice t1
-        left join blink_customer t2 on t1.customer_id = t2.id
-        where t1.deleted_flag = 0
+        select delivery_name,customer_name,invoice_code,invoice_type,invoice_amount	,invoice_text,	invoice_date,	invoice_rate,	invoice_operator,originator createUserId,start_time createTime
+        from l_invoice_application t1
+        left join st_instance t2 on t1.flow_id = t2.biz_objectid
+        where t2.state <![CDATA[<>]]> 5
+        <if test="qry.deliveryName != null  and qry.deliveryName != ''">
+            and delivery_name like concat('%', #{qry.deliveryName}, '%')
+        </if>
+        <if test="qry.customerName != null  and qry.customerName != ''">
+            and customer_name like concat('%', #{qry.customerName}, '%')
+        </if>
     </select>
 
     <update id="supportsInvoiceRelatedTask">

+ 134 - 31
bound-link-api/blink-backend/src/main/resources/mapper/MateDeliveryDayReportMapper.xml

@@ -420,39 +420,35 @@
     </select>
 
     <select id="queryEmployeeSubmitDays" resultType="com.wx.blink.backend.domain.vo.MateEmployeeRankVO">
-        SELECT  o1.position_staff,
-                SUM(IFNULL(t1.submit_days,0))                 AS normal_days,
-                COALESCE(
-                        ( SELECT SUM(ab.submit_days)
-                          FROM mate_delivery_day_report_abnormal ab
-                                   JOIN mate_delivery_day_report r ON r.id = ab.report_id
-                          WHERE r.position_staff = o1.position_staff
-                            AND r.submit_date   = #{date}
-                        ),0)                                         AS abnormal_days,
-                COALESCE(
-                        ( SELECT GROUP_CONCAT(
-                                         CONCAT(ab.submit_days,':',ab.submit_describe)
-                                             ORDER BY ab.id
+        SELECT o1.position_staff,
+               SUM(IFNULL(t1.submit_days, 0))               AS normalSubmitDays,
+               COALESCE(
+                       (SELECT SUM(ab.submit_days)
+                        FROM mate_delivery_day_report_abnormal ab
+                                 JOIN mate_delivery_day_report r ON r.id = ab.report_id
+                        WHERE r.position_staff = o1.position_staff
+                          AND r.submit_date = #{date}), 0)  AS unNormalSubmitDays,
+               COALESCE(
+                       (SELECT GROUP_CONCAT(
+                                       CONCAT(ab.submit_days, ':', ab.submit_describe) ORDER BY ab.id
                      SEPARATOR '|')
-                          FROM mate_delivery_day_report_abnormal ab
-                                   JOIN mate_delivery_day_report r ON r.id = ab.report_id
-                          WHERE r.position_staff = o1.position_staff
-                            AND r.submit_date   = #{date}
-                        ),'')                                        AS abnormal_desc,
-
-                CASE WHEN ANY_VALUE(o1.site_state) = 1
-                         THEN ANY_VALUE(t2.subsidy_amount)
-                     ELSE 0 END                                AS residentFixedSubsidy
+                        FROM mate_delivery_day_report_abnormal ab
+                                 JOIN mate_delivery_day_report r ON r.id = ab.report_id
+                        WHERE r.position_staff = o1.position_staff
+                          AND r.submit_date = #{date}), '') AS unNormalSubmitDaysDescribe,
+
+               CASE
+                   WHEN ANY_VALUE(o1.site_state) = 1
+                       THEN ANY_VALUE(t2.subsidy_amount)
+                   ELSE 0 END                               AS residentFixedSubsidy
         FROM mate_delivery_day_report o1
-                 LEFT JOIN mate_delivery_day_report_normal   t1 ON t1.report_id = o1.id
-                 LEFT JOIN mate_delivery                     t2 ON t2.id       = o1.delivery_id
-                 JOIN (
-            SELECT position_staff, submit_date, MAX(create_time) AS latest_date
-            FROM mate_delivery_day_report
-            GROUP BY position_staff, submit_date
-        ) o2
+                 LEFT JOIN mate_delivery_day_report_normal t1 ON t1.report_id = o1.id
+                 LEFT JOIN mate_delivery t2 ON t2.id = o1.delivery_id
+                 JOIN (SELECT position_staff, submit_date, MAX(create_time) AS latest_date
+                       FROM mate_delivery_day_report
+                       GROUP BY position_staff, submit_date) o2
                       ON o1.position_staff = o2.position_staff
-                          AND o1.create_time   = o2.latest_date
+                          AND o1.create_time = o2.latest_date
         WHERE o1.submit_date = #{date}
         GROUP BY o1.position_staff
     </select>
@@ -469,6 +465,113 @@
                             ON o1.position_staff = o2.position_staff AND o1.create_time = o2.latest_date
         where o1.submit_date = #{date}
           and t1.id is not null
-        group by t2.delivery_category,o1.position_staff
+        group by t2.delivery_category, o1.position_staff
+    </select>
+
+    <select id="queryEmployeeMonthDutyDays" resultType="com.wx.blink.backend.domain.vo.MateEmployeeRankVO">
+        select position_staff, actual_name employeeName, sum(work_hour) dutyDays
+        from mate_delivery_day_report_require t1
+        left join mate_employee t2 on t1.position_staff = t2.login_name
+        where require_state = 0
+        and work_state = 0
+        <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+            and submit_day >= #{firstDayThisMonth}
+        </if>
+        <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+            and submit_day <![CDATA[<=]]> #{firstDayNextMonth}
+        </if>
+        group by position_staff,actual_name
+    </select>
+
+    <select id="queryEmployeeMonthSubmitDays" resultType="com.wx.blink.backend.domain.vo.MateEmployeeRankVO">
+        SELECT o1.position_staff,
+        SUM(IFNULL(t1.submit_days,0)) AS normalSubmitDays,
+        COALESCE(
+        ( SELECT SUM(ab.submit_days)
+        FROM mate_delivery_day_report_abnormal ab
+        JOIN mate_delivery_day_report r ON r.id = ab.report_id
+        WHERE r.position_staff = o1.position_staff
+        <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+            and r.submit_date >= #{firstDayThisMonth}
+        </if>
+        <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+            and r.submit_date <![CDATA[<=]]> #{firstDayNextMonth}
+        </if>
+        ),0) AS unNormalSubmitDays,
+        COALESCE(
+        ( SELECT GROUP_CONCAT(
+        CONCAT(r.submit_date,",",ab.submit_days,':',ab.submit_describe)
+        ORDER BY ab.id
+        SEPARATOR '|')
+        FROM mate_delivery_day_report_abnormal ab
+        JOIN mate_delivery_day_report r ON r.id = ab.report_id
+        WHERE r.position_staff = o1.position_staff
+        <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+            and r.submit_date >= #{firstDayThisMonth}
+        </if>
+        <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+            and r.submit_date <![CDATA[<=]]> #{firstDayNextMonth}
+        </if>
+        ),'') AS unNormalSubmitDaysDescribe,
+
+        sum(CASE WHEN ANY_VALUE(o1.site_state) = 1
+        THEN ANY_VALUE(t2.subsidy_amount)
+        ELSE 0 END) AS residentFixedSubsidy
+        FROM mate_delivery_day_report o1
+        LEFT JOIN mate_delivery_day_report_normal t1 ON t1.report_id = o1.id
+        LEFT JOIN mate_delivery t2 ON t2.id = o1.delivery_id
+        JOIN (
+        SELECT position_staff, submit_date, MAX(create_time) AS latest_date
+        FROM mate_delivery_day_report
+        GROUP BY position_staff, submit_date
+        ) o2
+        ON o1.position_staff = o2.position_staff
+        AND o1.create_time = o2.latest_date
+        <where>
+            <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+                and o1.submit_date >= #{firstDayThisMonth}
+            </if>
+            <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+                and o1.submit_date <![CDATA[<=]]> #{firstDayNextMonth}
+            </if>
+        </where>
+        GROUP BY o1.position_staff
+    </select>
+
+    <select id="queryEmployeeMonthSalaryList" resultType="com.wx.blink.backend.domain.vo.MateEmployeeDaySalaryVO">
+        select t1.position_staff, grant_month, work_hour, salary + insurance + accumulation_fund salary
+        from mate_delivery_day_report_require t1
+        left join mate_employee_salary t2
+        on t1.position_staff = t2.position_staff and grant_month = #{yearMonth}
+        where require_state = 0
+        and work_state = 0
+        <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+            and t1.submit_day >= #{firstDayThisMonth}
+        </if>
+        <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+            and t1.submit_day <![CDATA[<=]]> #{firstDayNextMonth}
+        </if>
+    </select>
+
+    <select id="queryCategoryEmployeeMonthSubmitDaysList"
+            resultType="com.wx.blink.backend.domain.vo.MateDeliveryCategoryEmployeeSubmitDaysVO">
+        SELECT o1.position_staff, t2.delivery_category deliveryCategory, sum(t1.submit_days) submitDays
+        FROM mate_delivery_day_report o1
+        left join mate_delivery_day_report_normal t1 on o1.id = t1.report_id
+        left join mate_delivery t2 on t1.project_id = t2.id
+        INNER JOIN (SELECT position_staff, submit_date, MAX(create_time) AS latest_date
+        FROM mate_delivery_day_report
+        GROUP BY position_staff, submit_date) o2
+        ON o1.position_staff = o2.position_staff AND o1.create_time = o2.latest_date
+        <where>
+            <if test="firstDayThisMonth != null  and firstDayThisMonth != ''">
+                and o1.submit_date >= #{firstDayThisMonth}
+            </if>
+            <if test="firstDayNextMonth != null  and firstDayNextMonth != ''">
+                and o1.submit_date <![CDATA[<=]]> #{firstDayNextMonth}
+            </if>
+        </where>
+        and t1.id is not null
+        group by t2.delivery_category, o1.position_staff
     </select>
 </mapper>

+ 3 - 0
bound-link-api/blink-backend/src/main/resources/mapper/MateDeliveryTaskRepositoryMapper.xml

@@ -143,7 +143,10 @@
         from mate_delivery_task_positions t1
         left join mate_delivery t2 on t1.delivery_id = t2.id
         left join mate_delivery_task t3 on t1.task_id = t3.id
+        left join mate_employee t4 on t4.login_name = t1.position_staff
         where t1.deleted_flag = 0
+        and t4.disabled_flag = '0' and 	t4.deleted_flag = '0' and t4.work_type = '01'
+        and t1.task_progress <![CDATA[<>]]> '100'
         <if test="query.positionStaff != null  and query.positionStaff != ''">
             and t1.position_staff = #{query.positionStaff}
         </if>

+ 1 - 0
bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/json/serializer/DictValueVoTOSerializer.java

@@ -14,6 +14,7 @@ import com.google.common.collect.Lists;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;