Explorar el Código

Merge branch 'main' of http://117.174.100.38:3000/lishiqiang/ship-ota-server into main1

luofeiyun hace 1 semana
padre
commit
5df7dbaa26
Se han modificado 30 ficheros con 746 adiciones y 24 borrados
  1. 30 0
      ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/api/dto/TradeCancelAuditReqDTO.java
  2. 16 0
      ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/api/dto/TradeCancelAuditRespDTO.java
  3. 1 0
      ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java
  4. 3 3
      ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderStatusEnum.java
  5. 31 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java
  6. 6 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java
  7. 7 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderPdaRespVO.java
  8. 83 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespExcelVO.java
  9. 10 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java
  10. 6 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespVO.java
  11. 9 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/order/TradeOrderController.java
  12. 10 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderDO.java
  13. 48 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/refund/CancelAuditDO.java
  14. 10 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java
  15. 19 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/refund/CancelAuditMapper.java
  16. 3 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderService.java
  17. 17 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java
  18. 37 6
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  19. 7 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java
  20. 40 7
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java
  21. 2 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/PayPlatService.java
  22. 7 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/TradeOrderPayService.java
  23. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/AdvancePayTypeServiceImpl.java
  24. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/CreditPayTypeServiceImpl.java
  25. 98 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/PayPlatServiceImpl.java
  26. 191 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/TradeOrderPayServiceImpl.java
  27. 7 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/TradeRefundService.java
  28. 16 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java
  29. 27 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml
  30. 1 0
      ship-server-web/src/main/resources/application.yaml

+ 30 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/api/dto/TradeCancelAuditReqDTO.java

@@ -0,0 +1,30 @@
+package com.yc.ship.module.trade.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Schema(description = "RPC 服务 - 退款审核创建 Request DTO")
+@Data
+public class TradeCancelAuditReqDTO implements Serializable {
+
+
+    @Schema(description = "订单ID", example = "")
+    @NotNull(message = "订单ID不能为空")
+    private Long orderId;
+
+    @Schema(description = "审核状态 0拒绝 1同意", example = "")
+    @NotNull(message = "审核状态不能为空")
+    private Integer auditStatus;
+
+    @Schema(description = "审核意见", example = "")
+    private String auditAdvice;
+
+    @Schema(description = "审核人", example = "")
+    @NotNull(message = "审核人不能为空")
+    private Long auditUser;
+
+}

+ 16 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/api/dto/TradeCancelAuditRespDTO.java

@@ -0,0 +1,16 @@
+package com.yc.ship.module.trade.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+@Schema(description = "RPC 服务 - 退款审核返回信息 Response DTO")
+@Data
+@Accessors(chain = true)
+public class TradeCancelAuditRespDTO {
+
+    private Long orderId;
+    private Long cancelAuditId;
+
+}

+ 1 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java

@@ -42,6 +42,7 @@ public enum TradeOrderOperateTypeEnum {
     GUIDE_REFUND(28, "导游代退,退款金额{refundAmount},原订单支付金额{payAmount},变更为{newPayAmount}"),
     ORDER_MODIFY(29, "修改订单,修改记录:{content},结果:{result}"),
     ORDER_AUDIT(30, "订单审核,结果:{result}"),
+    ORDER_DEPOSI_PAY(31, "订单定金支付,支付方式:{payType},金额:{payAmount}"),
     ;
 
     /**

+ 3 - 3
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderStatusEnum.java

@@ -22,14 +22,14 @@ public enum TradeOrderStatusEnum implements IntArrayValuable {
     //通过规则、库存验证,等待供应商确认
     INIT(0, "待确认"),
     //已确认,等待支付
-    UNPAID(1, "确认"),
+    UNPAID(1, "锁定"),
     PAYING(2, "未付款"),
     PAID(3, "已支付"),
     //供应商出票中
     PROCESSING(4, "预定中"),
     //供应商出票失败
     PROCESS_FAIL(5, "预定失败"),
-    UNUSED(6, "确认"),
+    UNUSED(6, "锁定"),
     //部分核销
     PART_CHECK(7, "部分核销"),
     //全部核销
@@ -44,7 +44,7 @@ public enum TradeOrderStatusEnum implements IntArrayValuable {
     EXPIRED(12, "已过期"),
     //订单修改审核
     TRANSFER(13, "审核中"),
-    YD(14, "初定");
+    YD(14, "留位");
 
 
     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeOrderStatusEnum::getStatus).toArray();

+ 31 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java

@@ -8,6 +8,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.collection.MapUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
 import com.yc.ship.framework.ip.core.utils.AreaUtils;
 import com.yc.ship.framework.operatelog.core.annotations.OperateLog;
 import com.yc.ship.framework.security.core.LoginUser;
@@ -169,6 +170,15 @@ public class OtcTradeOrderController {
         return otcTradeOrderService.windowPayOrder(agencyAuthUtils.getAgencyLoginUser(), payOrderReqVO);
     }
 
+    @RequestDecryption
+    @PostMapping("/travl/payDeposiOrder")
+    @Operation(summary = "win-旅行社下单支付定金")
+    @OperateLog(type = TRADE)
+    public CommonResult<PayOrderRespVO> payDeposiOrder(@Valid @RequestBody PayOrderReqVO payOrderReqVO) {
+        log.error("payDeposiOrder:{}", JSON.toJSONString(payOrderReqVO));
+        return otcTradeOrderService.payDeposiOrder(agencyAuthUtils.getAgencyLoginUser(), payOrderReqVO);
+    }
+
     @GetMapping("/travl/queryOrderStatus")
     @Operation(summary = "win-查询订单状态")
     @OperateLog(type = API)
@@ -177,6 +187,14 @@ public class OtcTradeOrderController {
         return otcTradeOrderService.queryOrderStatus(orderId);
     }
 
+    @GetMapping("/travl/queryDeposiOrderStatus")
+    @Operation(summary = "win-查询订单定金支付状态")
+    @OperateLog(type = API)
+    @PlatTenantEnv
+    public CommonResult<?> queryDeposiOrderStatus(@RequestParam Long orderId) {
+        return otcTradeOrderService.queryDeposiOrderStatus(orderId);
+    }
+
     @GetMapping("/travl/queryOrderAudit")
     @Operation(summary = "win-查询订单审核信息")
     @OperateLog(type = API)
@@ -527,6 +545,19 @@ public class OtcTradeOrderController {
         return success(otcTradeOrderService.getPayAmount(id));
     }
 
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出订单列表 Excel")
+    @OperateLog(type = EXPORT, enable = false)
+    @PlatTenantEnv
+    public void exportOrderExcel(@Valid TradeOrderPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(10000);
+        if (pageReqVO.getVoyageId() == null) {
+            ExcelUtils.exportError(response, "游客列表.xls");
+            return;
+        }
+        List<TradeOrderRespExcelVO> list = tradeOrderService.getExportVisitorList(pageReqVO);
+        ExcelUtils.write(response, "游客列表.xls", "数据", TradeOrderRespExcelVO.class, list);
+    }
 
     /**
      * 导出确认单

+ 6 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java

@@ -89,6 +89,12 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "定金状态")
+    private Integer deposiStatus;
+
+    @Schema(description = "定金支付时间")
+    private BigDecimal deposiPayTime;
+
     @Schema(description = "实际总额")
     private BigDecimal realOrderMoney;
 

+ 7 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderPdaRespVO.java

@@ -441,6 +441,13 @@ public class TradeOrderPdaRespVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "定金支付状态")
+    private Integer deposiStatus;
+
+
+    @Schema(description = "定金支付时间")
+    private LocalDateTime deposiPayTime;
+
     @Schema(description = "排序")
     private Integer orderSort;
 

+ 83 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespExcelVO.java

@@ -0,0 +1,83 @@
+package com.yc.ship.module.trade.controller.admin.order.vo.order;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 交易订单 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class TradeOrderRespExcelVO {
+
+
+    @Schema(description = "订单号")
+    @ExcelProperty("订单号")
+    private String orderNo;
+
+    @Schema(description = "团号")
+    @ExcelProperty("团号")
+    private String groupNo;
+
+    @Schema(description = "订单状态", example = "1")
+    @ExcelProperty(value = "订单状态", converter = DictConvert.class)
+    @DictFormat("trade_order_status")
+    private Integer orderStatus;
+
+
+    @Schema(description = "组团社", example = "张三")
+    @ExcelProperty("组团社")
+    private String sourceName;
+
+    @Schema(description = "游客姓名")
+    @ExcelProperty("游客姓名")
+    private String name;
+
+    @Schema(description = "性别")
+    @ExcelProperty(value = "性别", converter = DictConvert.class)
+    @DictFormat("system_user_sex")
+    private Integer gender;
+
+    @Schema(description = "证件号")
+    @ExcelProperty("证件号")
+    private String credentialNo;
+
+    @Schema(description = "国籍")
+    @ExcelProperty("国籍")
+    private String nationality;
+
+    @Schema(description = "生日")
+    @ExcelProperty("生日")
+    private String birthday;
+
+    @Schema(description = "联系电话")
+    private String mobile;
+
+    @Schema(description = "年龄")
+    @ExcelProperty("年龄")
+    private Integer age;
+
+    @Schema(description = "房型")
+    @ExcelProperty("房型")
+    private String roomModelName;
+
+    @Schema(description = "楼层")
+    @ExcelProperty("楼层")
+    private String floor;
+
+    @Schema(description = "房间")
+    @ExcelProperty("房间")
+    private String roomName;
+
+    @Schema(description = "价格")
+    @ExcelProperty("价格")
+    private BigDecimal price;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remark;
+}

+ 10 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java

@@ -47,6 +47,7 @@ public class TradeOrderRespNewVO {
     private String groupNo;
 
     @Schema(description = "订单状态", example = "1")
+    @ExcelProperty("订单号")
     private Integer orderStatus;
 
     @Schema(description = "支付状态", example = "1")
@@ -71,10 +72,12 @@ public class TradeOrderRespNewVO {
     private LocalDateTime confirmDate;
 
     @Schema(description = "游玩日期")
+    @ExcelProperty("出行日期")
     @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY, timezone = TIME_ZONE_DEFAULT)
     private Date travelDate;
 
     @Schema(description = "总人数")
+    @ExcelProperty("人数")
     private Integer totalPerson;
 
     @Schema(description = "备注")
@@ -101,6 +104,7 @@ public class TradeOrderRespNewVO {
     private Long shipId;
 
     @Schema(description = "游轮名称")
+    @ExcelProperty("游轮名称")
     private String shipName;
 
     @Schema(description = "航次ID")
@@ -205,4 +209,10 @@ public class TradeOrderRespNewVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "定金状态0:初始  1:待支付(审核通过)2:已支付")
+    private Integer deposiStatus;
+
+    @Schema(description = "定金支付时间")
+    private LocalDateTime deposiPayTime;
+
 }

+ 6 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespVO.java

@@ -521,6 +521,12 @@ public class TradeOrderRespVO {
     @Schema(description = "定金")
     private BigDecimal deposi;
 
+    @Schema(description = "定金状态0:初始  1:待支付(审核通过)2:已支付")
+    private Integer deposiStatus;
+
+    @Schema(description = "定金支付时间")
+    private LocalDateTime deposiPayTime;
+
     @Schema(description = "订单序号")
     private Integer orderSort;
 

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/order/TradeOrderController.java

@@ -48,6 +48,15 @@ public class TradeOrderController {
         return commonResult.isSuccess() ? "success" : "fail";
     }
 
+    @PostMapping("/deposiPayNotify")
+    @Operation(summary = "定金支付通知")
+    @OperateLog(type = TRADE)
+    public String deposiPayNotify(@RequestParam Map<String, Object> map) {
+        CommonResult<?> commonResult = tradeOrderPayService.handleDeposiPayNotify(map);
+        log.error("定金支付通知,参数{},返回参数{}", map, commonResult.isSuccess());
+        return commonResult.isSuccess() ? "success" : "fail";
+    }
+
     @PostMapping("/refundNotify")
     @Operation(summary = "退款通知")
     @OperateLog(type = TRADE)

+ 10 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -336,6 +336,16 @@ public class TradeOrderDO extends TenantBaseDO {
     @ForUpdate(fieldName = "定金")
     private BigDecimal deposi;
 
+    /**
+     * 定金状态0:初始  1:待支付(审核通过)2:已支付
+     */
+    private Integer deposiStatus;
+
+    /**
+     * 定金支付时间
+     */
+    private LocalDateTime deposiPayTime;
+
     /**
      * 排序
      */

+ 48 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/refund/CancelAuditDO.java

@@ -0,0 +1,48 @@
+package com.yc.ship.module.trade.dal.dataobject.refund;
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 取消审核记录 DO
+ *
+ * @author 管理员
+ */
+@TableName("trade_cancel_audit")
+@KeySequence("trade_cancel_audit_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CancelAuditDO extends TenantBaseDO {
+
+    /**
+     * 主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 审核状态
+     */
+    private Integer auditStatus;
+    /**
+     * 审核意见
+     */
+    private String auditAdvice;
+    /**
+     * 审核人
+     */
+    private String auditUser;
+
+}

+ 10 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java

@@ -1,9 +1,12 @@
 package com.yc.ship.module.trade.dal.mysql.order;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespExcelVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeVisitorRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
 import com.yc.ship.module.trade.service.order.bo.TradeVisitorBO;
@@ -55,6 +58,11 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
      */
     List<TradeVisitorDO> selectShipByOrderIds(@Param("orderIds") List<Long> orderIds);
 
+    /**
+     * 获取当前线路当前证件是否已经购买
+     */
+    Integer queryVisitorByVovageId(@Param("voyageId") Long voyageId,@Param("credentialNo") String credentialNo);
+
 
     /**
      * 查询该航次所有游客信息
@@ -69,4 +77,6 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
 
 
     List<TradeVisitorDO> selectListByVoyageIdAndRoomId(@Param("voyageId")Long voyageId, @Param("roomId")Long roomId);
+
+    List<TradeOrderRespExcelVO> getExportVisitorList(@Param("vo") TradeOrderPageReqVO reqVO);
 }

+ 19 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/refund/CancelAuditMapper.java

@@ -0,0 +1,19 @@
+package com.yc.ship.module.trade.dal.mysql.refund;
+
+
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.trade.dal.dataobject.refund.CancelAuditDO;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * 取消审核记录 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface CancelAuditMapper extends BaseMapperX<CancelAuditDO> {
+
+
+
+}

+ 3 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderService.java

@@ -7,9 +7,7 @@ import com.yc.ship.module.trade.api.dto.TradeBindOrderReqDTO;
 import com.yc.ship.module.trade.api.dto.TradeModifyVisitorReqDTO;
 import com.yc.ship.module.trade.api.dto.TradeOrderCreateReqDTO;
 import com.yc.ship.module.trade.api.dto.TradeOrderRespDTO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.ShipTradeOrderCreateReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 
 import java.util.List;
@@ -40,6 +38,8 @@ public interface TradeOrderService {
      */
     PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO reqVO);
 
+    List<TradeOrderRespExcelVO> getExportVisitorList(TradeOrderPageReqVO reqVO);
+
     /**
      * 订单创建
      *

+ 17 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java

@@ -22,8 +22,11 @@ import com.yc.ship.module.trade.convert.order.TradeRefundConvert;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderUserDO;
+import com.yc.ship.module.trade.dal.dataobject.refund.CancelAuditDO;
 import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
+import com.yc.ship.module.trade.dal.mysql.refund.CancelAuditMapper;
 import com.yc.ship.module.trade.enums.RefundChannelEnum;
+import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
 import com.yc.ship.module.trade.service.order.AdminTradeOrderService;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
 import com.yc.ship.module.trade.service.order.bo.TradeVisitorBO;
@@ -37,6 +40,7 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -63,6 +67,9 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
     private TradeOrderPayService tradeOrderPayService;
     @Resource
     private TradeDetailMapper tradeDetailMapper;
+
+    @Resource
+    private CancelAuditMapper cancelAuditMapper;
     @Resource
     private ContractApi contractApi;
     @Resource
@@ -311,7 +318,16 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
     public CommonResult<?> cancelOrder(Long orderId) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
         Asserts.isTrue(tradeOrderDO != null, "订单不存在");
-        return tradeOrderPayService.cancelOrder(orderId);
+        if(Objects.equals(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus())){
+            //需要审核
+            CancelAuditDO cancelAuditDO = new CancelAuditDO();
+            cancelAuditDO.setOrderId(orderId);
+            cancelAuditDO.setAuditStatus(TradeOrderStatusEnum.CANCELED.getStatus());
+            cancelAuditMapper.insert(cancelAuditDO);
+            return CommonResult.success("订单取消审核中");
+        }else{
+            return tradeOrderPayService.cancelOrder(orderId);
+        }
     }
 
     @Override

+ 37 - 6
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -14,15 +14,22 @@ import com.yc.ship.framework.common.lang.Asserts;
 import com.yc.ship.framework.common.pojo.CommonResult;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.framework.common.util.collection.MapUtils;
 import com.yc.ship.framework.common.util.date.DateUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
+import com.yc.ship.framework.ip.core.utils.AreaUtils;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorProductRespDTO;
 import com.yc.ship.module.product.api.ProductApi;
 import com.yc.ship.module.product.api.dto.*;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
+import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.enums.ProductTypeEnum;
 import com.yc.ship.module.product.enums.SpecTypeEnum;
+import com.yc.ship.module.product.service.voyage.VoyageService;
+import com.yc.ship.module.resource.api.ship.ShipApi;
+import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import com.yc.ship.module.system.api.permission.RoleApi;
 import com.yc.ship.module.system.api.user.AdminUserApi;
 import com.yc.ship.module.system.api.user.dto.AdminUserRespDTO;
@@ -40,9 +47,7 @@ import com.yc.ship.module.trade.framework.common.ExceptionUtils;
 import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
 import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
-import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
-import com.yc.ship.module.trade.service.order.TradeOrderRuleValidate;
-import com.yc.ship.module.trade.service.order.TradeOrderService;
+import com.yc.ship.module.trade.service.order.*;
 import com.yc.ship.module.trade.service.order.bo.TradeDetailBO;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
@@ -65,6 +70,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -121,6 +127,21 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     @Resource
     private AdminUserApi adminUserApi;
 
+    @Resource
+    private VoyageService voyageService;
+
+    @Resource
+    private ShipApi shipApi;
+
+    @Resource
+    private TradeOrderRoomModelService tradeOrderRoomModelService;
+
+    @Resource
+    private TradeOrderCountryService tradeOrderCountryService;
+
+    @Resource
+    private TradeOrderTotalService tradeOrderTotalService;
+
 
     @Override
     public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
@@ -159,13 +180,18 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             if(StringUtils.isNotBlank(tradeOrderRespVO.getAuditUser())){
                 tradeOrderRespVO.setAuditUserName(userMap.get(Long.parseLong(tradeOrderRespVO.getAuditUser())));
             }
-            if(tradeOrderRespVO.getReadUser()!=null){
+            if (tradeOrderRespVO.getReadUser() != null) {
                 tradeOrderRespVO.setReadUserName(userMap.get(tradeOrderRespVO.getReadUser()));
             }
         });
         return new PageResult<>(iPage.getRecords(), iPage.getTotal());
     }
 
+    @Override
+    public List<TradeOrderRespExcelVO> getExportVisitorList(TradeOrderPageReqVO reqVO) {
+        return tradeVisitorMapper.getExportVisitorList(reqVO);
+    }
+
     @Override
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_CREATE)
     public CommonResult<TradeOrderRespDTO> createOrder(TradeOrderCreateReqDTO orderCreateReqDTO) {
@@ -466,6 +492,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private TradeOrderBO buildShipCreateOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO) {
         //重置金额
         TradeOrderBO tradeOrderBO = new TradeOrderBO();
+        TradeOrderDO oldtradeOrderDO = orderCreateReqDTO.getOldtradeOrderDO();
         //订单
         TradeOrderDO tradeOrderDO = new TradeOrderDO();
         tradeOrderDO.setSellMethod(orderCreateReqDTO.getOrderProperty().getSellMethod());
@@ -560,7 +587,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
         List<TradeOrderDetailBO> tradeOrderDetailBOList = orderCreateReqDTO.getItemlList().stream().map(orderItem -> buildShipTradeOrderDetail(orderCreateReqDTO, tradeOrderDO, orderItem))
                 .collect(Collectors.toList());
-        //订单金额验证
         tradeOrderBO.setTradeOrderDO(tradeOrderDO);
         tradeOrderBO.setTradeOrderUserDO(tradeOrderUserDO);
         tradeOrderBO.setTradeOrderDetailBOList(tradeOrderDetailBOList);
@@ -608,7 +634,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         List<TradeDetailBaseDO> tradeDetailBaseDOList = new ArrayList<>();
         List<TradeVisitorDO> tradeVisitorDOList = new ArrayList<>();
         List<TradeDetailPriceDO> tradeDetailPriceDOList = new ArrayList<>();
-
+        Long voyageId = tradeOrderDO.getVoyageId();
         ProductSpuRespDTO finalProductSpuRespDTO = productSpuRespDTO;
         Map<String, Long> vmap = new HashMap<>(16);
         orderItem.getDetailList().forEach(orderDetail -> {
@@ -672,6 +698,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                         tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
                     }
                     tradeVisitorDO.setCreateTime(LocalDateTime.now());
+
+                    int num = tradeVisitorMapper.queryVisitorByVovageId(voyageId, visitor.getCredentialNo());
+                    if(num>0){
+                        Asserts.isTrue(false,"该证件号`"+visitor.getCredentialNo()+"`已经购买过当前航次,请更换其他证件");
+                    }
                     tradeVisitorDOList.add(tradeVisitorDO);
                 }
             }

+ 7 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java

@@ -27,11 +27,18 @@ public interface OtcTradeOrderService {
      */
     CommonResult<PayOrderRespVO> windowPayOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO);
 
+    /**
+     * 定金支付
+     */
+    CommonResult<PayOrderRespVO> payDeposiOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO);
+
     /**
      * 查询订单状态
      */
     CommonResult<?> queryOrderStatus(Long orderId);
 
+    CommonResult<?> queryDeposiOrderStatus(Long orderId);
+
     CommonResult<?> queryOrderAudit(Long orderId);
 
     CommonResult<?> orderAudit(Long orderId, Integer auditStatus);

+ 40 - 7
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -286,6 +286,13 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         return tradeOrderPayService.payOrder(payOrderReqVO);
     }
 
+    @Override
+    public CommonResult<PayOrderRespVO> payDeposiOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO) {
+        //当前旅行社信息
+        initPayParams(loginUser, payOrderReqVO);
+        return tradeOrderPayService.payDeposiOrder(payOrderReqVO);
+    }
+
     private void initPayParams(LoginUser loginUser, PayOrderReqVO payOrderReqVO) {
         if (loginUser.getDistributorId() == null) {
             payOrderReqVO.setAccountType(PayAccountTypeEnum.OTC.getType());
@@ -298,10 +305,19 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     @Override
     public CommonResult<?> queryOrderStatus(Long orderId) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
-        if (tradeOrderDO != null) {
-            return CommonResult.success(tradeOrderDO.getOrderStatus());
+        if (tradeOrderDO != null && tradeOrderDO.getOrderStatus()==6) {
+            return CommonResult.success(orderId);
+        }
+        return CommonResult.error(999,"待轮询");
+    }
+
+    @Override
+    public CommonResult<?> queryDeposiOrderStatus(Long orderId) {
+        TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
+        if (tradeOrderDO != null && tradeOrderDO.getDeposiStatus()==2) {
+            return CommonResult.success(orderId);
         }
-        return CommonResult.success(TradeOrderStatusEnum.UNPAID.getStatus());
+        return CommonResult.error(999,"待轮询");
     }
 
     @Override
@@ -348,11 +364,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             tradeOrderAuditDO.setTenantId(tradeOrderDO.getTenantId());
             tradeOrderAuditMapper.insert(tradeOrderAuditDO);
 
-            if (tradeOrderDO.getAuditStatus() + 1 >= tradeOrderDO.getAuditType()) {
+            if (tradeOrderDO.getAuditStatus() + 1 > tradeOrderDO.getAuditType()) {
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                         .set(TradeOrderDO::getOrderStatus, TradeOrderStatusEnum.UNPAID.getStatus())
                         .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
+                        .set(TradeOrderDO::getDeposiStatus, 1)
                         .eq(TradeOrderDO::getId, orderId)
                 );
                 Map<String, Object> extMap = new HashMap<>();
@@ -362,6 +379,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                         .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
+                        .set(TradeOrderDO::getDeposiStatus, 0)
                         .eq(TradeOrderDO::getId, orderId)
                 );
                 Map<String, Object> extMap = new HashMap<>();
@@ -1386,6 +1404,11 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if (realOrderMoney != null) {
                 shipTradeOrderCreateReqVO.setPayAmount(realOrderMoney);
             }
+            BigDecimal deposi = createVO.getSummary().getDeposi();
+            if (deposi != null && deposi.compareTo(BigDecimal.ZERO) > 0) {
+                shipTradeOrderCreateReqVO.setDeposi(deposi);
+                shipTradeOrderCreateReqVO.setDeposiStatus(1);
+            }
             shipTradeOrderCreateReqVO.setRealMoney(realAmount);
             shipTradeOrderCreateReqVO.setIsRead(0);
             shipTradeOrderCreateReqVO.setDeposi(createVO.getSummary().getDeposi());
@@ -1534,6 +1557,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if (leaderTotalMoney != null && leaderTotalMoney.compareTo(new BigDecimal(0)) > 0) {
                 auditType = 3;
             }
+            if (deposi != null && deposi.compareTo(new BigDecimal(0)) > 0) {
+                auditType = 3;
+            }
             if (auditType > 0 && createVO.getIsYd() != 1) {
                 tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("order_status", TradeOrderStatusEnum.TRANSFER).set("audit_status", 1).eq("id", orderId));
             }
@@ -1636,6 +1662,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 tradeOrderBindDO.setCustom("");
                 tradeOrderBindDO.setRemark("modify定金金额修改,订单原定金:" + tradeOrderDO.getDeposi() + ",订单修改后定金金额:" + shipTradeOrderCreateReqVO.getDeposi());
                 shipTradeOrderCreateReqVO.setTradeOrderBindDO(tradeOrderBindDO);
+                shipTradeOrderCreateReqVO.setDeposiStatus(1);
             } else {
                 shipTradeOrderCreateReqVO.setConfirmType(0);
             }
@@ -1782,9 +1809,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 tradeOrderRoomModelDO.setOrderNo(orderNo);
                 list.add(tradeOrderRoomModelDO);
             });
-
-            if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() != null) {
-                auditType = 4;
+            if (!Objects.equals(shipTradeOrderCreateReqVO.getRemark(), tradeOrderDO.getRemark()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMobile(), tradeOrderDO.getLinkMobile())  || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMan(), tradeOrderDO.getLinkMan()) ) {
+                auditType = 2;
             }
             if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() == null) {
                 auditType = 3;
@@ -1792,11 +1818,18 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if (!Objects.equals(shipTradeOrderCreateReqVO.getDeposi(), tradeOrderDO.getDeposi()) ) {
                 auditType = 3;
             }
+            if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() != null) {
+                auditType = 4;
+            }
             String msg = "";
             if (auditType > 0 && createVO.getIsYd() != 1) {
                 AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, auditType).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
                 tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.TRANSFER.getStatus()).set("audit_status", 1).eq("id", neworderId));
                 msg = "修改提交成功,等待管理员审核";
+            }else if(shipTradeOrderCreateReqVO.getDeposi().compareTo(BigDecimal.ZERO) > 0 && createVO.getIsYd() != 1 && Objects.equals(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.YD.getStatus())){
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 3).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
+                tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 3).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.TRANSFER.getStatus()).set("audit_status", 1).eq("id", neworderId));
+                msg = "修改提交成功,等待管理员审核";
             }
 
             tradeOrderRoomModelMapper.deleteByOrderId(orderId);

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/PayPlatService.java

@@ -23,6 +23,8 @@ public interface PayPlatService {
      */
     JSONObject createPayOrder(PayOrderReqVO payOrderReqVO, TradeOrderPayDO tradeOrderPayDO, TradeMchInfoDO tradeMchInfoDO);
 
+    JSONObject createDeposiPayOrder(PayOrderReqVO payOrderReqVO, TradeOrderPayDO tradeOrderPayDO, TradeMchInfoDO tradeMchInfoDO);
+
     /**
      * 创建退款
      */

+ 7 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/TradeOrderPayService.java

@@ -26,11 +26,18 @@ public interface TradeOrderPayService {
      */
     CommonResult<PayOrderRespVO> payOrder(PayOrderReqVO payOrderReqVO);
 
+    /**
+     * 定金支付
+     */
+    CommonResult<PayOrderRespVO> payDeposiOrder(PayOrderReqVO payOrderReqVO);
+
     /**
      * 处理支付成功通知,只有支付成功了,支付平台才调用
      */
     CommonResult<?> handlePayNotify(Map<String, Object> map);
 
+    CommonResult<?> handleDeposiPayNotify(Map<String, Object> map);
+
     /**
      * 支付单反查
      * @return 0待支付(轮询) 1已支付 2未支付 8888已支付等待结果(轮询)

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/AdvancePayTypeServiceImpl.java

@@ -47,7 +47,8 @@ public class AdvancePayTypeServiceImpl implements PayTypeService {
         rechargeReqDTO.setAccountId(payOrderReqVO.getAccountId());
         rechargeReqDTO.setAccountType(payOrderReqVO.getAccountType());
         rechargeReqDTO.setAmount(tradeOrderPayDO.getPayAmount());
-        rechargeReqDTO.setRechargeType(DistributorTradeTypeEnum.BALANCE_RECHARGE.getType());//余额
+        //余额
+        rechargeReqDTO.setRechargeType(DistributorTradeTypeEnum.BALANCE_RECHARGE.getType());
         if(payOrderReqVO.getTradeType()!=null){
             rechargeReqDTO.setTradeType(payOrderReqVO.getTradeType());
         }else{

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/CreditPayTypeServiceImpl.java

@@ -45,7 +45,8 @@ public class CreditPayTypeServiceImpl implements PayTypeService {
         rechargeReqDTO.setAccountId(payOrderReqVO.getAccountId());
         rechargeReqDTO.setAccountType(payOrderReqVO.getAccountType());
         rechargeReqDTO.setAmount(tradeOrderPayDO.getPayAmount());
-        rechargeReqDTO.setRechargeType(DistributorTradeTypeEnum.CREDIT_RECHARGE.getType());//授信
+        //授信
+        rechargeReqDTO.setRechargeType(DistributorTradeTypeEnum.CREDIT_RECHARGE.getType());
         rechargeReqDTO.setTradeType(DistributorTradeTypeEnum.CREDIT_TRANS.getType());
         rechargeReqDTO.setOrderId(String.valueOf(tradeOrderPayDO.getOrderId()));
         if(ObjectUtils.equalsAny(tradeOrderPayDO.getSellMethod(), SellMethodEnum.OTC.getType(),SellMethodEnum.OTC_MOVE_ORDER.getType()) && payOrderReqVO.getStoreId()!=null){

+ 98 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/PayPlatServiceImpl.java

@@ -146,6 +146,104 @@ public class PayPlatServiceImpl implements PayPlatService {
         }
     }
 
+    @Override
+    public JSONObject createDeposiPayOrder(PayOrderReqVO payOrderReqVO, TradeOrderPayDO tradeOrderPayDO, TradeMchInfoDO tradeMchInfoDO) {
+        try {
+            JSONObject paramMap = new JSONObject();
+            //支付平台主商户号
+            String customMchId = tradeOrderPayDO.getMerchantNo();
+            paramMap.set("channelId", tradeOrderPayDO.getChannelId());
+            paramMap.set("goods", payOrderReqVO.getPayParams().getParam());
+            paramMap.set("mchId", customMchId);
+            // 商户订单号
+            paramMap.set("mchOrderNo", tradeOrderPayDO.getId());
+            //分
+            paramMap.set("amount", tradeOrderPayDO.getPayAmount().multiply(new BigDecimal(100)).intValue());
+            // 币种, cny-人民币
+            paramMap.set("currency", "cny");
+            // 用户地址,IP或手机号
+            payOrderReqVO.getPayParams().setClientIp(ServletUtils.getClientIP());
+            paramMap.set("clientIp",  payOrderReqVO.getPayParams().getClientIp());
+
+            paramMap.set("msgType", payOrderReqVO.getPayParams().getMsgType());
+            //个人网银使用
+            paramMap.set("channelType", payOrderReqVO.getPayParams().getChannelType());
+            paramMap.set("returnUrl", payOrderReqVO.getPayParams().getPayReturnUrl());
+            //支付码
+            if(StringUtil.isNotEmpty(payOrderReqVO.getPayCode())) {
+                paramMap.set("payCode", payOrderReqVO.getPayCode());
+            }
+            // 主账号金额
+            paramMap.set("platformAmount", tradeOrderPayDO.getPayAmount().multiply(new BigDecimal(100)).intValue());
+
+            //设备--操作系统
+            ClientInfo clientInfo = new ClientInfo(ServletUtils.getUserAgent());
+            payOrderReqVO.getPayParams().setDevice(clientInfo.getOSName());
+            paramMap.set("device", payOrderReqVO.getPayParams().getDevice());
+
+            paramMap.set("subject",  payOrderReqVO.getPayParams().getSubject());
+            paramMap.set("body",  payOrderReqVO.getPayParams().getBody());
+            // 回调URL
+            paramMap.set("notifyUrl", payNotifyUrl.replace("payNotify", "deposiPayNotify"));
+
+            //扩展参数1
+            paramMap.set("param1", tradeOrderPayDO.getPaymentType());
+            //扩展参数2
+            paramMap.set("param2", payOrderReqVO.getPayParams().getParam());
+            //过期时间
+            paramMap.set("expireTime", "1800");
+            if( payOrderReqVO.getPayParams().getExtra() == null){
+                payOrderReqVO.getPayParams().setExtra(new JSONObject());
+            }
+            JSONObject extra = payOrderReqVO.getPayParams().getExtra();
+            extra.set("openId", tradeOrderPayDO.getOpenId());
+            //ALIPAY_WAP需要的参数
+            extra.set("productId", payOrderReqVO.getPayParams().getProductId());
+            extra.set("tradeChannel", payOrderReqVO.getPayParams().getTradeChannel());
+            extra.set("tranCode", payOrderReqVO.getPayParams().getTranCode());
+
+            extra.set("appId", payOrderReqVO.getPayParams().getAppId());
+
+            // 附加参数 经纬度信息也在extra参数中
+            paramMap.set("extra", extra);
+            String reqSign = PayDigestUtil.getSign(paramMap, tradeMchInfoDO.getReqKey());
+            // 签名
+            paramMap.set("sign", reqSign);
+            String reqJsonStr = paramMap.toString();
+            String reqDataEncode = "params=" + URLEncoder.encode(reqJsonStr, "UTF-8");
+            String reqData = "params=" +reqJsonStr;
+            log.info("请求支付中心下单接口,请求数据:{}", reqData);
+            String url = baseUrl + "/pay/create_order?";
+            String result = PayUtil.call4Post(url + reqDataEncode);
+            log.info("请求支付中心下单接口({}{}),响应数据:{}", url, reqDataEncode, result);
+            Map<String, Object> retMap = JSONUtil.parseObj(result);
+            if (StrUtil.equals(SUCCESS, MapUtils.getString(retMap, "retCode"))) {
+                // 补充参数
+                paramMap.set("payOrderId", MapUtils.getString(retMap, "payOrderId"));
+                if (retMap.containsKey("payOrder")) {
+                    Object payOrderStr = retMap.get("payOrder");
+                    JSONObject payOrder = JSONUtil.parseObj(payOrderStr);
+                    if (!payOrder.isEmpty()) {
+                        retMap.put("payOrder", paramMap);
+                    }
+                }
+                //非银联支付返回的支付二维码
+                if (retMap.get("payUrl") == null && retMap.get("codeUrl") != null) {
+                    retMap.put("payUrl", retMap.get("codeUrl"));
+                }
+                retMap.put("channelId", paramMap.getStr("channelId"));
+            }
+            retMap.put("mainMid", customMchId);
+            retMap.put("channelId", paramMap.getStr("channelId"));
+            return JSONUtil.parseObj(retMap);
+        } catch (ServiceException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            log.error("调用支付平台异常",ex);
+            throw exception(PAY_PLAT_UNKNOWN_EXCEPTION);
+        }
+    }
+
     @Override
     public JSONObject createRefundOrder(RefundRecordDO refundRecordDO, RefundDO refundDO, TradeOrderPayDO tradeOrderPayDO, TradeMchInfoDO tradeMchInfoDO) {
         try {

+ 191 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/TradeOrderPayServiceImpl.java

@@ -10,6 +10,7 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.lang.Asserts;
@@ -32,6 +33,7 @@ import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.TradeSupplierOrderDO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
@@ -40,7 +42,6 @@ import com.yc.ship.module.trade.framework.common.ExceptionUtils;
 import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
 import com.yc.ship.module.trade.service.bill.BillService;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
-import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
 import com.yc.ship.module.trade.service.pay.PayPlatService;
 import com.yc.ship.module.trade.service.pay.PayTypeService;
 import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
@@ -64,7 +65,6 @@ import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception0;
 import static com.yc.ship.module.ota.enums.ErrorCodeConstants.ORDER_PAY_AUTO_REFUND;
@@ -120,6 +120,9 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
     @Resource
     private TradeVisitorMapper tradeVisitorMapper;
 
+    @Resource
+    private TradeOrderMapper tradeOrderMapper;
+
     @Override
     public CommonResult<PayOrderRespVO> payOrder(PayOrderReqVO payOrderReqVO) {
         try {
@@ -168,6 +171,54 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         return CommonResult.error(ORDER_PAY_FAIL);
     }
 
+    @Override
+    public CommonResult<PayOrderRespVO> payDeposiOrder(PayOrderReqVO payOrderReqVO) {
+        try {
+            Long orderId = payOrderReqVO.getOrderId();
+            String lockKey = String.format(UPDATE_ORDER_LOCK, orderId);
+            RLock lock = redissonClient.getLock(lockKey);
+            try {
+                if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
+                    //1.获取订单信息
+                    TradeOrderDO tradeOrder = tradeOrderRepositoryService.getById(payOrderReqVO.getOrderId());
+                    if (tradeOrder == null) {
+                        Asserts.isTrue(false, "订单不存在");
+                    } else {
+                        if (payOrderReqVO.getAccountId() == null && tradeOrder.getSourceId() != null) {
+                            payOrderReqVO.setAccountId(tradeOrder.getSourceId());
+                        }
+                        if (ObjectUtil.equal(tradeOrder.getDeposiStatus(), 2)) {
+                            //重复支付
+                            Asserts.isTrue(false, "定金已支付,不要重复操作");
+                        } else {
+                            //2.创建定金支付交易单
+                            payOrderReqVO.setPayAmount(tradeOrder.getDeposi());
+                            TradeOrderPayDO tradeOrderPayDO = buildOrderPay(tradeOrder, payOrderReqVO);
+                            payOrderReqVO.setStoreId(tradeOrder.getStoreId());
+                            tradeOrderRepositoryService.savePayOrder(tradeOrderPayDO);
+                            payOrderReqVO.setAccountName(tradeOrder.getSourceName());
+                            return doDeposiPayOrder(tradeOrderPayDO, payOrderReqVO);
+                        }
+                    }
+                } else {
+                    log.error("订单支付失败,未获取到锁。orderId:{}", orderId);
+                    return CommonResult.error(GET_LOCK_EXCEPTION);
+                }
+            } finally {
+                if (lock.isHeldByCurrentThread() && lock.isLocked()) {
+                    lock.unlock();
+                }
+            }
+        } catch (ServiceException e) {
+            ExceptionUtils.log(log, "下单支付失败:", e);
+            return CommonResult.error(e);
+        } catch (Exception e) {
+            log.error("下单支付失败:", e);
+            return CommonResult.error(ORDER_PAY_FAIL);
+        }
+        return CommonResult.error(ORDER_PAY_FAIL);
+    }
+
     @Override
     public CommonResult<?> handlePayNotify(Map<String, Object> map) {
         PayNotifyReqBO payNotifyReqSourceBO = new PayNotifyReqBO();
@@ -215,6 +266,63 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         return CommonResult.success(null);
     }
 
+    @Override
+    public CommonResult<?> handleDeposiPayNotify(Map<String, Object> map) {
+        PayNotifyReqBO payNotifyReqSourceBO = new PayNotifyReqBO();
+        final PayNotifyReqBO payNotifyReqBO = BeanUtil.fillBeanWithMap(map, payNotifyReqSourceBO, false);
+        String lockKey = String.format(UPDATE_PAY_ORDER_LOCK, Long.parseLong(payNotifyReqBO.getMchOrderNo()));
+        RLock lock = redissonClient.getLock(lockKey);
+        try {
+            if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
+                TradeOrderPayDO tradeOrderPayDO = tradeOrderRepositoryService.getPayOrderByIdIgnoreTenant(Long.parseLong(payNotifyReqBO.getMchOrderNo()));
+                //如果支付单已经变为已支付,订单有无效需要自动退,又没有退的时候,就需要把支付单状态改为0,重新推通知
+                if (ObjectUtils.equalsAny(tradeOrderPayDO.getPayStatus(), PaymentStatusEnum.PAID.getStatus(), PaymentStatusEnum.AUTO_REFUND.getStatus())) {
+                    //返回成功,让支付平台无需再推通知
+                    return CommonResult.success(null);
+                }
+                Asserts.isTrue(ObjectUtils.equalsAny(tradeOrderPayDO.getPayStatus(), PaymentStatusEnum.INIT.getStatus(), PaymentStatusEnum.UNPAID.getStatus()), "支付单{}当前状态不可更改{}", payNotifyReqBO.getMchOrderNo(), tradeOrderPayDO.getPayStatus());
+                TenantUtils.execute(tradeOrderPayDO.getTenantId(), () -> {
+                    if (StrUtil.isBlank(tradeOrderPayDO.getPaymentNo())) {
+                        tradeOrderPayDO.setPaymentNo(payNotifyReqBO.getPayOrderId());
+                    }
+                    //银行账单号
+                    tradeOrderPayDO.setBillNo(payNotifyReqBO.getBillNo());
+                    //同步银行返回的支付时间
+                    if (StrUtil.isNotBlank(payNotifyReqBO.getBillDate())) {
+                        try {
+                            tradeOrderPayDO.setPaymentDate(DateUtil.parseLocalDateTime(payNotifyReqBO.getBillDate(), DatePattern.PURE_DATETIME_PATTERN));
+                        } catch (Exception e) {
+                            log.error("支付平台返回的支付时间转换错误{}", payNotifyReqBO.getBillDate());
+                            tradeOrderPayDO.setPaymentDate(LocalDateTime.now());
+                        }
+                    }
+                    TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeOrderPayDO.getOrderId());
+                    //验证订单是否已全部支付完成
+                    BigDecimal hadPayAmount = tradeOrderRepositoryService.getHadPayAmount(tradeOrderPayDO.getOrderId());
+                    if(hadPayAmount.compareTo(tradeOrderDO.getAmount()) >= 0){
+                        log.error("计算订单全部支付金额:{},订单金额:{}", hadPayAmount,tradeOrderDO.getAmount());
+                        tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNUSED.getStatus());
+                    }
+                    //更新支付单状态
+                    updatePayOrderSuccess(tradeOrderPayDO);
+                    //4.1支付成功
+                    updateDeposiOrderPaid(tradeOrderDO, tradeOrderPayDO);
+                });
+            }
+        } catch (ServiceException e) {
+            ExceptionUtils.log(log, "支付通知处理异常:", e);
+            return CommonResult.error(e);
+        } catch (Exception e) {
+            log.error("支付通知处理异常:{}", payNotifyReqBO.getMchOrderNo(), e);
+        } finally {
+            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
+
+        return CommonResult.success(null);
+    }
+
     @Override
     @TenantIgnore
     public CommonResult<?> payOrderQuery(Long payOrderId) {
@@ -483,6 +591,28 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         return CommonResult.success(payOrderRespVO);
     }
 
+    private CommonResult<PayOrderRespVO> doDeposiPayOrder(TradeOrderPayDO tradeOrderPayDO, PayOrderReqVO payOrderReqVO) {
+        PayOrderRespVO payOrderRespVO = new PayOrderRespVO().setOrderPayId(tradeOrderPayDO.getId()).setOrderId(tradeOrderPayDO.getOrderId());
+
+        if (needPayPlatCreateOrder(payOrderReqVO, tradeOrderPayDO)) {
+            //3.调用支付平台,其结果不用于更新订单状态,需要通过支付查询或者异步通知变更订单状态
+            Map result = useDeposiPayPlatCreatePayOrder(payOrderReqVO, tradeOrderPayDO);
+            payOrderRespVO.setPayPlatResult(result);
+            if (result != null) {
+                tradeOrderPayDO.setPayParams(JsonUtils.toJsonString(result));
+            }
+            tradeOrderRepositoryService.updatePayOrderPayParams(tradeOrderPayDO);
+        } else {
+            //4.其他支付方式
+            String tradeId = useOtherPayType(payOrderReqVO, tradeOrderPayDO);
+            tradeOrderPayDO.setPaymentNo(tradeId);
+            //4.1支付成功
+            TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(payOrderReqVO.getOrderId());
+            updateDeposiOrderPaid(tradeOrderDO,tradeOrderPayDO);
+        }
+        return CommonResult.success(payOrderRespVO);
+    }
+
     private CommonResult<?> afterPaySuccessWithHeldLock(TradeOrderPayDO tradeOrderPayDO) {
         //更新支付单状态
         updatePayOrderSuccess(tradeOrderPayDO);
@@ -565,6 +695,15 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
     }
 
+    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_DEPOSI_PAY)
+    public void updateDeposiOrderPaid(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
+        Integer orderStatus = tradeOrderDO.getOrderStatus();
+        tradeOrderMapper.update(new LambdaUpdateWrapper<TradeOrderDO>()
+                .eq(TradeOrderDO::getId, tradeOrderDO.getId()).set(TradeOrderDO::getOrderStatus, orderStatus).set(TradeOrderDO::getDeposiStatus, 2).set(TradeOrderDO::getDeposiPayTime, LocalDateTime.now()));
+        //保存订单日志
+        TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
+    }
+
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_PAY)
     public void updateOrderPaying(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
         Integer orderStatus = tradeOrderDO.getOrderStatus();
@@ -709,6 +848,52 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         return result;
     }
 
+    private Map useDeposiPayPlatCreatePayOrder(PayOrderReqVO payOrderReqVO, TradeOrderPayDO tradeOrderPayDO) {
+        Asserts.isTrue(payOrderReqVO.getPayParams() != null, "支付参数不能为空");
+        //获取当前租户配置的支付平台商户号
+        String mchId;
+        if (PAY_ORDER_TYPE_OTHER == tradeOrderPayDO.getOrderType()) {
+            //如果是其他支付单,获取平台配置
+            mchId = configApi.getPlatformConfigValueByKey("payPlatMchId");
+        } else {
+            //获取当前租户配置的支付平台商户号
+            mchId = configApi.getConfigValueByKey("payPlatMchId");
+        }
+        Asserts.isTrue(StrUtil.isNotBlank(mchId), "当前租户未配置商户号");
+        TradeMchInfoDO tradeMchInfoDO = tradeOrderRepositoryService.getByMchId(mchId);
+        Asserts.isTrue(tradeMchInfoDO != null, "未配置商户号信息{}", tradeMchInfoDO);
+        //根据支付方式获取channelId
+        String name = tradeOrderPayDO.getOrderType() == PAY_ORDER_TYPE_TRADE ? SellMethodEnum.valueOf(tradeOrderPayDO.getSellMethod()).name() : PaySourceEnum.valueOf(tradeOrderPayDO.getSellMethod()).name();
+        String channelId = getChannelIdByPayType(tradeOrderPayDO.getOrderType(), name, PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()), payOrderReqVO.getPayExtraType());
+        if (tradeMchInfoDO != null) {
+            tradeOrderPayDO.setMerchantNo(tradeMchInfoDO.getMchId());
+        }
+        tradeOrderPayDO.setChannelId(channelId);
+        tradeOrderPayDO.setOpenId(payOrderReqVO.getOpenId());
+        //补充支付参数
+        if (tradeOrderPayDO.getOrderType() == PAY_ORDER_TYPE_TRADE) {
+            TradeDetailDO tradeDetailDO = tradeOrderRepositoryService.getOrderAnyDetail(tradeOrderPayDO.getOrderId());
+            PayOrderReqVO.PayParams payParams = payOrderReqVO.getPayParams();
+            payParams.setParam(tradeDetailDO.getProductName());
+            payParams.setSubject(payOrderReqVO.getAccountName());
+            payParams.setBody(tradeDetailDO.getProductName());
+            payParams.setProductId(tradeDetailDO.getProductId().toString());
+        }
+
+        JSONObject result = payPlatService.createDeposiPayOrder(payOrderReqVO, tradeOrderPayDO, tradeMchInfoDO);
+        Asserts.isTrue(StrUtil.equals(SUCCESS, MapUtils.getString(result, "retCode")), "定金支付调用支付平台失败");
+        //保存支付平台支付单号
+        String payOrderId = MapUtil.getStr(result, "payOrderId");
+        if (StrUtil.isNotBlank(payOrderId)) {
+            tradeOrderPayDO.setPaymentNo(payOrderId);
+        }
+        if (payOrderReqVO.getPayParams() != null) {
+            tradeOrderPayDO.setReqParams(JsonUtils.toJsonString(payOrderReqVO.getPayParams()));
+        }
+
+        return result;
+    }
+
     private String getChannelIdByPayType(int orderType, String name, PayTypeEnum payType, Integer payExtraType) {
         String key = name + "_" + payType.name();
         if (payExtraType != null) {
@@ -823,4 +1008,8 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         return CommonResult.error(500, "合同不存在");
     }
 
+    public static void main(String[] args) {
+        System.out.println(DateUtil.parseLocalDateTime("20260304", DatePattern.PURE_DATETIME_PATTERN));
+    }
+
 }

+ 7 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/TradeRefundService.java

@@ -45,6 +45,13 @@ public interface TradeRefundService {
      */
     CommonResult<TradeRefundAuditRespDTO> refundAudit(TradeRefundAuditReqDTO refundAuditReqDTO);
 
+    /**
+     * 退款审计
+     * @param cancelAuditReqDTO
+     * @return
+     */
+    CommonResult<TradeCancelAuditRespDTO> cancelAudit(TradeCancelAuditReqDTO cancelAuditReqDTO);
+
     /**
      * 根据支付类型退款
      * @param refundId

+ 16 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -266,6 +266,22 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         return CommonResult.success(respDTO);
     }
 
+    @Override
+    public CommonResult<TradeCancelAuditRespDTO> cancelAudit(TradeCancelAuditReqDTO cancelAuditReqDTO) {
+        TradeCancelAuditRespDTO respDTO = new TradeCancelAuditRespDTO();
+        respDTO.setOrderId(cancelAuditReqDTO.getOrderId());
+        if (ObjectUtil.equal(cancelAuditReqDTO.getAuditStatus(), YES)) {
+            //同意
+
+
+        } else {
+            //拒绝
+
+        }
+
+        return CommonResult.success(respDTO);
+    }
+
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_REFUND_AUDIT)
     public RefundAuditDO doAudit(RefundDO refundDO, TradeRefundAuditReqDTO refundAuditReqDTO) {
         Asserts.isTrue(ObjectUtil.equal(refundDO.getRefundStatus(), RefundStatusEnum.AUDITING.getStatus()), "当前状态不能审批,{}", refundDO.getRefundStatus());

+ 27 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -193,6 +193,11 @@
             )
     </select>
 
+    <select id="queryVisitorByVovageId" resultType="java.lang.Integer">
+        select count(*) from trade_visitor t1 inner join trade_order t2 on t1.order_id=t2.id
+        where t1.ceredential_no=#{credentialNo} and t2.voyage_id=#{voyageId}
+    </select>
+
     <select id="selectListByVoyageId" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
         select tv.*,if(pprmt.total_num &gt;=2 and pprmt.enable_share=0,1,0) as isHaveTogethers,if(pprmt.total_num =1 and pprmt.enable_share=0,1,0) as isAlone
         from trade_visitor tv
@@ -209,4 +214,26 @@
                  join trade_order b on tv.order_id=b.id
         where b.order_status=6 and b.voyage_id=#{voyageId} and if(tv.final_room_id is null,tv.init_room_id,tv.final_room_id)=#{roomId}
     </select>
+
+    <select id="getExportVisitorList" resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespExcelVO">
+        select t1.order_no orderNo,t1.group_no groupNo,t1.order_status orderStatus,t1.source_name sourceName,t3.name name,t3.gender gender,t3.credential_no credentialNo,t3.nationality nationality,t3.birthday birthday,t3.mobile mobile,t3.age age,t3.mobile mobile,t5.short_name roomModelName,t3.floor floor,t6.room_num roomName,t2.price price,t3.remark remark
+        from trade_order t1 inner join trade_detail t2 on t1.id=t2.order_id and t2.product_type = 0 and t2.deleted = 0
+        inner join trade_visitor t3 on t2.visitor_id=t3.id and t3.deleted =0
+        inner join trade_order_room_model t4 on t3.room_index_id=t4.room_index_id and t4.deleted=0
+        inner join resource_room_model t5 on t4.room_model_id = t5.id and t5.deleted=0
+        left join resource_room t6 on t3.room_id = t6.id and t6.deleted=0
+        where t1.voyage_id=#{vo.voyageId} and t1.order_status in (14, 13, 11, 10, 12, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+        <if test="vo.orderNo != null and vo.orderNo != ''">
+            AND t1.order_no = #{vo.orderNo}
+        </if>
+        <if test="vo.otaId != null and vo.otaId != ''">
+            AND t1.source_id = #{vo.otaId}
+        </if>
+        <if test="vo.orderStatus!=null and vo.orderStatus.size()>0">
+            and  t1.order_status in
+            <foreach collection="vo.orderStatus" item="item" separator=","  open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 1 - 0
ship-server-web/src/main/resources/application.yaml

@@ -291,6 +291,7 @@ yudao:
       - /travl-app-api/test/index # 基于名字获取租户,不许带租户编号
       - /travl-app-api/trade/orderTest # 基于名字获取租户,不许带租户编号
       - /travl-app-api/trade/payNotify
+      - /travl-app-api/trade/deposiPayNotify
       - /travl-app-api/trade/refundNotify
       - /travl-app-api/system/sms/callback/aliyun
       - /${yudao.web.admin-url}/notify/* # 统一消息服务,接收消息的接口,不需要登录