From eb23b15acb15aae43b336ecf5ffb2053bcf85464 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 09 九月 2025 18:05:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java         |  126 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java                  |   40 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java                  |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java                      |   25 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java                            |   53 +++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java                                 |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java          |    7 
 ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml                          |   34 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java                     |   17 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java            |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java                           |    9 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java             |   21 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java                   |   17 +
 ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml                           |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java            |   49 ++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java                            |   56 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java          |   21 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java                    |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java                      |   43 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java    |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java                      |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java                           |    1 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java |   39 ++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java                   |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java                   |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java                  |  207 ++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java                      |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java                |   26 +
 ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml                  |   31 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java                      |   46 ++
 30 files changed, 898 insertions(+), 37 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 fe94611..d81f78a 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
@@ -6,7 +6,8 @@
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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;
@@ -18,17 +19,15 @@
 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.*;
 import com.ruoyi.system.query.TErpGoodsQuery;
-import com.ruoyi.system.service.TErpGoodsService;
+import com.ruoyi.system.service.*;
 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;
@@ -38,10 +37,14 @@
 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.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -59,11 +62,25 @@
 
     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;
     }
 
 
@@ -127,8 +144,39 @@
     @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));
     }
 
@@ -179,19 +227,144 @@
         JSONObject jsonObject = new JSONObject();
         ImportParams params = new ImportParams();
         params.setHeadRows(1); //表头行数
-        String msg = null;
         InputStream inputStream = null;
-        TErpGoods goods = new TErpGoods();
+        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) {
-                System.out.println(erpGoodsExcel);
+                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("车辆年检记录导入失败!");
+            return AjaxResult.error("记录导入失败!");
         }finally {
             try {
                 inputStream.close();
@@ -199,7 +372,11 @@
                 throw new ServiceException(e.getMessage());
             }
         }
-        return AjaxResult.success(jsonObject);
+        if(names.size()>0){
+            return AjaxResult.error("导入失败记录如下:",names);
+        }
+        erpGoodsService.saveBatch(tErpGoods);
+        return AjaxResult.success();
 
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
index 233b807..6135d0b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -1,8 +1,21 @@
 package com.ruoyi.web.controller.api;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.query.TErpGoodsQuery;
+import com.ruoyi.system.query.TErpProcurementQuery;
+import com.ruoyi.system.service.TErpProcurementService;
+import com.ruoyi.system.service.TErpSupplierWarehousingService;
+import com.ruoyi.system.vo.TErpGoodsVO;
+import com.ruoyi.system.vo.TErpProcurementDetailVo;
+import com.ruoyi.system.vo.TErpProcurementVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
@@ -14,7 +27,39 @@
  */
 @RestController
 @RequestMapping("/t-erp-procurement")
+@Api(tags = "erp采购管理")
 public class TErpProcurementController {
 
+
+    private final TErpProcurementService erpProcurementService;
+    private final TokenService tokenService;
+
+    @Autowired
+    public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService) {
+        this.erpProcurementService = erpProcurementService;
+        this.tokenService = tokenService;
+    }
+
+
+
+    /**
+     * erp采购管理分页列表
+     */
+    @ApiOperation(value = "erp采购管理分页列表")
+    @PostMapping(value = "/pageList")
+    public R<PageInfo<TErpProcurementVo>> pageList(@RequestBody TErpProcurementQuery query) {
+        SysUser user = tokenService.getLoginUser().getUser();
+        return R.ok(erpProcurementService.pageList(query,user));
+    }
+
+
+
+    @ApiOperation(value = "erp采购管理详情")
+    @GetMapping(value = "/detail")
+    public R<TErpProcurementDetailVo> detail(@RequestParam String id, String goodsName) {
+        SysUser user = tokenService.getLoginUser().getUser();
+        return R.ok(erpProcurementService.detail(id,user,goodsName));
+    }
+
 }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java
index 78ddfa9..4495912 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java
@@ -8,10 +8,12 @@
 import com.ruoyi.system.dto.WarehousingGoodsDto;
 import com.ruoyi.system.query.TErpGoodsQuery;
 import com.ruoyi.system.query.TErpGoodsWarehouseQuery;
+import com.ruoyi.system.query.ValidityPeriodWarningQuery;
 import com.ruoyi.system.service.TErpSupplierWarehousingService;
 import com.ruoyi.system.vo.TErpGoodsVO;
 import com.ruoyi.system.vo.TErpGoodsWarehouseLastVO;
 import com.ruoyi.system.vo.TErpGoodsWarehouseRecordLastVO;
+import com.ruoyi.system.vo.ValidityPeriodWarningVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -82,5 +84,15 @@
     }
 
 
+    @ApiOperation(value = "有效期预警")
+    @PostMapping(value = "/validityPeriodWarning")
+    public R<PageInfo<ValidityPeriodWarningVo>> validityPeriodWarning(@RequestBody ValidityPeriodWarningQuery query) {
+        SysUser user = tokenService.getLoginUser().getUser();
+        PageInfo<ValidityPeriodWarningVo> pageInfo =erpSupplierWarehousingService.validityPeriodWarning(query,user);
+        return R.ok(pageInfo);
+    }
+
+
 }
 
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java
new file mode 100644
index 0000000..4ae78c0
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java
@@ -0,0 +1,21 @@
+package com.ruoyi.web.controller.api;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-09-09
+ */
+@RestController
+@RequestMapping("/tSysCommission")
+public class TSysCommissionController {
+
+}
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
index 3c572e0..08bed43 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java
@@ -66,7 +66,6 @@
      * 新增执行
      */
     @ApiModelProperty(value = "记录创建人id,前端忽略")
-    @JsonIgnore
     @TableField(value = "create_id", fill = FieldFill.INSERT)
     private String createId;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java
index 2590d67..39b3bf4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java
@@ -42,12 +42,8 @@
     @Excel(width = 30,name = "最低采购单位")
     private String lowUnitName;
 
-    @Excel(width = 30,name = "是否为处方药",replace = {"1_是","2_否"})
+    @Excel(width = 30,name = "是否为处方药")
     private String isPrescriptionDrug;
-
-    @ApiModelProperty(value = "商品规格")
-    @TableField("goods_spec")
-    private String goodsSpec;
 
 
     @Excel(width = 30,name = "*预警库存")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
index 75af99a..df29c41 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java
@@ -1,7 +1,14 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.model.TErpProcurement;
+import com.ruoyi.system.query.TErpProcurementQuery;
+import com.ruoyi.system.vo.TErpProcurementVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,6 @@
  */
 public interface TErpProcurementMapper extends BaseMapper<TErpProcurement> {
 
+    List<TErpProcurementVo> pageList(@Param("query") TErpProcurementQuery query, @Param("pageInfo") PageInfo<TErpProcurementVo> pageInfo, @Param("user") SysUser user, @Param("sTime") String sTime, @Param("eTime") String eTime);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java
index 4daebc3..2256448 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java
@@ -6,10 +6,13 @@
 import com.ruoyi.system.model.TErpSupplierWarehousing;
 import com.ruoyi.system.query.TErpGoodsQuery;
 import com.ruoyi.system.query.TErpGoodsWarehouseQuery;
+import com.ruoyi.system.query.ValidityPeriodWarningQuery;
 import com.ruoyi.system.vo.TErpGoodsVO;
 import com.ruoyi.system.vo.TErpGoodsWarehouseRecordLastVO;
+import com.ruoyi.system.vo.ValidityPeriodWarningVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -25,4 +28,8 @@
     List<TErpGoodsVO> pageList(@Param("query") TErpGoodsQuery query, @Param("pageInfo") PageInfo<TErpGoodsVO> pageInfo, @Param("user") SysUser user);
 
     List<TErpGoodsWarehouseRecordLastVO> pageWarehouseList(@Param("query") TErpGoodsWarehouseQuery query, @Param("pageInfo") PageInfo<TErpGoodsWarehouseRecordLastVO> pageInfo, @Param("user") SysUser user, @Param("sTime") String sTime, @Param("eTime") String eTime);
+
+    PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(@Param("pageInfo") PageInfo<ValidityPeriodWarningVo> pageInfo, @Param("query") ValidityPeriodWarningQuery query, @Param("user") SysUser user, @Param("time") LocalDateTime nineMonthLater);
+
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java
new file mode 100644
index 0000000..f95f72c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.TSysCommission;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-09-09
+ */
+public interface TSysCommissionMapper extends BaseMapper<TSysCommission> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
index 9cf22fa..972de08 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java
@@ -38,7 +38,7 @@
 
     @ApiModelProperty(value = "商品来源 1=平台添加 2=线下添加")
     @TableField("goods_source")
-    private String goodsSource;
+    private Integer goodsSource;
 
     @ApiModelProperty(value = "商品名称")
     @TableField("goods_name")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java
index d4f56a2..e63f9d4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java
@@ -38,9 +38,9 @@
     @TableField("maintenance_type")
     private Integer maintenanceType;
 
-    @ApiModelProperty(value = "入库id")
-    @TableField("warehousing_id")
-    private String warehousingId;
+    @ApiModelProperty(value = "入库批次id")
+    @TableField("warehousing_batch_id")
+    private String warehousingBatchId;
 
     @ApiModelProperty(value = "状态 1=未维护 2=已维护")
     @TableField("status")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java
index 4d4f876..0a17cc6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.model;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -54,5 +55,13 @@
     @TableField("status")
     private Integer status;
 
+    @ApiModelProperty(value = "发送时间")
+    @TableField("send_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime sendTime;
+
+
+    @ApiModelProperty(value = "入库操作人")
+    private String warehousingUserId;
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java
index ad5f93b..66df2ab 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java
@@ -70,4 +70,8 @@
     @TableField("total_price")
     private BigDecimal totalPrice;
 
+    @ApiModelProperty(value = "供应商id")
+    @TableField("supplier_id")
+    private String supplierId;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java
index 263e2c4..4bcdb15 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java
@@ -58,4 +58,8 @@
     @TableField("total_price")
     private BigDecimal totalPrice;
 
+
+    @ApiModelProperty(value = "入库单号")
+    @TableField("warehousing_no")
+    private String warehousingNo;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java
new file mode 100644
index 0000000..1d89fc1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java
@@ -0,0 +1,56 @@
+package com.ruoyi.system.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-09-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_sys_commission")
+public class TSysCommission extends Model<TSysCommission> {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+    /**
+     * 1平台 2供应商
+     */
+    private Integer type;
+    /**
+     * 平台0  其他供应商id
+     */
+    @TableField("object_id")
+    private String objectId;
+    /**
+     * 分佣金额
+     */
+    private BigDecimal money;
+    /**
+     * t_erp_procurement_goods表id
+     */
+    @TableField("t_erp_procurement_goods_id")
+    private String tErpProcurementGoodsId;
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java
new file mode 100644
index 0000000..53c4055
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("采购Query")
+public class TErpProcurementQuery extends BasePage {
+    @ApiModelProperty(value = "采购单号")
+    private String procurementCode;
+
+    @ApiModelProperty(value = "诊所名称")
+    private String clinicName;
+
+    @ApiModelProperty(value = "时间 2022-02-02 - 2023-03-03")
+    private String time;
+
+    @ApiModelProperty(value = "发起人")
+    private String userName;
+
+    @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+    private Integer status;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java
new file mode 100644
index 0000000..4328f15
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "有效期预警查询Query")
+public class ValidityPeriodWarningQuery  extends BasePage {
+    @ApiModelProperty(value = "药品名称")
+    private String name;
+
+    @ApiModelProperty(value = "类型id")
+    private String  typeId;
+
+
+    @ApiModelProperty(value = "国药准字号")
+    private String quasiNumber;
+
+    @ApiModelProperty(value = "批次号")
+    private String batchNumber;
+
+
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
index 6e88e97..72200b5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.system.model.TErpProcurement;
+import com.ruoyi.system.query.TErpGoodsQuery;
+import com.ruoyi.system.query.TErpProcurementQuery;
+import com.ruoyi.system.vo.TErpProcurementDetailVo;
+import com.ruoyi.system.vo.TErpProcurementVo;
 
 /**
  * <p>
@@ -13,4 +19,9 @@
  */
 public interface TErpProcurementService extends IService<TErpProcurement> {
 
+    PageInfo<TErpProcurementVo> pageList(TErpProcurementQuery query, SysUser user);
+
+
+    TErpProcurementDetailVo detail(String id, SysUser user, String goodsName);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java
index 7a6edc7..11fa1af 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java
@@ -7,10 +7,8 @@
 import com.ruoyi.system.model.TErpSupplierWarehousing;
 import com.ruoyi.system.query.TErpGoodsQuery;
 import com.ruoyi.system.query.TErpGoodsWarehouseQuery;
-import com.ruoyi.system.vo.TErpGoodsVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseLastVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseRecordLastVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseVO;
+import com.ruoyi.system.query.ValidityPeriodWarningQuery;
+import com.ruoyi.system.vo.*;
 
 import javax.validation.Valid;
 import java.util.List;
@@ -33,4 +31,5 @@
 
     void warehousingGoods(@Valid List<WarehousingGoodsDto> dtos, SysUser user);
 
+    PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(ValidityPeriodWarningQuery query, SysUser user);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java
new file mode 100644
index 0000000..8b44170
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.model.TSysCommission;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-09-09
+ */
+public interface TSysCommissionService extends IService<TSysCommission> {
+
+}
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 bfd7ff3..cf61923 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,10 +1,25 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.system.model.TErpProcurement;
-import com.ruoyi.system.mapper.TErpProcurementMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.basic.PageInfo;
+import com.ruoyi.common.core.domain.entity.SysUser;
+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.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 org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +32,111 @@
 @Service
 public class TErpProcurementServiceImpl extends ServiceImpl<TErpProcurementMapper, TErpProcurement> implements TErpProcurementService {
 
+    @Resource
+    private TErpProcurementGoodsMapper erpProcurementGoodsMapper;
+
+    @Resource
+    private TSysCommissionMapper sysCommissionMapper;
+
+    @Resource
+    private TCrmClinicMapper crmClinicMapper;
+
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+    @Override
+    public PageInfo<TErpProcurementVo> pageList(TErpProcurementQuery query, SysUser user) {
+        String sTime=null;
+        String eTime =null;
+        if(query.getTime()!=null && !query.getTime().isEmpty()){
+            String[] split = query.getTime().split(" - ");
+            sTime = split[0] + " 00:00:00";
+            eTime = split[1] + " 23:59:59";
+        }
+        PageInfo<TErpProcurementVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        List<TErpProcurementVo> list = this.baseMapper.pageList(query,pageInfo,user,sTime,eTime);
+        if(list.isEmpty()){
+            return pageInfo;
+        }
+        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, user.getUserId()));
+        List<TSysCommission> tSysCommissions =new ArrayList<>();
+        if(!tErpProcurementGoods.isEmpty()){
+            List<String> collect = tErpProcurementGoods.stream().map(TErpProcurementGoods::getId).collect(Collectors.toList());
+            tSysCommissions = sysCommissionMapper.selectList(new LambdaQueryWrapper<TSysCommission>().in(TSysCommission::getTErpProcurementGoodsId, collect));
+        }
+        for (TErpProcurementVo tErpProcurementVo : list) {
+            List<TErpProcurementGoods> collect = tErpProcurementGoods.stream().filter(e -> e.getProcurementId().equals(tErpProcurementVo.getId())).collect(Collectors.toList());
+            int size = collect.stream().map(TErpProcurementGoods::getGoodsId).collect(Collectors.toSet()).size();
+            tErpProcurementVo.setTypeNum(size);
+            BigDecimal reduce = collect.stream().map(TErpProcurementGoods::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            tErpProcurementVo.setTotalPrice(reduce);
+            if(!collect.isEmpty()){
+                List<String> collect1 = collect.stream().map(TErpProcurementGoods::getId).collect(Collectors.toList());
+                List<TSysCommission> collect2 = tSysCommissions.stream().filter(e -> collect1.contains(e.getTErpProcurementGoodsId())).collect(Collectors.toList());
+                BigDecimal reduce1 = collect2.stream().filter(e->e.getType()==1).map(TSysCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal reduce2 = collect2.stream().filter(e->e.getType()==2).map(TSysCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                tErpProcurementVo.setPlatformMoney(reduce1);
+                tErpProcurementVo.setSupplierMoney(reduce2);
+            }
+
+        }
+
+
+        pageInfo.setRecords(list);
+        return pageInfo;
+    }
+
+    @Override
+    public TErpProcurementDetailVo detail(String id, SysUser user, String goodsName) {
+        TErpProcurementDetailVo tErpProcurementVo = new TErpProcurementDetailVo();
+
+        TErpProcurement tErpProcurement = this.getById(id);
+        tErpProcurementVo.setId(id);
+        tErpProcurementVo.setProcurementCode(tErpProcurement.getProcurementCode());
+        tErpProcurementVo.setClinicId(tErpProcurement.getClinicId());
+
+        TCrmClinic tCrmClinic = crmClinicMapper.selectById(tErpProcurement.getClinicId());
+        tErpProcurementVo.setClinicName(tCrmClinic.getClinicName());
+        tErpProcurementVo.setUserName(tCrmClinic.getPersonChargeName());
+        SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getCreateId()));
+
+        tErpProcurementVo.setUserName(sysUser.getNickName());
+        tErpProcurementVo.setCreateTime(tErpProcurement.getCreateTime());
+        tErpProcurementVo.setUpdateTime(tErpProcurement.getUpdateTime());
+        if(tErpProcurement.getWarehousingUserId()!=null){
+            SysUser sysUser1 = sysUserMapper.selectUserById(Long.valueOf(tErpProcurement.getWarehousingUserId()));
+            tErpProcurementVo.setOperName(sysUser1.getNickName());
+        }
+        tErpProcurementVo.setStatus(tErpProcurement.getStatus());
+        tErpProcurementVo.setSendTime(tErpProcurement.getSendTime());
+
+        List<TErpProcurementGoods> tErpProcurementGoods = erpProcurementGoodsMapper.selectList(new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, id).like(goodsName != null && !goodsName.isEmpty(), TErpProcurementGoods::getGoodsName, goodsName).eq(TErpProcurementGoods::getSupplierId, user.getUserId()));
+        if(tErpProcurementGoods.isEmpty()){
+            return tErpProcurementVo;
+        }
+
+        ArrayList<TErpProcurementDetailNextVo> tErpProcurementDetailNextVos = new ArrayList<>();
+        for (TErpProcurementGoods tErpProcurementGood : tErpProcurementGoods) {
+            TErpProcurementDetailNextVo tErpProcurementDetailNextVo = new TErpProcurementDetailNextVo();
+            tErpProcurementDetailNextVo.setGoodsName(tErpProcurementGood.getGoodsName());
+            tErpProcurementDetailNextVo.setUnitName(tErpProcurementGood.getUnitName());
+            tErpProcurementDetailNextVo.setNum(tErpProcurementGood.getPurchaseCount());
+            tErpProcurementDetailNextVo.setTotalPrice(tErpProcurementGood.getTotalPrice());
+            tErpProcurementDetailNextVo.setQuasiNumber(tErpProcurementGood.getQuasiNumber());
+
+
+            List<TSysCommission> tSysCommissions = sysCommissionMapper.selectList(new LambdaQueryWrapper<TSysCommission>().eq(TSysCommission::getTErpProcurementGoodsId, tErpProcurementGood.getId()));
+            if(!tSysCommissions.isEmpty()){
+                BigDecimal reduce = tSysCommissions.stream().filter(e -> e.getType() == 1).map(TSysCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                tErpProcurementDetailNextVo.setPlatformMoney(reduce);
+                BigDecimal reduce1 = tSysCommissions.stream().filter(e -> e.getType() == 2).map(TSysCommission::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                tErpProcurementDetailNextVo.setSupplierMoney(reduce1);
+            }
+            tErpProcurementDetailNextVos.add(tErpProcurementDetailNextVo);
+
+        }
+        tErpProcurementVo.setList(tErpProcurementDetailNextVos);
+        return tErpProcurementVo;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
index 0c2b4a6..3b84b01 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java
@@ -3,23 +3,24 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.system.dto.WarehousingGoodsDto;
 import com.ruoyi.system.dto.WarehousingGoodsNextDto;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.model.*;
 import com.ruoyi.system.query.TErpGoodsQuery;
 import com.ruoyi.system.query.TErpGoodsWarehouseQuery;
+import com.ruoyi.system.query.ValidityPeriodWarningQuery;
 import com.ruoyi.system.service.TErpSupplierWarehousingService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.vo.TErpGoodsVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseLastVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseRecordLastVO;
-import com.ruoyi.system.vo.TErpGoodsWarehouseVO;
+import com.ruoyi.system.vo.*;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -54,6 +55,9 @@
 
     @Resource
     private TCrmWarehouseMapper crmWarehouseMapper;
+
+    @Resource
+    private TErpMaintenanceReminderMapper tErpMaintenanceReminderMapper;
 
 
     @Override
@@ -189,6 +193,9 @@
     public void warehousingGoods(List<WarehousingGoodsDto> dtos, SysUser user) {
         for (WarehousingGoodsDto dto : dtos) {
             TErpSupplierWarehousing tErpSupplierWarehousing = new TErpSupplierWarehousing();
+            // 当前年月日时分秒
+            String time = DateUtils.dateTimeNow();
+            tErpSupplierWarehousing.setWarehousingNo("G"+time);
             tErpSupplierWarehousing.setSupplierId(user.getUserId().toString());
             tErpSupplierWarehousing.setWarehouseId(dto.getWarehouseId());
             tErpSupplierWarehousing.setGoodsId(dto.getGoodsId());
@@ -207,8 +214,32 @@
                 tErpSupplierWarehousingBatch.setProductionDate(warehousingGoodsNextDto.getProductionDate().atStartOfDay());
                 tErpSupplierWarehousingBatch.setExpiryDate(warehousingGoodsNextDto.getExpiryDate().atStartOfDay());
                 erpSupplierWarehousingBatchMapper.insert(tErpSupplierWarehousingBatch);
+
+                if(goods.getMaintenanceInterval()!=null){
+                    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);
+                    tErpMaintenanceReminderMapper.insert(tErpMaintenanceReminder);
+                }
+
             }
         }
 
     }
+
+    @Override
+    public PageInfo<ValidityPeriodWarningVo> validityPeriodWarning(ValidityPeriodWarningQuery query, SysUser user) {
+        // 获取当前时间后9个月的时间
+        LocalDateTime nineMonthLater = LocalDateTime.now().plusMonths(9);
+
+        PageInfo<ValidityPeriodWarningVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        return this.baseMapper.validityPeriodWarning(pageInfo,query,user,nineMonthLater);
+
+
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java
new file mode 100644
index 0000000..b321310
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TSysCommissionMapper;
+import com.ruoyi.system.model.TSysCommission;
+import com.ruoyi.system.service.TSysCommissionService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author administrator
+ * @since 2025-09-09
+ */
+@Service
+public class TSysCommissionServiceImpl extends ServiceImpl<TSysCommissionMapper, TSysCommission> implements TSysCommissionService {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java
new file mode 100644
index 0000000..2676f39
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.system.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "采购单二级Vo")
+public class TErpProcurementDetailNextVo {
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "单位")
+    private String unitName;
+
+
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+
+    @ApiModelProperty(value = "总价")
+    private BigDecimal totalPrice=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "供应商金额")
+    private BigDecimal supplierMoney=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "平台金额")
+    private BigDecimal platformMoney=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "国药准字号")
+    private String quasiNumber;
+
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java
new file mode 100644
index 0000000..c34fedc
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "采购单详情一级Vo")
+public class TErpProcurementDetailVo {
+    @ApiModelProperty(value = "采购单id")
+    private String id;
+
+    @ApiModelProperty(value = "采购单号")
+    private String procurementCode;
+
+    @ApiModelProperty(value = "诊所id")
+    private String clinicId;
+
+    @ApiModelProperty(value = "诊所名称")
+    private String clinicName;
+
+
+    @ApiModelProperty(value = "发起时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "发起人")
+    private String userName;
+
+    @ApiModelProperty(value = "操作人")
+    private String operName;
+
+    @ApiModelProperty(value = "操作时间")
+    private LocalDateTime updateTime;
+    @ApiModelProperty(value = "发货时间")
+    private LocalDateTime sendTime;
+
+    @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+    private Integer status;
+
+    @ApiModelProperty(value = "采购单详情二级")
+    private List<TErpProcurementDetailNextVo> list;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java
new file mode 100644
index 0000000..3f3a9b5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java
@@ -0,0 +1,53 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "采购单Vo")
+public class  TErpProcurementVo {
+    @ApiModelProperty(value = "采购单id")
+    private String id;
+
+    @ApiModelProperty(value = "采购单号")
+    private String procurementCode;
+
+    @ApiModelProperty(value = "诊所id")
+    private String clinicId;
+
+    @ApiModelProperty(value = "诊所名称")
+    private String clinicName;
+
+    private Integer typeNum;
+
+
+    @ApiModelProperty(value = "总价")
+    private BigDecimal totalPrice=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "供应商金额")
+    private BigDecimal supplierMoney=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "平台金额")
+    private BigDecimal platformMoney=BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "发起时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "发起人")
+    private String userName;
+
+    @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消")
+    private Integer status;
+
+
+    private String tErpProcurementGoodsId;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java
new file mode 100644
index 0000000..7725db5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java
@@ -0,0 +1,43 @@
+package com.ruoyi.system.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel(value = "有效期预警Vo")
+public class ValidityPeriodWarningVo {
+
+    @ApiModelProperty(value = "入库单号")
+    private String warehousingNo;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品类型名称")
+    private String typeName;
+
+    @ApiModelProperty(value = "国药准字号")
+    private String quasiNumber;
+
+    @ApiModelProperty(value = "批次号")
+    private String batchNumber;
+
+
+    @ApiModelProperty(value = "有效日期")
+    private LocalDateTime expiryDate;
+
+    @ApiModelProperty(value = "单位")
+    private String packingUnitName;
+
+    @ApiModelProperty(value = "商品id")
+    private String goodsId;
+
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
index 68df0ab..16d82e0 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml
@@ -23,4 +23,38 @@
         id, clinic_id, procurement_code, pay_money, pay_number, pay_transaction_id, status, create_time, update_time, create_by, update_by, disabled
     </sql>
 
+    <select id="pageList" resultType="com.ruoyi.system.vo.TErpProcurementVo">
+        select t1.id,
+               t1.procurement_code,
+               t1.clinic_id,
+               t3.clinic_name,
+               sum(t2.total_price) as totalPrice,
+               t1.create_time,
+               t2.id                  tErpProcurementGoodsId,
+               t4.user_name,
+               t1.status
+        from t_erp_procurement t1
+                 left JOIN t_erp_procurement_goods t2 on t1.id = t2.procurement_id
+                 LEFT JOIN t_crm_clinic t3 on t1.clinic_id = t3.id
+                 left JOIN sys_user t4 on t1.create_id = t4.user_id
+        where t1.disabled = 0 and t2.supplier_id =#{user.userId}
+        <if test="query.procurementCode != null and query.procurementCode != ''">
+            and t1.procurement_code = #{query.procurementCode}
+        </if>
+        <if test="query.clinicName != null and query.clinicName != ''">
+            and t3.clinic_name like concat('%',#{query.clinicName},'%')
+        </if>
+        <if test="query.userName != null and query.userName != ''">
+            and t4.user_name like concat('%',#{query.userName},'%')
+        </if>
+        <if test="query.status != null">
+            and t1.status = #{query.status}
+        </if>
+        <if test="sTime != null">
+            and t1.create_time between #{sTime} and #{eTime}
+        </if>
+
+
+    </select>
+
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml
index b75a335..961f9dd 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml
@@ -98,4 +98,35 @@
     </select>
 
 
+    <select id="validityPeriodWarning" resultType="com.ruoyi.system.vo.ValidityPeriodWarningVo">
+        select t2.warehouse_no, t4.goods_name, t4.quasi_number, t1.batch_number, t1.expiry_date, t4.id as goodsId,t5.type_name,t6.unit_name packingUnitName,
+               case
+                  when t3.id is null then t1.warehousing_number
+                  else t1.warehousing_number -t3.outbound_count
+               end as num
+        from t_erp_supplier_warehousing_batch t1
+                 left join t_erp_supplier_warehousing t2 on t1.warehousing_id = t2.id
+                 LEFT JOIN t_erp_supplier_outbound_goods t3 on t3.warehousing_batch_id = t1.id
+                 LEFT JOIN t_erp_goods t4 on t2.goods_id = t4.id
+                left join t_erp_goods_type t5 on t4.type_id = t5.id
+        left join t_erp_goods_unit t6 on t4.packing_unit_id = t6.id
+        where #{time} > t1.expiry_date and t2.supplier_id =#{user.userId}
+          and (t1.warehousing_number - t3.outbound_count > 0 or t3.id is null)
+        <if test="query.name != null and query.name != ''">
+            and t4.goods_name like concat('%',#{query.goodsName},'%')
+        </if>
+        <if test="query.quasiNumber != null and query.quasiNumber != ''">
+            and t4.quasi_number like concat('%',#{query.quasiNumber},'%')
+        </if>
+        <if test="query.batchNumber != null and query.batchNumber != ''">
+            and t1.batch_number like concat('%',#{query.batchNumber},'%')
+        </if>
+        <if test="query.typeId != null and query.typeId != ''">
+            and t4.type_id = #{query.typeId}
+        </if>
+        order by t1.expiry_date
+
+    </select>
+
+
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml
new file mode 100644
index 0000000..2f7cd9e
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.TSysCommissionMapper">
+
+
+</mapper>

--
Gitblit v1.7.1