xuhy
8 天以前 eb23b15acb15aae43b336ecf5ffb2053bcf85464
Merge remote-tracking branch 'origin/master'
18个文件已修改
12个文件已添加
935 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpGoodsController.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpSupplierWarehousingController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TErpGoodsExcel.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpProcurementMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TErpSupplierWarehousingMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpGoods.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpMaintenanceReminder.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurement.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpProcurementGoods.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TErpSupplierWarehousing.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TErpProcurementService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TErpSupplierWarehousingService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpSupplierWarehousingServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TErpProcurementMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TErpSupplierWarehousingMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
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));
    }
}
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);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysCommissionController.java
New file
@@ -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 {
}
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;
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 = "*预警库存")
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);
}
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);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysCommissionMapper.java
New file
@@ -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> {
}
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")
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")
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;
}
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;
}
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;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TSysCommission.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TErpProcurementQuery.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/ValidityPeriodWarningQuery.java
New file
@@ -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;
}
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);
}
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);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TSysCommissionService.java
New file
@@ -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> {
}
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;
    }
}
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);
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysCommissionServiceImpl.java
New file
@@ -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 {
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementVo.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/ValidityPeriodWarningVo.java
New file
@@ -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;
}
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>
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>
ruoyi-system/src/main/resources/mapper/system/TSysCommissionMapper.xml
New file
@@ -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>