From c8e080d65e26158ea62c98548a11e9aa75c2112e Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 26 九月 2025 18:18:13 +0800 Subject: [PATCH] 诊所erp --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 159 insertions(+), 5 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java index 407809b..c3de1af 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java @@ -1,19 +1,22 @@ package com.ruoyi.system.service.impl; 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.BaseModel; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.dto.AddProcurementDto; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; +import com.ruoyi.system.service.TErpGoodsService; +import com.ruoyi.system.service.TErpProcurementGoodsService; import com.ruoyi.system.service.TErpProcurementService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.system.vo.TErpProcurementDetailNextVo; -import com.ruoyi.system.vo.TErpProcurementDetailVo; -import com.ruoyi.system.vo.TErpProcurementVo; -import com.ruoyi.system.vo.ValidityPeriodWarningVo; +import com.ruoyi.system.vo.*; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; @@ -25,7 +28,10 @@ import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.net.ssl.SSLContext; @@ -35,10 +41,12 @@ import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -66,6 +74,18 @@ @Resource private SysUserMapper sysUserMapper; + + @Resource + private TErpGoodsMapper erpGoodsMapper; + + @Resource + private TErpGoodsTypeMapper erpGoodsTypeMapper; + + @Resource + private TErpGoodsUnitMapper erpGoodsUnitMapper; + + @Autowired + private TErpProcurementGoodsService erpProcurementGoodsService; @@ -104,7 +124,7 @@ } List<String> ids = list.stream().map(TErpProcurementVo::getId).collect(Collectors.toList()); List<TErpProcurementGoods> tErpProcurementGoods = erpProcurementGoodsMapper.selectList - (new LambdaQueryWrapper<TErpProcurementGoods>().in(TErpProcurementGoods::getProcurementId, ids).eq(TErpProcurementGoods::getSupplierId, supplierClinicId)); + (new LambdaQueryWrapper<TErpProcurementGoods>().in(TErpProcurementGoods::getProcurementId, ids)); List<TSysCommission> tSysCommissions =new ArrayList<>(); if(!tErpProcurementGoods.isEmpty()){ List<String> collect = tErpProcurementGoods.stream().map(TErpProcurementGoods::getId).collect(Collectors.toList()); @@ -206,4 +226,138 @@ return tErpProcurementVo; } + @Override + public PageInfo<TErpGoods> pageGoodsPageList(TErpGoodsQuery query, SysUser user) { + PageInfo<TErpGoods> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + PageInfo<TErpGoods> p =erpGoodsMapper.selectPage(pageInfo,new LambdaQueryWrapper<TErpGoods>().eq(TErpGoods::getGoodsSource,1).isNotNull(TErpGoods::getClinicPurchasePrice).orderByDesc(BaseModel::getCreateTime)); + List<TErpGoods> list = p.getRecords(); + + List<String> typeIds = list.stream().map(TErpGoods::getTypeId).collect(Collectors.toList()); + if(!typeIds.isEmpty()){ + List<TErpGoodsType> typeList = erpGoodsTypeMapper.selectBatchIds(typeIds); + for (TErpGoods tErpGoodsVO : list) { + typeList.stream().filter(t -> t.getId().equals(tErpGoodsVO.getTypeId())).findFirst().ifPresent(t -> tErpGoodsVO.setTypeName(t.getTypeName())); + tErpGoodsVO.setTypeName(tErpGoodsVO.getTypeName()); + } + } + List<String> supplierClinicId = list.stream().filter(e->e.getGoodsSource()==1).map(TErpGoods::getSupplierClinicId).collect(Collectors.toList()); + if(!supplierClinicId.isEmpty()){ + List<TCrmClinic> crmClinics = crmClinicMapper.selectBatchIds(supplierClinicId); + for (TErpGoods tErpGoodsVO : list) { + crmClinics.stream().filter(t -> t.getId().equals(tErpGoodsVO.getSupplierClinicId())).findFirst().ifPresent(t -> tErpGoodsVO.setSupplierName(t.getClinicName())); + } + } + pageInfo.setRecords( list); + return pageInfo; + } + + @Override + public List<TErpGoodsVO> inventoryNotEnoughList(SysUser user) { + List<TErpGoodsVO> list = this.baseMapper.inventoryNotEnoughList(user); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) + public void addProcurement(String clinicSupplierId, SysUser user, List<AddProcurementDto> dtos) { + List<String> goodsIds = dtos.stream().map(AddProcurementDto::getGoodsId).collect(Collectors.toList()); + List<TErpGoods> tErpGoods = erpGoodsMapper.selectBatchIds(goodsIds); + for (AddProcurementDto dto : dtos) { + TErpGoods tErpGoodsVO = tErpGoods.stream().filter(t -> t.getId().equals(dto.getGoodsId())).findFirst().get(); + dto.setPlatformCommissionPrice(tErpGoodsVO.getPlatformCommissionPrice()); + dto.setSupplierId(tErpGoodsVO.getSupplierClinicId()); + dto.setGoodsSalesAmount(tErpGoodsVO.getClinicPurchasePrice()); + if(dto.getSalesAmount()==null){ + dto.setSalesAmount(tErpGoodsVO.getClinicPurchasePrice()); + } + } + // 供应商分组 + Map<String, List<AddProcurementDto>> supplierClinicIdListMap = dtos.stream().collect(Collectors.groupingBy(AddProcurementDto::getSupplierId)); + for (Map.Entry<String, List<AddProcurementDto>> entry : supplierClinicIdListMap.entrySet()) { + String supplierClinicId = entry.getKey(); + TCrmSupplier supplier = crmSupplierMapper.selectById(supplierClinicId); + List<AddProcurementDto> value = entry.getValue(); + TErpProcurement tErpProcurement = new TErpProcurement(); + tErpProcurement.setClinicId(clinicSupplierId); + tErpProcurement.setProcurementCode("C"+DateUtils.dateTimeNow()); + tErpProcurement.setSupplierId(supplierClinicId); + + tErpProcurement.setTermNo(supplier.getTermNo()); + tErpProcurement.setMerchantNo(supplier.getRecvMerchantNo()); + tErpProcurement.setPayMoney(value.stream().map(AddProcurementDto::getSalesAmount).reduce(BigDecimal.ZERO, BigDecimal::add)); + AddProcurementDto addProcurementDto = value.get(0); + if(addProcurementDto.getState()!=null && addProcurementDto.getState()==1){ + tErpProcurement.setStatus(1); + }else { + tErpProcurement.setStatus(2); + } + ArrayList<TErpProcurementGoods> tErpProcurementGoods1 = new ArrayList<>(); + + BigDecimal add =BigDecimal.ZERO; + + for (AddProcurementDto dto : value) { + TErpProcurementGoods tErpProcurementGoods = new TErpProcurementGoods(); + tErpProcurementGoods.setProcurementId(tErpProcurement.getId()); + TErpGoods goods = tErpGoods.stream().filter(e -> e.getId().equals(dto.getGoodsId())).findFirst().get(); + tErpProcurementGoods.setGoodsId(dto.getGoodsId()); + tErpProcurementGoods.setGoodsName(goods.getGoodsName()); + tErpProcurementGoods.setSupplierName(supplier.getSupplierName()); + tErpProcurementGoods.setQuasiNumber(goods.getQuasiNumber()); + + TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); + tErpProcurementGoods.setUnitName(tErpGoodsUnit.getUnitName()); + tErpProcurementGoods.setPurchasePrice(dto.getGoodsSalesAmount()); + tErpProcurementGoods.setSalesAmount(dto.getSalesAmount()); + tErpProcurementGoods.setTotalPrice(dto.getSalesAmount().multiply(new BigDecimal(dto.getPurchaseCount()))); + + tErpProcurementGoods.setPurchaseCount(dto.getPurchaseCount()); + tErpProcurementGoods.setSupplierId(supplierClinicId); + tErpProcurementGoods.setRecvMerchantNo(supplier.getRecvMerchantNo()); + tErpProcurementGoods.setSupplierMoney(dto.getSalesAmount().subtract(dto.getPlatformCommissionPrice())); + if(tErpProcurementGoods.getSupplierMoney().doubleValue()<0){ + throw new RuntimeException("平台抽成不能大于售卖价格"); + } + add = add.add(dto.getPlatformCommissionPrice()); + tErpProcurementGoods1.add(tErpProcurementGoods); + } + BigDecimal bigDecimal = tErpProcurement.getPayMoney().multiply(BigDecimal.valueOf(0.0038)).setScale(2, RoundingMode.HALF_UP); + + tErpProcurement.setMoney(add.subtract(bigDecimal)); + if(tErpProcurement.getMoney().doubleValue()<0){ + throw new RuntimeException("金额设置错误,请联系平台管理员"); + } + this.save(tErpProcurement); + tErpProcurementGoods1.forEach(e->e.setProcurementId(tErpProcurement.getId())); + erpProcurementGoodsService.saveBatch(tErpProcurementGoods1); + } + + } + + @Override + public DetailProcurementVO detailProcurement(String clinicSupplierId, SysUser user, String id) { + DetailProcurementVO detailProcurementVO = new DetailProcurementVO(); + TErpProcurement tErpProcurement = this.getById(id); + detailProcurementVO.setStatus(tErpProcurement.getStatus()); + detailProcurementVO.setCreateTime(tErpProcurement.getCreateTime()); + detailProcurementVO.setSendTime(tErpProcurement.getSendTime()); + TCrmSupplier supplier = crmSupplierMapper.selectById(tErpProcurement.getSupplierId()); + detailProcurementVO.setSupplierName(supplier.getSupplierName()); + detailProcurementVO.setUserName(sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getCreateId())).getUserName()); + List<TErpProcurementGoods> list = erpProcurementGoodsService.list(new QueryWrapper<TErpProcurementGoods>().eq("procurement_id", id)); + ArrayList<DetailProcurementNextVO> detailProcurementNextVOS = new ArrayList<>(); + for (TErpProcurementGoods tErpProcurementGoods : list) { + DetailProcurementNextVO detailProcurementNextVO = new DetailProcurementNextVO(); + detailProcurementNextVO.setGoodsName(tErpProcurementGoods.getGoodsName()); + detailProcurementNextVO.setQuasiNumber(tErpProcurementGoods.getQuasiNumber()); + detailProcurementNextVO.setPackingUnitName(tErpProcurementGoods.getUnitName()); + detailProcurementNextVO.setSalesAmount(tErpProcurementGoods.getSalesAmount()); + detailProcurementNextVO.setNum(tErpProcurementGoods.getPurchaseCount()); + detailProcurementNextVO.setTotalPrice(tErpProcurement.getPayMoney()); + detailProcurementNextVO.setId(tErpProcurementGoods.getId()); + detailProcurementNextVOS.add(detailProcurementNextVO); + } + detailProcurementVO.setList(detailProcurementNextVOS); + return detailProcurementVO; + } + } -- Gitblit v1.7.1