xuhy
2 天以前 72aaf45389cd09c206ee1b90f0c7f5bf59782930
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TErpProcurementController.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddProcurementDto;
import com.ruoyi.system.dto.DetailProcurementSendDto;
import com.ruoyi.system.dto.UpdateStatusProcurementDto;
import com.ruoyi.system.dto.UpdateStatusProcurementLastDto;
import com.ruoyi.system.model.*;
@@ -23,10 +24,13 @@
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -54,12 +58,21 @@
    private final TErpClinicWarehousingService erpClinicWarehousingService;
    private final TErpClinicWarehousingBatchService erpClinicWarehousingBatchService;
    private final TCrmSupplierService crmSupplierService;
    private final TErpMaintenanceReminderService erpMaintenanceReminderService;
    private final TSysOtherConfigService sysOtherConfigService;
    private final TCrmClinicPointsService crmClinicPointsService;
    private final TCrmChangePointsService crmChangePointsService;
    private final TCrmBranchService crmBranchService;
    private final TCrmSalespersonService crmSalespersonService;
    private final TErpProcurementCommissionService erpProcurementCommissionService;
    private final TCrmWarehouseService crmWarehouseService;
    @Autowired
    public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService,TCrmClinicService crmClinicService,TErpProcurementGoodsService erpProcurementGoodsService
    , TErpGoodsService erpGoodsService,TErpClinicWarehousingService erpClinicWarehousingService,TErpClinicWarehousingBatchService erpClinicWarehousingBatchService,
                                     TCrmSupplierService crmSupplierService) {
    public TErpProcurementController(TErpProcurementService erpProcurementService, TokenService tokenService, TCrmClinicService crmClinicService, TErpProcurementGoodsService erpProcurementGoodsService
    , TErpGoodsService erpGoodsService, TErpClinicWarehousingService erpClinicWarehousingService, TErpClinicWarehousingBatchService erpClinicWarehousingBatchService,
                                     TCrmSupplierService crmSupplierService, TErpMaintenanceReminderService erpMaintenanceReminderService, TSysOtherConfigService sysOtherConfigService, TCrmClinicPointsService crmClinicPointsService, TCrmChangePointsService crmChangePointsService, TCrmBranchService crmBranchService, TCrmSalespersonService crmSalespersonService, TErpProcurementCommissionService erpProcurementCommissionService, TCrmWarehouseService crmWarehouseService) {
        this.erpProcurementService = erpProcurementService;
        this.tokenService = tokenService;
        this.crmClinicService = crmClinicService;
@@ -68,6 +81,16 @@
        this.erpClinicWarehousingService = erpClinicWarehousingService;
        this.erpClinicWarehousingBatchService = erpClinicWarehousingBatchService;
        this.crmSupplierService = crmSupplierService;
        this.erpMaintenanceReminderService = erpMaintenanceReminderService;
        this.sysOtherConfigService = sysOtherConfigService;
        this.crmClinicPointsService = crmClinicPointsService;
        this.crmChangePointsService = crmChangePointsService;
        this.crmBranchService = crmBranchService;
        this.crmSalespersonService = crmSalespersonService;
        this.erpProcurementCommissionService = erpProcurementCommissionService;
        this.crmWarehouseService = crmWarehouseService;
    }
@@ -81,6 +104,18 @@
        SysUser user = tokenService.getLoginUser().getUser();
        return R.ok(erpProcurementService.pageList(query,user));
    }
    /**
     * erp采购管理分页列表
     */
    @ApiOperation(value = "erp采购管理分页列表--仓库专用")
    @PostMapping(value = "/pageListWarehouse")
    public R<PageInfo<TErpProcurementVo>> pageListWarehouse(@RequestBody TErpProcurementQuery query) {
        SysUser user = tokenService.getLoginUser().getUser();
        return R.ok(erpProcurementService.pageListWarehouse(query,user));
    }
@@ -151,6 +186,48 @@
        return R.ok( erpProcurementService.detailProcurement(clinicSupplierId, user, id));
    }
    @ApiOperation(value = "采购详情--发货(仓库角色)")
    @PostMapping(value = "/detailProcurementSend")
    public R<?> detailProcurementSend(@RequestBody DetailProcurementSendDto dto) {
        SysUser user = tokenService.getLoginUser().getUser();
        Integer roleType = user.getRoleType();
        List<String> clinicSupplierId=null;
        if(roleType == 6){
            TCrmWarehouse warehouse = crmWarehouseService.getOne(Wrappers.lambdaQuery(TCrmWarehouse.class)
                    .eq(TCrmWarehouse::getUserId, user.getUserId())
                    .last("LIMIT 1"));
            // 供应商
            clinicSupplierId = crmSupplierService.list(Wrappers.lambdaQuery(TCrmSupplier.class)
                    .eq(TCrmSupplier::getWarehouseId, warehouse.getId())).stream().map(TCrmSupplier::getId).collect(Collectors.toList());
        }
        erpProcurementService.detailProcurementSend(clinicSupplierId, user, dto.getId(),dto.getLogisticsNumber());
        return R.ok();
    }
//    @ApiOperation(value = "采购详情--仓库角色专用")
//    @GetMapping(value = "/detailProcurementWarehouse/{id}")
//    public R<DetailProcurementVO> detailProcurementWarehouse(@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.detailProcurementWarehouse(clinicSupplierId, user, id));
//    }
    @ApiOperation(value = "采购草稿")
    @GetMapping(value = "/getProcurementDraft")
    public R<ArrayList<DetailProcurementNextVO>> getProcurementDraft() {
@@ -165,7 +242,7 @@
            clinicSupplierId = crmClinic.getId();
        }
        ArrayList<DetailProcurementNextVO> detailProcurementNextVOS = new ArrayList<>();
        List<TErpProcurement> list1 = erpProcurementService.list(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getStatus, 1).orderByDesc(BaseModel::getCreateTime));
        List<TErpProcurement> list1 = erpProcurementService.list(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getClinicId, clinicSupplierId).eq(TErpProcurement::getStatus, 1).orderByDesc(TErpProcurement::getCreateTime));
        if(list1.isEmpty()){
            return R.ok(detailProcurementNextVOS);
        }
@@ -191,13 +268,15 @@
    @ApiOperation(value = "采购详情入库")
    @PostMapping(value = "/updateStatusProcurement")
    public R<DetailProcurementVO> updateStatusProcurement(@RequestParam @Valid UpdateStatusProcurementLastDto dto) {
    @Transactional(rollbackFor = Exception.class)
    public R<DetailProcurementVO> updateStatusProcurement(@RequestBody @Valid UpdateStatusProcurementLastDto dto) {
        SysUser user = tokenService.getLoginUser().getUser();
        Integer roleType = user.getRoleType();
        String clinicSupplierId=null;
        TCrmClinic crmClinic = null;
        if(roleType == 5){
            // 诊所
            TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class)
            crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class)
                    .eq(TCrmClinic::getUserId, user.getUserId())
                    .last("LIMIT 1"));
            clinicSupplierId = crmClinic.getId();
@@ -210,6 +289,8 @@
            return R.fail("目前状态无法入库");
        }
        erpProcurement.setStatus(5);
        erpProcurement.setWarehousingUserId(user.getUserId().toString());
        erpProcurement.setWarehousingTime(LocalDateTime.now());
        erpProcurementService.updateById(erpProcurement);
        List<String> collect = dto.getList().stream().map(UpdateStatusProcurementDto::getId).collect(Collectors.toList());
@@ -229,8 +310,35 @@
//        tErpClinicWarehousing.setUnitAmount(tErpProcurementGoods.getSalesAmount());
        tErpClinicWarehousing.setWarehousingType(1);
        tErpClinicWarehousing.setType(1);
        tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow());
        erpClinicWarehousingService.save(tErpClinicWarehousing);
        TErpClinicWarehousing last = erpClinicWarehousingService.getOne(new LambdaQueryWrapper<TErpClinicWarehousing>().orderByDesc(BaseModel::getCreateTime).orderByDesc(TErpClinicWarehousing::getWarehouseNo).last("LIMIT 1"));
        if(last==null){
            tErpClinicWarehousing.setWarehouseNo("G"+ DateUtils.dateTimeNow()+"00001");
        }else {
            String lastProcurementCode = last.getWarehouseNo();
            String datePart = "G" + DateUtils.dateTimeNow();
            // 直接获取后五位数字并+1,不考虑是否同一天
            try {
                String numberPart = lastProcurementCode.substring(Math.max(0, lastProcurementCode.length() - 5));
                int number = Integer.parseInt(numberPart);
                if (number < 99999) {
                    number++;
                } else {
                    number = 2; // 达到99999后重置为00002
                }
                tErpClinicWarehousing.setWarehouseNo(datePart + String.format("%05d", number));
            } catch (NumberFormatException e) {
                // 如果解析失败,默认从00001开始
                tErpClinicWarehousing.setWarehouseNo(datePart + "00001");
            }
        }
        tErpClinicWarehousing.setProcurementId(erpProcurement.getId());
        try {
            erpClinicWarehousingService.save(tErpClinicWarehousing);
        }catch (Exception e){
            throw new RuntimeException("网络繁忙,请重试");
        }
        // goodsId分组
        for (UpdateStatusProcurementDto updateStatusProcurementDto : dto.getList()) {
            TErpProcurementGoods tErpProcurementGoods = list.stream().filter(t -> t.getId().equals(updateStatusProcurementDto.getId())).findFirst().get();
@@ -248,7 +356,114 @@
            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);
            }
        }
        BigDecimal payMoney = erpProcurement.getPayMoney();
        // 诊所添加积分  分公司添加积分 业务员添加积分    分公司添加分佣记录  业务员添加分佣记录
        TSysOtherConfig sysOtherConfig= sysOtherConfigService.getById(1);
        if(sysOtherConfig!=null && sysOtherConfig.getPointsExpiration()!=null){
            Integer pointsExpiration = sysOtherConfig.getPointsExpiration();
            if(sysOtherConfig.getExpireUnit().equals(2)){
                pointsExpiration = pointsExpiration * 31;
            }
            if(sysOtherConfig.getExpireUnit().equals(3)){
                pointsExpiration = pointsExpiration * 365;
            }
            Double procurementConditions = sysOtherConfig.getProcurementConditions();
            // 积分数
            int points = payMoney.divide(BigDecimal.valueOf(procurementConditions), 2, RoundingMode.HALF_DOWN).intValue();
            TCrmClinicPoints tCrmClinicPoints = new TCrmClinicPoints();
            tCrmClinicPoints.setClinicId(erpProcurement.getClinicId());
            tCrmClinicPoints.setPoints(points);
            tCrmClinicPoints.setExpireTime(LocalDateTime.now().plusDays(pointsExpiration));
            crmClinicPointsService.save(tCrmClinicPoints);
            TCrmChangePoints tCrmChangePoints = new TCrmChangePoints();
            tCrmChangePoints.setProcurementId(erpProcurement.getId());
            tCrmChangePoints.setBranchSalespersonId(erpProcurement.getClinicId());
            tCrmChangePoints.setUserType(3);
            tCrmChangePoints.setChangeType(1);
            tCrmChangePoints.setChangeReason(1);
            tCrmChangePoints.setChangeValue(points);
            crmChangePointsService.save(tCrmChangePoints);
        }
        String branchId = crmClinic.getBranchId();
        TCrmBranch branch = crmBranchService.getById(branchId);
        if(branch!=null){
            // 积分数
            int points = payMoney.divide(branch.getPointsCommission(), 2, RoundingMode.HALF_DOWN).intValue();
            TCrmChangePoints tCrmChangePoints = new TCrmChangePoints();
            tCrmChangePoints.setProcurementId(erpProcurement.getId());
            tCrmChangePoints.setBranchSalespersonId(branchId);
            tCrmChangePoints.setUserType(1);
            tCrmChangePoints.setChangeType(1);
            tCrmChangePoints.setChangeReason(1);
            tCrmChangePoints.setChangeValue(points);
            crmChangePointsService.save(tCrmChangePoints);
            branch.setUserPoints(branch.getUserPoints()+points);
            crmBranchService.updateById(branch);
            // 分佣
            BigDecimal commission = branch.getMoneyCommission().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN).multiply(payMoney).setScale(2, RoundingMode.HALF_UP);
            TErpProcurementCommission tErpProcurementCommission = new TErpProcurementCommission();
            tErpProcurementCommission.setProcurementId(erpProcurement.getId());
            tErpProcurementCommission.setCommissionType(1);
            tErpProcurementCommission.setBranchSalespersonId(branchId);
            tErpProcurementCommission.setMoney(commission);
            erpProcurementCommissionService.save(tErpProcurementCommission);
        }
        String salespersonId = crmClinic.getSalespersonId();
        TCrmSalesperson salesperson = crmSalespersonService.getById(salespersonId);
        if(salesperson!=null){
            // 积分数
            int points = payMoney.divide(salesperson.getPointsCommission(), 2, RoundingMode.HALF_DOWN).intValue();
            TCrmChangePoints tCrmChangePoints = new TCrmChangePoints();
            tCrmChangePoints.setProcurementId(erpProcurement.getId());
            tCrmChangePoints.setBranchSalespersonId(salespersonId);
            tCrmChangePoints.setUserType(2);
            tCrmChangePoints.setChangeType(1);
            tCrmChangePoints.setChangeReason(1);
            tCrmChangePoints.setChangeValue(points);
            crmChangePointsService.save(tCrmChangePoints);
            salesperson.setUserPoints(salesperson.getUserPoints()+points);
            crmSalespersonService.updateById(salesperson);
            // 分佣
            BigDecimal commission = salesperson.getMoneyCommission().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN).multiply(payMoney).setScale(2, RoundingMode.HALF_UP);
            TErpProcurementCommission tErpProcurementCommission = new TErpProcurementCommission();
            tErpProcurementCommission.setProcurementId(erpProcurement.getId());
            tErpProcurementCommission.setCommissionType(2);
            tErpProcurementCommission.setBranchSalespersonId(salespersonId);
            tErpProcurementCommission.setMoney(commission);
            erpProcurementCommissionService.save(tErpProcurementCommission);
        }
        return R.ok();
    }
@@ -259,5 +474,6 @@
}