xiejun
2023-11-10 1172444b5f2527c3e6bddce63b734fba35e5e57c
自定义流水功能增加
已修改2个文件
已添加7个文件
286 ■■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeSerialAlgorithmService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java
@@ -1,11 +1,13 @@
package com.vci.ubcs.code.vo.pagemodel;
import com.vci.ubcs.starter.revision.model.BaseModel;
/**
 * æµæ°´ç®—法类的显示信息
 * @author weidy
 * @date 2022-2-17
 */
public class CodeSerialAlgorithmVO implements java.io.Serializable{
public class CodeSerialAlgorithmVO extends BaseModel {
    /**
     * ç®—法编号
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -1438,7 +1438,45 @@
        return sb.toString();
    }
    public static String intToRomans(int num) {
    public static String convertArabicToRoman(int num) {
        int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<values.length;i++){
            while(num>=values[i]){
                num=num-values[i];
                sb.append(romans[i]);
            }
        }
        return sb.toString();
    }
    /**
     * æŠŠç½—马数字转换为阿拉伯数字
     * @param m
     * @return
     */
    public static int convertRomanToArabic(String m) {
        int graph[] = new int[400];
        graph['I'] = 1;
        graph['V'] = 5;
        graph['X'] = 10;
        graph['L'] = 50;
        graph['C'] = 100;
        graph['D'] = 500;
        graph['M'] = 1000;
        char[] num = m.toCharArray();
        int sum = graph[num[0]];
        for (int i = 0; i < num.length - 1; i++) {
            if (graph[num[i]] >= graph[num[i + 1]]) {
                sum += graph[num[i + 1]];
            } else {
                sum = sum + graph[num[i + 1]] - 2 * graph[num[i]];
            }
        }
        return sum;
    }
    public static String intToRomanTwo(int num) {
        String M[] = {"", "M", "MM", "MMM"};
        String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.vci.ubcs.code.algorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import java.util.List;
/****
 * è‡ªå®šä¹‰ç½—马流水算法自定义类
 */
@MdmSerialAlgorithm(text = "自定义罗马流水",description = "自定义罗马流水算法")
public class CustomRomanSerialAlgorithmExample {
    /**
     * ç”Ÿæˆç½—马流水号的方法
     * @return æµæ°´å·çš„信息
     */
    @MdmSerialAlgorithmMethod
    public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){
        //将数字流水转为罗马流水
        String romanValue=VciBaseUtil.convertArabicToRoman(5);
        //将罗马流水转为数字流水
        int arabicValue=VciBaseUtil.convertRomanToArabic(romanValue);
        return "";
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.vci.ubcs.code.algorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
import java.util.List;
/**
 * æµæ°´ç®—法的示例
 */
@MdmSerialAlgorithm(text = "流水算法的示例",description = "请不要使用这个类,这个类只是示例,用于查看如何编写流水算法")
public class CustomSerialAlgorithmExample {
    /**
     * ç”Ÿæˆæµæ°´å·çš„æ–¹æ³•
     * @return æµæ°´å·çš„信息
     */
    @MdmSerialAlgorithmMethod
    public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){
        return "";
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.vci.ubcs.code.annotation;
import org.springframework.stereotype.Component;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * è‡ªå®šä¹‰æµæ°´ç®—法的注解
 *    @author xiejun
  * @date 2023-11-09
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface MdmSerialAlgorithm {
    /**
     * å€¼ï¼Œå®žé™…就是这个注解所在的类的全路径
     * @return å€¼
     */
    String value() default "";
    /**
     * äº‹ä»¶çš„名称
     * @return äº‹ä»¶åç§°
     */
    String text();
    /**
     * æè¿°
     * @return æè¿°
     */
    String description() default "";
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.vci.ubcs.code.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * è‡ªå®šä¹‰æµæ°´ç®—法处理方法的注解
 * @author xiejun
 * @date 2023-11-09
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MdmSerialAlgorithmMethod {
    /**
     * å€¼
     * @return å€¼
     */
    String value() default "";
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.vo.pagemodel.CodeAllCodeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.vci.ubcs.code.service.ICodeSerialAlgorithmService;
/**
 * å…¨éƒ¨ç å€¼ æŽ§åˆ¶å™¨
 *
 * @author ludc
 * @since 2023-04-03
 */
@RestController
@AllArgsConstructor
@RequestMapping("/codeSerialAlgorithmController")
@Api(value = "自定义流水", tags = "自定义流水算法")
public class CodeSerialAlgorithmController extends BladeController {
    /**
     * ç®—法服务
     */
    @Autowired
    private ICodeSerialAlgorithmService algorithmService;
    /**
     * ç®—法的列表
     * @return ç®—法的信息
     */
    @GetMapping("/gridCodeSerialAlgorithm")
    public R<IPage<CodeSerialAlgorithmVO>> gridCodeSerialAlgorithm(){
        IPage<CodeSerialAlgorithmVO> pages= algorithmService.gridSerialAlgorithm();
        return R.data(pages);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeSerialAlgorithmService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.vci.ubcs.code.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import org.springblade.core.tool.api.R;
/**
 * æµæ°´ç®—法类
 * @author weidy
 * @date 2022-2-17
 */
public interface ICodeSerialAlgorithmService {
    /**
     * èŽ·å–æµæ°´ç®—æ³•çš„åˆ—è¡¨
     * @return æµæ°´ç®—法的信息
     */
    IPage<CodeSerialAlgorithmVO>  gridSerialAlgorithm();
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.vci.ubcs.code.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.service.ICodeSerialAlgorithmService;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import com.vci.ubcs.starter.web.util.ApplicationContextProvider;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springframework.aop.framework.Advised;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * æµæ°´ç®—法的服务
 * @author weidy
 * @date 2022-2-17
 */
@Service
public class CodeSerialAlgorithmServiceImpl implements ICodeSerialAlgorithmService {
    /**
     * èŽ·å–æµæ°´ç®—æ³•çš„åˆ—è¡¨
     *
     * @return æµæ°´ç®—法的信息
     */
    @Override
    public IPage<CodeSerialAlgorithmVO> gridSerialAlgorithm() {
        //使用主键去扫描
        String[] beanNames = ApplicationContextProvider.getApplicationContext().getBeanNamesForAnnotation(MdmSerialAlgorithm.class);
        List<CodeSerialAlgorithmVO> voList = new ArrayList<>();
        if(beanNames!=null && beanNames.length>0){
            for(String beanName : beanNames){
                Object bean = ApplicationContextProvider.getApplicationContext().getBean(beanName);
                if(bean!=null){
                    CodeSerialAlgorithmVO algorithmVO = new CodeSerialAlgorithmVO();
                    Advised advised = (Advised)bean;
                    Class<?> targetClass = advised.getTargetSource().getTargetClass();
                    algorithmVO.setClassFullName(targetClass.getName());
                    MdmSerialAlgorithm serialAlgorithm = targetClass.getDeclaredAnnotation(MdmSerialAlgorithm.class);
                    if(serialAlgorithm==null){
                        serialAlgorithm = targetClass.getAnnotation(MdmSerialAlgorithm.class);
                    }
                    if(serialAlgorithm !=null) {
                        algorithmVO.setName(serialAlgorithm.text());
                        algorithmVO.setDescription(serialAlgorithm.description());
                        algorithmVO.setId(serialAlgorithm.value());
                        if(StringUtils.isBlank(algorithmVO.getId())){
                            algorithmVO.setId(beanName);
                        }
                        voList.add(algorithmVO);
                    }
                }
            }
        }
        Query query=new Query();
        IPage<CodeSerialAlgorithmVO> queryIPage =Condition.getPage(query);
        return queryIPage;
    }
}