抽象工厂+枚举实现业务

 先构造抽象接口

package com.yonyou.ucf.mdf.app.controller.abstractClass;

import com.yonyou.ucf.mdd.ext.bill.dto.BillDataDto;

/**
 * @author : XiaoBai
 * @date : 2023/3/1 18:34
 */
public abstract class BillNumHandle {

    /**
     * 抽象方法更新
     * @param billDataDto 通用参数
     */
    public abstract void update(BillDataDto billDataDto);
}

实现抽象接口,重写更新方法 

package com.yonyou.ucf.mdf.app.controller.abstractClass.impl;

import com.alibaba.fastjson.JSONObject;
import com.yonyou.model.billManagement.FinalPayDvanceManageDetail;
import com.yonyou.service.billManagement.ActualPayDvanceManageDetaiService;
import com.yonyou.ucf.mdd.ext.bill.dto.BillDataDto;
import com.yonyou.ucf.mdf.app.controller.abstractClass.BillNumHandle;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author : XiaoBai
 * @date : 2023/3/2 9:37
 */
@Service
public class ShiFuBillsSummaryAbstractServiceImpl extends BillNumHandle {

    @Resource
    private ActualPayDvanceManageDetaiService actualPayDvanceManageDetaiService;

    @Override
    public void update(BillDataDto billDataDto) {
        com.alibaba.fastjson.JSONArray objects = com.alibaba.fastjson.JSONArray.parseArray(billDataDto.getData().toString());
        objects.forEach(item -> {
            JSONObject jsonObject = (JSONObject) item;
            FinalPayDvanceManageDetail finalPayDvanceManageDetail = new FinalPayDvanceManageDetail();
            finalPayDvanceManageDetail.setApportionPeriod(jsonObject.getString("apportion_period"));
            finalPayDvanceManageDetail.setSummaryStatus("N");
            String[] payLegalEntities = {jsonObject.getString("pay_legal_entity")};
            finalPayDvanceManageDetail.setPayLegalEntities(payLegalEntities);
            actualPayDvanceManageDetaiService.update(finalPayDvanceManageDetail);
        });
    }
}

构造枚举类,注入实现方法,通过编号来找到具体的实现 

package com.yonyou.ucf.mdf.app.controller.enums;

import com.yonyou.ucf.mdf.app.controller.abstractClass.BillNumHandle;
import com.yonyou.ucf.mdf.app.controller.abstractClass.impl.BillSummaryAbstractServiceImpl;
import com.yonyou.ucf.mdf.app.controller.abstractClass.impl.ShiFuBillsSummaryAbstractServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.Objects;

/**
 * @author : XiaoBai
 * @date : 2023/3/1 18:29
 */
@AllArgsConstructor
public enum BillNumEnum {

    /**
     * 汇总账单单据id
     */
    BILLS_SUMMARY("66b97824List"),

    /**
     * 实付账单汇总(定稿预付账单汇总)单据ID
     */
    SHIFU_BILLS_SUMMARY("fc4bab22List"),

    ;

    /**
     * 单据编号
     */
    private String code;

    /**
     * 业务抽象类
     */
    private BillNumHandle billNumHandle;


    /**
     * 枚举注入spring的bean必须新建一个类来构造
     * 否则为null
     */
    @Component
    public static class EnumTypeServiceInjector{
        @Resource
        private BillSummaryAbstractServiceImpl billSummaryAbstractService;
        @Resource
        private ShiFuBillsSummaryAbstractServiceImpl shiFuBillsSummaryAbstractService;

        /**
         * enum赋予bean属性
         */
        @PostConstruct
        private void postConstruct(){
            BILLS_SUMMARY.setBillNumHandle(billSummaryAbstractService);
            SHIFU_BILLS_SUMMARY.setBillNumHandle(shiFuBillsSummaryAbstractService);
        }
    }

    BillNumEnum(String code){
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public BillNumHandle getBillNumHandle() {
        return billNumHandle;
    }

    public void setBillNumHandle(BillNumHandle billNumHandle) {
        this.billNumHandle = billNumHandle;
    }

    /**
     * 根据code获取当前billnum对应的业务处理
     * @param code billnum
     * @return 实现类
     */
    public static BillNumHandle match(String code) {
        if (StringUtils.isEmpty(code)) {
            throw new RuntimeException("BillNum不能为空!");
        }
        BillNumEnum[] values = BillNumEnum.values();
        BillNumHandle billNumHandle = null;
        for (BillNumEnum value : values) {
            if (Objects.equals(value.getCode(),code)) {
                billNumHandle = value.getBillNumHandle();
                break;
            }
        }
        return billNumHandle;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值