Java 實(shí)戰(zhàn)范例之進(jìn)銷存管理系統(tǒng)的實(shí)現(xiàn)
一、項(xiàng)目簡(jiǎn)述
本系統(tǒng)功能包括: 庫(kù)存管理,入庫(kù)管理,出庫(kù)管理,往來(lái)管理,基礎(chǔ)資料, 系統(tǒng)管理,消息中心,系統(tǒng)監(jiān)控等等。
二、項(xiàng)目運(yùn)行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX ( Webstorm也 行)+ Eclispe ( IntelliJ IDEA ,Eclispe,MyEclispe , Sts都支持)。
項(xiàng)目技術(shù): Springboot + Maven + Mybatis-plus+ Vue + Redis + Shiro + Druid + logback 組成,B/S模螢;,其他:fastjson, poi, Swagger-ui, quartz, lombok (簡(jiǎn)化代碼)等
采購(gòu)發(fā)票登記代碼:
/** * @Description: 采購(gòu)發(fā)票登記 * @Author: jeecg-boot * @Version: V1.0 */ @Api(tags="采購(gòu)發(fā)票登記") @RestController @RequestMapping("/finance/finPurInvoice") @Slf4j public class FinPurInvoiceController { @Autowired private IFinPurInvoiceService finPurInvoiceService; @Autowired private IFinPurInvoiceEntryService finPurInvoiceEntryService; /** * 分頁(yè)列表查詢 * * @param finPurInvoice * @param pageNo * @param pageSize * @param req * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-分頁(yè)列表查詢") @ApiOperation(value="采購(gòu)發(fā)票登記-分頁(yè)列表查詢", notes="采購(gòu)發(fā)票登記-分頁(yè)列表查詢") @GetMapping(value = {"/list", "/list/{isRubric}"}) public Result<?> queryPageList(FinPurInvoice finPurInvoice, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<FinPurInvoice> queryWrapper = QueryGenerator.initQueryWrapper(finPurInvoice, req.getParameterMap()); Page<FinPurInvoice> page = new Page<FinPurInvoice>(pageNo, pageSize); IPage<FinPurInvoice> pageList = finPurInvoiceService.page(page, queryWrapper); return Result.ok(pageList); } /** * 添加 * * @param finPurInvoicePage * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-添加") @ApiOperation(value="采購(gòu)發(fā)票登記-添加", notes="采購(gòu)發(fā)票登記-添加") @PostMapping(value = "/add") public Result<?> add(@RequestBody FinPurInvoicePage finPurInvoicePage) { FinPurInvoice finPurInvoice = new FinPurInvoice(); BeanUtils.copyProperties(finPurInvoicePage, finPurInvoice); finPurInvoiceService.saveMain(finPurInvoice, finPurInvoicePage.getFinPurInvoiceEntryList()); return Result.ok("添加成功!"); } /** * 編輯 * * @param finPurInvoicePage * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-編輯") @ApiOperation(value="采購(gòu)發(fā)票登記-編輯", notes="采購(gòu)發(fā)票登記-編輯") @PutMapping(value = "/edit") public Result<?> edit(@RequestBody FinPurInvoicePage finPurInvoicePage) { FinPurInvoice finPurInvoice = new FinPurInvoice(); BeanUtils.copyProperties(finPurInvoicePage, finPurInvoice); FinPurInvoice finPurInvoiceEntity = finPurInvoiceService.getById(finPurInvoice.getId()); if(finPurInvoiceEntity==null) { return Result.error("未找到對(duì)應(yīng)數(shù)據(jù)"); } finPurInvoiceService.updateMain(finPurInvoice, finPurInvoicePage.getFinPurInvoiceEntryList()); return Result.ok("編輯成功!"); } /** * 通過(guò)id刪除 * * @param id * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-通過(guò)id刪除") @ApiOperation(value="采購(gòu)發(fā)票登記-通過(guò)id刪除", notes="采購(gòu)發(fā)票登記-通過(guò)id刪除") @DeleteMapping(value = "/delete") public Result<?> delete(@RequestParam(name="id",required=true) String id) { finPurInvoiceService.delMain(id); return Result.ok("刪除成功!"); } /** * 批量刪除 * * @param ids * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-批量刪除") @ApiOperation(value="采購(gòu)發(fā)票登記-批量刪除", notes="采購(gòu)發(fā)票登記-批量刪除") @DeleteMapping(value = "/deleteBatch") public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.finPurInvoiceService.delBatchMain(Arrays.asList(ids.split(","))); return Result.ok("批量刪除成功!"); } /** * 通過(guò)id查詢 * * @param id * @return */ @AutoLog(value = "采購(gòu)發(fā)票登記-通過(guò)id查詢") @ApiOperation(value="采購(gòu)發(fā)票登記-通過(guò)id查詢", notes="采購(gòu)發(fā)票登記-通過(guò)id查詢") @GetMapping(value = "/queryById") public Result<?> queryById(@RequestParam(name="id",required=true) String id) { FinPurInvoice finPurInvoice = finPurInvoiceService.getById(id); if(finPurInvoice==null) { return Result.error("未找到對(duì)應(yīng)數(shù)據(jù)"); } return Result.ok(finPurInvoice); } /** * 通過(guò)id查詢 * * @param id * @return */ @AutoLog(value = "明細(xì)通過(guò)主表ID查詢") @ApiOperation(value="明細(xì)主表ID查詢", notes="明細(xì)-通主表ID查詢") @GetMapping(value = "/queryFinPurInvoiceEntryByMainId") public Result<?> queryFinPurInvoiceEntryListByMainId(@RequestParam(name="id",required=true) String id) { List<FinPurInvoiceEntry> finPurInvoiceEntryList = finPurInvoiceEntryService.selectByMainId(id); return Result.ok(finPurInvoiceEntryList); } /** * 導(dǎo)出excel * * @param request * @param finPurInvoice */ @RequestMapping(value = {"/exportXls", "/exportXls/{isRubric}"}) public ModelAndView exportXls(HttpServletRequest request, FinPurInvoice finPurInvoice) { // Step.1 組裝查詢條件查詢數(shù)據(jù) QueryWrapper<FinPurInvoice> queryWrapper = QueryGenerator.initQueryWrapper(finPurInvoice, request.getParameterMap()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //Step.2 獲取導(dǎo)出數(shù)據(jù) List<FinPurInvoice> queryList = finPurInvoiceService.list(queryWrapper); // 過(guò)濾選中數(shù)據(jù) String selections = request.getParameter("selections"); List<FinPurInvoice> finPurInvoiceList = new ArrayList<FinPurInvoice>(); if(oConvertUtils.isEmpty(selections)) { finPurInvoiceList = queryList; }else { List<String> selectionList = Arrays.asList(selections.split(",")); finPurInvoiceList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); } // Step.3 組裝pageList List<FinPurInvoicePage> pageList = new ArrayList<FinPurInvoicePage>(); for (FinPurInvoice main : finPurInvoiceList) { FinPurInvoicePage vo = new FinPurInvoicePage(); BeanUtils.copyProperties(main, vo); List<FinPurInvoiceEntry> finPurInvoiceEntryList = finPurInvoiceEntryService.selectByMainId(main.getId()); vo.setFinPurInvoiceEntryList(finPurInvoiceEntryList); pageList.add(vo); } // Step.4 AutoPoi 導(dǎo)出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); mv.addObject(NormalExcelConstants.FILE_NAME, "采購(gòu)發(fā)票登記列表"); mv.addObject(NormalExcelConstants.CLASS, FinPurInvoicePage.class); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("采購(gòu)發(fā)票登記數(shù)據(jù)", "導(dǎo)出人:"+sysUser.getRealname(), "采購(gòu)發(fā)票登記")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } /** * 通過(guò)excel導(dǎo)入數(shù)據(jù) * * @param request * @param response * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 獲取上傳文件對(duì)象 ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); params.setNeedSave(true); try { List<FinPurInvoicePage> list = ExcelImportUtil.importExcel(file.getInputStream(), FinPurInvoicePage.class, params); for (FinPurInvoicePage page : list) { FinPurInvoice po = new FinPurInvoice(); BeanUtils.copyProperties(page, po); finPurInvoiceService.saveMain(po, page.getFinPurInvoiceEntryList()); } return Result.ok("文件導(dǎo)入成功!數(shù)據(jù)行數(shù):" + list.size()); } catch (Exception e) { log.error(e.getMessage(),e); return Result.error("文件導(dǎo)入失敗:"+e.getMessage()); } finally { try { file.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } } return Result.ok("文件導(dǎo)入失??!"); } @AutoLog(value = "采購(gòu)發(fā)票登記-通過(guò)id審核") @ApiOperation(value="采購(gòu)發(fā)票登記-通過(guò)id審核", notes="采購(gòu)發(fā)票登記-通過(guò)id審核") @PutMapping(value = "/approve") public Result<?> approve(@RequestBody JSONObject json) { finPurInvoiceService.approve(json.getString("id")); return Result.ok("審核通過(guò)!"); } }
到此這篇關(guān)于Java 實(shí)戰(zhàn)范例之進(jìn)銷存管理系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 進(jìn)銷存管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java 實(shí)戰(zhàn)項(xiàng)目之精品養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目之精美物流管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目之CRM客戶管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目錘煉之嘟嘟健身房管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)練手項(xiàng)目之酒店管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目之倉(cāng)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目錘煉之小區(qū)物業(yè)管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)范例之員工管理系統(tǒng)的實(shí)現(xiàn)
- Java?實(shí)戰(zhàn)項(xiàng)目之學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn)流程
相關(guān)文章
關(guān)于Object中equals方法和hashCode方法判斷的分析
今天小編就為大家分享一篇關(guān)于關(guān)于Object中equals方法和hashCode方法判斷的分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件
這篇文章主要介紹了如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07MybatisPlus中如何調(diào)用Oracle存儲(chǔ)過(guò)程
這篇文章主要介紹了MybatisPlus中如何調(diào)用Oracle存儲(chǔ)過(guò)程的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05詳解SpringBoot 創(chuàng)建定時(shí)任務(wù)(配合數(shù)據(jù)庫(kù)動(dòng)態(tài)執(zhí)行)
本篇文章主要介紹了SpringBoot 創(chuàng)建定時(shí)任務(wù)(配合數(shù)據(jù)庫(kù)動(dòng)態(tài)執(zhí)行),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Java實(shí)現(xiàn)二叉樹(shù)的建立、計(jì)算高度與遞歸輸出操作示例
這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹(shù)的建立、計(jì)算高度與遞歸輸出操作,結(jié)合實(shí)例形式分析了Java二叉樹(shù)的創(chuàng)建、遍歷、計(jì)算等相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-03-03SpringMVC實(shí)現(xiàn)文件上傳下載功能
這篇文章主要為大家詳細(xì)介紹了springMVC實(shí)現(xiàn)文件上傳和下載的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Java使用Callable接口實(shí)現(xiàn)多線程的實(shí)例代碼
這篇文章主要介紹了Java使用Callable接口實(shí)現(xiàn)多線程的實(shí)例代碼,實(shí)現(xiàn)Callable和實(shí)現(xiàn)Runnable類似,但是功能更強(qiáng)大,具體表現(xiàn)在可以在任務(wù)結(jié)束后提供一個(gè)返回值,Runnable不行,call方法可以拋出異,Runnable的run方法不行,需要的朋友可以參考下2023-08-08