Commit 9ebbf5dc by Jony.L

发票功能2.0 添加Api订单上传 查看 发票

parent 0c57ff2f
...@@ -19,6 +19,11 @@ ...@@ -19,6 +19,11 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.luhu</groupId> <groupId>com.luhu</groupId>
<artifactId>computility-module-trade-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.luhu</groupId>
<artifactId>computility-module-apihub-api</artifactId> <artifactId>computility-module-apihub-api</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
......
...@@ -2,6 +2,7 @@ package com.luhu.computility.module.apihub.controller.admin.apiorder; ...@@ -2,6 +2,7 @@ package com.luhu.computility.module.apihub.controller.admin.apiorder;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.luhu.computility.framework.common.exception.ServiceException;
import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsageSaveReqVO; import com.luhu.computility.module.apihub.controller.admin.userapiusage.vo.UserApiUsageSaveReqVO;
import com.luhu.computility.module.apihub.enums.ApiOrderPayStatus; import com.luhu.computility.module.apihub.enums.ApiOrderPayStatus;
import com.luhu.computility.module.apihub.enums.ApiOrderStatus; import com.luhu.computility.module.apihub.enums.ApiOrderStatus;
...@@ -32,6 +33,7 @@ import com.luhu.computility.framework.excel.core.util.ExcelUtils; ...@@ -32,6 +33,7 @@ import com.luhu.computility.framework.excel.core.util.ExcelUtils;
import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog; import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog;
import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.*; import static com.luhu.computility.framework.apilog.core.enums.OperateTypeEnum.*;
import static com.luhu.computility.module.trade.enums.order.TradeOrderInvoiceStatusEnum.INVOICED;
import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*; import com.luhu.computility.module.apihub.controller.admin.apiorder.vo.*;
import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO; import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO;
...@@ -51,6 +53,18 @@ public class ApiOrderController { ...@@ -51,6 +53,18 @@ public class ApiOrderController {
@Resource @Resource
private UserApiUsageService userApiUsageService; private UserApiUsageService userApiUsageService;
@PutMapping("/issue-invoice")
@Operation(summary = "开具发票")
public CommonResult<Boolean> issueInvoice(@RequestBody ApiOrderSaveReqVO saveVO){
if(ObjectUtil.isEmpty(saveVO.getInvoiceUrl())){
throw new ServiceException("没有接收到发票图片!");
}
if(saveVO.getInvoiceStatus().equals(INVOICED.getStatus())){
throw new ServiceException("该订单已经开具发票");
}
return success(apiOrderService.updateInvoice(saveVO));
}
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建api订单") @Operation(summary = "创建api订单")
@PreAuthorize("@ss.hasPermission('apihub:api-order:create')") @PreAuthorize("@ss.hasPermission('apihub:api-order:create')")
......
...@@ -56,6 +56,12 @@ public class ApiOrderRespVO { ...@@ -56,6 +56,12 @@ public class ApiOrderRespVO {
@ExcelProperty("订单实际支付金额(分)") @ExcelProperty("订单实际支付金额(分)")
private Integer costPrice; private Integer costPrice;
@Schema(description = "发票链接", example = "www.xxx.com/a1234567.jpg")
private String invoiceUrl;
@Schema(description = "开票状态", example = "1")
private Integer invoiceStatus;
@Schema(description = "订单状态:0=待支付,1=已支付,2=已取消", example = "2") @Schema(description = "订单状态:0=待支付,1=已支付,2=已取消", example = "2")
@ExcelProperty("订单状态:0=待支付,1=已支付,2=已取消") @ExcelProperty("订单状态:0=待支付,1=已支付,2=已取消")
private Integer status; private Integer status;
......
...@@ -56,6 +56,12 @@ public class ApiOrderSaveReqVO { ...@@ -56,6 +56,12 @@ public class ApiOrderSaveReqVO {
@Schema(description = "支付状态", example = "2") @Schema(description = "支付状态", example = "2")
private Integer payStatus; private Integer payStatus;
@Schema(description = "发票链接", example = "www.xxx.com/a1234567.jpg")
private String invoiceUrl;
@Schema(description = "开票状态", example = "1")
private Integer invoiceStatus;
@Schema(description = "备注", example = "你说的对") @Schema(description = "备注", example = "你说的对")
private String remark; private String remark;
......
...@@ -12,6 +12,7 @@ import com.luhu.computility.module.apihub.controller.app.apiorder.vo.AppApiOrder ...@@ -12,6 +12,7 @@ import com.luhu.computility.module.apihub.controller.app.apiorder.vo.AppApiOrder
import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO; import com.luhu.computility.module.apihub.dal.dataobject.apiorder.ApiOrderDO;
import com.luhu.computility.module.apihub.enums.ApiOrderStatus; import com.luhu.computility.module.apihub.enums.ApiOrderStatus;
import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService; import com.luhu.computility.module.apihub.service.apiorder.ApiOrderService;
import com.luhu.computility.module.trade.enums.order.TradeOrderInvoiceStatusEnum;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -61,6 +62,7 @@ public class AppApiOrderController { ...@@ -61,6 +62,7 @@ public class AppApiOrderController {
if (!CollectionUtil.isEmpty(list)) { if (!CollectionUtil.isEmpty(list)) {
for (AppApiOrderRespVO vo : list) { for (AppApiOrderRespVO vo : list) {
vo.setStatusName(ApiOrderStatus.getRemarkByValue(vo.getStatus())); vo.setStatusName(ApiOrderStatus.getRemarkByValue(vo.getStatus()));
vo.setInvoiceStatusName(TradeOrderInvoiceStatusEnum.getDescriptionByStatus(vo.getInvoiceStatus()));
} }
} }
appApiOrderRespVOPageResult.setList(list); appApiOrderRespVOPageResult.setList(list);
......
...@@ -67,6 +67,16 @@ public class AppApiOrderRespVO { ...@@ -67,6 +67,16 @@ public class AppApiOrderRespVO {
@ExcelProperty("支付成功的支付渠道") @ExcelProperty("支付成功的支付渠道")
private String payChannelCode; private String payChannelCode;
@Schema(description = "开票状态")
private Integer invoiceStatus;
@Schema(description = "开票状态名称")
@ExcelProperty("开票状态名称")
private String invoiceStatusName;
@Schema(description = "发票链接")
private String invoiceUrl;
@Schema(description = "订单完成时间") @Schema(description = "订单完成时间")
@ExcelProperty("订单完成时间") @ExcelProperty("订单完成时间")
private LocalDateTime finishTime; private LocalDateTime finishTime;
......
...@@ -118,5 +118,15 @@ public class ApiOrderDO extends BaseDO { ...@@ -118,5 +118,15 @@ public class ApiOrderDO extends BaseDO {
*/ */
private Integer refundPrice; private Integer refundPrice;
/**
* 发票链接
*/
private String invoiceUrl;
/**
* 开票状态
*/
private Integer invoiceStatus;
} }
\ No newline at end of file
...@@ -91,4 +91,6 @@ public interface ApiOrderService { ...@@ -91,4 +91,6 @@ public interface ApiOrderService {
*/ */
void updateApiOrderPaid(Long merchantOrderId, Long payOrderId); void updateApiOrderPaid(Long merchantOrderId, Long payOrderId);
boolean updateInvoice(ApiOrderSaveReqVO saveReqVO);
} }
\ No newline at end of file
package com.luhu.computility.module.apihub.service.apiorder; package com.luhu.computility.module.apihub.service.apiorder;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.luhu.computility.framework.common.exception.ServiceException;
import com.luhu.computility.framework.common.util.json.JsonUtils; import com.luhu.computility.framework.common.util.json.JsonUtils;
import com.luhu.computility.framework.common.util.string.StrUtils; import com.luhu.computility.framework.common.util.string.StrUtils;
import com.luhu.computility.module.apihub.config.ApiOrderProperties; import com.luhu.computility.module.apihub.config.ApiOrderProperties;
...@@ -18,6 +19,7 @@ import com.luhu.computility.module.pay.api.order.PayOrderApi; ...@@ -18,6 +19,7 @@ import com.luhu.computility.module.pay.api.order.PayOrderApi;
import com.luhu.computility.module.pay.api.order.dto.PayOrderCreateReqDTO; import com.luhu.computility.module.pay.api.order.dto.PayOrderCreateReqDTO;
import com.luhu.computility.module.pay.api.order.dto.PayOrderRespDTO; import com.luhu.computility.module.pay.api.order.dto.PayOrderRespDTO;
import com.luhu.computility.module.pay.enums.order.PayOrderStatusEnum; import com.luhu.computility.module.pay.enums.order.PayOrderStatusEnum;
import com.luhu.computility.module.trade.enums.order.TradeOrderStatusEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -40,7 +42,10 @@ import static com.luhu.computility.framework.common.util.collection.CollectionUt ...@@ -40,7 +42,10 @@ import static com.luhu.computility.framework.common.util.collection.CollectionUt
import static com.luhu.computility.framework.common.util.collection.CollectionUtils.getSumValue; import static com.luhu.computility.framework.common.util.collection.CollectionUtils.getSumValue;
import static com.luhu.computility.framework.common.util.date.LocalDateTimeUtils.addTime; import static com.luhu.computility.framework.common.util.date.LocalDateTimeUtils.addTime;
import static com.luhu.computility.framework.common.util.servlet.ServletUtils.getClientIP; import static com.luhu.computility.framework.common.util.servlet.ServletUtils.getClientIP;
import static com.luhu.computility.module.apihub.enums.ApiOrderStatus.PAID;
import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.*; import static com.luhu.computility.module.apihub.enums.ErrorCodeConstants.*;
import static com.luhu.computility.module.trade.enums.order.TradeOrderInvoiceStatusEnum.INVOICED;
import static org.apache.commons.lang3.ObjectUtils.notEqual;
/** /**
* api订单 Service 实现类 * api订单 Service 实现类
...@@ -207,7 +212,7 @@ public class ApiOrderServiceImpl implements ApiOrderService { ...@@ -207,7 +212,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
// 1.1 校验API订单是否存在 // 1.1 校验API订单是否存在
ApiOrderDO order = validateApiOrderExists(id); ApiOrderDO order = validateApiOrderExists(id);
// 1.2 校验API订单已支付 // 1.2 校验API订单已支付
if (ApiOrderStatus.PAID.getValue() == order.getStatus()) { if (PAID.getValue() == order.getStatus()) {
// 特殊:支付单号相同,直接返回,说明重复回调 // 特殊:支付单号相同,直接返回,说明重复回调
if (ObjectUtil.equals(order.getPayOrderId(), payOrderId)) { if (ObjectUtil.equals(order.getPayOrderId(), payOrderId)) {
log.warn("[updateApiOrderPaid][order({}) 已支付,且支付单号相同({}),直接返回]", order, payOrderId); log.warn("[updateApiOrderPaid][order({}) 已支付,且支付单号相同({}),直接返回]", order, payOrderId);
...@@ -222,7 +227,7 @@ public class ApiOrderServiceImpl implements ApiOrderService { ...@@ -222,7 +227,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
// 3. 更新 apiOrderDO 状态为已支付 // 3. 更新 apiOrderDO 状态为已支付
apiOrderMapper.updateByIdAndStatus(id, order.getStatus(), apiOrderMapper.updateByIdAndStatus(id, order.getStatus(),
new ApiOrderDO().setStatus(ApiOrderStatus.PAID.getValue()) new ApiOrderDO().setStatus(PAID.getValue())
.setPayStatus(ApiOrderPayStatus.SUCCESS.getValue()) .setPayStatus(ApiOrderPayStatus.SUCCESS.getValue())
.setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode())); .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
...@@ -231,6 +236,19 @@ public class ApiOrderServiceImpl implements ApiOrderService { ...@@ -231,6 +236,19 @@ public class ApiOrderServiceImpl implements ApiOrderService {
//TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue()); //TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue());
} }
@Override
public boolean updateInvoice(ApiOrderSaveReqVO saveVO) {
ApiOrderDO order = apiOrderMapper.selectById(saveVO.getId());
if(notEqual(order.getStatus(), PAID.getValue())){
throw new ServiceException("只有"+PAID.getRemark()+"订单可以开票!");
}
order.setInvoiceStatus(INVOICED.getStatus());
order.setInvoiceUrl(saveVO.getInvoiceUrl());
apiOrderMapper.updateById(order);
return true;
}
/** /**
* 校验支付订单的合法性 * 校验支付订单的合法性
* *
......
...@@ -27,6 +27,15 @@ public enum TradeOrderInvoiceStatusEnum implements ArrayValuable<Integer> { ...@@ -27,6 +27,15 @@ public enum TradeOrderInvoiceStatusEnum implements ArrayValuable<Integer> {
this.description = description; this.description = description;
} }
public static String getDescriptionByStatus(Integer Val){
for(TradeOrderInvoiceStatusEnum status : values()){
if(status.getStatus().equals(Val)){
return status.getDescription();
}
}
return null;
}
private final Integer status; private final Integer status;
private final String description; private final String description;
......
...@@ -15,6 +15,7 @@ import com.luhu.computility.module.trade.convert.order.TradeOrderConvert; ...@@ -15,6 +15,7 @@ import com.luhu.computility.module.trade.convert.order.TradeOrderConvert;
import com.luhu.computility.module.trade.dal.dataobject.delivery.DeliveryExpressDO; import com.luhu.computility.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
import com.luhu.computility.module.trade.dal.dataobject.order.TradeOrderDO; import com.luhu.computility.module.trade.dal.dataobject.order.TradeOrderDO;
import com.luhu.computility.module.trade.dal.dataobject.order.TradeOrderItemDO; import com.luhu.computility.module.trade.dal.dataobject.order.TradeOrderItemDO;
import com.luhu.computility.module.trade.enums.order.TradeOrderInvoiceStatusEnum;
import com.luhu.computility.module.trade.enums.order.TradeOrderStatusEnum; import com.luhu.computility.module.trade.enums.order.TradeOrderStatusEnum;
import com.luhu.computility.module.trade.enums.order.TradeOrderTypeEnum; import com.luhu.computility.module.trade.enums.order.TradeOrderTypeEnum;
import com.luhu.computility.module.trade.framework.order.config.TradeOrderProperties; import com.luhu.computility.module.trade.framework.order.config.TradeOrderProperties;
...@@ -198,7 +199,9 @@ public class AppTradeOrderController { ...@@ -198,7 +199,9 @@ public class AppTradeOrderController {
appTradeOrder.setStatusName(TradeOrderStatusEnum.getNameByStatus(item.getStatus())); appTradeOrder.setStatusName(TradeOrderStatusEnum.getNameByStatus(item.getStatus()));
appTradeOrder.setProperties(item.getItems().get(0).getProperties()); appTradeOrder.setProperties(item.getItems().get(0).getProperties());
appTradeOrder.setInvoiceUrl(invoiceCollet.get(item.getId()).getInvoiceUrl()); appTradeOrder.setInvoiceUrl(invoiceCollet.get(item.getId()).getInvoiceUrl());
appTradeOrder.setInvoiceStatus(invoiceCollet.get(item.getId()).getInvoiceStatus()); Integer invoiceStatus = invoiceCollet.get(item.getId()).getInvoiceStatus();
appTradeOrder.setInvoiceStatus(invoiceStatus);
appTradeOrder.setInvoiceStatusName(TradeOrderInvoiceStatusEnum.getDescriptionByStatus(invoiceStatus));
appTradeOrders.add(appTradeOrder); appTradeOrders.add(appTradeOrder);
} }
} }
......
...@@ -42,6 +42,9 @@ public class AppTradeOrderPageRespVO { ...@@ -42,6 +42,9 @@ public class AppTradeOrderPageRespVO {
@Schema(description = "开票状态", example = "0") @Schema(description = "开票状态", example = "0")
private Integer invoiceStatus; private Integer invoiceStatus;
@Schema(description = "开票状态名称", example = "已开票")
private String invoiceStatusName;
private List<AppProductPropertyValueDetailRespVO> properties; private List<AppProductPropertyValueDetailRespVO> properties;
@Schema(description = "应付金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") @Schema(description = "应付金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
......
...@@ -790,6 +790,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { ...@@ -790,6 +790,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
@Override @Override
public boolean updateInvoice(TradeOrderInvoiceSaveVO saveVO) { public boolean updateInvoice(TradeOrderInvoiceSaveVO saveVO) {
TradeOrderDO order = tradeOrderMapper.selectById(saveVO.getId()); TradeOrderDO order = tradeOrderMapper.selectById(saveVO.getId());
if(ObjectUtil.notEqual(order.getStatus(),TradeOrderStatusEnum.COMPLETED)){
throw new ServiceException("只有完成的订单可以开票!");
}
order.setInvoiceStatus(INVOICED.getStatus()); order.setInvoiceStatus(INVOICED.getStatus());
order.setInvoiceUrl(saveVO.getInvoiceUrl()); order.setInvoiceUrl(saveVO.getInvoiceUrl());
tradeOrderMapper.updateById(order); tradeOrderMapper.updateById(order);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment