大厂JAVA项目规范范文
创始人
2025-06-01 04:31:21
0

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

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 {@Autowiredprivate WorkloadDetailService workloadDetailService;@ApiOperation("工作量汇总明细查询")@PostMapping(value = "/queryWorkloadSummaryDetail")@ResponseBodypublic 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);
}

相关内容

热门资讯

新城控股王晓松:2026年公司... 中经记者 杨让晨 石英婧 上海报道“2026年,是国家‘十五五’规划的开局之年,也是新城的关键一年。...
新势力车企2025年成绩单:大... 红星资本局1月1日消息,2026年1月1日,新势力车企陆续公布了2025年全年的销售成绩单。红星资本...
《燕梳师院》盘点2025年中国... 2025年,中国保险业迈入高质量发展的关键转型期,“十五五”规划的开局为行业注入新动能。在科技赋能、...
《燕梳师院》发布2025年世界... 2025年,全球保险业在政策调控、市场整合、科技转型与风险应对等多维度迎来深度变革。从主要经济体的监...
岁末年初,国家拿出真金白银! 文/王恩博岁序更替之际,市场高度关注中国经济政策如何衔接。抓住这一关键时间窗口,近期各方面靠前发力,...
中国医药两家子公司补税6521... 中经记者 晏国文 卢志坤 北京报道2026年1月1日,中国医药(600056.SH)披露,下属全资子...
中国同辐子公司补缴税款2.71... 中经记者 晏国文 卢志坤 北京报道2025年12月31日,港股上市公司中国同辐(1763.HK)披露...
中国军号发布军事演习主题海报《... 本文转自【中国军号微博】; 中国人民解放军打“独”促统决不手软,将持续组织反分裂反干涉行动,坚决维护...
利空突袭!暴跌50%! 美股及印度股市,均有突发消息传来!北京时间2026年1月1日凌晨,在美股市场上,生物制药公司Corc...
两度出手全资控矿!盛新锂能拟2... 微成都报道12月30日晚间,盛新锂能(002240.SZ)发布公告称,公司拟通过全资子公司四川盛屯锂...