mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
新增组织申请开票、开票记录查询接口
This commit is contained in:
+1
@@ -438,6 +438,7 @@ public class ErrorCodeConstants {
|
||||
public static final ErrorCode PAY_RECHARGE_ACTIVITY_CHANNEL_MISMATCH_ERROR = new ErrorCode(1_002_043_026, "充值活动类型和支付渠道不匹配,请选择其他充值活动!");
|
||||
public static final ErrorCode PAY_RECHARGE_ACTIVITY_EXPIRE_ERROR = new ErrorCode(1_002_043_027, "充值活动已结束,请选择其他充值活动!");
|
||||
public static final ErrorCode INVOICE_TITLE_NOT_EXISTS_ERROR = new ErrorCode(1_002_043_028, "发票抬头不存在,请先创建发票抬头");
|
||||
public static final ErrorCode ORG_INVOICE_PURCHASE_RECORD_UPDATE_NUM_NOT_MATCH_ERROR = new ErrorCode(1_002_043_029, "当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票");
|
||||
|
||||
//=========== 支付相关 1-002-048-000 ============
|
||||
public static final ErrorCode PAY_CHANNEL_NOT_SUPPORT = new ErrorCode(1_002_048_000, "暂不支持的支付渠道,请使用其他支付渠道");
|
||||
|
||||
+18
-1
@@ -2,8 +2,12 @@ package com.cf.imes.module.system.controller.admin.funds.invoice;
|
||||
|
||||
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsPageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO;
|
||||
import com.cf.imes.module.system.service.funds.invoice.InvoiceService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -45,6 +49,19 @@ public class InvoiceController {
|
||||
@GetMapping("/available/info")
|
||||
@Operation(summary = "获取组织的开票金额信息")
|
||||
public CommonResult<InvoiceAmountAndAvailablePageRespVO> getInvoiceAmountAndAvailablePage(@Valid InvoiceAmountAndAvailablePageReqVO pageReqVO) {
|
||||
return success(invoiceService.getInvoiceAmount(pageReqVO));
|
||||
return success(invoiceService.getInvoiceAmountAndAvailablePage(pageReqVO));
|
||||
}
|
||||
|
||||
@PostMapping("")
|
||||
@Operation(summary = "组织申请开票")
|
||||
public CommonResult<Boolean> insetInvoiceRecords(@Valid @RequestBody InvoiceRecordsReqVO reqVO) {
|
||||
invoiceService.applyInvoice(reqVO);
|
||||
return success(Boolean.TRUE);
|
||||
}
|
||||
|
||||
@GetMapping("/records")
|
||||
@Operation(summary = "获取组织的开票记录")
|
||||
public CommonResult<PageResult<InvoiceRecordsRespVO>> getInvoiceRecords(@Valid InvoiceDetailsPageReqVO pageReqVO) {
|
||||
return success(invoiceService.getInvoiceRecords(pageReqVO));
|
||||
}
|
||||
}
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.cf.imes.module.system.controller.admin.funds.invoice.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - 组织申请开票 Request VO")
|
||||
public class InvoiceRecordsReqVO {
|
||||
|
||||
@Schema(description = "购买记录ID")
|
||||
@Size(max = 300, message = "单次开票选择记录不能超过100条")
|
||||
@NotEmpty
|
||||
private List<Long> purchaseRecordId;
|
||||
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
package com.cf.imes.module.system.controller.admin.funds.invoice.vo;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - 组织开票记录 Response VO")
|
||||
public class InvoiceRecordsRespVO {
|
||||
|
||||
|
||||
@Schema(description = "发票ID")
|
||||
private Long id;
|
||||
|
||||
|
||||
@Schema(description = "组织ID")
|
||||
private Long organId;
|
||||
|
||||
|
||||
@Schema(description = "组织名称")
|
||||
private String organName;
|
||||
|
||||
|
||||
@Schema(description = "发票申请人ID")
|
||||
private Long userId;
|
||||
|
||||
|
||||
@Schema(description = "发票申请人名称")
|
||||
private String creator;
|
||||
|
||||
|
||||
@Schema(description = "发票号")
|
||||
private String invoiceNo;
|
||||
|
||||
|
||||
@Schema(description = "发票金额")
|
||||
private BigDecimal invoiceAmount;
|
||||
|
||||
|
||||
@Schema(description = "发票状态,1待开票 2已开票 3开票失败")
|
||||
private Integer status;
|
||||
|
||||
|
||||
@Schema(description = "发票附件保存路径")
|
||||
private String invoiceAttachmentPath;
|
||||
|
||||
|
||||
@Schema(description = "开票人")
|
||||
private String invoicePerson;
|
||||
|
||||
|
||||
@Schema(description = "开票人用户ID")
|
||||
private Long invoicePersonId;
|
||||
|
||||
|
||||
@Schema(description = "开票时间")
|
||||
private LocalDateTime invoiceTime;
|
||||
|
||||
|
||||
@Schema(description = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
package com.cf.imes.module.system.controller.admin.pay.vo;
|
||||
|
||||
import com.cf.imes.module.system.validation.pay.PayChannelCodeValid;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 统一支付vo
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2025/4/15 14:30
|
||||
*/
|
||||
@Data
|
||||
@Valid
|
||||
public class PayOrderUnifiedReqVO {
|
||||
/**
|
||||
* 商品标题
|
||||
*/
|
||||
@NotEmpty(message = "商品标题不能为空")
|
||||
@Length(max = 32, message = "商品标题不能超过 32")
|
||||
private String subject;
|
||||
|
||||
/**
|
||||
* 支付金额,单位:元
|
||||
*/
|
||||
@NotNull(message = "支付金额不能为空")
|
||||
@DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零")
|
||||
private BigDecimal price;
|
||||
|
||||
@NotNull(message = "订单失效时间不能为空")
|
||||
private LocalDateTime expireTime;
|
||||
|
||||
@Schema(description = "支付渠道编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
|
||||
@PayChannelCodeValid
|
||||
@NotNull(message = "支付渠道编码不能为空")
|
||||
private Integer channelCode;
|
||||
}
|
||||
+5
-1
@@ -3,7 +3,9 @@ package com.cf.imes.module.system.controller.admin.pay.vo;
|
||||
import com.cf.imes.module.system.validation.pay.PayChannelCodeValid;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.DecimalMax;
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.Digits;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -25,7 +27,9 @@ public class PayRechargeOrderReqVO {
|
||||
|
||||
@Schema(description = "支付金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@NotNull(message = "支付金额不能为空")
|
||||
@DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零")
|
||||
@DecimalMin(value = "0.01", message = "支付金额必须大于零")
|
||||
@DecimalMax(value = "100000", message = "支付金额不能超过十万")
|
||||
@Digits(integer = 6, fraction = 2, message = "支付金额格式不正确")
|
||||
private BigDecimal price;
|
||||
|
||||
@Schema(description = "支付渠道编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
|
||||
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
package com.cf.imes.module.system.dal.dataobject.funds.invoice;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author 开票记录表
|
||||
*/
|
||||
@TableName("invoice_records")
|
||||
@KeySequence("invoice_records_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class InvoiceRecordsDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
|
||||
|
||||
/**
|
||||
* 组织ID
|
||||
*/
|
||||
private Long organId;
|
||||
|
||||
|
||||
/**
|
||||
* 组织/发票抬头名称
|
||||
*/
|
||||
private String organName;
|
||||
|
||||
|
||||
/**
|
||||
* 用户ID-发票申请人ID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
|
||||
/**
|
||||
* 发票号
|
||||
*/
|
||||
private String invoiceNo;
|
||||
|
||||
|
||||
/**
|
||||
* 购买记录单号
|
||||
*/
|
||||
private String purchaseIds;
|
||||
|
||||
|
||||
/**
|
||||
* 发票金额
|
||||
*/
|
||||
private BigDecimal invoiceAmount;
|
||||
|
||||
|
||||
/**
|
||||
* 发票状态,1待开票 2已开票 3开票失败
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
|
||||
/**
|
||||
* 发票附件保存路径
|
||||
*/
|
||||
private String invoiceAttachmentPath;
|
||||
|
||||
|
||||
/**
|
||||
* 开票人
|
||||
*/
|
||||
private String invoicePerson;
|
||||
|
||||
|
||||
/**
|
||||
* 开票人用户ID
|
||||
*/
|
||||
private Long invoicePersonId;
|
||||
|
||||
|
||||
/**
|
||||
* 开票时间
|
||||
*/
|
||||
private LocalDateTime invoiceTime;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 抬头ID
|
||||
*/
|
||||
private Long invoiceTitleId;
|
||||
|
||||
|
||||
/**
|
||||
* 抬头
|
||||
*/
|
||||
private String invoiceTitleInfo;
|
||||
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
-12
@@ -43,18 +43,6 @@ public class PurchaseRecordDO extends BaseDO {
|
||||
private Long organId;
|
||||
|
||||
|
||||
/**
|
||||
* 用户ID-发票申请人ID
|
||||
*/
|
||||
private Long InvoiceApplicantUserId;
|
||||
|
||||
|
||||
/**
|
||||
* 发票申请人名称
|
||||
*/
|
||||
private Long InvoiceApplicantUserName;
|
||||
|
||||
|
||||
/**
|
||||
* 产品ID
|
||||
*/
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.cf.imes.module.system.dal.mysql.funds.invoice;
|
||||
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsPageReqVO;
|
||||
import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceRecordsDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface InvoiceRecordsMapper extends BaseMapperX<InvoiceRecordsDO> {
|
||||
|
||||
|
||||
default PageResult<InvoiceRecordsDO> selectInvoiceRecordsPage(InvoiceDetailsPageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<InvoiceRecordsDO>()
|
||||
.eq(InvoiceRecordsDO::getDeleted,false)
|
||||
.eqIfPresent(InvoiceRecordsDO::getOrganId,pageReqVO.getOrganId())
|
||||
.likeIfPresent(InvoiceRecordsDO::getInvoiceNo,pageReqVO.getInvoiceNo())
|
||||
.eqIfPresent(InvoiceRecordsDO::getStatus,pageReqVO.getStatus())
|
||||
.likeIfPresent(InvoiceRecordsDO::getCreator,pageReqVO.getCreator())
|
||||
.likeIfPresent(InvoiceRecordsDO::getInvoicePerson,pageReqVO.getInvoicePerson())
|
||||
.betweenIfPresent(InvoiceRecordsDO::getInvoiceAmount,pageReqVO.getInvoiceAmount())
|
||||
.betweenIfPresent(InvoiceRecordsDO::getCreateTime,pageReqVO.getCreateTime())
|
||||
.betweenIfPresent(InvoiceRecordsDO::getInvoiceTime,pageReqVO.getInvoiceTime()));
|
||||
}
|
||||
}
|
||||
+10
@@ -11,8 +11,10 @@ import com.cf.imes.module.system.controller.admin.funds.purchase.vo.PurchaseReco
|
||||
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
|
||||
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 购买记录 Mapper
|
||||
@@ -58,6 +60,7 @@ public interface PurchaseRecordMapper extends BaseMapperX<PurchaseRecordDO> {
|
||||
.eq(PurchaseRecordDO::getOrganId, SecurityFrameworkUtils.getUserOrganId())
|
||||
.eq(PurchaseRecordDO::getDeleted, false)
|
||||
.in(PurchaseRecordDO::getIsInvocing, InvoiceStatusEnum.INVOICABLE.getStatus(), InvoiceStatusEnum.INVOICINGFAILED.getStatus())
|
||||
.orderByDesc(PurchaseRecordDO::getCreateTime)
|
||||
);
|
||||
|
||||
}
|
||||
@@ -68,4 +71,11 @@ public interface PurchaseRecordMapper extends BaseMapperX<PurchaseRecordDO> {
|
||||
* @return
|
||||
*/
|
||||
InvoiceAmountRespVO getOrgInvoiceAmountStatistics(Long organId);
|
||||
|
||||
/**
|
||||
* 查询可开票的金额
|
||||
*
|
||||
* @param organId
|
||||
*/
|
||||
BigDecimal getInvoicableAmount(Long organId, @Param("ids") List<Long> ids);
|
||||
}
|
||||
|
||||
+12
-4
@@ -5,7 +5,8 @@ import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsPageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO;
|
||||
|
||||
/**
|
||||
@@ -26,13 +27,20 @@ public interface InvoiceService {
|
||||
* @param invoiceAmountAndAvailablePageReqVO
|
||||
* @return
|
||||
*/
|
||||
InvoiceAmountAndAvailablePageRespVO getInvoiceAmount(InvoiceAmountAndAvailablePageReqVO invoiceAmountAndAvailablePageReqVO);
|
||||
InvoiceAmountAndAvailablePageRespVO getInvoiceAmountAndAvailablePage(InvoiceAmountAndAvailablePageReqVO invoiceAmountAndAvailablePageReqVO);
|
||||
|
||||
/**
|
||||
* 查询开票分页
|
||||
* 组织申请发票
|
||||
*
|
||||
* @param reqVO
|
||||
*/
|
||||
void applyInvoice(InvoiceRecordsReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 查询组织开票记录
|
||||
*
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
PageResult<InvoiceDetailsRespVO> getInvoiceDetails(InvoiceDetailsPageReqVO pageReqVO);
|
||||
PageResult<InvoiceRecordsRespVO> getInvoiceRecords(InvoiceDetailsPageReqVO pageReqVO);
|
||||
}
|
||||
|
||||
+79
-31
@@ -1,24 +1,43 @@
|
||||
package com.cf.imes.module.system.service.funds.invoice;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.Assert.AssertUtils;
|
||||
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceAmountAndAvailablePageRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsPageReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceDetailsRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsReqVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceRecordsRespVO;
|
||||
import com.cf.imes.module.system.controller.admin.funds.invoice.vo.InvoiceTitleReqVO;
|
||||
import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceRecordsDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.funds.invoice.InvoiceTitleInfoDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO;
|
||||
import com.cf.imes.module.system.dal.mysql.funds.invoice.InvoiceRecordsMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.funds.invoice.InvoiceTitleInfoMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.funds.purchase.PurchaseRecordMapper;
|
||||
import com.cf.imes.module.system.enums.pay.InvoiceStatusEnum;
|
||||
import com.cf.imes.module.system.service.organ.OrganService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString;
|
||||
import static com.cf.imes.framework.common.util.json.JsonUtils.zipString;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.INVOICE_TITLE_NOT_EXISTS_ERROR;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORG_INVOICE_PURCHASE_RECORD_UPDATE_NUM_NOT_MATCH_ERROR;
|
||||
|
||||
|
||||
/**
|
||||
@@ -35,6 +54,11 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
@Resource
|
||||
private PurchaseRecordMapper purchaseRecordMapper;
|
||||
|
||||
@Resource
|
||||
private InvoiceRecordsMapper invoiceRecordsMapper;
|
||||
|
||||
@Resource
|
||||
private OrganService organService;
|
||||
|
||||
@Override
|
||||
public void insetInvoiceTitle(InvoiceTitleReqVO reqVO) {
|
||||
@@ -77,7 +101,7 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InvoiceAmountAndAvailablePageRespVO getInvoiceAmount(InvoiceAmountAndAvailablePageReqVO invoiceAmountAndAvailablePageReqVO) {
|
||||
public InvoiceAmountAndAvailablePageRespVO getInvoiceAmountAndAvailablePage(InvoiceAmountAndAvailablePageReqVO invoiceAmountAndAvailablePageReqVO) {
|
||||
InvoiceAmountAndAvailablePageRespVO invoiceAmountAndAvailablePageRespVO = new InvoiceAmountAndAvailablePageRespVO();
|
||||
// 开票金额
|
||||
invoiceAmountAndAvailablePageRespVO.setInvoiceAmountRespVO(purchaseRecordMapper.getOrgInvoiceAmountStatistics(SecurityFrameworkUtils.getUserOrganId()));
|
||||
@@ -89,35 +113,59 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<InvoiceDetailsRespVO> getInvoiceDetails(InvoiceDetailsPageReqVO pageReqVO) {
|
||||
//
|
||||
// PageDTO<InvoiceDetailsRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
//
|
||||
// List<Integer> invoiceStatus = new ArrayList<>();
|
||||
// invoiceStatus.add(InvoiceStatusEnum.INVOICABLE.getStatus());
|
||||
// invoiceStatus.add(InvoiceStatusEnum.INVOICINGFAILED.getStatus());
|
||||
//
|
||||
// QueryWrapperX<IncomeExpenseDetailsDO> queryWrapperX = new QueryWrapperX<>();
|
||||
//
|
||||
// pageReqVO.setCreateTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getCreateTime()));
|
||||
// queryWrapperX
|
||||
// .eq("ied.organId",getUserOrganId())
|
||||
// .eq("ied.deleted",false)
|
||||
// .eq("ied.trade_type", TradeTypeEnum.PRODUCT.getCode())
|
||||
// .in("pr.is_invocing", invoiceStatus)
|
||||
// .betweenIfPresent("ied.create_time",pageReqVO.getCreateTime())
|
||||
// .betweenIfPresent("ied.cash_amount_change",pageReqVO.getAmount());
|
||||
//
|
||||
// IPage<InvoiceDetailsRespVO> respVOIPage = incomeExpenseDetailsMapper.selectOrganInvoicable(page, queryWrapperX);
|
||||
//
|
||||
// List<InvoiceDetailsRespVO> records = respVOIPage.getRecords();
|
||||
// if (CollUtil.isEmpty(records)) {
|
||||
// return new PageResult<>();
|
||||
// }
|
||||
//
|
||||
// return new PageResult<>(records, respVOIPage.getTotal());
|
||||
return null;
|
||||
public void applyInvoice(InvoiceRecordsReqVO reqVO) {
|
||||
Long organId = SecurityFrameworkUtils.getUserOrganId();
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
List<Long> purchaseRecordId = reqVO.getPurchaseRecordId();
|
||||
// 查询发票抬头
|
||||
InvoiceTitleInfoDO invoiceTitleInfoDO = invoiceTitleInfoMapper.selectOne(new LambdaQueryWrapper<InvoiceTitleInfoDO>()
|
||||
.eq(InvoiceTitleInfoDO::getOrganId, organId));
|
||||
|
||||
AssertUtils.notEmpty(invoiceTitleInfoDO, INVOICE_TITLE_NOT_EXISTS_ERROR);
|
||||
|
||||
// 查询可开票金额
|
||||
BigDecimal invoicableAmount = purchaseRecordMapper.getInvoicableAmount(organId, purchaseRecordId);
|
||||
|
||||
// 更新购买记录表的发票状态
|
||||
int update = purchaseRecordMapper.update(new LambdaUpdateWrapper<PurchaseRecordDO>()
|
||||
.eq(PurchaseRecordDO::getOrganId, organId)
|
||||
.eq(PurchaseRecordDO::getDeleted, false)
|
||||
.in(PurchaseRecordDO::getId, purchaseRecordId)
|
||||
.set(PurchaseRecordDO::getIsInvocing, InvoiceStatusEnum.PENDINGINVOICING.getStatus()));
|
||||
if (update != purchaseRecordId.size()) {
|
||||
throw new ServiceException(ORG_INVOICE_PURCHASE_RECORD_UPDATE_NUM_NOT_MATCH_ERROR);
|
||||
}
|
||||
|
||||
// 查询组织名称
|
||||
OrganizationDO organizationDO = organService.validOrgan(organId);
|
||||
|
||||
// 插入开票记录
|
||||
invoiceRecordsMapper.insert(InvoiceRecordsDO.builder()
|
||||
.userId(loginUser.getId())
|
||||
.organName(organizationDO.getName())
|
||||
.organId(organId)
|
||||
.purchaseIds(JsonUtils.toJsonString(purchaseRecordId))
|
||||
.invoiceAmount(invoicableAmount)
|
||||
.invoiceTitleId(invoiceTitleInfoDO.getId())
|
||||
.invoiceTitleInfo(zipString(toJsonString(invoiceTitleInfoDO)))
|
||||
.status(InvoiceStatusEnum.PENDINGINVOICING.getStatus())
|
||||
.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<InvoiceRecordsRespVO> getInvoiceRecords(InvoiceDetailsPageReqVO pageReqVO) {
|
||||
// 时间类型规范为开始0点,结束12点
|
||||
pageReqVO.setCreateTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getCreateTime()));
|
||||
pageReqVO.setInvoiceTime(LocalDateTimeUtils.generateTimeSection(pageReqVO.getInvoiceTime()));
|
||||
|
||||
// 分页查询
|
||||
PageResult<InvoiceRecordsDO> pageResult = invoiceRecordsMapper.selectInvoiceRecordsPage(pageReqVO);
|
||||
List<InvoiceRecordsDO> resultList = pageResult.getList();
|
||||
|
||||
if(CollUtil.isEmpty(resultList)){
|
||||
return new PageResult<>();
|
||||
}
|
||||
List<InvoiceRecordsRespVO> recordsRespVOS = BeanUtils.toBean(resultList, InvoiceRecordsRespVO.class);
|
||||
return new PageResult<>(recordsRespVOS, pageResult.getTotal());
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -72,7 +72,7 @@ public class OrganAmountServiceImpl implements OrganAmountService {
|
||||
int updated = organAmountMapper.update(new LambdaUpdateWrapperX<OrganAmountDO>()
|
||||
.eq(OrganAmountDO::getOrganId, organId)
|
||||
.eq(OrganAmountDO::getVersion, organAmountDO.getVersion())
|
||||
.set(OrganAmountDO::getGiftAmount, newGift)
|
||||
.setIfPresent(OrganAmountDO::getGiftAmount, newGift)
|
||||
.set(OrganAmountDO::getAmount, newAmount)
|
||||
.set(OrganAmountDO::getVersion, organAmountDO.getVersion() + 1));
|
||||
// 1. 首次更新失败,认为出现并发,再查一次再更新
|
||||
@@ -84,7 +84,7 @@ public class OrganAmountServiceImpl implements OrganAmountService {
|
||||
updated = organAmountMapper.update(new LambdaUpdateWrapperX<OrganAmountDO>()
|
||||
.eq(OrganAmountDO::getOrganId, organId)
|
||||
.eq(OrganAmountDO::getVersion, organAmountDO.getVersion())
|
||||
.set(OrganAmountDO::getGiftAmount, newGift)
|
||||
.setIfPresent(OrganAmountDO::getGiftAmount, newGift)
|
||||
.set(OrganAmountDO::getAmount, newAmount)
|
||||
.set(OrganAmountDO::getVersion, organAmountDO.getVersion() + 1));
|
||||
// 2. 第二次更新失败,资金表可能不存在
|
||||
|
||||
+9
@@ -15,4 +15,13 @@
|
||||
from purchase_record
|
||||
where organ_id = #{organId}
|
||||
</select>
|
||||
|
||||
<select id="getInvoicableAmount" resultType="java.math.BigDecimal">
|
||||
select sum(account_balance_spent) from purchase_record
|
||||
where organ_id = #{organId} and is_invocing = '${@com.cf.imes.module.system.enums.pay.InvoiceStatusEnum@INVOICABLE.status}'
|
||||
and id in
|
||||
<foreach collection="ids" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user