| | |
| | | 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.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.model.TErpGoods; |
| | | import com.ruoyi.system.importExcel.TErpGoodsExcel; |
| | | import com.ruoyi.system.model.*; |
| | | import com.ruoyi.system.query.TErpGoodsQuery; |
| | | import com.ruoyi.system.service.TErpGoodsService; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.vo.TErpGoodsVO; |
| | | 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.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.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | |
| | | private final TErpGoodsService erpGoodsService; |
| | | private final TokenService tokenService; |
| | | private final TErpGoodsTypeService erpGoodsTypeService; |
| | | private final TErpGoodsUnitService erpGoodsUnitService; |
| | | private final TErpSupplierWarehousingBatchService erpSupplierWarehousingBatchService; |
| | | private final TErpSupplierWarehousingService erpSupplierWarehousingService; |
| | | private final TErpSupplierOutboundGoodsService erpSupplierOutboundGoodsService; |
| | | private final TErpMaintenanceReminderService erpMaintenanceReminderService; |
| | | |
| | | @Autowired |
| | | public TErpGoodsController(TErpGoodsService erpGoodsService, TokenService tokenService) { |
| | | public TErpGoodsController(TErpGoodsService erpGoodsService, TokenService tokenService, TErpGoodsTypeService erpGoodsTypeService, TErpGoodsUnitService erpGoodsUnitService, |
| | | TErpSupplierWarehousingBatchService erpSupplierWarehousingBatchService, TErpSupplierWarehousingService erpSupplierWarehousingService, |
| | | TErpSupplierOutboundGoodsService erpSupplierOutboundGoodsService, TErpMaintenanceReminderService erpMaintenanceReminderService) { |
| | | this.erpGoodsService = erpGoodsService; |
| | | this.tokenService = tokenService; |
| | | this.erpGoodsTypeService = erpGoodsTypeService; |
| | | this.erpGoodsUnitService = erpGoodsUnitService; |
| | | this.erpSupplierWarehousingBatchService = erpSupplierWarehousingBatchService; |
| | | this.erpSupplierWarehousingService = erpSupplierWarehousingService; |
| | | this.erpSupplierOutboundGoodsService = erpSupplierOutboundGoodsService; |
| | | this.erpMaintenanceReminderService = erpMaintenanceReminderService; |
| | | } |
| | | |
| | | |
| | |
| | | @ApiOperation(value = "供应商完善商品") |
| | | @PostMapping(value = "/saveDataInfo") |
| | | public R<Boolean> saveDataInfo(@RequestBody @Valid TErpGoodsInfoSaveDto dto) { |
| | | SysUser user = tokenService.getLoginUser().getUser(); |
| | | TErpGoods goods = erpGoodsService.getById(dto.getId()); |
| | | BeanUtils.copyProperties(dto,goods); |
| | | if(goods.getMaintenanceInterval()!=null){ |
| | | |
| | | List<TErpSupplierWarehousing> list = erpSupplierWarehousingService.list(new LambdaQueryWrapper<TErpSupplierWarehousing>().eq(TErpSupplierWarehousing::getGoodsId, dto.getId())); |
| | | if(!list.isEmpty()){ |
| | | List<TErpSupplierWarehousingBatch> tErpSupplierWarehousingBatches = erpSupplierWarehousingBatchService.list(new LambdaQueryWrapper<TErpSupplierWarehousingBatch>().in(TErpSupplierWarehousingBatch::getWarehousingId, list.stream().map(TErpSupplierWarehousing::getId).collect(Collectors.toList()))); |
| | | for (TErpSupplierWarehousingBatch tErpSupplierWarehousingBatch : tErpSupplierWarehousingBatches) { |
| | | List<TErpSupplierOutboundGoods> list1 = erpSupplierOutboundGoodsService.list(new LambdaQueryWrapper<TErpSupplierOutboundGoods>().eq(TErpSupplierOutboundGoods::getWarehousingBatchId, tErpSupplierWarehousingBatch.getId())); |
| | | if(!list1.isEmpty()){ |
| | | int sum = list1.stream().mapToInt(TErpSupplierOutboundGoods::getOutboundCount).sum(); |
| | | if (tErpSupplierWarehousingBatch.getWarehousingNumber()-sum>0) { |
| | | // 生成保养单 |
| | | TErpMaintenanceReminder tErpMaintenanceReminder = new TErpMaintenanceReminder(); |
| | | tErpMaintenanceReminder.setClinicSupplierId(user.getUserId().toString()); |
| | | tErpMaintenanceReminder.setMaintenanceType(1); |
| | | tErpMaintenanceReminder.setWarehousingBatchId(tErpSupplierWarehousingBatch.getId()); |
| | | Integer day = Integer.valueOf(goods.getMaintenanceInterval()); |
| | | // 当前时间+day天 |
| | | LocalDateTime time1 = LocalDateTime.now().plusDays(day); |
| | | tErpMaintenanceReminder.setMaintenanceTime(time1); |
| | | erpMaintenanceReminderService.save(tErpMaintenanceReminder); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | return R.ok(erpGoodsService.updateById(goods)); |
| | | } |
| | | |
| | |
| | | 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(); |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |