ソースを参照

订单航次游客信息导出

lishiqiang 1 週間 前
コミット
117fae160f

+ 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();

+ 14 - 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;
@@ -544,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);
+    }
 
     /**
      * 导出确认单

+ 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;
+}

+ 4 - 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")

+ 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);
 }

+ 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);
+
     /**
      * 订单创建
      *

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

@@ -324,8 +324,10 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
             cancelAuditDO.setOrderId(orderId);
             cancelAuditDO.setAuditStatus(TradeOrderStatusEnum.CANCELED.getStatus());
             cancelAuditMapper.insert(cancelAuditDO);
+            return CommonResult.success("订单取消审核中");
+        }else{
+            return tradeOrderPayService.cancelOrder(orderId);
         }
-        return tradeOrderPayService.cancelOrder(orderId);
     }
 
     @Override

+ 36 - 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) {
@@ -561,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);
@@ -609,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 -> {
@@ -673,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);
                 }
             }

+ 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>