From 6d4a80b03e6d0eb590b7c3330452fabceffad470 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 05 九月 2025 16:20:35 +0800 Subject: [PATCH] 供应商erp --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 230 insertions(+), 1 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java index 3faa480..4ecd195 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java @@ -1,25 +1,56 @@ package com.ruoyi.web.controller.api; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.TErpGoodsAddDto; import com.ruoyi.system.dto.TErpGoodsInfoSaveDto; import com.ruoyi.system.dto.TErpGoodsUpdateStatusDto; +import com.ruoyi.system.importExcel.TErpGoodsExcel; import com.ruoyi.system.model.TErpGoods; +import com.ruoyi.system.model.TErpGoodsType; +import com.ruoyi.system.model.TErpGoodsUnit; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.service.TErpGoodsService; +import com.ruoyi.system.service.TErpGoodsTypeService; +import com.ruoyi.system.service.TErpGoodsUnitService; import com.ruoyi.system.vo.TErpGoodsVO; +import com.ruoyi.web.controller.tool.ImportExcelUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -37,11 +68,15 @@ private final TErpGoodsService erpGoodsService; private final TokenService tokenService; + private final TErpGoodsTypeService erpGoodsTypeService; + private final TErpGoodsUnitService erpGoodsUnitService; @Autowired - public TErpGoodsController(TErpGoodsService erpGoodsService, TokenService tokenService) { + public TErpGoodsController(TErpGoodsService erpGoodsService, TokenService tokenService, TErpGoodsTypeService erpGoodsTypeService, TErpGoodsUnitService erpGoodsUnitService) { this.erpGoodsService = erpGoodsService; this.tokenService = tokenService; + this.erpGoodsTypeService = erpGoodsTypeService; + this.erpGoodsUnitService = erpGoodsUnitService; } @@ -67,6 +102,7 @@ } TErpGoods goods = new TErpGoods(); goods.setSupplierClinicId(user.getUserId().toString()); + goods.setCreateId(user.getUserId().toString()); goods.setGoodsIdCode(dto.getGoodsIdCode()); goods.setQuasiNumber(dto.getQuasiNumber()); goods.setManufacturer(dto.getManufacturer()); @@ -116,6 +152,199 @@ return R.ok(goods); } + @ApiOperation(value = "商品管理信息导出--导出") + @PostMapping("/export") + public void listExport(@RequestBody TErpGoodsQuery query) + { + SysUser user = tokenService.getLoginUser().getUser(); + List<TErpGoodsVO> pageList = erpGoodsService.listExport(query,user); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TErpGoodsVO.class, pageList); + HttpServletResponse response = WebUtils.response(); + assert response != null; + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + ServletOutputStream outputStream = null; + try { + String fileName = URLEncoder.encode("商品管理信息导出.xls", "utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + outputStream = response.getOutputStream(); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + @ApiOperation(value = "商品管理信息导入") + @PostMapping("/importFile") + public AjaxResult importFile(@RequestParam(value = "file") MultipartFile file ) { + + SysUser user = tokenService.getLoginUser().getUser(); + JSONObject jsonObject = new JSONObject(); + ImportParams params = new ImportParams(); + params.setHeadRows(1); //表头行数 + InputStream inputStream = null; + ArrayList<String> names = new ArrayList<>(); + ArrayList<TErpGoods> tErpGoods = new ArrayList<>(); + + try { + inputStream = file.getInputStream(); + List<TErpGoodsExcel> carAnnuallyImportExcels = ExcelImportUtil.importExcel(inputStream, TErpGoodsExcel.class, params); + Set<String> collect = carAnnuallyImportExcels.stream().map(TErpGoodsExcel::getGoodsIdCode).collect(Collectors.toSet()); + if (collect.size() != carAnnuallyImportExcels.size()) { + return AjaxResult.error("导入数据中商品标识码重复"); + } + for (TErpGoodsExcel erpGoodsExcel : carAnnuallyImportExcels) { + TErpGoods goods = new TErpGoods(); + goods.setSupplierClinicId(user.getUserId().toString()); + goods.setGoodsSource(1); + + // 判空 + if(erpGoodsExcel.getGoodsName()==null || erpGoodsExcel.getGoodsName().isEmpty()){ + names.add("商品名称不能为空"); + continue; + } + if(erpGoodsExcel.getGoodsIdCode()==null || erpGoodsExcel.getGoodsIdCode().isEmpty() + || erpGoodsExcel.getQuasiNumber() ==null || erpGoodsExcel.getQuasiNumber().isEmpty() + || erpGoodsExcel.getManufacturer()==null || erpGoodsExcel.getManufacturer().isEmpty() + || erpGoodsExcel.getFormulationSpec()==null || erpGoodsExcel.getFormulationSpec().isEmpty() + || erpGoodsExcel.getPackingSpec()==null || erpGoodsExcel.getPackingSpec().isEmpty() + || erpGoodsExcel.getClinicPurchasePrice()==null|| erpGoodsExcel.getClinicPurchasePrice().isEmpty() + || erpGoodsExcel.getWarningInventory()==null|| erpGoodsExcel.getWarningInventory().isEmpty() + || erpGoodsExcel.getTypeName()==null|| erpGoodsExcel.getTypeName().isEmpty()){ + names.add(erpGoodsExcel.getGoodsName()+" :信息有误,请检查后重新提交。"); + continue; + } + goods.setGoodsName(erpGoodsExcel.getGoodsName()); + // 判断数据是否正确 + // 判断标识码是否重复 + long count = erpGoodsService.count(new QueryWrapper<TErpGoods>().eq("goods_id_code", erpGoodsExcel.getGoodsIdCode())); + if(count>0){ + names.add(erpGoodsExcel.getGoodsName() + " :标识码重复"); + continue; + } + goods.setGoodsIdCode(erpGoodsExcel.getGoodsIdCode()); + goods.setQuasiNumber(erpGoodsExcel.getQuasiNumber()); + goods.setManufacturer(erpGoodsExcel.getManufacturer()); + goods.setFormulationSpec(erpGoodsExcel.getFormulationSpec()); + goods.setPackingSpec(erpGoodsExcel.getPackingSpec()); + + // 商品类型 + TErpGoodsType one = erpGoodsTypeService.getOne(new LambdaQueryWrapper<TErpGoodsType>().eq(TErpGoodsType::getTypeName, erpGoodsExcel.getTypeName())); + if(one==null){ + names.add(erpGoodsExcel.getGoodsName() + " :商品类型不存在"); + continue; + } + goods.setTypeId(one.getId()); + + // 采购价 + try { + goods.setClinicPurchasePrice(new BigDecimal(erpGoodsExcel.getClinicPurchasePrice()).setScale(2, RoundingMode.HALF_UP)); + }catch (Exception e){ + names.add(erpGoodsExcel.getGoodsName() + " :采购价有误"); + continue; + } + // 预警库存 + try { + goods.setWarningInventory(Integer.valueOf(erpGoodsExcel.getWarningInventory())); + }catch (Exception e){ + names.add(erpGoodsExcel.getGoodsName() + " :预警库存有误"); + continue; + } + goods.setGoodsYards(erpGoodsExcel.getGoodsYards()); + try { + if(erpGoodsExcel.getMaintenanceInterval()!=null && !erpGoodsExcel.getMaintenanceInterval().isEmpty()){ + Integer i = Integer.valueOf(erpGoodsExcel.getMaintenanceInterval()); + } + }catch (Exception e){ + names.add(erpGoodsExcel.getGoodsName() + " :保养周期有误"); + continue; + } + goods.setMaintenanceInterval(erpGoodsExcel.getMaintenanceInterval()); + + try { + if(erpGoodsExcel.getLowPurchaseQuantity()!=null && !erpGoodsExcel.getLowPurchaseQuantity().isEmpty()){ + goods.setLowPurchaseQuantity(Integer.valueOf(erpGoodsExcel.getLowPurchaseQuantity())); + } + }catch (Exception e){ + names.add(erpGoodsExcel.getGoodsName() + " :最低采购数量有误"); + continue; + } + + if(erpGoodsExcel.getLowUnitName()!=null && !erpGoodsExcel.getLowUnitName().isEmpty()){ + TErpGoodsUnit one1 = erpGoodsUnitService.getOne(new LambdaQueryWrapper<TErpGoodsUnit>().eq(TErpGoodsUnit::getUnitName, erpGoodsExcel.getLowUnitName())); + if (one1 == null) { + names.add(erpGoodsExcel.getGoodsName() + " :最低采购单位有误"); + continue; + } + goods.setLowUnitId(one1.getId()); + } + + + if(erpGoodsExcel.getIsPrescriptionDrug() !=null && !erpGoodsExcel.getIsPrescriptionDrug().isEmpty()){ + if(erpGoodsExcel.getIsPrescriptionDrug().equals("是")){ + goods.setIsPrescriptionDrug(1); + }else if (erpGoodsExcel.getIsPrescriptionDrug().equals("否")){ + goods.setIsPrescriptionDrug(2); + }else { + names.add(erpGoodsExcel.getGoodsName() + " :是否为处方药有误"); + continue; + } + } + + if(erpGoodsExcel.getPackingUnitName() !=null && !erpGoodsExcel.getPackingUnitName().isEmpty()){ + TErpGoodsUnit unit = erpGoodsUnitService.getOne(new LambdaQueryWrapper<TErpGoodsUnit>().eq(TErpGoodsUnit::getUnitName, erpGoodsExcel.getPackingUnitName())); + if(unit != null){ + goods.setPackingUnitId(unit.getId()); + }else { + names.add(erpGoodsExcel.getGoodsName() + " :包装单位有误"); + continue; + } + } + + goods.setInstructionsUse(erpGoodsExcel.getInstructionsUse()); + goods.setSideEffect(erpGoodsExcel.getSideEffect()); + goods.setSimplifiedCode(erpGoodsExcel.getSimplifiedCode()); + goods.setDosageForm(erpGoodsExcel.getDosageForm()); + goods.setUsageClassification(erpGoodsExcel.getUsageClassification()); + goods.setProductBrand(erpGoodsExcel.getProductBrand()); + goods.setPlaceOfOrigin(erpGoodsExcel.getPlaceOfOrigin()); + goods.setIngredient(erpGoodsExcel.getIngredient()); + goods.setTrait(erpGoodsExcel.getTrait()); + goods.setIndication(erpGoodsExcel.getIndication()); + goods.setTaboo(erpGoodsExcel.getTaboo()); + goods.setPrecautions(erpGoodsExcel.getPrecautions()); + goods.setInteraction(erpGoodsExcel.getInteraction()); + goods.setStorage(erpGoodsExcel.getStorage()); + tErpGoods.add( goods); + } + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("记录导入失败!"); + }finally { + try { + inputStream.close(); + } catch (IOException e) { + throw new ServiceException(e.getMessage()); + } + } + if(names.size()>0){ + return AjaxResult.error("导入失败记录如下:",names); + } + erpGoodsService.saveBatch(tErpGoods); + return AjaxResult.success(); + + } + } -- Gitblit v1.7.1