package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.lkl.laop.sdk.request.V3LabsTransPreorderRequest; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.AddProcurementDto; import com.ruoyi.system.dto.UpdateStatusProcurementDto; import com.ruoyi.system.dto.UpdateStatusProcurementLastDto; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsQuery; import com.ruoyi.system.query.TErpProcurementQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.*; import com.ruoyi.web.core.config.LakalaConfig; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* erp采购 前端控制器 *

* * @author xiaochen * @since 2025-08-20 */ @RestController @RequestMapping("/t-erp-procurement") @Api(tags = "erp采购管理") public class TErpProcurementController { private final TErpProcurementService erpProcurementService; private final TokenService tokenService; private final TCrmClinicService crmClinicService; private final TErpProcurementGoodsService erpProcurementGoodsService; private final TErpGoodsService erpGoodsService; private final TErpClinicWarehousingService erpClinicWarehousingService; private final TErpClinicWarehousingBatchService erpClinicWarehousingBatchService; private final TCrmSupplierService crmSupplierService; private final TErpMaintenanceReminderService erpMaintenanceReminderService; @Autowired public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService,TCrmClinicService crmClinicService,TErpProcurementGoodsService erpProcurementGoodsService , TErpGoodsService erpGoodsService,TErpClinicWarehousingService erpClinicWarehousingService,TErpClinicWarehousingBatchService erpClinicWarehousingBatchService, TCrmSupplierService crmSupplierService,TErpMaintenanceReminderService erpMaintenanceReminderService) { this.erpProcurementService = erpProcurementService; this.tokenService = tokenService; this.crmClinicService = crmClinicService; this.erpProcurementGoodsService = erpProcurementGoodsService; this.erpGoodsService = erpGoodsService; this.erpClinicWarehousingService = erpClinicWarehousingService; this.erpClinicWarehousingBatchService = erpClinicWarehousingBatchService; this.crmSupplierService = crmSupplierService; this.erpMaintenanceReminderService = erpMaintenanceReminderService; } /** * erp采购管理分页列表 */ @ApiOperation(value = "erp采购管理分页列表") @PostMapping(value = "/pageList") public R> pageList(@RequestBody TErpProcurementQuery query) { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.pageList(query,user)); } @ApiOperation(value = "erp采购管理详情") @GetMapping(value = "/detail") public R detail(@RequestParam String id, String goodsName) { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.detail(id,user,goodsName)); } /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "采购获取商品分页列表") @PostMapping(value = "/pageGoodsPageList") public R> pageList(@RequestBody TErpGoodsQuery query) { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.pageGoodsPageList(query,user)); } /** * 获取erp问题上报管理列表 */ @ApiOperation(value = "采购获取库存不足列表") @PostMapping(value = "/inventoryNotEnoughList") public R> inventoryNotEnoughList() { SysUser user = tokenService.getLoginUser().getUser(); return R.ok(erpProcurementService.inventoryNotEnoughList(user)); } @ApiOperation(value = "添加采购") @PostMapping(value = "/addProcurement") public R addProcurement(@RequestBody @Valid List dtos) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String clinicSupplierId=null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); clinicSupplierId = crmClinic.getId(); } erpProcurementService.addProcurement(clinicSupplierId, user, dtos); return R.ok(); } @ApiOperation(value = "采购详情") @GetMapping(value = "/detailProcurement/{id}") public R detailProcurement(@PathVariable String id) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String clinicSupplierId=null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); clinicSupplierId = crmClinic.getId(); } return R.ok( erpProcurementService.detailProcurement(clinicSupplierId, user, id)); } @ApiOperation(value = "采购草稿") @GetMapping(value = "/getProcurementDraft") public R> getProcurementDraft() { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String clinicSupplierId=null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); clinicSupplierId = crmClinic.getId(); } ArrayList detailProcurementNextVOS = new ArrayList<>(); List list1 = erpProcurementService.list(new LambdaQueryWrapper().eq(TErpProcurement::getStatus, 1).orderByDesc(BaseModel::getCreateTime)); if(list1.isEmpty()){ return R.ok(detailProcurementNextVOS); } String id = list1.get(0).getId(); List list = erpProcurementGoodsService.list(new LambdaQueryWrapper().eq(TErpProcurementGoods::getProcurementId, id)); for (TErpProcurementGoods tErpProcurementGoods : list) { DetailProcurementNextVO detailProcurementNextVO = new DetailProcurementNextVO(); detailProcurementNextVO.setId(tErpProcurementGoods.getId()); detailProcurementNextVO.setGoodsName(tErpProcurementGoods.getGoodsName()); detailProcurementNextVO.setQuasiNumber(tErpProcurementGoods.getQuasiNumber()); detailProcurementNextVO.setPackingUnitName(tErpProcurementGoods.getUnitName()); detailProcurementNextVO.setSalesAmount(tErpProcurementGoods.getSalesAmount()); detailProcurementNextVO.setNum(tErpProcurementGoods.getPurchaseCount()); detailProcurementNextVO.setTotalPrice(tErpProcurementGoods.getTotalPrice()); detailProcurementNextVO.setSupplierName(tErpProcurementGoods.getSupplierName()); detailProcurementNextVO.setUnitName(tErpProcurementGoods.getUnitName()); detailProcurementNextVO.setPurchasePrice(tErpProcurementGoods.getPurchasePrice()); detailProcurementNextVOS.add(detailProcurementNextVO); } return R.ok(detailProcurementNextVOS); } @ApiOperation(value = "采购详情入库") @PostMapping(value = "/updateStatusProcurement") public R updateStatusProcurement(@RequestParam @Valid UpdateStatusProcurementLastDto dto) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); String clinicSupplierId=null; if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); clinicSupplierId = crmClinic.getId(); } TErpProcurement erpProcurement = erpProcurementService.getById(dto.getId()); if(!erpProcurement.getClinicId().equals(clinicSupplierId)){ return R.fail("无权限操作"); } if(erpProcurement.getStatus()!=4){ return R.fail("目前状态无法入库"); } erpProcurement.setStatus(5); erpProcurementService.updateById(erpProcurement); List collect = dto.getList().stream().map(UpdateStatusProcurementDto::getId).collect(Collectors.toList()); List list = erpProcurementGoodsService.list(new LambdaQueryWrapper().in(TErpProcurementGoods::getId, collect)); TErpClinicWarehousing tErpClinicWarehousing = new TErpClinicWarehousing(); tErpClinicWarehousing.setClinicId(erpProcurement.getClinicId()); tErpClinicWarehousing.setProcurementId(erpProcurement.getId()); // tErpClinicWarehousing.setGoodsId(erpGoods.getId()); // tErpClinicWarehousing.setGoodsName(erpGoods.getGoodsName()); TCrmSupplier byId = crmSupplierService.getById(erpProcurement.getSupplierId()); tErpClinicWarehousing.setSupplierName(byId.getSupplierName()); // tErpClinicWarehousing.setQuasiNumber(erpGoods.getQuasiNumber()); // tErpClinicWarehousing.setSalesAmount(tErpProcurementGoods.getSalesAmount()); // tErpClinicWarehousing.setPurchaseCount(updateStatusProcurementDto.getPurchaseCount()); tErpClinicWarehousing.setTotalPrice(erpProcurement.getPayMoney()); // tErpClinicWarehousing.setUnitAmount(tErpProcurementGoods.getSalesAmount()); tErpClinicWarehousing.setWarehousingType(1); tErpClinicWarehousing.setType(1); tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()); erpClinicWarehousingService.save(tErpClinicWarehousing); // goodsId分组 for (UpdateStatusProcurementDto updateStatusProcurementDto : dto.getList()) { TErpProcurementGoods tErpProcurementGoods = list.stream().filter(t -> t.getId().equals(updateStatusProcurementDto.getId())).findFirst().get(); TErpGoods erpGoods = erpGoodsService.getById(tErpProcurementGoods.getGoodsId()); TErpClinicWarehousingBatch tErpClinicWarehousingGoods = new TErpClinicWarehousingBatch(); tErpClinicWarehousingGoods.setWarehousingId(tErpClinicWarehousing.getId()); tErpClinicWarehousingGoods.setWarehousingNumber(updateStatusProcurementDto.getPurchaseCount()); tErpClinicWarehousingGoods.setBatchNumber(updateStatusProcurementDto.getBatchNumber()); tErpClinicWarehousingGoods.setProductionDate(updateStatusProcurementDto.getProductionDate()); tErpClinicWarehousingGoods.setExpiryDate(updateStatusProcurementDto.getExpiryDate()); tErpClinicWarehousingGoods.setGoodsId(erpGoods.getId()); tErpClinicWarehousingGoods.setGoodsName(erpGoods.getGoodsName()); tErpClinicWarehousingGoods.setQuasiNumber(erpGoods.getQuasiNumber()); tErpClinicWarehousingGoods.setSalesAmount(tErpProcurementGoods.getSalesAmount()); erpClinicWarehousingBatchService.save(tErpClinicWarehousingGoods); if(erpGoods.getMaintenanceInterval()!=null){ TErpMaintenanceReminder tErpMaintenanceReminder = new TErpMaintenanceReminder(); tErpMaintenanceReminder.setClinicSupplierId(clinicSupplierId); tErpMaintenanceReminder.setMaintenanceType(2); tErpMaintenanceReminder.setWarehousingBatchId(tErpClinicWarehousingGoods.getId()); Integer day = Integer.valueOf(erpGoods.getMaintenanceInterval()); // 当前时间+day天 LocalDateTime time1 = LocalDateTime.now().plusDays(day); tErpMaintenanceReminder.setMaintenanceTime(time1); erpMaintenanceReminderService.save(tErpMaintenanceReminder); } } return R.ok(); } }