先构造抽象接口
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;
}
}