Bladeren bron

Merge branch 'feature/1.0.0' of github.com:ab-inbev-apac/abi-cloud-qr-platform into feature/1.0.0

tanzhongran 4 jaren geleden
bovenliggende
commit
1d82213df6

+ 3 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/BaseActiveMapper.java

@@ -21,9 +21,9 @@ public interface BaseActiveMapper extends BaseMapper<BaseActive> {
     IPage<ListActiveVO> listActivePage(IPage page, @Param("param") ListActiveReq param);
 
     /**
-     * 通过码包ID查询对应一个活动
-     * @param packageId 码包ID
+     * 通过物料ID查询对应一个活动
+     * @param materialId 物料ID
      * @return
      */
-    PackageActiveVO getPackageActive(@Param("packageId") Long packageId);
+    PackageActiveVO getPackageActive(@Param("materialId") Long materialId);
 }

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/SaveQrPackageReq.java

@@ -27,7 +27,7 @@ public class SaveQrPackageReq implements Serializable {
 	@ApiModelProperty("码包id")
 	private Long id;
 
-	@NotEmpty(message = "订单类型为空")
+	@NotNull(message = "订单类型为空")
 	@ApiModelProperty(value = "订单类型: 1-SAP订单 2-预订单")
 	private Integer orderType;
 

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ValidSAPOrderNoAndMaterialReq.java

@@ -25,4 +25,7 @@ public class ValidSAPOrderNoAndMaterialReq implements Serializable{
     @ApiModelProperty("SAP单号")
     private String sapOrderNo;
 
+    @ApiModelProperty("申请数量")
+    private Long applyNumber;
+
 }

+ 22 - 22
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetQrPackageDetailRes.java

@@ -110,28 +110,28 @@ public class GetQrPackageDetailRes implements Serializable {
 	@ApiModelProperty(value = "修改人id")
 	private Long updateBy;
 
-	@ApiModelProperty(value = "活动code(即页面上的手输的活动id)")
-	private String activeCode;
-
-	@ApiModelProperty("活动名称")
-	private String activeName;
-
-	@ApiModelProperty("活动域名")
-	private String activeUrl;
-
-	@ApiModelProperty(value = "活动类型 1-utc 2-bof 3-品质信息")
-	private Integer activeType;
-
-	@ApiModelProperty(value = "活动开始日期")
-	@JsonFormat(pattern = "yyyy-MM-dd")
-	private LocalDateTime beginTime;
-
-	@ApiModelProperty(value = "活动结束日期")
-	@JsonFormat(pattern = "yyyy-MM-dd")
-	private LocalDateTime endTime;
-
-	@ApiModelProperty(value = "多品牌名称")
-	private String brandNames;
+//	@ApiModelProperty(value = "活动code(即页面上的手输的活动id)")
+//	private String activeCode;
+//
+//	@ApiModelProperty("活动名称")
+//	private String activeName;
+//
+//	@ApiModelProperty("活动域名")
+//	private String activeUrl;
+//
+//	@ApiModelProperty(value = "活动类型 1-utc 2-bof 3-品质信息")
+//	private Integer activeType;
+//
+//	@ApiModelProperty(value = "活动开始日期")
+//	@JsonFormat(pattern = "yyyy-MM-dd")
+//	private LocalDateTime beginTime;
+//
+//	@ApiModelProperty(value = "活动结束日期")
+//	@JsonFormat(pattern = "yyyy-MM-dd")
+//	private LocalDateTime endTime;
+//
+//	@ApiModelProperty(value = "多品牌名称")
+//	private String brandNames;
 
 	@ApiModelProperty(value = "码包下载记录")
 	private List<QrPackageDownloadRecordVO> qrPackageDownloadRecordList;

+ 2 - 15
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ValidSAPOrderNoAndMaterialRes.java

@@ -19,19 +19,6 @@ import java.util.List;
 @ApiModel
 public class ValidSAPOrderNoAndMaterialRes implements Serializable {
 
-    @ApiModelProperty("码包bean列表")
-    private List<PackageBean> packageBeanList;
-
-    /**
-     * 码包bean
-     */
-    @Data
-    @NoArgsConstructor
-    @AllArgsConstructor
-    @ToString
-    @ApiModel(value = "ValidSAPOrderNoAndMaterialRes_PackageBean")
-    public static class PackageBean implements Serializable {
-        @ApiModelProperty(value = "码包id")
-        private Long id;
-    }
+    @ApiModelProperty("是否超出采购总数")
+    private Integer isOverstepNum;
 }

+ 2 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/runner/DoCheckTableStoreRunner.java

@@ -28,10 +28,9 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @version: 1.0
  * @todo:
  */
-@Component
+//@Component
 @Slf4j
-@Order()
-public class DoCheckTableStoreRunner implements ApplicationRunner {
+public class CheckTableStoreRunner implements ApplicationRunner {
 
     @Autowired
     private TableStoreUtils tableStoreUtils;

+ 65 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/runner/CustomApplicationRunner.java

@@ -1,15 +1,27 @@
 package com.abi.qms.platform.runner;
 
 import com.abi.qms.platform.infrastructure.util.RSAUtils;
+import com.abi.task.common.api.exception.BusinessException;
+import com.abi.task.common.tablestore.TableStoreUtils;
+import com.abi.task.common.tablestore.common.TableStore;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.core.annotation.Order;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.core.type.classreading.MetadataReader;
 import org.springframework.stereotype.Component;
 
 import java.security.interfaces.RSAKey;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static com.abi.qms.platform.infrastructure.constant.RsaKey.RSA_PRIVATE_KEY;
 import static com.abi.qms.platform.infrastructure.constant.RsaKey.RSA_PUBLIC_KEY;
@@ -24,8 +36,14 @@ import static com.abi.qms.platform.infrastructure.constant.RsaKey.RSA_PUBLIC_KEY
  */
 @Component
 @Slf4j
-@Order(Integer.MAX_VALUE-1)
 public class CustomApplicationRunner implements ApplicationRunner {
+
+    @Autowired
+    private TableStoreUtils tableStoreUtils;
+
+    private static AtomicInteger retryTimes = new AtomicInteger(0);
+    private static String RESOURCE_PATH = "classpath*:com/abi/qms/platform/dao/tablestore/entity/*.class";
+
     public static ConcurrentHashMap<String, RSAKey> globalRsaKeyMap = new ConcurrentHashMap<>();
     /**
      * 项目启动时  加载公钥私钥到本地缓存
@@ -37,5 +55,51 @@ public class CustomApplicationRunner implements ApplicationRunner {
         Map<String, RSAKey> keyMap = RSAUtils.getKey();
         globalRsaKeyMap.put(RSA_PUBLIC_KEY,keyMap.get(RSA_PUBLIC_KEY));
         globalRsaKeyMap.put(RSA_PRIVATE_KEY,keyMap.get(RSA_PRIVATE_KEY));
+
+        Set<TableStore> tableNames = getAllEntity();
+        Map<String,String> existTableNames = tableStoreUtils.listTables();
+        tableNames.stream()
+                .filter(o->!existTableNames.containsKey(o.tableName()))
+                .forEach(tableInfo->{
+                    log.info("检查到表名{}不存在,开始执行创建",tableInfo.tableName());
+                    long start = System.currentTimeMillis();
+                    tableStoreUtils.createTable(tableInfo.tableName(),tableInfo.primaryKeyName());
+                    log.info("表名{}创建成功,耗时{}ms",tableInfo.tableName(),(System.currentTimeMillis() -start));
+                });
+
+
+    }
+
+    private static Set<TableStore> getAllEntity(){
+        Set<TableStore> ret = Sets.newHashSet();
+        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
+        CachingMetadataReaderFactory cachingMetadataReaderFactory = new CachingMetadataReaderFactory();
+        try {
+            Resource[] resources = pathMatchingResourcePatternResolver.getResources(RESOURCE_PATH);
+            ClassLoader loader = ClassLoader.getSystemClassLoader();
+            for (Resource resource : resources) {
+                MetadataReader reader = cachingMetadataReaderFactory.getMetadataReader(resource);
+                String className = reader.getClassMetadata().getClassName();
+                Class aClass = loader.loadClass(className);
+                TableStore annotation = (TableStore) aClass.getAnnotation(TableStore.class);
+                if (ObjectUtils.isNotEmpty(annotation)){
+                    ret.add(annotation);
+                }
+            }
+        } catch (Exception e) {
+            if (retryTimes.getAndIncrement()>2){
+                log.error("TableStore 初始化检查失败",e);
+                throw new BusinessException(500,"TableStore 初始化检查失败");
+            }
+            try {
+                Thread.sleep(retryTimes.get() * 1000);
+            } catch (InterruptedException interruptedException) {
+                // Do Nothing
+            }
+            //进行当前重试
+            log.info("当前开始重试,第{}次",retryTimes.get());
+            return getAllEntity();
+        }
+        return ret;
     }
 }

+ 61 - 37
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -321,8 +321,13 @@ public class QrPackageServiceImpl implements QrPackageService {
             ValidSAPOrderNoAndMaterialReq reqValid = new ValidSAPOrderNoAndMaterialReq();
             reqValid.setMaterialId(req.getMaterialId());
             reqValid.setSapOrderNo(req.getSapOrderNo());
+            reqValid.setApplyNumber(req.getQrNumber());
             ValidSAPOrderNoAndMaterialRes validSAPOrderNoAndMaterialRes = validSAPOrderNoAndMaterial(reqValid);
-            if (Objects.nonNull(validSAPOrderNoAndMaterialRes) && CollectionUtil.isNotEmpty(validSAPOrderNoAndMaterialRes.getPackageBeanList())) {
+            if(TrueFalseEnum.TRUE.is(validSAPOrderNoAndMaterialRes.getIsOverstepNum())){
+                throw new BusinessException("该SAP订单号和物料已超额申请码包,若仍需申请需要提交额外码包申请原因");
+            }
+
+            /*if (Objects.nonNull(validSAPOrderNoAndMaterialRes) && CollectionUtil.isNotEmpty(validSAPOrderNoAndMaterialRes.getPackageBeanList())) {
                 Set<Long> validQrPackageIdSet = validSAPOrderNoAndMaterialRes.getPackageBeanList().stream().map(bean -> bean.getId()).collect(Collectors.toSet());
                 if(validQrPackageIdSet.size()>1
                 ||(isAdd && validQrPackageIdSet.size()==1)
@@ -330,7 +335,7 @@ public class QrPackageServiceImpl implements QrPackageService {
                     Long id = validSAPOrderNoAndMaterialRes.getPackageBeanList().get(0).getId();
                     throw new BusinessException("该SAP订单号和物料与码包" + id + "重复,若仍需申请需要提交额外码包申请原因");
                 }
-            }
+            }*/
         }
 
         //查询物料信息
@@ -431,12 +436,12 @@ public class QrPackageServiceImpl implements QrPackageService {
         GetQrPackageDetailRes res = PojoConverterUtils.copy(qrPackage, GetQrPackageDetailRes.class);
 
         //查询码包对应活动单条数据
-        PackageActiveVO packageActive = baseActiveMapper.getPackageActive(qrPackage.getId());
+        //PackageActiveVO packageActive = baseActiveMapper.getPackageActive(qrPackage.getMaterialId());
 
         //存在活动数据
-        if (ObjectUtils.isNotEmpty(packageActive)) {
-            getBrandCodeName(res,packageActive);
-        }
+//        if (ObjectUtils.isNotEmpty(packageActive)) {
+//            getBrandCodeName(res,packageActive);
+//        }
         return res;
     }
 
@@ -445,35 +450,36 @@ public class QrPackageServiceImpl implements QrPackageService {
      * @param res
      * @param packageActive
      */
-    private void getBrandCodeName(GetQrPackageDetailRes res,PackageActiveVO packageActive){
 
-        res.setActiveCode(packageActive.getActiveCode());
-        res.setActiveName(packageActive.getActiveName());
-        res.setActiveUrl(packageActive.getActiveUrl());
-        res.setActiveType(packageActive.getActiveType());
-        res.setBeginTime(packageActive.getBeginTime());
-        res.setEndTime(packageActive.getEndTime());
-        //多品牌名称
-        StringBuffer brandNames = new StringBuffer();
-        //查询品牌一级列表
-        QueryWrapper<BaseBrand> baseBrandQW = new QueryWrapper<>();
-        baseBrandQW.eq("brand_level",1);
-        List<BaseBrand> baseBrands = baseBrandMapper.selectList(baseBrandQW);
-        Map<String, String> brandCodeMap = baseBrands.stream().collect(Collectors.toMap(BaseBrand::getBrandCode, BaseBrand::getBrandName));
-
-        //品牌名称获取
-        String[] brandCodeArray = packageActive.getBrandCode().split(",");
-        for (String brandCode : brandCodeArray) {
-            String codeName = brandCodeMap.get(brandCode);
-            if (StringUtils.isNotBlank(codeName)) {
-                brandNames.append(codeName).append(",");
-            }
-        }
+    private void getBrandCodeName(GetQrPackageDetailRes res,PackageActiveVO packageActive){
 
-        if (brandNames.length()>0){
-            brandNames.deleteCharAt(brandNames.length()-1);
-            res.setBrandNames(brandNames.toString());
-        }
+//        res.setActiveCode(packageActive.getActiveCode());
+//        res.setActiveName(packageActive.getActiveName());
+//        res.setActiveUrl(packageActive.getActiveUrl());
+//        res.setActiveType(packageActive.getActiveType());
+//        res.setBeginTime(packageActive.getBeginTime());
+//        res.setEndTime(packageActive.getEndTime());
+//        //多品牌名称
+//        StringBuffer brandNames = new StringBuffer();
+//        //查询品牌一级列表
+//        QueryWrapper<BaseBrand> baseBrandQW = new QueryWrapper<>();
+//        baseBrandQW.eq("brand_level",1);
+//        List<BaseBrand> baseBrands = baseBrandMapper.selectList(baseBrandQW);
+//        Map<String, String> brandCodeMap = baseBrands.stream().collect(Collectors.toMap(BaseBrand::getBrandCode, BaseBrand::getBrandName));
+//
+//        //品牌名称获取
+//        String[] brandCodeArray = packageActive.getBrandCode().split(",");
+//        for (String brandCode : brandCodeArray) {
+//            String codeName = brandCodeMap.get(brandCode);
+//            if (StringUtils.isNotBlank(codeName)) {
+//                brandNames.append(codeName).append(",");
+//            }
+//        }
+//
+//        if (brandNames.length()>0){
+//            brandNames.deleteCharAt(brandNames.length()-1);
+//            res.setBrandNames(brandNames.toString());
+//        }
     }
 
     /**
@@ -615,12 +621,30 @@ public class QrPackageServiceImpl implements QrPackageService {
         qrPackageQuery.eq("sap_order_no", req.getSapOrderNo());
         qrPackageQuery.eq("is_delete", 0);
         List<QrPackage> qrPackages = qrPackageMapper.selectList(qrPackageQuery);
-
+        long num = 0;
+        //根据物料id,sap订单编号,计算历史订单总数
+        if (CollectionUtil.isNotEmpty(qrPackages)) {
+            num = qrPackages.stream().mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+        }
+        //根据物料,获取sap物料code
+        BaseMaterial baseMaterial = baseMaterialMapper.selectById(req.getMaterialId());
+        AssertUtil.isNull(baseMaterial, "物料信息不存在");
+        //入参获取sap订单表中采购数量
+        QueryWrapper<QrPackageSapOrderItem> item = new QueryWrapper<>();
+        item.eq("sap_order_no", req.getSapOrderNo());
+        item.eq("sap_material_id", baseMaterial.getMaterialCode());
+        QrPackageSapOrderItem qrPackageSapOrderItem = qrPackageSapOrderItemMapper.selectOne(item);
+        AssertUtil.isNull(qrPackageSapOrderItem, "sap订单不存在");
+        //之前采购数量+当前申请数量
+        long number = num + req.getApplyNumber();
         //构造出参
         ValidSAPOrderNoAndMaterialRes res = new ValidSAPOrderNoAndMaterialRes();
-        List<ValidSAPOrderNoAndMaterialRes.PackageBean> packageBeanList = PojoConverterUtils.copyList(qrPackages, ValidSAPOrderNoAndMaterialRes.PackageBean.class);
-        res.setPackageBeanList(packageBeanList);
-
+        //判断是否超出sap订单中的采购数量
+        if (number > qrPackageSapOrderItem.getPurchaseCount()) {
+            res.setIsOverstepNum(TrueFalseEnum.TRUE.getCode());
+        } else {
+            res.setIsOverstepNum(TrueFalseEnum.FALSE.getCode());
+        }
         return res;
     }
 

+ 14 - 14
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseActiveMapper.xml

@@ -59,20 +59,20 @@
     </select>
 
     <select id="getPackageActive" resultType="com.abi.qms.platform.dao.vo.result.PackageActiveVO">
-        SELECT
-            ba.id,
-            ba.active_code,
-            ba.active_name,
-            ba.active_url,
-            ba.active_type,
-            ba.begin_time,
-            ba.end_time,
-            ba.brand_code
-        FROM
-            base_active ba
-        LEFT JOIN base_active_qr_package_mapping bam ON ba.id = bam.active_id
-        WHERE
-        bam.qr_package_id = #{packageId} limit 1
+--         SELECT
+--             ba.id,
+--             ba.active_code,
+--             ba.active_name,
+--             ba.active_url,
+--             ba.active_type,
+--             ba.begin_time,
+--             ba.end_time,
+--             ba.brand_code
+--         FROM
+--             base_active ba
+--             left join base_active act on act.id = ba.
+--         WHERE
+--         bam.qr_package_id = #{materialId} limit 1
     </select>