|
@@ -0,0 +1,100 @@
|
|
|
+package com.ecnu.platform.port
|
|
|
+
|
|
|
+import com.ecnu.alg.pojo.port.inputs.AlgVstBay
|
|
|
+import com.ecnu.alg.pojo.port.inputs.AlgVstHatch
|
|
|
+import com.ecnu.alg.pojo.port.inputs.AlgVstRow
|
|
|
+import com.three.data_api.dm.annos.BizApiMethod
|
|
|
+import com.three.data_api.dm.annos.BizRequestPm
|
|
|
+import com.three.data_api.dm.annos.Doc4MethodRes
|
|
|
+import com.three.data_api.dm.constants.ThreeConstant
|
|
|
+import com.three.redis.utils.RedisUtil
|
|
|
+import org.springframework.beans.factory.annotation.Autowired
|
|
|
+
|
|
|
+class VesselStructService {
|
|
|
+
|
|
|
+
|
|
|
+ public static final String AlgVstHatchKey = "port:AlgVstHatch:"
|
|
|
+ public static final String AlgVstBayKey = "port:AlgVstBay:"
|
|
|
+ public static final String AlgVstHatchCoverKey = "port:AlgVstHatchCover:"
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisUtil redisUtil;
|
|
|
+
|
|
|
+ @BizApiMethod(matchedApis = ThreeConstant.BIZ_API_NAME, desc = "查询所有舱位信息,根据船舶结构主键查询")
|
|
|
+ @Doc4MethodRes(key = "result", desc = "舱位信息", refClasses = AlgVstHatch.class)
|
|
|
+ List<AlgVstHatch> selectHatchInfoList(@BizRequestPm(key = "body.vesselStructGkey", nullable = false, desc = "船舶结构主键") String vesselStructGkey) throws Exception {
|
|
|
+ // 查询舱位信息
|
|
|
+ List<AlgVstHatch> algVstHatchList = redisUtil.getByPrefix(AlgVstHatchKey + vesselStructGkey + ":*") as List<AlgVstHatch>
|
|
|
+ // 舱位排序
|
|
|
+ algVstHatchList.sort(new Comparator<AlgVstHatch>() {
|
|
|
+ @Override
|
|
|
+ int compare(AlgVstHatch o1, AlgVstHatch o2) {
|
|
|
+ return ((Double) o1.getStartPosM()).compareTo((Double) o2.getStartPosM());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 倍位号排序
|
|
|
+ for (AlgVstHatch hatchInfo : algVstHatchList) {
|
|
|
+ List<String> bayNoList = new ArrayList<>(hatchInfo.getBayNos())
|
|
|
+ Collections.sort(bayNoList);
|
|
|
+ hatchInfo.setBayNos(bayNoList as Set<String>);
|
|
|
+ // 倍位信息排序
|
|
|
+ for (AlgVstBay bayInfo : hatchInfo.getBayInfos()) {
|
|
|
+ // 层号排序
|
|
|
+ List<String> tierNoList = new ArrayList<>(bayInfo.getTierNos())
|
|
|
+ Collections.sort(tierNoList);
|
|
|
+ bayInfo.setTierNos(new HashSet<String>(tierNoList));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return algVstHatchList
|
|
|
+ }
|
|
|
+
|
|
|
+ @BizApiMethod(matchedApis = ThreeConstant.BIZ_API_NAME, desc = "查询舱位所有倍位信息,根据船舶结构主键、舱位主键查询")
|
|
|
+ @Doc4MethodRes(key = "result", desc = "倍位信息", refClasses = AlgVstBay.class)
|
|
|
+ List<AlgVstBay> selectBayInfoList(@BizRequestPm(key = "body.vesselStructGkey", nullable = false, desc = "船舶结构主键") String vesselStructGkey,
|
|
|
+ @BizRequestPm(key = "body.hatchGkey", nullable = false, desc = "舱位主键,多个用英文逗号隔开") String hatchGkey) throws Exception {
|
|
|
+ String[] hatchGkeys = hatchGkey.split(",")
|
|
|
+ // 查询舱位信息
|
|
|
+ Set<String> keys = new HashSet<>()
|
|
|
+ for (String hatchGkeyTmp : hatchGkeys) {
|
|
|
+ keys.add(AlgVstHatchKey + vesselStructGkey + ":" + hatchGkeyTmp)
|
|
|
+ }
|
|
|
+ List<AlgVstHatch> algVstHatchList = redisUtil.getMulti(keys) as List<AlgVstHatch>
|
|
|
+ // 查询倍位信息
|
|
|
+ Set<String> bayKeys = new HashSet<>()
|
|
|
+ for (AlgVstHatch algVstHatch : algVstHatchList) {
|
|
|
+ for (AlgVstBay bayInfo : algVstHatch.getBayInfos()) {
|
|
|
+ bayKeys.add(AlgVstBayKey + vesselStructGkey + ":" + bayInfo.getGkey())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<AlgVstBay> algVstBayList = redisUtil.getMulti(bayKeys) as List<AlgVstBay>
|
|
|
+ // 倍位信息排序
|
|
|
+ for (AlgVstBay bayInfo : algVstBayList) {
|
|
|
+ // 层号排序
|
|
|
+ List<String> tierNoList = new ArrayList<>(bayInfo.getTierNos())
|
|
|
+ Collections.sort(tierNoList);
|
|
|
+ bayInfo.setTierNos(new LinkedHashSet<>(tierNoList));
|
|
|
+ // 排信息排序
|
|
|
+ List<AlgVstRow> rowInfoList = bayInfo.getRows()
|
|
|
+ rowInfoList.sort(new Comparator<AlgVstRow>() {
|
|
|
+ @Override
|
|
|
+ int compare(AlgVstRow o1, AlgVstRow o2) {
|
|
|
+ return ((Integer) o1.getSeq()).compareTo((Integer) o2.getSeq())
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 排号顺序
|
|
|
+ Set<String> rowNos = new LinkedHashSet<>();
|
|
|
+ for (AlgVstRow rowInfo : rowInfoList) {
|
|
|
+ rowNos.add(rowInfo.getNo())
|
|
|
+ }
|
|
|
+ bayInfo.setRowNos(rowNos)
|
|
|
+ }
|
|
|
+ // 倍信息排序
|
|
|
+ algVstBayList.sort(new Comparator<AlgVstBay>() {
|
|
|
+ @Override
|
|
|
+ int compare(AlgVstBay o1, AlgVstBay o2) {
|
|
|
+ return o1.getNo().compareTo(o2.getNo())
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return algVstBayList
|
|
|
+ }
|
|
|
+}
|