renkang
2025-05-13 0a99001be87811ebb884b8f3f491f48054a22330
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -84,7 +84,7 @@
        model.setEditor(model.getCreator());
        if(model.getStartDate().getTime() > System.currentTimeMillis()){
            model.setStatus(Constants.ZERO);
        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && model.getEndDate().getTime() > System.currentTimeMillis()){
        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && Utils.Date.getEnd(model.getEndDate()).getTime() > System.currentTimeMillis()){
            model.setStatus(Constants.ONE);
        }else{
            model.setStatus(Constants.TWO);
@@ -112,6 +112,12 @@
            t.setEditor(model.getCreator());
            t.setType(Constants.ZERO);
            list.add(t);
        }
        if(Constants.equalsInteger(model.getStatus(),Constants.ONE)){
            //更新房源数据为租赁中
            roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
                    .in(YwRoom::getId,model.getRoomList().stream().map(i->i.getId()).collect(Collectors.toList()))
            );
        }
        ywContractRoomMapper.insert(list);
    }
@@ -341,6 +347,13 @@
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public  Integer backRent(YwContract param){
        isParamValidBackRent(param);
        YwContract model = ywContractMapper.selectById(param.getId());
        if(Objects.isNull(model)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!(model.getStartDate().getTime()<=param.getBtDate().getTime()&&model.getEndDate().getTime()>=param.getBtDate().getTime())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退租日期错误,请检查退租日期需在合同日期内!");
        }
        param.setEditDate(new Date());
        param.setEditor(param.getLoginUserInfo().getId());
        //处理
@@ -364,30 +377,47 @@
        update.setBtRemark(getbackRentRemarkByParam(param));
        ywContractMapper.updateById(update);
        dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK, param.getLoginUserInfo().getRealname(),getbackRentLogByParam(param));
        //如果退租日期小于当前日期 则直接释放房源信息 未租赁
        if(Utils.Date.getEnd(param.getBtDate()).getTime()<System.currentTimeMillis()){
            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda()
                    .eq(YwContractRoom::getContractId, param.getId()));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
                //更新房源数据为未租赁
                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
                );
            }
        }
        return param.getId();
    }
    @Override
    public  void dealTimeOut(){
        List<YwContract> listA = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ZERO)
                .apply(" START_DATE < NOW()  AND END_DATE > NOW() ")
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(listA)){
        //定时处理合同执行中
        ywContractMapper.update(new UpdateWrapper<YwContract>()
                .lambda()
                .set(YwContract::getStatus,Constants.ONE)
                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ZERO)
                .apply(" START_DATE < NOW()  AND END_DATE > NOW() ")
                    .in(YwContract::getId,listA.stream().map(i->i.getId()).collect(Collectors.toList()))
        );
        //定时处理合同已过期
        ywContractMapper.update(new UpdateWrapper<YwContract>()
                        .lambda()
                .set(YwContract::getStatus,Constants.TWO)
                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
                .apply(" END_DATE < CURRENT_DATE ")
            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
                    listA.stream().map(i->i.getId()).collect(Collectors.toList())));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
                //更新房源数据为租赁中
                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
        );
            }
        }
    }
@@ -420,7 +450,7 @@
                        ||Constants.equalsInteger(bill.getPayStatus(),Constants.THREE)){
                    if(bill.getStartDate().getTime()<=param.getBtDate().getTime()){
                        canBills.add(bill);
                        canBillCount = canBillCount ++;
                        canBillCount = canBillCount + 1 ;
                    }else{
                        //如果还没开始,账单直接关闭
                        closeBills.add(bill);
@@ -432,11 +462,11 @@
                        noBills.add(bill);
                    }else{
                        canBills.add(bill);
                        canBillCount = canBillCount ++;
                        canBillCount = canBillCount + 1 ;
                    }
                }else  if(Constants.equalsInteger(bill.getPayStatus(),Constants.TWO) ){
                     canBills.add(bill);
                    canBillCount = canBillCount ++;
                    canBillCount = canBillCount + 1 ;
                }
            }
        }
@@ -464,12 +494,17 @@
                    if(fee.compareTo(new BigDecimal(0))== 0){
                        //如果费用正好,则修改账单信息为已结清
                        b.setPayStatus(Constants.ONE);
                        canBillCount = canBillCount --;
                    }else if(fee.compareTo(new BigDecimal(0))> 0){
                        canBillCount = canBillCount - 1 ;
                    }else if(fee.compareTo(new BigDecimal(0))< 0){
                        //如果需要进行退款,更新账单信息为待退款
                        b.setPayStatus(Constants.FOUR);
                    }else if(fee.compareTo(new BigDecimal(0)) < 0){
                        //如果账单还有款待收,则保持状态不变
                    }else if(fee.compareTo(new BigDecimal(0)) > 0){
                        //如果账单还有款待收,则更新账单为待收款
                        if(b.getPayStatus()==Constants.ZERO){
                            b.setPayStatus(Constants.ZERO);
                        }else if(b.getPayStatus()!=Constants.TWO){
                            b.setPayStatus(Constants.TWO);
                        }
                    }
                    b.setReceivableFee(editBill.getReceivableFee());
                }
@@ -654,8 +689,8 @@
            //2025-1-23 13:56:53 加入 前端入参调整后的账单信息
            List<YwContractBill> ywContractBillList = new ArrayList<>();
            //查询租赁条款
            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.TWO))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
                YwContractDetail ywContractDetail = details1.get(Constants.ZERO);
                YwContractBill zlBill = new YwContractBill();
                BeanUtils.copyProperties(model.getZlBillDTO(),zlBill);
@@ -691,8 +726,8 @@
                }
            }
            //查询物业账单
            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
                    || Constants.equalsInteger(model.getType(),Constants.ONE))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
                YwContractDetail ywContractDetail = details2.get(Constants.ZERO);
                YwContractBill wyBill = new YwContractBill();
                BeanUtils.copyProperties(model.getWyBillDTO(),wyBill);
@@ -1396,7 +1431,7 @@
                .selectAs(YwCustomer::getName, YwContract::getRenterName)
                .selectAs(YwProject::getName, YwContract::getProjectName)
                .select("t3.realname", YwContract::getCreatorName)
                .select("(select sum(r.area) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
                .select("(select sum(r.RENT_AREA) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
                .leftJoin(Company.class, Company::getId, YwContract::getCompanyId)
                .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getUserId)
                .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getCreator)
@@ -1457,14 +1492,12 @@
        //查询账单集合
        model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>()
                .selectAll(YwContractBill.class )
                //.select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE  else  -yw.ACT_RECEIVABLE_FEE end),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                .eq(  YwContractBill::getContractId,model.getId())
                .eq(YwContractBill::getIsdeleted,Constants.ZERO)
                .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate)));
        for (YwContractBill ywContractBill:model.getBillList()) {
            ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee());
//            ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee()));
        }
        model.setCanBackRentBills(new ArrayList<>());
        long nowStart = Utils.Date.getStart(date).getTime();
@@ -1574,6 +1607,9 @@
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.ge(YwContract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.le(YwContract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getStatusList() != null) {
            queryWrapper.in(YwContract::getStatus, pageWrap.getModel().getStatusList());
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.eq(YwContract::getEditor, pageWrap.getModel().getEditor());
@@ -1712,4 +1748,63 @@
        QueryWrapper<YwContract> wrapper = new QueryWrapper<>(ywContract);
        return ywContractMapper.selectCount(wrapper);
    }
    /**
     * 到期合同 未发起退租的进行数据调整 把合同下的房源释放 定时时间需要在每天晚上12点前
     */
    @Override
    public void updRoomLeaseNowStatus(){
        //定时处理合同已过期
        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
                .apply(" DATE(END_DATE) = CURRENT_DATE ")
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
            ywContractMapper.update(new UpdateWrapper<YwContract>()
                    .lambda()
                    .set(YwContract::getStatus,Constants.TWO)
                    .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
                    .in(YwContract::getId,ywContractList.stream().map(i->i.getId()).collect(Collectors.toList()))
            );
            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
                //更新房源数据为租赁中
                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
                );
            }
        }
    }
    /**
     * 退租中/已退租合同 把到了退租日期时间的数据 进行房源释放 定时时间需要在每天晚上12点前
     */
    @Override
    public void updRentContractStatus(){
        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.THREE,Constants.FOUR)
                .eq(YwContract::getBtDate,DateUtil.getCurrDate())
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
                //更新房源数据为待租赁
                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
                );
            }
        }
    }
}