ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java
@@ -239,7 +239,10 @@ public R<Boolean> clinicAdd(@Validated @RequestBody TErpClinicGoodsAddDto dto) { SysUser user = tokenService.getLoginUser().getUser(); if (erpGoodsService.isExit(dto.getGoodsIdCode(), dto.getQuasiNumber(),null)) { return R.fail("erp商品已存在"); return R.fail("erp商品已存在,商品条码重复"); } if (erpGoodsService.isExitOne(dto.getGoodsIdCode(), dto.getQuasiNumber(),null)) { return R.fail("erp商品已存在,国药准字号重复"); } Integer roleType = user.getRoleType(); TErpGoods goods = new TErpGoods(); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java
@@ -106,7 +106,7 @@ TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); sysOrderService.add(dto,crmClinic); sysOrderService.add(dto,crmClinic,user.getNickName(),user.getUserId().toString()); return R.ok("添加成功"); } return R.fail("添加失败"); ruoyi-system/src/main/java/com/ruoyi/system/service/TErpGoodsService.java
@@ -43,6 +43,7 @@ List<TErpGoodsVO> listExport(TErpGoodsQuery query, SysUser user); boolean isExit(String goodsIdCode,String quasiNumber,String id); boolean isExitOne(String goodsIdCode,String quasiNumber,String id); PageInfo<TErpGoodsInventoryVO> pageInventoryGoodsPageList(@Valid TErpGoodsInventoryQuery query, SysUser user); ruoyi-system/src/main/java/com/ruoyi/system/service/TSysOrderService.java
@@ -34,7 +34,7 @@ PageInfo<TSysOrderPageVo> pageList(TSysOrderQuery query); void add(TSysOrderDto dto, TCrmClinic crmClinic); void add(TSysOrderDto dto, TCrmClinic crmClinic,String name,String userId); Integer clinicSalesStatisticsCount(List<String> clinicIds); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpClinicWarehousingServiceImpl.java
@@ -217,7 +217,9 @@ inventoryDetailVo.setGoodsName(goods.getGoodsName()); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName()); if(tErpGoodsUnit!=null){ inventoryDetailVo.setUnitName(tErpGoodsUnit.getUnitName()); } inventoryDetailVo.setWarehouseNo(tErpSupplierWarehousing.getWarehouseNo()); TErpClinicOutboundGoods outboundGoods = erpClinicOutboundGoodsMapper.selectById(tErpSupplierInventoryGood.getWarehousingBatchId()); @@ -377,6 +379,7 @@ tErpClinicWarehousing.setCreateTime(LocalDateTime.now()); tErpClinicWarehousing.setType(3); tErpClinicWarehousing.setStatus(dtos.getStatus()); tErpClinicWarehousing.setWarehousingType(2); this.save(tErpClinicWarehousing); BigDecimal totalPrice = new BigDecimal(0); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpGoodsServiceImpl.java
@@ -203,6 +203,14 @@ } return false; } @Override public boolean isExitOne(String goodsIdCode, String quasiNumber,String id) { Long size = this.baseMapper.selectCount(new LambdaQueryWrapper<>(TErpGoods.class).eq(TErpGoods::getGoodsSource,1).ne(id!=null,TErpGoods::getId, id).and(q -> q.eq(TErpGoods::getQuasiNumber, quasiNumber))); if (size > 0) { return true; } return false; } @Override public PageInfo<TErpGoodsInventoryVO> pageInventoryGoodsPageList(TErpGoodsInventoryQuery query, SysUser user) { @@ -433,14 +441,21 @@ TErpProcurement tErpProcurement = erpProcurementMapper.selectById(tErpClinicWarehousing.getProcurementId()); warehouseGoodsDetailVo.setInventoryNumber(tErpProcurement.getProcurementCode()); } if(tErpClinicWarehousing.getType()==2){ TErpClinicInventory tErpClinicInventory = erpClinicInventoryMapper.selectById(tErpClinicWarehousing.getInventoryId()); warehouseGoodsDetailVo.setInventoryNumber(tErpClinicInventory.getInventoryNumber()); } List<TErpClinicWarehousingBatch> tErpClinicWarehousingBatches = erpClinicWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpClinicWarehousingBatch>().eq(TErpClinicWarehousingBatch::getWarehousingId, id)); for (TErpClinicWarehousingBatch tErpClinicWarehousingBatch : tErpClinicWarehousingBatches) { String goodsId = tErpClinicWarehousingBatch.getGoodsId(); TErpGoods tErpGoods = erpGoodsMapper.selectById(goodsId); tErpClinicWarehousingBatch.setGoodsName(tErpGoods.getGoodsName()); String packingUnitId = tErpGoods.getPackingUnitId(); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(packingUnitId); tErpClinicWarehousingBatch.setUnitName(tErpGoodsUnit.getUnitName()); if(tErpGoodsUnit!=null){ tErpClinicWarehousingBatch.setUnitName(tErpGoodsUnit.getUnitName()); } } @@ -678,12 +693,18 @@ // tErpSupplierWarehousing.setGoodsName(erpGoods.getGoodsName()); // tErpSupplierWarehousing.setPurchaseCount(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()); // tErpSupplierWarehousing.setUnitAmount(erpGoods.getSalesAmount()); tErpSupplierWarehousing.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()))); tErpSupplierWarehousing.setTotalPrice(tErpSupplierWarehousingBatch.getUnitAmount().multiply(new BigDecimal(inventoryGoodsDto.getInventoryCount() - inventoryGoodsDto.getNum()))); // 当前年月日时分秒 String time = DateUtils.dateTimeNow(); tErpSupplierWarehousing.setWarehouseNo("G" + time); tErpSupplierWarehousing.setType(2); tErpSupplierWarehousing.setInventoryId(tErpSupplierInventory.getId()); if(erpGoods.getGoodsSource()==1){ TCrmSupplier supplier = crmSupplierMapper.selectById(erpGoods.getSupplierClinicId()); tErpSupplierWarehousing.setSupplierName(supplier.getSupplierName()); }else { tErpSupplierWarehousing.setSupplierName(erpGoods.getSupplierName()); } erpClinicWarehousingMapper.insert(tErpSupplierWarehousing); // 添加批次信息 @@ -741,7 +762,7 @@ tErpSupplierOutbound.setOutboundType(6); tErpSupplierOutbound.setOutboundNumber("G" + s); int count = inventoryGoodsDto.getNum() - inventoryGoodsDto.getInventoryCount(); tErpSupplierOutbound.setTotalMoney(erpGoods.getSalesAmount().multiply(new BigDecimal(count))); tErpSupplierOutbound.setTotalMoney(tErpSupplierWarehousingBatch.getSalesAmount().multiply(new BigDecimal(count))); tErpSupplierOutbound.setInventoryId(tErpSupplierInventory.getId()); erpClinicOutboundMapper.insert(tErpSupplierOutbound); @@ -751,7 +772,7 @@ tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing1.getId()); tErpSupplierOutboundGoods.setWarehousingBatchId(tErpSupplierWarehousingBatch.getId()); tErpSupplierOutboundGoods.setOutboundCount(count); tErpSupplierOutboundGoods.setTotalPrice(erpGoods.getSalesAmount().multiply(new BigDecimal(count))); tErpSupplierOutboundGoods.setTotalPrice(tErpSupplierWarehousingBatch.getSalesAmount().multiply(new BigDecimal(count))); erpClinicOutboundGoodsMapper.insert(tErpSupplierOutboundGoods); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -394,7 +394,7 @@ List<AddProcurementDto> value = entry.getValue(); TErpProcurement tErpProcurement = new TErpProcurement(); tErpProcurement.setClinicId(clinicSupplierId); tErpProcurement.setProcurementCode("C" + DateUtils.dateTimeNow()); tErpProcurement.setSupplierId(supplierClinicId); tErpProcurement.setTermNo(supplier.getTermNo()); @@ -456,7 +456,37 @@ throw new RuntimeException("金额设置错误,请联系平台管理员"); } tErpProcurement.setSupplierMoney(supplierCommissionPrice); this.save(tErpProcurement); // 获取上一条最新的数据 TErpProcurement tErpProcurement1 = this.baseMapper.selectOne(new QueryWrapper<TErpProcurement>().orderByDesc("create_time").last("limit 1")); if(tErpProcurement1==null){ tErpProcurement.setProcurementCode("C" + DateUtils.dateTimeNow()+"00001"); }else { String lastProcurementCode = tErpProcurement1.getProcurementCode(); String datePart = "C" + DateUtils.dateTimeNow(); // 直接获取后五位数字并+1,不考虑是否同一天 String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5)); try { int number = Integer.parseInt(numberPart); if (number < 99999) { number++; } else { number = 2; // 达到99999后重置为00002 } tErpProcurement.setProcurementCode(datePart + String.format("%05d", number)); } catch (NumberFormatException e) { // 如果解析失败,默认从00001开始 tErpProcurement.setProcurementCode(datePart + "00001"); } } try { this.save(tErpProcurement); }catch (Exception e){ throw new RuntimeException("网络繁忙,请重试"); } tErpProcurementGoods1.forEach(e -> e.setProcurementId(tErpProcurement.getId())); erpProcurementGoodsService.saveBatch(tErpProcurementGoods1); } @@ -469,7 +499,7 @@ TErpProcurement tErpProcurement = this.getById(id); if (tErpProcurement.getWarehousingUserId()!=null && !tErpProcurement.getWarehousingUserId().isEmpty()) { SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getWarehousingUserId())); detailProcurementVO.setWarehousingUserName(sysUser.getUserName()); detailProcurementVO.setWarehousingUserName(sysUser.getNickName()); } detailProcurementVO.setWarehousingTime(tErpProcurement.getWarehousingTime()); @@ -479,7 +509,7 @@ detailProcurementVO.setSendTime(tErpProcurement.getSendTime()); TCrmSupplier supplier = crmSupplierMapper.selectById(tErpProcurement.getSupplierId()); detailProcurementVO.setSupplierName(supplier.getSupplierName()); detailProcurementVO.setUserName(sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getCreateId())).getUserName()); detailProcurementVO.setUserName(sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getCreateId())).getNickName()); TCrmClinic tCrmClinic = crmClinicMapper.selectById(tErpProcurement.getClinicId()); detailProcurementVO.setClinicName(tCrmClinic.getClinicName()); detailProcurementVO.setClinicAddress(tCrmClinic.getClinicAddress()); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysOrderServiceImpl.java
@@ -25,6 +25,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; @@ -92,21 +93,23 @@ @Override @Transactional(rollbackFor = Exception.class) public void add(TSysOrderDto dto, TCrmClinic crmClinic) { public void add(TSysOrderDto dto, TCrmClinic crmClinic,String name,String userId) { // 判断库存够不够 添加订单 添加订单二级 出库记录 List<TSysOrderNextDto> dtoList = dto.getDtoList(); ArrayList<TSysOrderGoods> tSysOrderGoods = new ArrayList<>(); ArrayList<TErpClinicOutboundGoods> erpClinicOutboundGoods = new ArrayList<>(); HashSet<String> goodsIds = new HashSet<>(); for (TSysOrderNextDto sysOrderNextDto : dtoList) { TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(sysOrderNextDto.getBatchId()); // 找出这个批次出库多少 List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, sysOrderNextDto.getBatchId())); int count = tErpClinicOutboundGoods.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum(); if(tErpClinicWarehousingBatch.getPurchaseCount() < count + sysOrderNextDto.getNum()){ if(tErpClinicWarehousingBatch.getWarehousingNumber() < count + sysOrderNextDto.getNum()){ throw new RuntimeException("库存不足"); } TErpGoods goods = erpGoodsMapper.selectById(tErpClinicWarehousingBatch.getGoodsId()); goodsIds.add(goods.getId()); TSysOrderGoods tSysOrderGoods1 = new TSysOrderGoods(); tSysOrderGoods1.setGoodsName(goods.getGoodsName()); TErpGoodsType tErpGoodsType = erpGoodsTypeMapper.selectById(goods.getTypeId()); @@ -152,6 +155,9 @@ tErpClinicOutbound.setOrderNumber(tSysOrder.getOrderNumber()); tErpClinicOutbound.setTotalMoney(dto.getTotalMoney()); tErpClinicOutbound.setOutboundNumber("G"+System.currentTimeMillis()); tErpClinicOutbound.setCreateBy(name); tErpClinicOutbound.setCreateId(userId); tErpClinicOutbound.setTypeNum(goodsIds.size()); erpClinicOutboundMapper.insert(tErpClinicOutbound); for (TErpClinicOutboundGoods erpClinicOutboundGood : erpClinicOutboundGoods) { ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java
@@ -38,6 +38,7 @@ @ApiModelProperty(value = "有效日期") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDateTime expiryDate; @ApiModelProperty(value = "单位") ruoyi-system/src/main/resources/mapper/system/TErpClinicWarehousingMapper.xml
@@ -131,7 +131,7 @@ <select id="warehousePageList" resultType="com.ruoyi.system.vo.TErpClinicWarehousePageListVO"> select t1.id,t1.warehouse_no, case when t1.type =1 then t2.supplier_name else t1.supplier_name end as supplierName, t1.supplier_name as supplierName, t3.procurement_code, case when t1.type =1 then t3.pay_money else t1.total_price end as allTotalPrice, t1.create_time warehouseTime,t1.type ruoyi-system/src/main/resources/mapper/system/TErpGoodsMapper.xml
@@ -210,7 +210,11 @@ LEFT JOIN t_erp_clinic_warehousing t2 on t1.warehousing_id = t2.id LEFT JOIN t_erp_goods t3 on t1.goods_id = t3.id LEFT JOIN t_crm_supplier t4 on t3.supplier_clinic_id = t4.id LEFT JOIN t_erp_clinic_outbound_goods t5 on t5.warehousing_batch_id =t1.id left join ( select warehousing_batch_id, sum(outbound_count) as outbound_count from t_erp_supplier_outbound_goods group by warehousing_batch_id ) t5 on t5.warehousing_batch_id =t1.id where t2.disabled = 0 and t2.clinic_id =#{supplierClinicId} <if test="query.type != null and query.type ==1"> and #{time} > t1.expiry_date