Bladeren bron

Merge branch 'main' of http://git.wisesoft.net.cn/lishiqiang/ship-ota-server

lishiqiang 2 weken geleden
bovenliggende
commit
4894dc8699

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java

@@ -128,8 +128,8 @@ public class AppOtcTradeOrderController {
     @GetMapping("/miniApp/orderDetailInfo")
     @Operation(summary = "小程序-门票详情", description = "根据门票id查询门票详情")
     @OperateLog(type = API)
-    public CommonResult<TradeOrderRespNewVO> getOrderInfoNew(@Valid @RequestParam("id") Long id) {
-        return success(otcTradeOrderService.getOrderInfoNew(id));
+    public CommonResult<AppTradeOrderDetailRespVO> getOrderInfoNew(@Valid @RequestParam("id") Long id) {
+        return success(otcTradeOrderService.getAppOrderInfoNew(id));
     }
 
 

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppItineraryPersonVO.java

@@ -1,5 +1,6 @@
 package com.yc.ship.module.trade.controller.app.otc.vo;
 
+import com.yc.ship.framework.desensitize.core.slider.annotation.MobileDesensitize;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -14,6 +15,7 @@ public class AppItineraryPersonVO {
     private String name;
 
     @Schema(description = "手机号")
+    @MobileDesensitize
     private String mobile;
 
     @Schema(description = "最终房间id")

+ 263 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppTradeOrderDetailRespVO.java

@@ -0,0 +1,263 @@
+package com.yc.ship.module.trade.controller.app.otc.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
+import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
+import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
+import com.yc.ship.module.trade.dal.dataobject.insurance.InsuranceDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
+import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.*;
+
+@Schema(description = "APP - 交易订单 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppTradeOrderDetailRespVO {
+
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "10096")
+    private Long id;
+
+    @Schema(description = "销售员ID")
+    private String sellerId;
+
+    @Schema(description = "是否显示审核流程")
+    private Integer isShowAudit;
+
+    @Schema(description = "订单号")
+    @ExcelProperty("订单号")
+    private String orderNo;
+
+    @Schema(description = "序号")
+    private Integer orderSort;
+
+    @Schema(description = "团号")
+    @ExcelProperty("团号")
+    private String groupNo;
+
+    @Schema(description = "订单状态", example = "1")
+    @ExcelProperty("订单号")
+    private Integer orderStatus;
+
+    @Schema(description = "支付状态", example = "1")
+    private Integer payStatus;
+
+    @Schema(description = "支付方式", example = "2")
+    @ExcelProperty(value = "支付方式", converter = DictConvert.class)
+    @DictFormat("payment_type")
+    private Integer paymentType;
+
+    @Schema(description = "支付方式", example = "2")
+    private String paymentTypeName;
+
+    @Schema(description = "支付时间")
+//    @ExcelProperty("支付时间")
+    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    private LocalDateTime paymentDate;
+
+    @Schema(description = "确认时间")
+//    @ExcelProperty("支付时间")
+    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    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 = "备注")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "销售来源", example = "31758")
+    private String sourceId;
+
+    @Schema(description = "来源名称", example = "张三")
+    @ExcelProperty("来源名称")
+    private String sourceName;
+
+    @Schema(description = "国籍数据")
+    private List<TradeOrderCountryBaseVO> countryList;
+
+    @Schema(description = "人员数据统计")
+    private String personStat;
+
+    @Schema(description = "订单汇总信息")
+    private TradeOrderTotalVO summary;
+
+    @Schema(description = "游轮ID")
+    private Long shipId;
+
+    @Schema(description = "游轮名称")
+    @ExcelProperty("游轮名称")
+    private String shipName;
+
+    @Schema(description = "航次ID")
+    private Long voyageId;
+
+    @Schema(description = "拼房描述")
+    private String shareDesc;
+
+    @Schema(description = "游轮航次信息")
+    private VoyageRespVO voyage;
+    private ResourceRouteDO resourceRouteDO;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal amount;
+    /**
+     * 支付金额
+     */
+    private BigDecimal payAmount;
+
+    @Schema(description = "创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+    @Schema(description = "联系人姓名")
+    @ExcelProperty("联系人姓名")
+    private String contactName;
+
+    @Schema(description = "手机号")
+    @ExcelProperty("手机号")
+    private String mobile;
+
+    @Schema(description = "门店ID")
+    private Long storeId;
+
+    @Schema(description = "门店名称")
+    @ExcelProperty("门店名称")
+    private String storeName;
+
+    @Schema(description = "开票标识:0-未开票,1-开票成功,2-开票失败,3-已开票")
+    private Integer isInvoice;
+
+    @Schema(description = "发票下载")
+    private String invoiceUrl;
+
+    @Schema(description = "保险")
+    private List<InsuranceDO> insuranceList;
+
+    @Schema(description = "合同")
+    private List<ContractDO> contractList;
+
+    @Schema(description = "门票信息")
+    private List<TradeDetailRespVO> tradeDetailList;
+
+    @Schema(description = "游客信息")
+    private List<AppTradeVisitorVO> tradeVisitorList;
+
+    @Schema(description = "接站信息")
+    private OrderJzDO orderJz;
+
+    /**
+     * 审核流程类型 1:1级别流程 2:2级流程 3:3级流程 4:4级流程
+     */
+    @Schema(description = "审核流程类型")
+    private Integer auditType;
+    /**
+     * 审核状态 0、无需审核 1、提交审核中  2:审核中 3:审核通过 4:审核不通过
+     */
+    @Schema(description = "审核状态")
+    private Integer auditStatus;
+
+    @Schema(description = "游客信息")
+    private List<TradeVisitorRespVO> visitors;
+
+    @Schema(description = "房型信息")
+    private List<TradeOrderRoomModelVO> roomModelList;
+
+    @Schema(description = "房型信息")
+    private String roomModelDetails;
+
+    @Schema(description = "审核人")
+    private String auditUser;
+
+    @Schema(description = "审核角色名称")
+    private String auditUserName;
+
+    @Schema(description = "审核时间")
+    @ExcelProperty("审核时间")
+    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
+    private LocalDateTime auditTime;
+
+    @Schema(description = "是否审阅(0否 1是)")
+    private Integer isRead;
+
+    @Schema(description = "审阅人")
+    private Long readUser;
+
+    @Schema(description = "审阅人名称")
+    private String readUserName;
+
+    @Schema(description = "审阅时间")
+    private LocalDateTime readTime;
+
+    @Schema(description = "定金")
+    private BigDecimal deposi;
+
+    @Schema(description = "实付已经金额")
+    private BigDecimal realPayAmount;
+
+    @Schema(description = "政策优惠金额")
+    private BigDecimal freeAmount;
+
+    @Schema(description = "是否需要补缴费 1是 0 否")
+    private Integer isSupplementary;
+
+    @Schema(description = "受损金额")
+    private BigDecimal damaged;
+
+    @Schema(description = "补缴费金额")
+    private BigDecimal  supplementAmount;
+
+    @Schema(description = "取消状态 0:初始 1:已提交取消 2:取消成功")
+    private Integer damagedStatus;
+
+    @Schema(description = "取消提交时间")
+    private LocalDateTime damagedTime;
+
+    @Schema(description = "定金状态0:初始  1:待支付(审核通过)2:已支付")
+    private Integer deposiStatus;
+
+    @Schema(description = "定金支付时间")
+    private LocalDateTime deposiPayTime;
+
+    @Schema(description  = "联系人")
+    private String linkMan;
+
+    @Schema(description  = "联系人电话")
+    private String linkMobile;
+
+    @Schema(description  = "联系人邮箱")
+    private String linkEmail;
+
+    @Schema(description  = "客户名称")
+    private String customerName;
+
+    @Schema(description  = "待支付金额")
+    private BigDecimal loadPayAmount;
+
+
+
+
+}

+ 168 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppTradeVisitorVO.java

@@ -0,0 +1,168 @@
+package com.yc.ship.module.trade.controller.app.otc.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.desensitize.core.slider.annotation.IdCardDesensitize;
+import com.yc.ship.framework.desensitize.core.slider.annotation.MobileDesensitize;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import com.yc.ship.module.trade.enums.CredentialTypeEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * 游客 DO
+ *
+ * @author 管理员
+ */
+@Schema(description = "APP游客信息")
+@Data
+public class AppTradeVisitorVO {
+
+    /**
+     * 主键
+     */
+    @Schema(description = "主键")
+    private Long id;
+
+    /**
+     * 游客ID
+     */
+    private String vid;
+    /**
+     * 明细ID
+     */
+    private Long detailId;
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+    /**
+     * 游客姓名
+     */
+    @Schema(description = "游客姓名")
+    private String name;
+    /**
+     * 性别
+     */
+    @Schema(description = "性别")
+    private Integer gender;
+    /**
+     * 证件号
+     */
+    @Schema(description = "证件号")
+    @IdCardDesensitize
+    private String credentialNo;
+
+    /**
+     * 国籍
+     */
+    @Schema(description = "国籍")
+    private String nationality;
+
+    @Schema(description = "生日")
+    private String birthday;
+
+
+    /**
+     * 证件类型
+     * 关联 {@link CredentialTypeEnum}
+     */
+    @Schema(description = "证件类型")
+        private Integer credentialType;
+
+    @Schema(description = "证件类型名称")
+    @TableField(exist = false)
+    private String credentialTypeName;
+    /**
+     * 手机号
+     */
+    @Schema(description = "手机号")
+    @MobileDesensitize
+    private String mobile;
+    /**
+     * 分销商的明细ID
+     */
+    @Schema(description = "分销商的明细ID")
+    private String otaDetailId;
+    /**
+     * 是否投保 0否 1是
+     */
+    private Integer isInsure;
+
+    @Schema(description = "是否推送实名制系统")
+    private Integer isPush;
+
+    @Schema(description = "分销商的明细ID")
+    @TableField(exist = false)
+    private String voucherCode;
+
+    @Schema(description = "关联的游客ID")
+    @TableField(exist = false)
+    private Long associatedVisitorId;
+
+    @Schema(description = "是否宜昌中转 0:否 1是")
+    private Integer yczz;
+
+    @Schema(description = "是否重庆中转 0:否 1是")
+    private Integer cqzz;
+
+    private String roomId;
+    private String cohabitation;
+    @TableField(exist = false)
+    private String jzTime;
+    @TableField(exist = false)
+    private String jzPhone;
+    @TableField(exist = false)
+    private String jzCard;
+    @TableField(exist = false)
+    private String jzAddress;
+
+    @Schema(description = "国籍名称")
+    @TableField(exist = false)
+    private String nationalityName;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "预分房间ID", example = "")
+    private String initRoomId;
+
+    @Schema(description = "实际入住房间ID", example = "")
+    private String finalRoomId;
+
+    @Schema(description = "入住日期", example = "")
+    private String inDate;
+
+    @Schema(description = "离开日期", example = "")
+    private String outDate;
+
+    @Schema(description = "年龄", example = "")
+    private Integer age;
+
+    @Schema(description = "游客类型", example = "")
+    private String type;
+
+    @Schema(description = "地址", example = "")
+    private String address;
+
+    @Schema(description = "产品类型 0 游船产品 1 附加产品 2:赠票", example = "")
+    @TableField(exist = false)
+    private Integer productType;
+
+    /**
+     * 订单房型的唯一ID,查询入住房型的信息
+     */
+    private String roomIndexId;
+
+    @Schema(description = "区域", example = "")
+    private String area;
+
+    @Schema(description = "房型ID", example = "")
+    private Long roomModelId;
+
+    @Schema(description = "楼层", example = "")
+    private Integer floor;
+}

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

@@ -1455,7 +1455,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         switch (status) {
            case 1:
                statusDesc += "待出行";
-               Duration between = LocalDateTimeUtil.between(boardingTime, LocalDateTime.now());
+               Duration between = LocalDateTimeUtil.between(LocalDateTime.now(), boardingTime);
                long l = between.toDays();
                if (l > 0) {
                    statusDesc += "(距离登船" + l + "天)";

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

@@ -13,6 +13,7 @@ import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundPageReqVO
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRecordPageReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRecordRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRespVO;
+import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderDetailRespVO;
 import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
 import com.yc.ship.module.trade.dal.dataobject.insurance.InsuranceDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailBaseDO;
@@ -163,4 +164,6 @@ public interface OtcTradeOrderService {
      * 导出游客名单-代理商
      */
     File exportTouristListToAgent(@Valid TradeOrderPageReqVO pageReqVO);
+
+    AppTradeOrderDetailRespVO getAppOrderInfoNew(Long id);
 }

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

@@ -296,9 +296,16 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
         visitor.setCqzz(tradeVistorReqVO.getChongqing());
         visitor.setRoomId(tradeVistorReqVO.getRoomId());
         visitor.setNationality(tradeVistorReqVO.getNationality());
+        visitor.setGender(tradeVistorReqVO.getGender());
+        visitor.setBirthday(tradeVistorReqVO.getBirthday());
+        visitor.setType(tradeVistorReqVO.getType());
+        visitor.setAge(tradeVistorReqVO.getAge());
         visitor.setRoomIndexId(tradeVistorReqVO.getRoomIndexId());
         visitor.setRoomModelId(tradeVistorReqVO.getRoomModelId());
         visitor.setFloor(tradeVistorReqVO.getFloor());
+        visitor.setVid(tradeVistorReqVO.getId());
+        visitor.setCohabitation(tradeVistorReqVO.getCohabitation());
+
         return visitor;
     }
 

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

@@ -79,6 +79,8 @@ import com.yc.ship.module.trade.api.dto.TradeOrderRespDTO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.otc.PrintRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.*;
+import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderDetailRespVO;
+import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeVisitorVO;
 import com.yc.ship.module.trade.convert.order.TradeOrderConvert;
 import com.yc.ship.module.trade.dal.dataobject.audituser.AuditUserDO;
 import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
@@ -2797,6 +2799,77 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         return getFile(reqVO,template, 1);
     }
 
+    @Override
+    public AppTradeOrderDetailRespVO getAppOrderInfoNew(Long id) {
+        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(id);
+        AppTradeOrderDetailRespVO orderRespNewVO = BeanUtils.toBean(tradeOrderDO, AppTradeOrderDetailRespVO.class);
+        //设置房型数据
+        List<TradeOrderRoomModelDO> roomModelDoList = tradeOrderRoomModelMapper.selectListByOrderId(id);
+        List<TradeOrderRoomModelVO> roomModelList = BeanUtils.toBean(roomModelDoList, TradeOrderRoomModelVO.class);
+
+        List<Long> roomModelTypeIds = convertList(roomModelList, TradeOrderRoomModelVO::getRoomModelTypeId);
+        List<PriceRoomModelTypeDO> roomModelTypes = priceRoomModelTypeService.getByIds(roomModelTypeIds);
+        Map<Long, PriceRoomModelTypeDO> roomModelTypeMap = CollectionUtils.convertMap(roomModelTypes, PriceRoomModelTypeDO::getId);
+        roomModelList.forEach(item -> {
+            if (roomModelTypeMap != null) {
+                PriceRoomModelTypeDO roomModelTypeDO = roomModelTypeMap.get(item.getRoomModelTypeId());
+                if (roomModelTypeDO != null) {
+                    item.setRoomModelTypeName(roomModelTypeDO.getTypeName());
+                }
+            }
+        });
+
+        BigDecimal payTotalAmount  = tradeOrderRepositoryService.getTotalPayByOrderNo(orderRespNewVO.getOrderNo());
+        if(payTotalAmount==null){
+            payTotalAmount = BigDecimal.ZERO;
+        }
+        orderRespNewVO.setLoadPayAmount(orderRespNewVO.getPayAmount().subtract(payTotalAmount));
+
+        orderRespNewVO.setRoomModelList(roomModelList);
+
+        if (tradeOrderDO.getPayStatus() == 0) {
+            tradeOrderDO.setPayAmount(BigDecimal.ZERO);
+        }
+        //发票地址
+        if (tradeOrderDO.getIsInvoice() != null && tradeOrderDO.getIsInvoice() == 1) {
+            List<InvoiceDO> list = invoiceService.queryInvoiceOrder(tradeOrderDO.getOrderNo());
+            if (list != null && !list.isEmpty()) {
+                orderRespNewVO.setInvoiceUrl(list.get(0).getCUrl());
+            }
+        }
+        //获取订单门票信息
+        List<TradeDetailRespVO> detailList = tradeDetailMapper.getOrderIdDetail(tradeOrderDO.getId());
+        orderRespNewVO.setTradeDetailList(detailList);
+
+        List<TradeVisitorDO> visitorDOList = tradeVisitorMapper.selectShipVisitor(tradeOrderDO.getId());
+        orderRespNewVO.setTradeVisitorList(BeanUtils.toBean(visitorDOList, AppTradeVisitorVO.class));
+
+        //设置订单汇总数据
+        TradeOrderTotalDO tradeOrderTotalDO = tradeOrderTotalMapper.selectOne(TradeOrderTotalDO::getOldOrderId, id);
+        TradeOrderTotalVO summary = BeanUtils.toBean(tradeOrderTotalDO, TradeOrderTotalVO.class);
+        // 会为null,导致前端报错
+        if (summary == null) {
+            summary = new TradeOrderTotalVO();
+        }
+        orderRespNewVO.setSummary(summary);
+
+        //设置游轮航次信息
+        VoyageDO voyageDO = voyageService.getVoyage(tradeOrderDO.getVoyageId());
+        orderRespNewVO.setVoyage(BeanUtils.toBean(voyageDO, VoyageRespVO.class));
+        if(voyageDO != null) {
+            ResourceRouteDO resourceRouteDO = resourceRouteMapper.selectById(voyageDO.getRouteId());
+            orderRespNewVO.setResourceRouteDO(resourceRouteDO);
+        }
+        //设置游轮名称
+        ResourceShipDO ship = shipService.getShip(tradeOrderDO.getShipId());
+        if(ship != null) {
+            orderRespNewVO.setShipName(ship.getName());
+        }
+        OrderJzDO orderJzDO = orderJzMapper.selectOne(OrderJzDO::getOrderId, orderRespNewVO.getId());
+        orderRespNewVO.setOrderJz(orderJzDO);
+        return orderRespNewVO;
+    }
+
     private File getFile(TradeOrderPageReqVO reqVO,InputStream template, int fileType) {
         List<Integer> orderStatus = reqVO.getOrderStatus();
         // 排除状态为 -2 的订单