大厂JAVA项目规范范文

一、前言,首先大致说下,大公司的基本流程。

1、需求评审:基本会用一人天来讲述大致需求,并分配需求到每个人头上

2、开发设计:需求下来后,根据自己的需求,到需求文档中查找自己对应的需求,根据自己的需求,做出对应的开发设计(一般以画图的形式,例如需求简单点的可以使用:EdrawMax,复杂的一般会使用时序图:Visual paradigm),开发设计里面会细节到开发的每一个业务流程步骤,如果开发设计出现问题,那么编写业务代码也将会是错的,所以这一步很重要很重要

3、设计评审:开发设计完成后,会组织一个会议,公司熟悉业务的大佬会过一下每个人的开发设计,若没问题则进入开发。有问题则标注问题点,会议结束后,将标注问题的地方修改好,重新过一下开发设计,没问题则再进行开发

4、代码评审:根据开发设计流程,一步一步编写业务代码,手上所有需求完成后,提交到代码至对应的分支(此时代码不会被合入,需要进行代码评审),评审若出现代码规范问题或者业务逻辑问题,则会被指出,并对问题点进行备注,后面所有代码评审完后,再进行修改。说明:若修改的地方不多,一般会被先合入到对应的分支中,再进行修改,修改完成再提交代码。反之,修改的地方比较多,则需要撤回代码,这个建议提前做好备份(我个人习惯,因人而异)

5、功能测试:代码提交并被合入到对应的分支后,需要和测试人员进行对应的功能点测试联调。一般是自己在本地先测试,测试没什么问题后,会通过jenkins部署到测试环境,测试环境多种场景测试没问题,测试人员会再指定的时间进行项目发版

6、修改BUG:测试人员在测试环境测试功能可能会出现BUG,自己可能测了很多个应用场景没问题,但是测试人员使用的应用场景可能会比你自测的场景多一些,所以就可能出现某个场景的BUG出现,这时候就需要修改对应的功能点,并重新提交代码,重新测试,测试所有功能点没问题后,才算通过

大致就那么多了吧,废话不多说了,上代码-------------->

二、代码部分

声明:这里只提供参考代码规范,代码规范有几点基本要求:

① 参数不得超过3个参数,超过3个参数必须用对象进行封装

② 命名规范,不得用中文去命名,可以对名字进行翻译后进行命名,且必须遵守驼峰的命名规范

③ 三层架构不可出现数字或字符串,若需要则需要单独再一个文件中编写,再三层代码中进行调用

④ 代码复用,使用前全局搜索是否已存在,在进行添加,不然项目代码过于冗余

Controller层:

package com.bat.outsoursing.workload.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * 工作量明细和汇总明细接口
 * 查询,导出
 *
 * @author liulei 工号
 * @since 日期 上午11:03
 */
@Api(tags = "工作量明细和汇总明细")
@Slf4j
@RestController
@RequestMapping("/workloadDetail")
public class WorkloadDetailController {
    @Autowired
    private WorkloadDetailService workloadDetailService;
    
    @ApiOperation("工作量汇总明细查询")
    @PostMapping(value = "/queryWorkloadSummaryDetail")
    @ResponseBody
    public BaseResp queryWorkloadSummaryDetail(@ApiParam(value = "查询参数", required = true) @RequestBody QueryParam queryParam) {

        // 获取分页后的结果
        PageRows voPageRows = workloadDetailService.workloadSummaryDetailBOList2VOList(queryParam);
        return BaseResp.ok(voPageRows);

    }
}    

Service层:

package com.bat.outsoursing.workload.service;

import org.springframework.web.multipart.MultipartFile;
/**
 * 工作量明细和汇总明细接口
 * 查询,导出
 * @author liulei 工号
 * @since 时间 上午11:32
 */
public interface WorkloadDetailService {

    /**
     * 汇总明细BO转VO
     *
     * @param queryParam
     * @return
     */
    PageRows workloadSummaryDetailBOList2VOList(QueryParam queryParam);
    
}

实现类:

package com.bat.outsoursing.workload.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.fastjson.JSON;import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.curator.shaded.com.google.common.collect.Maps;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;

/**
 * 工作量明细和汇总明细
 * 查询,导出,删除 接口
 *
 * @author liulei 工号
 * @since 日期 上午11:32
 */
@Slf4j
@Service("DOMESTIC_WORKLOAD_APPLICATION")
public class WorkloadDetailServiceImpl extends AbstractImportExcelStrategy implements WorkloadDetailService {
@Override
public PageRows workloadSummaryDetailBOList2VOList(QueryParam queryParam) {
    PageRows pageRows = PageUtils.doPageQuery(queryParam.getPageNum(), queryParam.getPageSize(),
            anything -> queryWorkloadSummaryDetail(queryParam));
    //转换vo对象并返回
    PageRows workloadSummaryDetailVOPageRows = new PageRows<>();
    workloadSummaryDetailVOPageRows.setTotal(pageRows.getTotal());
    workloadSummaryDetailVOPageRows.setCurrent(pageRows.getCurrent());
    workloadSummaryDetailVOPageRows.setRows(workloadSummaryDetailConverter.workloadSummaryDetailBOList2VOList(pageRows.getRows()));
    return workloadSummaryDetailVOPageRows;
}
/**
 * 查询拼接后的汇总明细List
 *
 * @param queryParam
 * @return
 */
private List queryWorkloadSummaryDetail(QueryParam queryParam) {
    // 根据工作量确认单id查询明细
    List workloadSummaryDetailBOList = workloadDetailDAO.queryWorkloadSummaryDetail(queryParam.getParam());
    // 根据工作量确认单id查询明细
    if (CollectionUtils.isEmpty(workloadSummaryDetailBOList)) {
        return workloadSummaryDetailBOList;
    }

    // 从明细数据中获取prId并存储到list集合
    List prIdList = workloadSummaryDetailBOList.stream().map(WorkloadSummaryDetailBO::getPrId).collect(Collectors.toList());
    // 根据prIdList查询对应的所有采购区域
    List purchasingAreaBOList = workloadDetailDAO.queryPurchasingAreaNames(prIdList);
    if (CollectionUtils.isEmpty(purchasingAreaBOList)) {
        return workloadSummaryDetailBOList;
    }

    // 采购区域实例转map对象
    Map purchasingAreaBOListToMap = getPurchasingAreaBOListToMap(purchasingAreaBOList);

    // 汇总明细拼接采购区域
    for (WorkloadSummaryDetailBO workloadSummaryDetailBO : workloadSummaryDetailBOList) {
        PurchasingAreaBO purchasingAreaBO = purchasingAreaBOListToMap.get(workloadSummaryDetailBO.getPrId());
        if (null != purchasingAreaBO) {
            workloadSummaryDetailBO.setDescriptionEn(purchasingAreaBO.getDescriptionEn());
            workloadSummaryDetailBO.setDescriptionZn(purchasingAreaBO.getDescriptionZh());
        }
    }

    return workloadSummaryDetailBOList;
}
/**
 * 采购区域实例转map对象
 *
 * @param purchasingAreaBOList
 * @return
 */
private Map getPurchasingAreaBOListToMap(List purchasingAreaBOList) {
    if (CollectionUtils.isEmpty(purchasingAreaBOList)) {
        return Maps.newHashMap();
    }
    return purchasingAreaBOList.stream().filter(purchasingAreaBO -> purchasingAreaBO.getPrId() > 0).collect(Collectors.toMap(PurchasingAreaBO::getPrId, t -> t, (v1, v2) -> v2));
}
}

DAO层:

package com.bat.outsoursing.workload.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 工作量明细和汇总明细
 * 查询,导出,删除 接口
 *
 * @author liulei 工号
 * @since 日期 上午11:34
 */
@Mapper
public interface WorkloadDetailDAO {
/**
 * 根据工作量确认单id查询汇总明细
 *
 * @param applyOid
 * @return
 */
List queryWorkloadSummaryDetail(Long applyOid);
/**
 * 根据prIdList查询对应的所有采购区域
 *
 * @param prIdList
 * @return
 */
List queryPurchasingAreaNames(@Param("prIdList") List prIdList);
}

xxDAO.xml:





    
    
        
        
        
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
        
 
  

BO实体类(用于Service业务层,这里只介绍BO,同时还有PO,DTO,这里就不细谈了):

package com.bat.outsoursing.workload.bo;

import lombok.Data;
import java.math.BigDecimal;

/**
 * 汇总明细BO
 *
 * @author liulei 工号
 * @since 日期 下午3:38
 */
@Data
public class WorkloadSummaryDetailBO {
    /**
     * pr_id
     */
    private Long prId;

    /**
     * PO行号
     */
    private String lineNum;

    /**
     * ITEM编码
     */
    private String itemNum;

    /**
     * ITEM名称
     */
    private String itemDescription;

    /**
     * 单位
     */
    private String unit;

    /**
     * 采购区域英文
     */
    private String descriptionEn;

    /**
     * 采购区域中文
     */
    private String descriptionZn;

    /**
     * 申请数量
     */
    private BigDecimal wccConfirmNum;

}

VO实体类(用于Controller层返回,声明:BO转VO,字段一定是一致的,否则找不到):

package com.bat.outsoursing.workload.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;

/**
 * 汇总明细VO
 *
 * @author liulei 工号 
 * @since 日期 下午4:56
 */
@Data
@ToString
@ApiModel("汇总明细VO")
public class WorkloadSummaryDetailVO {

    /**
     * PO行号
     */
    @ApiModelProperty("PO行号")
    private String lineNum;

    /**
     * ITEM编码
     */
    @ApiModelProperty("ITEM编码")
    private String itemNum;

    /**
     * ITEM名称
     */
    @ApiModelProperty("ITEM名称")
    private String itemDescription;

    /**
     * 单位
     */
    @ApiModelProperty("单位")
    private String unit;

    /**
     * 采购区域英文
     */
    @ApiModelProperty("采购区域英文")
    private String descriptionEn;

    /**
     * 采购区域中文
     */
    @ApiModelProperty("采购区域中文")
    private String descriptionZn;

    /**
     * 申请数量
     */
    @ApiModelProperty("申请数量")
    private BigDecimal wccConfirmNum;
}

Converter(用于BO/PO/DTO转VO使用,至于如何转换,spring已经帮我们完成了,下面的@Mapper(componentModel="spring")就是 ):

package com.bat.outsoursing.workload.converter;

import org.mapstruct.Mapper;
import java.util.List;

/**
 * 汇总明细BO转汇总明细VO
 *
 * @author liulei 工号
 * @since 日期 下午4:56
 */
@Mapper(componentModel = "spring")
public interface WorkloadSummaryDetailConverter {
    /**
     * 汇总明细BOList转VOList
     *
     * @param workloadSummaryDetailBOList
     */
    List workloadSummaryDetailBOList2VOList(List workloadSummaryDetailBOList);
}

你可能感兴趣的:(java,开发语言)