Jelajahi Sumber

费用管理关联业务接口

liuyc 2 tahun lalu
induk
melakukan
06d8a4fd73

+ 38 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByContractReturnedInfoVO.java

@@ -0,0 +1,38 @@
+package org.springblade.control.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+public class ExMaByContractReturnedInfoVO implements Serializable {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "回款条件")
+    private String returnedCondition;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
+    @ApiModelProperty(value = "应回款时间")
+    private LocalDate shouldReturnedTime;
+
+    @ApiModelProperty(value = "应回款金额")
+    private BigDecimal shouldReturnedMoney;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd", timezone = "GMT+8")
+    @ApiModelProperty(value = "实际回款时间")
+    private LocalDate practicalReturnedTime;
+
+    @ApiModelProperty(value = "实际回款金额")
+    private BigDecimal practicalReturnedMoney;
+
+    @ApiModelProperty(value = "催款执行人名称")
+    private String reminderUserName;
+
+}

+ 17 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByControlProjectInfoVO.java

@@ -0,0 +1,17 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ExMaByControlProjectInfoVO implements Serializable {
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+}

+ 17 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByLoanVO.java

@@ -0,0 +1,17 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ExMaByLoanVO implements Serializable {
+
+    @ApiModelProperty(value = "借款id")
+    private Long id;
+
+    @ApiModelProperty(value = "借款名称")
+    private String loanName;
+
+}

+ 29 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ExMaByProjectCostBudgetVO.java

@@ -0,0 +1,29 @@
+package org.springblade.control.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ExMaByProjectCostBudgetVO implements Serializable {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "所属项目")
+    private String projectName;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "状态名称")
+    private String statusName;
+
+    @ApiModelProperty(value = "计划任务描述")
+    private String planTaskDesc;
+
+    @ApiModelProperty(value = "计划完成指标")
+    private String planTarget;
+
+}

+ 141 - 0
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java

@@ -0,0 +1,141 @@
+package org.springblade.control.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.control.entity.ContractReturnedInfo;
+import org.springblade.control.entity.ControlProjectInfo;
+import org.springblade.control.entity.EMLoanInfo;
+import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.service.impl.ContractReturnedInfoServiceImpl;
+import org.springblade.control.service.impl.EMLoanServiceImpl;
+import org.springblade.control.service.impl.ProjectCostBudgetServiceImpl;
+import org.springblade.control.service.impl.ProjectInfoServiceImpl;
+import org.springblade.control.vo.ExMaByContractReturnedInfoVO;
+import org.springblade.control.vo.ExMaByControlProjectInfoVO;
+import org.springblade.control.vo.ExMaByLoanVO;
+import org.springblade.control.vo.ExMaByProjectCostBudgetVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/ex/ma")
+@Api(value = "费用管理关联业务接口", tags = "费用管理关联业务接口")
+public class ExMaTwoController extends BladeController {
+
+    private final IUserClient iUserClient;
+    private final ProjectInfoServiceImpl projectInfoService;
+    private final ProjectCostBudgetServiceImpl projectCostBudgetService;
+    private final EMLoanServiceImpl emLoanService;
+    private final ContractReturnedInfoServiceImpl contractReturnedInfoService;
+
+    @GetMapping("/project/list")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "获取项目列表")
+    public R<List<ExMaByControlProjectInfoVO>> getProjectList() {
+        List<ControlProjectInfo> list = projectInfoService.list();
+        List<ExMaByControlProjectInfoVO> collect = list.stream().map(obj -> {
+            ExMaByControlProjectInfoVO vo = new ExMaByControlProjectInfoVO();
+            vo.setProjectId(obj.getId());
+            vo.setProjectName(obj.getName());
+            return vo;
+        }).collect(Collectors.toList());
+        return R.data(collect);
+    }
+
+    @GetMapping("/project/budget/list")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取我的项目预算列表", notes = "传入项目id")
+    public R<List<ExMaByProjectCostBudgetVO>> getProjectBudgetList(@RequestParam Long projectId) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("未获取到当前用户信息,请联系管理员");
+        }
+        LambdaQueryWrapper<ProjectCostBudget> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProjectCostBudget::getTaskUser, SecureUtil.getUserId());
+        queryWrapper.eq(ProjectCostBudget::getProjectId, projectId);
+        queryWrapper.orderByDesc(ProjectCostBudget::getCreateTime); //倒叙
+        List<ProjectCostBudget> projectCostBudgetList = projectCostBudgetService.getBaseMapper().selectList(queryWrapper);
+        ControlProjectInfo projectInfo = projectInfoService.getBaseMapper().selectById(projectId);
+        List<ExMaByProjectCostBudgetVO> collect = projectCostBudgetList.stream().map(obj -> {
+            ExMaByProjectCostBudgetVO vo = new ExMaByProjectCostBudgetVO();
+            vo.setId(obj.getId());
+            vo.setProjectName(projectInfo.getName());
+            vo.setStatus(obj.getStatus());
+            vo.setStatusName(obj.getStatus().equals(1) ? "未开始" : (obj.getStatus().equals(2) ? "进行中" : (obj.getStatus().equals(3) ? "暂停" : "已完成")));
+            vo.setPlanTaskDesc(obj.getPlanTaskDesc());
+            vo.setPlanTarget(obj.getPlanTarget());
+            return vo;
+        }).collect(Collectors.toList());
+        return R.data(collect);
+    }
+
+    @GetMapping("/loan/list")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "获取我的借款列表")
+    public R<List<ExMaByLoanVO>> getLoanList() {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("未获取到当前用户信息,请联系管理员");
+        }
+        LambdaQueryWrapper<EMLoanInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EMLoanInfo::getIsTemp, 1); //已提交
+        queryWrapper.eq(EMLoanInfo::getStatus, 2); //已审批
+        queryWrapper.like(EMLoanInfo::getLoanUserName, SecureUtil.getNickName());
+        queryWrapper.apply("return_money != loan_money"); //排除已还款,已还款的还款金额=借款金额
+        List<EMLoanInfo> emLoanInfos = emLoanService.getBaseMapper().selectList(queryWrapper);
+
+        List<ExMaByLoanVO> collect = emLoanInfos.stream().map(obj -> {
+            ExMaByLoanVO vo = new ExMaByLoanVO();
+            vo.setId(obj.getId());
+            Date useDate = obj.getUseDate();
+            SimpleDateFormat smp = new SimpleDateFormat("yyyy年MM月dd日");
+            String format = smp.format(useDate);
+            BigDecimal difference = obj.getLoanMoney().subtract(obj.getReturnMoney()).abs();
+            String title = format + "借款" + difference + "元";
+            vo.setLoanName(title);
+            return vo;
+        }).collect(Collectors.toList());
+        return R.data(collect);
+    }
+
+    @GetMapping("/project/contract/list")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "获取项目合同段回款数据列表", notes = "传入项目id")
+    public R<List<ExMaByContractReturnedInfoVO>> getProjectContractMoneyList(@RequestParam Long projectId) {
+        List<ContractReturnedInfo> contractReturnedInfos = contractReturnedInfoService.getBaseMapper().selectList(Wrappers.<ContractReturnedInfo>lambdaQuery().eq(ContractReturnedInfo::getProjectId, projectId));
+        Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
+        List<ExMaByContractReturnedInfoVO> collect = contractReturnedInfos.stream().map(obj -> {
+            ExMaByContractReturnedInfoVO vo = new ExMaByContractReturnedInfoVO();
+            vo.setId(obj.getId());
+            vo.setReturnedCondition(obj.getReturnedCondition());
+            vo.setPracticalReturnedMoney(obj.getPracticalReturnedMoney());
+            vo.setPracticalReturnedTime(obj.getPracticalReturnedTime());
+            vo.setShouldReturnedMoney(obj.getShouldReturnedMoney());
+            vo.setShouldReturnedTime(obj.getShouldReturnedTime());
+            vo.setReminderUserName(userMap.getOrDefault(obj.getReminderUser(), null));
+            return vo;
+        }).collect(Collectors.toList());
+        return R.data(collect);
+    }
+
+
+}

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java

@@ -52,7 +52,7 @@ public class TaskProcessController extends BladeController {
 
     @PostMapping("/task/submit")
     @ApiOperationSupport(order = 4)
-    @ApiOperation(value = "审批任务提交", notes = "传入审批任务id、是否支付payStatus(已支付=1,待支付=0)")
+    @ApiOperation(value = "审批任务提交", notes = "传入审批任务id、是否支付payStatus(已支付=1,待支付=0,非财务人员审批传空字符串)")
     public R<Object> taskSubmit(@RequestParam String id, String payStatus) {
         return R.status(taskProcessService.taskSubmit(id, payStatus));
     }

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java

@@ -259,7 +259,14 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
                 }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMFinancialReimbursementInfo>lambdaUpdate().set(EMFinancialReimbursementInfo::getStatus, 0).set(EMFinancialReimbursementInfo::getIsTemp, 0).eq(EMFinancialReimbursementInfo::getId, id));
+                if (this.update(Wrappers.<EMFinancialReimbursementInfo>lambdaUpdate().set(EMFinancialReimbursementInfo::getStatus, 0).set(EMFinancialReimbursementInfo::getIsTemp, 0).eq(EMFinancialReimbursementInfo::getId, id))) {
+                    Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 1 and data_id = " + id, Long.class);
+                    if (aLong == null || aLong == 0L) {
+                        //绑定关系
+                        Long draftGroupId = SnowFlakeUtil.getId();
+                        jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + id + ",1)");
+                    }
+                }
 
                 return true;
             }

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPurchaseServiceImpl.java

@@ -237,7 +237,14 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
                 }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMPurchaseInfo>lambdaUpdate().set(EMPurchaseInfo::getStatus, 0).set(EMPurchaseInfo::getIsTemp, 0).eq(EMPurchaseInfo::getId, id));
+                if (this.update(Wrappers.<EMPurchaseInfo>lambdaUpdate().set(EMPurchaseInfo::getStatus, 0).set(EMPurchaseInfo::getIsTemp, 0).eq(EMPurchaseInfo::getId, id))) {
+                    Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 5 and data_id = " + id, Long.class);
+                    if (aLong == null || aLong == 0L) {
+                        //绑定关系
+                        Long draftGroupId = SnowFlakeUtil.getId();
+                        jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + id + ",5)");
+                    }
+                }
 
                 return true;
             }

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -226,7 +226,14 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
                 }
 
                 //修改当前记录为未上报状态
-                this.update(Wrappers.<EMUseCarInfo>lambdaUpdate().set(EMUseCarInfo::getStatus, 0).set(EMUseCarInfo::getIsTemp, 0).eq(EMUseCarInfo::getId, id));
+                if (this.update(Wrappers.<EMUseCarInfo>lambdaUpdate().set(EMUseCarInfo::getStatus, 0).set(EMUseCarInfo::getIsTemp, 0).eq(EMUseCarInfo::getId, id))) {
+                    Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 6 and data_id = " + id, Long.class);
+                    if (aLong == null || aLong == 0L) {
+                        //绑定关系
+                        Long draftGroupId = SnowFlakeUtil.getId();
+                        jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + id + ",6)");
+                    }
+                }
 
                 return true;
             }

+ 10 - 22
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -592,7 +592,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
      */
     private void processTheServiceDataAfterTheApprovalClosedLoop(Integer businessDataType, Long dataId) {
         switch (businessDataType) {
-            case 1: //计划任务 计划任务金额统计、推送到对应项目中
+            case 1:
+                //计划任务
                 ProjectCostBudget projectCostBudget = jdbcTemplate.query("select * from c_project_cost_budget where id = " + dataId, new BeanPropertyRowMapper<>(ProjectCostBudget.class)).stream().findAny().orElse(null);
                 if (projectCostBudget != null && projectCostBudget.getStatus().equals(4)) {
                     //已完成任务进行金额统计 budget_count_money(预算总金额) = actual_total_money(实际总金额)
@@ -600,11 +601,10 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 }
 
                 break;
-            case 2: //财务
+            case 2:
+                //财务
                 EMFinancialReimbursementInfo emFinancialReimbursementInfo = jdbcTemplate.query("select * from c_expense_financial_reimbursement_info where id = " + dataId, new BeanPropertyRowMapper<>(EMFinancialReimbursementInfo.class)).stream().findAny().orElse(null);
                 if (emFinancialReimbursementInfo != null && emFinancialReimbursementInfo.getStatus().equals(2)) {
-                    //TODO 已审批财务报销进行金额统计
-
                     //处理借款抵扣金额(如果存在借款抵扣,那么扣除相应借款金额)
                     if (ObjectUtil.isNotEmpty(emFinancialReimbursementInfo.getFrMoney()) && emFinancialReimbursementInfo.getIsDeductLoan() == 1 && ObjectUtil.isNotEmpty(emFinancialReimbursementInfo.getDeductLoanId())) {
                         //获取借款金额(已审批、提交的借款金额数据)
@@ -636,26 +636,14 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 }
 
                 break;
-            case 3: //支付 TODO 请款金额与项目关联
-                EMPayInfo emPayInfo = jdbcTemplate.query("select * from c_expense_pay_info where id = " + dataId, new BeanPropertyRowMapper<>(EMPayInfo.class)).stream().findAny().orElse(null);
-                if (emPayInfo != null && emPayInfo.getStatus().equals(2)) {
-                    //已审批支付审批进行金额统计
-                }
-
+            case 3:
+                //支付 不做处理,只存储记录,关联项目合同段后,在项目处统计通过的任务的金额
                 break;
-            case 5: //采购 TODO 采购与经营预算关联
-                EMPurchaseInfo emPurchaseInfo = jdbcTemplate.query("select * from c_expense_purchase_info where id = " + dataId, new BeanPropertyRowMapper<>(EMPurchaseInfo.class)).stream().findAny().orElse(null);
-                if (emPurchaseInfo != null && emPurchaseInfo.getStatus().equals(2)) {
-                    //已审批采购审批进行金额统计
-                }
-
+            case 5:
+                //采购 不做处理,只存储记录,在经营预算处统计通过的任务的金额
                 break;
-            case 8: //外包 TODO 外包支付与项目关联
-                EMOutsourcingPayInfo emOutsourcingPayInfo = jdbcTemplate.query("select * from c_expense_outsourcing_pay_info where id = " + dataId, new BeanPropertyRowMapper<>(EMOutsourcingPayInfo.class)).stream().findAny().orElse(null);
-                if (emOutsourcingPayInfo != null && emOutsourcingPayInfo.getStatus().equals(2)) {
-                    //已审批外包支付进行金额统计
-                }
-
+            case 8:
+                //外包 不做处理,只存储记录,关联项目后,在项目处统计通过的任务的金额
                 break;
         }
     }