Browse Source

财务审核

ptos
ccsens_wu 4 years ago
parent
commit
5dfc7665e4
  1. 34
      src/main/java/com/ccsens/ptccsens/api/finance/FinanceController.java
  2. 103
      src/main/java/com/ccsens/ptccsens/bean/dto/FinanceDto.java
  3. 93
      src/main/java/com/ccsens/ptccsens/bean/vo/FinanceVo.java
  4. 62
      src/main/java/com/ccsens/ptccsens/persist/dao/FinanceDao.java
  5. 144
      src/main/java/com/ccsens/ptccsens/service/FinanceService.java
  6. 32
      src/main/java/com/ccsens/ptccsens/service/IFinanceService.java
  7. 4
      src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java
  8. 5
      src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java
  9. 108
      src/main/resources/mapper_dao/FinanceDao.xml

34
src/main/java/com/ccsens/ptccsens/api/finance/FinanceController.java

@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @description:
@ -39,7 +40,40 @@ public class FinanceController {
log.info("通过任务id查看任务关联的财务信息:{}",params);
FinanceVo.FinanceItem item = financeService.getByTask(params.getParam(), params.getUserId());
log.info("通过任务id查看任务关联的财务信息结束:{}", item);
return JsonResponse.newInstance().ok(item);
}
@ApiOperation(value = "查询费用申请类型", notes = "")
@RequestMapping(value = "/queryType", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.Type> queryType(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.Type> params) {
log.info("查询数据类型:{}",params);
List<FinanceVo.Type> types = financeService.queryType(params.getParam(), params.getUserId());
log.info("查询数据类型结束:{}", types);
return JsonResponse.newInstance().ok(types);
}
@ApiOperation(value = "发起申请", notes = "")
@RequestMapping(value = "/apply", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse apply(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.Apply> params) {
log.info("发起申请:{}",params);
financeService.apply(params.getParam(), params.getUserId());
log.info("发起申请结束");
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "查询申请详情", notes = "")
@RequestMapping(value = "/getApplyDetail", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.ApplyDetail> getApplyDetail(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.ApplyId> params) {
log.info("查询申请详情:{}",params);
FinanceVo.ApplyDetail detail = financeService.getApplyDetail(params.getParam(), params.getUserId());
log.info("查询申请详情结束:{}", detail);
return JsonResponse.newInstance().ok(detail);
}
@ApiOperation(value = "审批", notes = "")
@RequestMapping(value = "/audit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse audit(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.Audit> params) {
log.info("审批:{}",params);
financeService.audit(params.getParam(), params.getUserId());
log.info("审批结束");
return JsonResponse.newInstance().ok();
}
}

103
src/main/java/com/ccsens/ptccsens/bean/dto/FinanceDto.java

@ -4,16 +4,113 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @description:
* @author: whj
* @time: 2022/1/24 16:51
* @description 财务
* @author whj
* @time 2022/1/24 16:51
*/
public class FinanceDto {
@Data
@ApiModel("财务-根据任务ID查询财务条-请求")
public static class TaskId{
@NotNull
@ApiModelProperty("任务详情ID")
private Long taskDetailId;
}
@Data
@ApiModel("财务申请-查询类型-请求")
public static class Type{
@NotNull
@ApiModelProperty("类型:0申请类型 1类目 2名目")
private Byte type;
@NotNull
@ApiModelProperty("上级类型ID,默认为0")
private Long parentId = 0L;
}
@Data
@ApiModel("财务申请-发起申请-请求")
public static class Apply{
@NotNull
@ApiModelProperty("提交人姓名")
private String submitName;
@NotNull
@ApiModelProperty("所属部门")
private String department;
@NotNull
@ApiModelProperty("所属项目id")
private Long projectId;
@NotNull
@ApiModelProperty("所属任务id")
private Long taskDetailId;
@NotNull
@ApiModelProperty("类型id")
private Long typeId;
@NotNull
@ApiModelProperty("类目id")
private Long categoryId;
@NotNull
@ApiModelProperty("名目id")
private Long rowId;
@NotNull
@ApiModelProperty("备注信息")
private String remark;
@NotNull
@ApiModelProperty("总金额")
private Long money;
@ApiModelProperty("发票信息")
private List<Invoice> invoiceList;
@NotNull
@ApiModelProperty("审核人ID")
private List<Long> checkerList;
}
@Data
@ApiModel("财务申请-发票-请求")
public static class Invoice{
@NotNull
@ApiModelProperty("发票浏览地址")
private String url;
@NotNull
@ApiModelProperty("发票代码")
private String invoiceCode;
@NotNull
@ApiModelProperty("发票号码")
private String invoiceNumber;
@NotNull
@ApiModelProperty("金额,单位:分")
private Long money;
@NotNull
@ApiModelProperty("税额")
private Long taxMoney;
@NotNull
@ApiModelProperty("开票时间")
private Long invoiceTime;
@NotNull
@ApiModelProperty("每张发票备注信息")
private String remark;
}
@Data
@ApiModel("财务-申请ID-请求")
public static class ApplyId {
@NotNull
@ApiModelProperty("申请记录id")
private Long applyId;
}
@Data
@ApiModel("财务-审核-请求")
public static class Audit {
@NotNull
@ApiModelProperty("审核id")
private Long financeCheckId;
@NotNull
@ApiModelProperty("审核状态 0待审核 1已通过 2驳回")
private Byte checkStatus;
@ApiModelProperty("备注")
private String remark;
}
}

93
src/main/java/com/ccsens/ptccsens/bean/vo/FinanceVo.java

@ -1,8 +1,13 @@
package com.ccsens.ptccsens.bean.vo;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.ibatis.annotations.Param;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @description:
@ -45,6 +50,92 @@ public class FinanceVo {
@ApiModelProperty("金额,单位:分,展示时除以100")
private Long money;
}
@Data
@ApiModel("财务申请-查询类型-返回")
public static class Type{
@ApiModelProperty("类型ID")
private Long id;
@ApiModelProperty("名字")
private String name;
}
@Data
@ApiModel("财务-申请详情-返回")
public static class ApplyDetail {
@ApiModelProperty("提交人姓名")
private String submitName;
@ApiModelProperty("所属部门")
private String department;
@ApiModelProperty("所属项目id")
private Long projectId;
@ApiModelProperty("所属项目名")
private String projectName;
@ApiModelProperty("所属任务id")
private Long taskDetailId;
@ApiModelProperty("所属任务名")
private String taskDetailName;
@ApiModelProperty("类型id")
private Long typeId;
@ApiModelProperty("类型名")
private String typeName;
@ApiModelProperty("类目id")
private Long categoryId;
@ApiModelProperty("类目名")
private String categoryName;
@ApiModelProperty("名目id")
private Long rowId;
@ApiModelProperty("名目名")
private String rowName;
@ApiModelProperty("备注信息")
private String remark;
@ApiModelProperty("总金额")
private Long money;
@ApiModelProperty("发票信息")
private List<Invoice> invoiceList;
@ApiModelProperty("审核人ID")
private List<Checker> checkerList;
}
@Data
@ApiModel("财务申请详情-检查人信息-返回")
public static class Checker{
@ApiModelProperty("检查人信息ID")
private Long financeCheckId;
@ApiModelProperty("是否是自己的审核信息, 0否 1是")
private Byte mine;
@ApiModelProperty("检查人id")
private Long checkerId;
@ApiModelProperty("检查人名")
private String checkerName;
@ApiModelProperty("检查状态, 0待审核 1已通过 2驳回")
private Byte checkStatus;
@ApiModelProperty("检查的时间")
private Byte time;
@ApiModelProperty("备注")
private Byte remark;
}
@Data
@ApiModel("财务申请详情-发票信息-返回")
public static class Invoice{
@NotNull
@ApiModelProperty("发票浏览地址")
private String url;
@NotNull
@ApiModelProperty("发票代码")
private String invoiceCode;
@NotNull
@ApiModelProperty("发票号码")
private String invoiceNumber;
@NotNull
@ApiModelProperty("金额,单位:分")
private Long money;
@NotNull
@ApiModelProperty("税额")
private Long taxMoney;
@NotNull
@ApiModelProperty("开票时间")
private Long invoiceTime;
@NotNull
@ApiModelProperty("每张发票备注信息")
private String remark;
}
}

62
src/main/java/com/ccsens/ptccsens/persist/dao/FinanceDao.java

@ -1,5 +1,7 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.PluFinanceCheck;
import com.ccsens.ptccsens.bean.po.PluFinanceInvoice;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import org.apache.ibatis.annotations.Param;
@ -9,8 +11,66 @@ import java.util.List;
* @author whj
*/
public interface FinanceDao {
/**
* 根据任务ID查询预算和奖金
* @param taskDetailId 任务ID
* @return 预算+奖金
*/
FinanceVo.FinancePrepare getPrepareByTaskId(@Param("taskId") Long taskDetailId);
/**
* 根据任务ID查询支出
* @param taskDetailId 任务ID
* @return 类型+支出
*/
List<FinanceVo.FinanceExpense> getExpenseByTaskId(@Param("taskId") Long taskDetailId);
/**
* 查询费用申请类型
* @param type 类型
* @return 申请类型
*/
List<FinanceVo.Type> queryType(@Param("type") byte type, @Param("parentId") Long parentId);
/**
* 批量保存发票信息
* @param invoices 发票
*/
void batchSaveInvoice(@Param("invoices") List<PluFinanceInvoice> invoices);
/**
* 批量保存检查人信息
* @param checks 检查人
*/
void batchSaveCheck(@Param("checks") List<PluFinanceCheck> checks);
/**
* 查询申请详情
* @param applyId 申请ID
* @return 详情
*/
FinanceVo.ApplyDetail getApplyDetail(@Param("applyId") Long applyId);
/**
* 查询发票信息
* @param applyId 申请ID
* @return 发票信息
*/
List<FinanceVo.Invoice> queryInvoices(@Param("applyId") Long applyId);
/**
* 查询检查人信息
*
* @param applyId 申请ID
* @param userId 操作者ID
* @return 检查人信息
*/
List<FinanceVo.Checker> queryCheckers(@Param("applyId") Long applyId, @Param("userId") Long userId);
/**
* 判断有无未审核或审核拒绝的则不更新状态则更新为审核通过
* @param applyId 申请ID
* @return 未审核通过的数量
*/
long countNoAuditPass(@Param("applyId") Long applyId);
}

144
src/main/java/com/ccsens/ptccsens/service/FinanceService.java

@ -1,15 +1,26 @@
package com.ccsens.ptccsens.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import com.ccsens.common.persist.dao.ProMemberDao;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.po.*;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import com.ccsens.ptccsens.persist.dao.FinanceDao;
import com.ccsens.ptccsens.persist.mapper.*;
import com.ccsens.ptccsens.util.BasicsCodeError;
import com.ccsens.ptccsens.util.BasicsConstant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
@ -21,8 +32,21 @@ import java.util.List;
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class FinanceService implements IFinanceService {
@Resource
private Snowflake snowflake;
@Resource
private FinanceDao financeDao;
@Resource
private PluFinanceApplyMapper pluFinanceApplyMapper;
@Resource
private ProMemberMapper proMemberMapper;
@Resource
private PluFinanceCheckMapper pluFinanceCheckMapper;
@Resource
private PluFinanceCheckLogMapper pluFinanceCheckLogMapper;
@Override
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId) {
@ -45,4 +69,124 @@ public class FinanceService implements IFinanceService {
}
return item;
}
@Override
public List<FinanceVo.Type> queryType(FinanceDto.Type param, Long userId) {
List<FinanceVo.Type> types = financeDao.queryType(param.getType(), param.getParentId());
return types;
}
@Override
public void apply(FinanceDto.Apply param, Long userId) {
// 判断是否是项目成员
ProMemberExample memberExample = new ProMemberExample();
memberExample.createCriteria().andProjectIdEqualTo(param.getProjectId())
.andUserIdEqualTo(userId);
memberExample.setOrderByClause("id desc limit 1");
List<ProMember> proMembers = proMemberMapper.selectByExample(memberExample);
log.info("项目成员:{}", proMembers);
if (CollectionUtil.isEmpty(proMembers)) {
throw new BaseException(BasicsCodeError.NOT_MEMBER_SHEET);
}
// 计算总金额和发票金额是否一致
if (CollectionUtil.isNotEmpty(param.getInvoiceList())) {
long invoiceTotal = 0L;
for (FinanceDto.Invoice invoice : param.getInvoiceList()){
invoiceTotal += invoice.getMoney();
}
if (param.getMoney() != invoiceTotal) {
log.info("总金额:{},发票金额:{}不一致", param.getMoney(), invoiceTotal);
throw new BaseException(BasicsCodeError.TOTAL_MONEY_ERROR);
}
}
PluFinanceApply apply = new PluFinanceApply();
BeanUtils.copyProperties(param, apply);
apply.setId(snowflake.nextId());
apply.setMemberId(proMembers.get(0).getId());
pluFinanceApplyMapper.insertSelective(apply);
if (CollectionUtil.isNotEmpty(param.getInvoiceList())) {
List<PluFinanceInvoice> invoices = new ArrayList<>();
param.getInvoiceList().forEach(invoice -> {
PluFinanceInvoice copy = new PluFinanceInvoice();
BeanUtils.copyProperties(invoice, copy);
copy.setId(snowflake.nextId());
copy.setFinanceApplyId(apply.getId());
copy.setOperator(userId);
invoices.add(copy);
});
financeDao.batchSaveInvoice(invoices);
}
List<PluFinanceCheck> checks = new ArrayList<>();
param.getCheckerList().forEach(check -> {
PluFinanceCheck copy = new PluFinanceCheck();
copy.setId(snowflake.nextId());
copy.setFinanceApplyId(apply.getId());
copy.setCheckerId(check);
copy.setOperator(userId);
checks.add(copy);
});
financeDao.batchSaveCheck(checks);
}
@Override
public FinanceVo.ApplyDetail getApplyDetail(FinanceDto.ApplyId param, Long userId) {
FinanceVo.ApplyDetail detail = financeDao.getApplyDetail(param.getApplyId());
if (detail == null) {
log.info("未找到{}对应的申请", param.getApplyId());
throw new BaseException(BasicsCodeError.PARAM_ERROR);
}
List<FinanceVo.Invoice> invoices = financeDao.queryInvoices(param.getApplyId());
List<FinanceVo.Checker> checkers = financeDao.queryCheckers(param.getApplyId(), userId);
detail.setCheckerList(checkers);
detail.setInvoiceList(invoices);
return detail;
}
@Override
public void audit(FinanceDto.Audit param, Long userId) {
// 判断是否审核人
PluFinanceCheck check = pluFinanceCheckMapper.selectByPrimaryKey(param.getFinanceCheckId());
log.info("{}审核信息:{}", param.getFinanceCheckId(), check);
if (check == null) {
throw new BaseException(BasicsCodeError.CHECK_NOT_FOUND);
}
// 判断是否已经审核过
PluFinanceCheckLogExample logExample = new PluFinanceCheckLogExample();
logExample.createCriteria().andCheckIdEqualTo(param.getFinanceCheckId())
.andCheckIdEqualTo(check.getCheckerId());
long l = pluFinanceCheckLogMapper.countByExample(logExample);
log.info("{}关于{}的审核数:{}", check.getCheckerId(), check.getId(), l);
if (l > 0) {
throw new BaseException(BasicsCodeError.CHECK_EXISTED);
}
// 保存记录
PluFinanceCheckLog log = new PluFinanceCheckLog();
log.setId(snowflake.nextId());
log.setCheckId(param.getFinanceCheckId());
log.setCheckStatus(param.getCheckStatus());
log.setCheckTime(System.currentTimeMillis());
log.setRemark(param.getRemark());
pluFinanceCheckLogMapper.insertSelective(log);
// 更新申请状态
if (param.getCheckStatus() == BasicsConstant.Finance.AUDIT_FAIL) {
// 设置审核状态为失败
PluFinanceApply apply = new PluFinanceApply();
apply.setId(check.getFinanceApplyId());
apply.setApplyType(BasicsConstant.Finance.AUDIT_FAIL);
pluFinanceApplyMapper.updateByPrimaryKeySelective(apply);
} else {
// 判断有无未审核或审核拒绝的,有,则不更新状态,无,则更新为审核通过
long noAuditNum = financeDao.countNoAuditPass(check.getFinanceApplyId());
if (noAuditNum <= 0) {
PluFinanceApply apply = new PluFinanceApply();
apply.setId(check.getFinanceApplyId());
apply.setApplyType(BasicsConstant.Finance.AUDIT_PASS);
pluFinanceApplyMapper.updateByPrimaryKeySelective(apply);
}
}
}
}

32
src/main/java/com/ccsens/ptccsens/service/IFinanceService.java

@ -3,6 +3,8 @@ package com.ccsens.ptccsens.service;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import java.util.List;
/**
* @author whj
*/
@ -14,4 +16,34 @@ public interface IFinanceService {
* @return 财务条
*/
FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId);
/**
* 查询费用申请类型
* @param param 类型
* @param userId 操作人ID
* @return 类型
*/
List<FinanceVo.Type> queryType(FinanceDto.Type param, Long userId);
/**
* 发起申请
* @param param 申请参数
* @param userId 操作人ID
*/
void apply(FinanceDto.Apply param, Long userId);
/**
* 查询申请详情
* @param param 申请ID
* @param userId 操作人ID
* @return 申请详情
*/
FinanceVo.ApplyDetail getApplyDetail(FinanceDto.ApplyId param, Long userId);
/**
* 审核
* @param param 审核信息
* @param userId 操作人信息
*/
void audit(FinanceDto.Audit param, Long userId);
}

4
src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java

@ -34,6 +34,10 @@ public class BasicsCodeError extends CodeError {
public static final Code ID_CODE_ERROR = new Code(524,"请输入正确的身份证", true);
public static final Code NOT_FILE = new Code(525,"找不到文件", true);
public static final Code TOTAL_MONEY_ERROR = new Code(526,"申请总金额和发票总金额不一致,请检查修改后重新提交。", true);
public static final Code CHECK_NOT_FOUND = new Code(527,"没有找到对应的审核记录,请确认后重新提交。", true);
public static final Code CHECK_EXISTED = new Code(528,"您已经提交过审核结果了,无需重复提交。", true);

5
src/main/java/com/ccsens/ptccsens/util/BasicsConstant.java

@ -46,5 +46,8 @@ public class BasicsConstant {
WBS_DURATION.put("y",365 * 24 * 60 * 60 * 1000L);
}
public static class Finance{
public static final byte AUDIT_PASS = 1;
public static final byte AUDIT_FAIL = 2;
}
}

108
src/main/resources/mapper_dao/FinanceDao.xml

@ -1,7 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.ptccsens.persist.dao.FinanceDao">
<insert id="batchSaveInvoice">
insert into t_plu_finance_invoice(id, finance_apply_id,url,invoice_code,invoice_number,money,tax_money,invoice_time,remark,operator)
values
<foreach collection="invoices" item="item" separator=",">
(#{item.id}, #{item.financeApplyId},#{item.url},#{item.invoiceCode},#{item.invoiceNumber},#{item.money},#{item.taxMoney},#{item.invoiceTime},#{item.remark},#{item.operator})
</foreach>
</insert>
<insert id="batchSaveCheck">
insert into t_plu_finance_check(id, finance_apply_id,checker_id,operator) values
<foreach collection="checks" item="item" separator=",">
(#{id}, #{item.financeApplyId},#{item.checkerId},#{item.operator})
</foreach>
</insert>
<select id="getPrepareByTaskId" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$FinancePrepare">
select f.id as financeId, (f.budget+ifNull(sum(b.add_budget),0)) as budge, f.bonus from t_plu_finance f
@ -17,4 +30,99 @@
where f.task_id = #{taskId} and f.rec_status = 0
GROUP BY f.id, t.id
</select>
<select id="queryType" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$Type">
select id, name from t_plu_finance_type where level = #{type} and parent_id = #{parentId} and rec_status = 0
</select>
<select id="getApplyDetail" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$ApplyDetail">
SELECT
a.submit_name AS submitName,
a.department,
a.project_id AS projectId,
p.NAME AS projectName,
a.task_id AS taskDetailId,
t.NAME AS taskDetailName,
a.type_id AS typeId,
t1.NAME AS typeName,
a.category_id AS categoryId,
t2.NAME AS categoryName,
a.row_id AS rowId,
t3.NAME AS rowName,
a.remark,
a.money
FROM
t_plu_finance_apply a,
t_pro_task_detail p,
t_pro_task_detail t,
t_plu_finance_type t1,
t_plu_finance_type t2,
t_plu_finance_type t3
WHERE
a.project_id = p.id
AND a.task_id = t.id
AND a.type_id = t1.id
AND a.category_id = t2.id
AND a.row_id = t3.id
AND a.id = #{applyId}
AND a.rec_status = 0
AND p.rec_status = 0
AND t.rec_status = 0
AND t1.rec_status = 0
AND t2.rec_status = 0
AND t3.rec_status = 0
</select>
<select id="queryInvoices" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$Invoice">
SELECT
url,
invoice_code,
invoice_number,
money,
tax_money,
invoice_time,
remark
FROM
t_plu_finance_invoice
WHERE
finance_apply_id = #{applyId}
AND rec_status = 0
ORDER BY
id DESC
</select>
<select id="queryCheckers" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$Checker">
SELECT
t.*,
l.check_status AS checkStatus,
l.check_time AS time,
l.remark
FROM
(
SELECT
c.id AS financeCheckId,
IF
( m.user_id = 1, 1, 0 ) AS mine,
c.checker_id AS checkerId,
m.NAME AS checkerName
FROM
t_plu_finance_check c,
t_pro_member m
WHERE
c.checker_id = m.id
AND c.finance_apply_id = #{applyId}
AND c.rec_status = 0
AND m.rec_status = 0
) t
LEFT JOIN t_plu_finance_check_log l ON t.financeCheckId = l.check_id
AND l.rec_status = 0
</select>
<select id="countNoAuditPass" resultType="java.lang.Long">
SELECT
count(*)
FROM
t_plu_finance_check c
LEFT JOIN t_plu_finance_check_log l ON c.id = l.check_id
AND l.rec_status = 0
WHERE
c.finance_apply_id = #{applyId}
AND c.rec_status = 0
AND (l.check_status = 2 OR l.id IS NULL)
</select>
</mapper>
Loading…
Cancel
Save