|
|
@@ -32,8 +32,10 @@ import com.fs.his.service.IFsExpressService;
|
|
|
import com.fs.his.utils.ConfigUtil;
|
|
|
import com.fs.hisStore.domain.*;
|
|
|
import com.fs.hisStore.dto.FsStoreOrderComputeDTO;
|
|
|
+import com.fs.hisStore.enums.AfterSalesStatusEnum;
|
|
|
import com.fs.hisStore.enums.OrderInfoEnum;
|
|
|
import com.fs.hisStore.mapper.FsStorePaymentScrmMapper;
|
|
|
+import com.fs.hisStore.service.IFsStoreAfterSalesScrmService;
|
|
|
import com.fs.hisStore.param.*;
|
|
|
import com.fs.hisStore.service.IFsStoreOrderScrmService;
|
|
|
import com.fs.hisStore.service.IFsUserScrmService;
|
|
|
@@ -43,9 +45,11 @@ import com.fs.huifuPay.domain.HuiFuQueryOrderResult;
|
|
|
import com.fs.huifuPay.domain.HuifuCreateOrderResult;
|
|
|
import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayQueryRequest;
|
|
|
import com.fs.huifuPay.service.HuiFuService;
|
|
|
+import com.fs.live.domain.LiveAfterSales;
|
|
|
import com.fs.live.domain.LiveOrder;
|
|
|
import com.fs.live.domain.LiveOrderPayment;
|
|
|
import com.fs.live.dto.LiveOrderComputeDTO;
|
|
|
+import com.fs.live.enums.LiveAfterSalesStatusEnum;
|
|
|
import com.fs.live.enums.LiveOrderCancleReason;
|
|
|
import com.fs.live.mapper.LiveOrderPaymentMapper;
|
|
|
import com.fs.live.param.*;
|
|
|
@@ -83,7 +87,9 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.sql.Timestamp;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@@ -130,6 +136,12 @@ public class LiveOrderController extends AppBaseController
|
|
|
IPayService ybPayService;
|
|
|
@Autowired
|
|
|
private HuiFuService huiFuService;
|
|
|
+ @Autowired
|
|
|
+ private IFsStoreOrderScrmService fsStoreOrderScrmService;
|
|
|
+ @Autowired
|
|
|
+ private IFsStoreAfterSalesScrmService fsStoreAfterSalesScrmService;
|
|
|
+ @Autowired
|
|
|
+ private FsStorePaymentScrmMapper fsStorePaymentScrmMapper;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -914,5 +926,188 @@ public class LiveOrderController extends AppBaseController
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @ApiOperation("批量生成售后订单并退款")
|
|
|
+// @PostMapping("/batchCreateAfterSalesAndRefund")
|
|
|
+ public R batchCreateAfterSalesAndRefund(@RequestBody List<String> payCodes) {
|
|
|
+ if (payCodes == null || payCodes.isEmpty()) {
|
|
|
+ return R.error("支付订单号列表不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> results = new ArrayList<>();
|
|
|
+
|
|
|
+ for (String payCode : payCodes) {
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("payCode", payCode);
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 先查询支付记录
|
|
|
+ // 先尝试查询商城订单支付记录
|
|
|
+ FsStorePaymentScrm storePayment = fsStorePaymentScrmMapper.selectFsStorePaymentByCode(payCode.split("-")[1]);
|
|
|
+
|
|
|
+ if (storePayment != null) {
|
|
|
+ // 商城订单支付记录
|
|
|
+ result.put("paymentType", "store");
|
|
|
+ result.put("paymentId", storePayment.getPaymentId());
|
|
|
+
|
|
|
+ // 根据支付记录查询订单
|
|
|
+ FsStoreOrderScrm storeOrder = null;
|
|
|
+ if (storePayment.getOrderId() != null) {
|
|
|
+ storeOrder = fsStoreOrderScrmService.selectFsStoreOrderById(storePayment.getOrderId());
|
|
|
+ } else if (StringUtils.isNotEmpty(storePayment.getBusinessOrderId())) {
|
|
|
+ // 如果没有orderId,尝试通过businessOrderId查询
|
|
|
+ storeOrder = fsStoreOrderScrmService.selectFsStoreOrderByOrderCode(storePayment.getBusinessOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (storeOrder == null) {
|
|
|
+ result.put("success", false);
|
|
|
+ result.put("message", "根据支付记录未找到对应的订单");
|
|
|
+ results.add(result);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ result.put("orderCode", storeOrder.getOrderCode());
|
|
|
+ result.put("orderId", storeOrder.getId());
|
|
|
+
|
|
|
+ // 查询售后记录
|
|
|
+ FsStoreAfterSalesScrm queryAfterSales = new FsStoreAfterSalesScrm();
|
|
|
+ queryAfterSales.setOrderCode(storeOrder.getOrderCode());
|
|
|
+ List<FsStoreAfterSalesScrm> existingAfterSales = fsStoreAfterSalesScrmService.selectFsStoreAfterSalesList(queryAfterSales);
|
|
|
+
|
|
|
+ FsStoreAfterSalesScrm afterSales = null;
|
|
|
+ if (existingAfterSales == null || existingAfterSales.isEmpty()) {
|
|
|
+ // 创建售后记录
|
|
|
+ afterSales = new FsStoreAfterSalesScrm();
|
|
|
+ afterSales.setOrderCode(storeOrder.getOrderCode());
|
|
|
+ afterSales.setRefundAmount(storeOrder.getPayMoney());
|
|
|
+ afterSales.setServiceType(0); // 0仅退款
|
|
|
+ afterSales.setReasons("系统自动生成售后订单");
|
|
|
+ afterSales.setExplains("系统自动生成售后订单");
|
|
|
+ afterSales.setExplainImg(null);
|
|
|
+ afterSales.setStatus(AfterSalesStatusEnum.STATUS_4.getValue()); // 4财务已审核(退款成功)
|
|
|
+ afterSales.setSalesStatus(3); // 3已完成
|
|
|
+ afterSales.setCreateTime(Timestamp.valueOf(LocalDateTime.now()));
|
|
|
+ afterSales.setIsDel(0);
|
|
|
+ afterSales.setUserId(storeOrder.getUserId());
|
|
|
+ afterSales.setOrderStatus(storeOrder.getStatus());
|
|
|
+ afterSales.setCompanyId(storeOrder.getCompanyId());
|
|
|
+ afterSales.setCompanyUserId(storeOrder.getCompanyUserId());
|
|
|
+ if (storeOrder.getPackageJson() != null) {
|
|
|
+ afterSales.setPackageJson(storeOrder.getPackageJson());
|
|
|
+ }
|
|
|
+ if (storeOrder.getIsPackage() != null) {
|
|
|
+ afterSales.setIsPackage(storeOrder.getIsPackage());
|
|
|
+ }
|
|
|
+ fsStoreAfterSalesScrmService.insertFsStoreAfterSales(afterSales);
|
|
|
+ result.put("afterSalesCreated", true);
|
|
|
+ } else {
|
|
|
+ afterSales = existingAfterSales.get(0);
|
|
|
+ result.put("afterSalesCreated", false);
|
|
|
+ result.put("afterSalesId", afterSales.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改订单状态为退款成功
|
|
|
+ storeOrder.setStatus(OrderInfoEnum.STATUS_NE2.getValue()); // -2退款成功
|
|
|
+ storeOrder.setRefundStatus(OrderInfoEnum.REFUND_STATUS_2.getValue()); // 2已退款
|
|
|
+ storeOrder.setRefundPrice(storeOrder.getPayMoney());
|
|
|
+ fsStoreOrderScrmService.updateFsStoreOrder(storeOrder);
|
|
|
+
|
|
|
+ result.put("success", true);
|
|
|
+ result.put("message", "处理成功");
|
|
|
+ result.put("afterSalesId", afterSales != null ? afterSales.getId() : null);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 尝试查询直播订单支付记录
|
|
|
+ LiveOrderPayment livePayment = liveOrderPaymentMapper.selectLiveOrderPaymentByPaymentCode(payCode.split("-")[1]);
|
|
|
+
|
|
|
+ if (livePayment != null) {
|
|
|
+ // 直播订单支付记录
|
|
|
+ result.put("paymentType", "live");
|
|
|
+ result.put("paymentId", livePayment.getPaymentId());
|
|
|
+
|
|
|
+ // 根据支付记录查询订单
|
|
|
+ LiveOrder liveOrder = null;
|
|
|
+ if (StringUtils.isNotEmpty(livePayment.getBusinessId())) {
|
|
|
+ // businessId 是订单ID(Long类型转String)
|
|
|
+ try {
|
|
|
+ Long orderId = Long.parseLong(livePayment.getBusinessId());
|
|
|
+ liveOrder = orderService.selectLiveOrderByOrderId(String.valueOf(orderId));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ // 如果不是数字,可能是订单号
|
|
|
+ liveOrder = orderService.selectLiveOrderByOrderId(livePayment.getBusinessId());
|
|
|
+ }
|
|
|
+ } else if (StringUtils.isNotEmpty(livePayment.getBusinessCode())) {
|
|
|
+ // 通过businessCode(订单号)查询
|
|
|
+ liveOrder = orderService.selectLiveOrderByOrderId(livePayment.getBusinessCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (liveOrder == null) {
|
|
|
+ result.put("success", false);
|
|
|
+ result.put("message", "根据支付记录未找到对应的订单");
|
|
|
+ results.add(result);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ result.put("orderCode", liveOrder.getOrderCode());
|
|
|
+ result.put("orderId", liveOrder.getOrderId());
|
|
|
+
|
|
|
+ // 查询售后记录
|
|
|
+ LiveAfterSales queryAfterSales = new LiveAfterSales();
|
|
|
+ queryAfterSales.setOrderId(liveOrder.getOrderId());
|
|
|
+ List<LiveAfterSales> existingAfterSales = liveAfterSalesService.selectLiveAfterSalesList(queryAfterSales);
|
|
|
+
|
|
|
+ LiveAfterSales afterSales = null;
|
|
|
+ if (existingAfterSales == null || existingAfterSales.isEmpty()) {
|
|
|
+ // 创建售后记录
|
|
|
+ afterSales = new LiveAfterSales();
|
|
|
+ afterSales.setOrderId(liveOrder.getOrderId());
|
|
|
+ afterSales.setRefundAmount(liveOrder.getPayMoney());
|
|
|
+ afterSales.setRefundType(0); // 0仅退款
|
|
|
+ afterSales.setReasons("系统自动生成售后订单");
|
|
|
+ afterSales.setExplains("系统自动生成售后订单");
|
|
|
+ afterSales.setExplainImg(null);
|
|
|
+ afterSales.setStatus(LiveAfterSalesStatusEnum.STATUS_4.getValue()); // 4财务已审核(退款成功)
|
|
|
+ afterSales.setSalesStatus(3); // 3已完成
|
|
|
+ afterSales.setCreateTime(Timestamp.valueOf(LocalDateTime.now()));
|
|
|
+ afterSales.setIsDel(0);
|
|
|
+ afterSales.setUserId(Long.valueOf(liveOrder.getUserId()));
|
|
|
+ afterSales.setOrderStatus(liveOrder.getStatus());
|
|
|
+ afterSales.setCompanyId(liveOrder.getCompanyId());
|
|
|
+ afterSales.setCompanyUserId(liveOrder.getCompanyUserId());
|
|
|
+ liveAfterSalesService.insertLiveAfterSales(afterSales);
|
|
|
+ result.put("afterSalesCreated", true);
|
|
|
+ } else {
|
|
|
+ afterSales = existingAfterSales.get(0);
|
|
|
+ result.put("afterSalesCreated", false);
|
|
|
+ result.put("afterSalesId", afterSales.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改订单状态为退款成功
|
|
|
+ liveOrder.setStatus(OrderInfoEnum.STATUS_NE2.getValue()); // -2退款成功
|
|
|
+ liveOrder.setRefundStatus(String.valueOf(OrderInfoEnum.REFUND_STATUS_2.getValue())); // 2已退款
|
|
|
+ liveOrder.setRefundMoney(liveOrder.getPayMoney());
|
|
|
+ liveOrder.setRefundTime(new Date());
|
|
|
+ orderService.updateLiveOrder(liveOrder);
|
|
|
+
|
|
|
+ result.put("success", true);
|
|
|
+ result.put("message", "处理成功");
|
|
|
+ result.put("afterSalesId", afterSales != null ? afterSales.getId() : null);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ result.put("success", false);
|
|
|
+ result.put("message", "未找到对应的支付记录");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("处理支付订单失败: " + payCode, e);
|
|
|
+ result.put("success", false);
|
|
|
+ result.put("message", "处理失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ results.add(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok().put("results", results);
|
|
|
+ }
|
|
|
|
|
|
}
|