Java 實戰(zhàn)范例之進銷存管理系統(tǒng)的實現(xiàn)
一、項目簡述
本系統(tǒng)功能包括: 庫存管理,入庫管理,出庫管理,往來管理,基礎(chǔ)資料, 系統(tǒng)管理,消息中心,系統(tǒng)監(jiān)控等等。
二、項目運行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX ( Webstorm也 行)+ Eclispe ( IntelliJ IDEA ,Eclispe,MyEclispe , Sts都支持)。
項目技術(shù): Springboot + Maven + Mybatis-plus+ Vue + Redis + Shiro + Druid + logback 組成,B/S模螢;,其他:fastjson, poi, Swagger-ui, quartz, lombok (簡化代碼)等
采購發(fā)票登記代碼:
/** * @Description: 采購發(fā)票登記 * @Author: jeecg-boot * @Version: V1.0 */ @Api(tags="采購發(fā)票登記") @RestController @RequestMapping("/finance/finPurInvoice") @Slf4j public class FinPurInvoiceController { @Autowired private IFinPurInvoiceService finPurInvoiceService; @Autowired private IFinPurInvoiceEntryService finPurInvoiceEntryService; /** * 分頁列表查詢 * * @param finPurInvoice * @param pageNo * @param pageSize * @param req * @return */ @AutoLog(value = "采購發(fā)票登記-分頁列表查詢") @ApiOperation(value="采購發(fā)票登記-分頁列表查詢", notes="采購發(fā)票登記-分頁列表查詢") @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 = "采購發(fā)票登記-添加") @ApiOperation(value="采購發(fā)票登記-添加", notes="采購發(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 = "采購發(fā)票登記-編輯") @ApiOperation(value="采購發(fā)票登記-編輯", notes="采購發(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("未找到對應(yīng)數(shù)據(jù)"); } finPurInvoiceService.updateMain(finPurInvoice, finPurInvoicePage.getFinPurInvoiceEntryList()); return Result.ok("編輯成功!"); } /** * 通過id刪除 * * @param id * @return */ @AutoLog(value = "采購發(fā)票登記-通過id刪除") @ApiOperation(value="采購發(fā)票登記-通過id刪除", notes="采購發(fā)票登記-通過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 = "采購發(fā)票登記-批量刪除") @ApiOperation(value="采購發(fā)票登記-批量刪除", notes="采購發(fā)票登記-批量刪除") @DeleteMapping(value = "/deleteBatch") public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.finPurInvoiceService.delBatchMain(Arrays.asList(ids.split(","))); return Result.ok("批量刪除成功!"); } /** * 通過id查詢 * * @param id * @return */ @AutoLog(value = "采購發(fā)票登記-通過id查詢") @ApiOperation(value="采購發(fā)票登記-通過id查詢", notes="采購發(fā)票登記-通過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("未找到對應(yīng)數(shù)據(jù)"); } return Result.ok(finPurInvoice); } /** * 通過id查詢 * * @param id * @return */ @AutoLog(value = "明細通過主表ID查詢") @ApiOperation(value="明細主表ID查詢", notes="明細-通主表ID查詢") @GetMapping(value = "/queryFinPurInvoiceEntryByMainId") public Result<?> queryFinPurInvoiceEntryListByMainId(@RequestParam(name="id",required=true) String id) { List<FinPurInvoiceEntry> finPurInvoiceEntryList = finPurInvoiceEntryService.selectByMainId(id); return Result.ok(finPurInvoiceEntryList); } /** * 導出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 獲取導出數(shù)據(jù) List<FinPurInvoice> queryList = finPurInvoiceService.list(queryWrapper); // 過濾選中數(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 導出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); mv.addObject(NormalExcelConstants.FILE_NAME, "采購發(fā)票登記列表"); mv.addObject(NormalExcelConstants.CLASS, FinPurInvoicePage.class); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("采購發(fā)票登記數(shù)據(jù)", "導出人:"+sysUser.getRealname(), "采購發(fā)票登記")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } /** * 通過excel導入數(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();// 獲取上傳文件對象 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("文件導入成功!數(shù)據(jù)行數(shù):" + list.size()); } catch (Exception e) { log.error(e.getMessage(),e); return Result.error("文件導入失敗:"+e.getMessage()); } finally { try { file.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } } return Result.ok("文件導入失?。?); } @AutoLog(value = "采購發(fā)票登記-通過id審核") @ApiOperation(value="采購發(fā)票登記-通過id審核", notes="采購發(fā)票登記-通過id審核") @PutMapping(value = "/approve") public Result<?> approve(@RequestBody JSONObject json) { finPurInvoiceService.approve(json.getString("id")); return Result.ok("審核通過!"); } }
到此這篇關(guān)于Java 實戰(zhàn)范例之進銷存管理系統(tǒng)的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java 進銷存管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java 實戰(zhàn)項目之精品養(yǎng)老院管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)項目之精美物流管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)練手項目之校園超市管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)項目之CRM客戶管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)項目錘煉之嘟嘟健身房管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)練手項目之酒店管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)項目之倉庫管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)項目錘煉之小區(qū)物業(yè)管理系統(tǒng)的實現(xiàn)流程
- Java 實戰(zhàn)范例之員工管理系統(tǒng)的實現(xiàn)
- Java?實戰(zhàn)項目之學生信息管理系統(tǒng)的實現(xiàn)流程
相關(guān)文章
關(guān)于Object中equals方法和hashCode方法判斷的分析
今天小編就為大家分享一篇關(guān)于關(guān)于Object中equals方法和hashCode方法判斷的分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01MybatisPlus中如何調(diào)用Oracle存儲過程
這篇文章主要介紹了MybatisPlus中如何調(diào)用Oracle存儲過程的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05詳解SpringBoot 創(chuàng)建定時任務(wù)(配合數(shù)據(jù)庫動態(tài)執(zhí)行)
本篇文章主要介紹了SpringBoot 創(chuàng)建定時任務(wù)(配合數(shù)據(jù)庫動態(tài)執(zhí)行),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作示例
這篇文章主要介紹了Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作,結(jié)合實例形式分析了Java二叉樹的創(chuàng)建、遍歷、計算等相關(guān)算法實現(xiàn)技巧,需要的朋友可以參考下2019-03-03Java使用Callable接口實現(xiàn)多線程的實例代碼
這篇文章主要介紹了Java使用Callable接口實現(xiàn)多線程的實例代碼,實現(xiàn)Callable和實現(xiàn)Runnable類似,但是功能更強大,具體表現(xiàn)在可以在任務(wù)結(jié)束后提供一個返回值,Runnable不行,call方法可以拋出異,Runnable的run方法不行,需要的朋友可以參考下2023-08-08