Commit 9ebbf5dc by Jony.L

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

parent 0c57ff2f
......@@ -19,6 +19,11 @@
<dependencies>
<dependency>
<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>
<version>${revision}</version>
</dependency>
......
......@@ -2,6 +2,7 @@ package com.luhu.computility.module.apihub.controller.admin.apiorder;
import cn.hutool.core.date.DateUtil;
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.enums.ApiOrderPayStatus;
import com.luhu.computility.module.apihub.enums.ApiOrderStatus;
......@@ -32,6 +33,7 @@ import com.luhu.computility.framework.excel.core.util.ExcelUtils;
import com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog;
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.dal.dataobject.apiorder.ApiOrderDO;
......@@ -51,6 +53,18 @@ public class ApiOrderController {
@Resource
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")
@Operation(summary = "创建api订单")
@PreAuthorize("@ss.hasPermission('apihub:api-order:create')")
......
......@@ -56,6 +56,12 @@ public class ApiOrderRespVO {
@ExcelProperty("订单实际支付金额(分)")
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")
@ExcelProperty("订单状态:0=待支付,1=已支付,2=已取消")
private Integer status;
......
......@@ -56,6 +56,12 @@ public class ApiOrderSaveReqVO {
@Schema(description = "支付状态", example = "2")
private Integer payStatus;
@Schema(description = "发票链接", example = "www.xxx.com/a1234567.jpg")
private String invoiceUrl;
@Schema(description = "开票状态", example = "1")
private Integer invoiceStatus;
@Schema(description = "备注", example = "你说的对")
private String remark;
......
......@@ -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.enums.ApiOrderStatus;
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.tags.Tag;
import org.springframework.validation.annotation.Validated;
......@@ -61,6 +62,7 @@ public class AppApiOrderController {
if (!CollectionUtil.isEmpty(list)) {
for (AppApiOrderRespVO vo : list) {
vo.setStatusName(ApiOrderStatus.getRemarkByValue(vo.getStatus()));
vo.setInvoiceStatusName(TradeOrderInvoiceStatusEnum.getDescriptionByStatus(vo.getInvoiceStatus()));
}
}
appApiOrderRespVOPageResult.setList(list);
......
......@@ -67,6 +67,16 @@ public class AppApiOrderRespVO {
@ExcelProperty("支付成功的支付渠道")
private String payChannelCode;
@Schema(description = "开票状态")
private Integer invoiceStatus;
@Schema(description = "开票状态名称")
@ExcelProperty("开票状态名称")
private String invoiceStatusName;
@Schema(description = "发票链接")
private String invoiceUrl;
@Schema(description = "订单完成时间")
@ExcelProperty("订单完成时间")
private LocalDateTime finishTime;
......
......@@ -118,5 +118,15 @@ public class ApiOrderDO extends BaseDO {
*/
private Integer refundPrice;
/**
* 发票链接
*/
private String invoiceUrl;
/**
* 开票状态
*/
private Integer invoiceStatus;
}
\ No newline at end of file
......@@ -91,4 +91,6 @@ public interface ApiOrderService {
*/
void updateApiOrderPaid(Long merchantOrderId, Long payOrderId);
boolean updateInvoice(ApiOrderSaveReqVO saveReqVO);
}
\ No newline at end of file
package com.luhu.computility.module.apihub.service.apiorder;
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.string.StrUtils;
import com.luhu.computility.module.apihub.config.ApiOrderProperties;
......@@ -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.PayOrderRespDTO;
import com.luhu.computility.module.pay.enums.order.PayOrderStatusEnum;
import com.luhu.computility.module.trade.enums.order.TradeOrderStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
......@@ -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.date.LocalDateTimeUtils.addTime;
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.trade.enums.order.TradeOrderInvoiceStatusEnum.INVOICED;
import static org.apache.commons.lang3.ObjectUtils.notEqual;
/**
* api订单 Service 实现类
......@@ -207,7 +212,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
// 1.1 校验API订单是否存在
ApiOrderDO order = validateApiOrderExists(id);
// 1.2 校验API订单已支付
if (ApiOrderStatus.PAID.getValue() == order.getStatus()) {
if (PAID.getValue() == order.getStatus()) {
// 特殊:支付单号相同,直接返回,说明重复回调
if (ObjectUtil.equals(order.getPayOrderId(), payOrderId)) {
log.warn("[updateApiOrderPaid][order({}) 已支付,且支付单号相同({}),直接返回]", order, payOrderId);
......@@ -222,7 +227,7 @@ public class ApiOrderServiceImpl implements ApiOrderService {
// 3. 更新 apiOrderDO 状态为已支付
apiOrderMapper.updateByIdAndStatus(id, order.getStatus(),
new ApiOrderDO().setStatus(ApiOrderStatus.PAID.getValue())
new ApiOrderDO().setStatus(PAID.getValue())
.setPayStatus(ApiOrderPayStatus.SUCCESS.getValue())
.setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
......@@ -231,6 +236,19 @@ public class ApiOrderServiceImpl implements ApiOrderService {
//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> {
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 String description;
......
......@@ -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.order.TradeOrderDO;
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.TradeOrderTypeEnum;
import com.luhu.computility.module.trade.framework.order.config.TradeOrderProperties;
......@@ -198,7 +199,9 @@ public class AppTradeOrderController {
appTradeOrder.setStatusName(TradeOrderStatusEnum.getNameByStatus(item.getStatus()));
appTradeOrder.setProperties(item.getItems().get(0).getProperties());
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);
}
}
......
......@@ -42,6 +42,9 @@ public class AppTradeOrderPageRespVO {
@Schema(description = "开票状态", example = "0")
private Integer invoiceStatus;
@Schema(description = "开票状态名称", example = "已开票")
private String invoiceStatusName;
private List<AppProductPropertyValueDetailRespVO> properties;
@Schema(description = "应付金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
......
......@@ -790,6 +790,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
@Override
public boolean updateInvoice(TradeOrderInvoiceSaveVO saveVO) {
TradeOrderDO order = tradeOrderMapper.selectById(saveVO.getId());
if(ObjectUtil.notEqual(order.getStatus(),TradeOrderStatusEnum.COMPLETED)){
throw new ServiceException("只有完成的订单可以开票!");
}
order.setInvoiceStatus(INVOICED.getStatus());
order.setInvoiceUrl(saveVO.getInvoiceUrl());
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