SpringBosent框架

1.代码示例

/**
     * 查询合同释放额度历史查询
     *
     * @param dctx    适配器
     * @param context 上下文
     * @return 结果
     * @throws BusinessException 异常
     * @author hanyu
     * @see [类、类#方法、类#成员]
     */
    public static Map<String, Object> queryContractHistoryList(DispatchContext dctx, Map<String, Object> context)
            throws BusinessException {
        Debug.logInfo("=== ===enter queryContractHistoryList=== ===" + context, MODULE);

        String contractNo = (String) context.get(Fields.CONTRACT_NO);

        GenericDelegator delegator = (GenericDelegator) dctx.getDelegator();
        Map<String, Object> fields = FastMap.newInstance();
        fields.put(Fields.CONTRACT_NO, contractNo);

        List<String> orderBy = FastList.newInstance();
        orderBy.add(Fields.CREATED_STAMP);

        EntityExpr entityCondition = DBOperatorUtils.getEntityExpr(fields);

        FastSet<String> fieldsToSelect = FastSet.newInstance();
        fieldsToSelect.add(Fields.CREATED_STAMP);//创建时间
        fieldsToSelect.add(Fields.OWNER_PARTY_ID);//经销商编号
        fieldsToSelect.add(Fields.OWNER_PARTY_NAME);//经销商名称
        fieldsToSelect.add(Fields.FROM_DATE);//开始日期
        fieldsToSelect.add(Fields.THRU_DATE);//结束日期
        fieldsToSelect.add(Fields.CONTRACT_START_DATE);//合同开始日期
        fieldsToSelect.add(Fields.CONTRACT_END_DATE);//合同结束日期
        fieldsToSelect.add(Fields.CONFIRM_FACILITY);//释放额度
        fieldsToSelect.add(Fields.STATUS_ID);

        GenericValue msg = null;

        BigDecimal nowFacTotal = BigDecimal.ZERO;

        try {
            PagingList pagingList = delegator.findPartialListSingleTable(Fields.FACILITY_MSG,
                    entityCondition,
                    null,
                    fieldsToSelect,
                    null,
                    null,
                    1,
                    20);

            if (UtilValidate.isEmpty(pagingList.getResult())) {
                return ServiceUtil.returnSuccess();
            }

            for (GenericValue gv : pagingList.getResult()) {
                String statusId = (String) gv.get(Fields.STATUS_ID);
                if (statusId.equals(Fields.FAC_CREATE) || statusId.equals(Fields.FAC_PAUSE)
                        || statusId.equals(Fields.FAC_APPROVE)) {
                    nowFacTotal = nowFacTotal.add(gv.getBigDecimal(Fields.CONFIRM_FACILITY));
                }
            }

            msg = pagingList.getResult().get(0);
        } catch (GenericEntityException e) {
            Debug.logError(e, MODULE);
            throw new BusinessException(FacilityErrorUtil.getInternationalErrorMsg(FacilityErrorCode.ERROR_67313,
                    UtilMisc.toMap(Fields.TABLE, Fields.FACILITY_MSG)));
        }

        //创建临时list
        List<Map<String, Object>> tempList = new ArrayList<>();


        //根据合同号查询历史记录表
        List<Map<String, Object>> historyList = FacHistoryQueryHelper.queryFacHistoryList(dctx, context);
        //添加调减终止的变动记录
        for (Map<String, Object> hisMap : historyList) {
            Map<String, Object> tempMap = new HashMap<>();
            tempMap.put(Fields.OWNER_PARTY_ID, msg.get(Fields.OWNER_PARTY_ID));
            tempMap.put(Fields.OWNER_PARTY_NAME, msg.get(Fields.OWNER_PARTY_NAME));
            tempMap.put(Fields.CHANGE_TIME, hisMap.get(Fields.MODIFY_DATE));
            tempMap.put(Fields.CHANGE_VALUE, new BigDecimal((String) hisMap.get(Fields.REMARK_ONE)));
            tempList.add(tempMap);
        }

        //对tempList里的内容按照变动时间排序
        if (UtilValidate.isNotEmpty(tempList)) {
            Collections.sort(tempList, new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    String time1 = (String) o1.get(Fields.CHANGE_TIME);
                    String time2 = (String) o2.get(Fields.CHANGE_TIME);
                    return -time1.compareTo(time2);
                }
            });
        }

        //设置返回list
        List<Map<String, Object>> facList = new ArrayList<>();

        //计算变动后额度
        if (UtilValidate.isNotEmpty(tempList)) {
            for (int i = 0; i < tempList.size(); i++) {
                Map<String, Object> changeMap = new HashMap<>();
                changeMap.putAll(tempList.get(i));

                BigDecimal curFacTotal = nowFacTotal;
                curFacTotal = nowFacTotal;
                BigDecimal changeVal = new BigDecimal(changeMap.get(Fields.CHANGE_VALUE).toString());
                nowFacTotal = nowFacTotal.subtract(changeVal);

                changeMap.put(Fields.FAC_TOTAL, curFacTotal);
                changeMap.put("seqNo", String.valueOf(i + 1));
                facList.add(changeMap);
            }
        }
        Map<String, Object> returnMap = ReturnMapUtil.getSuccessMap();
        returnMap.put(Fields.FAC_LIST, facList);
        returnMap.put(Fields.TOTAL_NO, String.valueOf(facList.size()));

        Debug.logInfo("=== ===exit queryContractHistoryList=== ===", MODULE);
        return returnMap;
    }

在这里插入图片描述
在这里插入图片描述
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)–> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType=“Integer”
defaultValue:参数的默认值

2.@HystrixCommand 注解 熔断、服务降级
所谓熔断就是说在调用服务时,在一定的时间内,调用失败的次数达到了一定的比例,调用方会认为服务处于不可用的状态,会组织后续的请求继续发送到服务方
默认请求失败,避免了服务器资源的过度消耗

但是这种机制不会一直持续下去,默认过一段时间会将接下来的一条请求放行(通过注解的参数设置),如果此条请求能够成功返回则表明服务可用,熔断机制结束,否则继续维持熔断状态。与之一起使用的操作有服务降级,指的是当发生熔断时,进行的后续操作,比如改变调用方式或者向上级抛出异常信息等等
eg:如图,当调用失败时候会进行服务降级,调用箭头处方法

在这里插入图片描述
1.通过feign客户端调用服务,可以使用feign内置的Hystrix功能,注意需要在配置文件中开启此功能
feign.hystrix.enabled=true

在这里插入图片描述
在项目启动类上需要加注解@EnableCircuitBreaker

在这里插入图片描述
3. @ApiOperation注解
@ApiOperation不是spring自带的注解是swagger里的
com.wordnik.swagger.annotations.ApiOperation

Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目
实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,
同时swagger-ui还可以测试spring restful风格的接口功能。

什么是Ofbiz
是一个开源的,基于J2EE和XML规范的,用于构建大型企业级、跨平台、跨数据库、跨应用服务器的多层、
分布式电子上午类WEB应用的框架
OFBIZ所提供的系统框架,是一个纯Java的应用程序。框架提供的接口十分的完备,例如核心部件实体引擎,早期版本就有,已经十分的成熟。通过实体引擎,用户不用直接操纵数据库,建立库表、查询、视图、触发器等都可以通过写XML配置文件来完成。也有人提出,实体引擎不能够处理复杂的SQL查询,实际上,一方面这种复杂的SQL查询很少遇到,另一方面实体引擎也同样允许你用SQL代码来操纵这种复杂的查询

Ofbiz的MVC模式实现
Ofbiz最大的价值,也许就是它不仅仅是一个技术框架,更是一个实现企业应用得很好的业务框架。它的MVC模式不仅仅是Web层,而是贯穿于业务层和数据层,每一层都有出色的控制器

数据层的控制器 (Entity Engine)
实体引擎是Ofbiz最有价值、最核心的、也是最稳定的一个数据层控制器,通过它基本不用编码或很少编码就可以访问数据层。Ofbiz提供了用XML些配置文件的方法来操纵数据。

逻辑层的控制器 (Service Engine)
服务引擎是Ofbiz的另一个核心组件。Ofbiz只有这两个核心组件。实体引擎代表业务数据,而服务引擎代表了业务逻辑

Web层控制器 (Control Servlet, JPublish, etc)
Web层控制器的核心是Control Servlet。和Struts一样,Web层的流控制器的配置文件也是一个XML文件。

Bosent实体
一、Entity Engine屏蔽了数据库访问的很多细节,通过XML配置文件定义描述实体,实体引擎自动维护实体 至数据库的所有细节
二、支持主流数据库,包括Oracle、MySql、MS SQL、PostgreSql等 三、Bosent实体引擎与其他的ORM框架最大的不同,是Bosent只有一个GenericValue对象,不像其它ORM 框架,要定义各种不同类型的,防止产生过多的实体对象,避免产生类爆炸。
四、Bosent的GenericValue对象不同于其它ORM框架定义的实体对象,它没有getter和setter方法,全部通 过put(key,value)的形式来设置属性的值,保持最大的灵活性。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值