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();
}
}