ソースを参照

fix:优化功能

luofeiyun 1 ヶ月 前
コミット
b479dcc424

+ 5 - 0
ship-module-product/ship-module-product-biz/pom.xml

@@ -137,6 +137,11 @@
             <version>1.0.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.belerweb</groupId>
+            <artifactId>pinyin4j</artifactId>
+            <version>2.5.1</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 9 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockBaseVO.java

@@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class VoyageStockBaseVO {
     @Schema(description = "航次ID", example = "3260")
@@ -53,4 +55,11 @@ public class VoyageStockBaseVO {
     @Schema(description = "剩余房间数")
     @ExcelProperty("剩余房间数")
     private Integer surplusNum;
+
+    /**
+     * 虚拟房间数
+     */
+    @Schema(description = "虚拟房间数")
+    @ExcelProperty("虚拟房间数")
+    private Integer virtualNum;
 }

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailSaveReqVO.java

@@ -1,5 +1,6 @@
 package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
@@ -42,5 +43,9 @@ public class VoyageStockDetailSaveReqVO {
 
     @Schema(description = "剩余房间数")
     private Integer surplusNum;
+    @Schema(description = "虚拟房间数")
+    @ExcelProperty("虚拟房间数")
+    private Integer virtualNum;
+
 
 }

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailTotalRespVO.java

@@ -62,4 +62,8 @@ public class VoyageStockDetailTotalRespVO {
     @Schema(description = "剩余房间数")
     @ExcelProperty("剩余房间数")
     private Integer surplusNum;
+
+    @Schema(description = "虚拟房间数")
+    @ExcelProperty("虚拟房间数")
+    private Integer virtualNum;
 }

+ 6 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestock/VoyageStockDO.java

@@ -2,6 +2,8 @@ package com.yc.ship.module.product.dal.dataobject.voyagestock;
 
 import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -76,5 +78,9 @@ public class VoyageStockDO extends TenantBaseDO {
      * 剩余房间数
      */
     private Integer surplusNum;
+    /**
+     * 虚拟房间数
+     */
+    private Integer virtualNum;
 
 }

+ 6 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdetail/VoyageStockDetailDO.java

@@ -2,6 +2,8 @@ package com.yc.ship.module.product.dal.dataobject.voyagestockdetail;
 
 import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -76,5 +78,9 @@ public class VoyageStockDetailDO extends TenantBaseDO {
      * 剩余房间数
      */
     private Integer surplusNum;
+    /**
+     * 虚拟房间数
+     */
+    private Integer virtualNum;
 
 }

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java

@@ -12,8 +12,10 @@ import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDe
 import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
+import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
+import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -54,6 +56,9 @@ public class VoyageServiceImpl implements VoyageService {
     public Long createVoyage(VoyageSaveReqVO createReqVO) {
         // 插入
         VoyageDO voyage = BeanUtils.toBean(createReqVO, VoyageDO.class);
+        Long shipId = voyage.getShipId();
+        ShipRespDTO shipRespDTO = shipApi.queryShip(shipId);
+        voyage.setCode(VoyageUUCodeUtils.generateVoyageNo(shipRespDTO.getCode(), voyage.getStartTime(), voyage.getBoardingAddress(), voyage.getLeaveAddress()));
         voyageMapper.insert(voyage);
         Long id = voyage.getId();
 

+ 61 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/utils/VoyageUUCodeUtils.java

@@ -0,0 +1,61 @@
+package com.yc.ship.module.product.utils;
+
+import cn.hutool.core.date.DateUtil;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+
+import java.time.LocalDateTime;
+
+/**
+ * 航次编码生成
+ */
+public class VoyageUUCodeUtils {
+
+
+    /**
+     * 规则是游轮编号+航次日期+起始地字母,例如 CJXLY-20250904-YC-CQ,
+     * 意思是 长江行揽月+20250901+宜昌+重庆
+     * @return
+     */
+    public static String generateVoyageNo(String shipCode, LocalDateTime startTime, String boardingAddress, String leaveAddress) {
+        String startTimeStr = DateUtil.format(startTime, "yyyyMMdd");
+        String boardPy = getFirstSpell(boardingAddress);
+        String leavePy = getFirstSpell(leaveAddress);
+        return shipCode + "-" + startTimeStr + "-" + boardPy + "-" + leavePy;
+    }
+
+    /**
+     * 获取汉字串拼音首字母,英文字符不变
+     * @param chinese 汉字串
+     * @return 汉语拼音首字母
+     */
+    public static String getFirstSpell(String chinese) {
+        StringBuffer pybf = new StringBuffer();
+        char[] arr = chinese.toCharArray();
+        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i] > 128) {
+                try {
+                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
+                    if (temp != null) {
+                        pybf.append(temp[0].charAt(0));
+                    }
+                } catch (BadHanyuPinyinOutputFormatCombination e) {
+                    e.printStackTrace();
+                }
+            } else {
+                pybf.append(arr[i]);
+            }
+        }
+        return pybf.toString().replaceAll("\\W", "").trim().toUpperCase();
+    }
+    public static void main(String[] args) {
+        System.out.println(generateVoyageNo("CJXLY", LocalDateTime.now(), "宜昌", "重庆"));
+    }
+
+}

+ 7 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/ShipApi.java

@@ -17,6 +17,13 @@ public interface ShipApi {
      */
     Map<Long, ShipRespDTO> queryShip(List<Long> ids);
 
+    /**
+     * 获取游轮信息
+     * @param id
+     * @return
+     */
+    ShipRespDTO queryShip(Long id);
+
     /**
      * 获取房型和楼层对应的房间数
      * @param shipId

+ 6 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/ship/ShipApiImpl.java

@@ -29,6 +29,12 @@ public class ShipApiImpl implements ShipApi {
         return map;
     }
 
+    @Override
+    public ShipRespDTO queryShip(Long id) {
+        ResourceShipDO ship = shipService.getShip(id);
+        return BeanUtils.toBean(ship, ShipRespDTO.class);
+    }
+
     @Override
     public List<RoomModelFloorNumDTO> queryRoomModelFloorToNum(Long shipId) {
         return roomMapper.selectRoomModelFloorToNum(shipId);