From 7b833290390c93a26b5574008d15de9ef17c1bc8 Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Mon, 14 Nov 2022 16:32:16 +0800 Subject: [PATCH 1/7] fix bug --- .../impl/WxRentContractServiceImpl.java | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 905af20fd..0a7023099 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -1389,6 +1389,18 @@ public class WxRentContractServiceImpl implements WxRentContractService { } + private static Date getCurrentYearRentDate(Date yearEndDate,Date rentDate){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(yearEndDate); + + Calendar rentCalendar = Calendar.getInstance(); + rentCalendar.setTime(rentDate); + + calendar.set(Calendar.DAY_OF_MONTH,rentCalendar.get(Calendar.DAY_OF_MONTH)); + calendar.set(Calendar.MONTH, rentCalendar.get(Calendar.MONTH)); + return calendar.getTime(); + } + public Map buildRent(int receivePeriod, long[] priceArrs, List yearList, int dayType, WxRentContract wxRentContract, Long userId, int billcount, Integer isPreview, String shopInfoStr,boolean saveDb) { WxPayAccountBill wxPayAccountBill = wxPayAccountBillService.getByTenantInfo(wxRentContract); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); @@ -1422,6 +1434,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { long needpay = 0; boolean flag = false; + //此处逻辑处理这一年和下一年交接那一期账单。 if(yearList.size() > 1) { if (endDate!=null && (sd.format(billTimeVo.getStartDate()).equals(sd.format(endDate)) || billTimeVo.getStartDate().after(endDate) || billTimeVo.getEndDate().after(endDate) )) { if(yearList.size() > 1) { @@ -1436,18 +1449,26 @@ public class WxRentContractServiceImpl implements WxRentContractService { long needpayAfter = 0; //同一天,算一天 if(sd.format(billTimeVo.getStartDate()).equals(sd.format(billTimeVo.getEndDate()))){ - needpayFront = getNeedPayMoney(wxRentContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb,dayType,receivePeriod,false); + needpayFront = getNeedPayMoney(wxRentContract,priceArrs[index-1],billTimeVo.getStartDate(),endDate,i,billTimeVoList.size(),saveDb,dayType,receivePeriod,false,false); }else{ if(billTimeVo.getStartDate().before(endDate)){ if (EnumRentContractType.RENT_BY_JOINT.getCode().equals(wxRentContract.getType()) && EnumMissTimeType.PERIOD.getCode().equals(wxRentContract.getBusDiscountTime())) { //设置跳点率为年周期 price不变 needpayFront = priceArrs[index - 1]; }else { - needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate, Calendar.DATE, -1), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true); - needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true); + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], billTimeVo.getStartDate(), DateUtils.getDaySet(endDate, Calendar.DATE, -1), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,false); + needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], endDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,false); } }else{ - needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod,false); + //如果是按自然月,则这一年和下一年交叉部分需要重新计算 + if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { + Date currentYearRentDate = getCurrentYearRentDate(endDate,wxRentContract.getRentalStartDate()); + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], endDate, currentYearRentDate, i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); + needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], DateUtils.getDaySet(currentYearRentDate, Calendar.DATE, 1), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); + }else { + //按账单日 + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod,false,false); + } } } needpay = needpayFront+needpayAfter; @@ -1466,7 +1487,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //计算金额 if(!flag){ - needpay = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb,dayType,receivePeriod,false); + needpay = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(),saveDb,dayType,receivePeriod,false,false); } WxBillRent wxBillRent = new WxBillRent(); @@ -1519,7 +1540,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { return resultMap; } - public long getNeedPayMoney(WxRentContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod,boolean part){ + public long getNeedPayMoney(WxRentContract wxRentContract,long price,Date startDate,Date endDate,int i,int billTimeVoListSize,boolean saveDb,int dayType,int receivePeriod,boolean part,boolean monthCalDay){ long needpay; //按日 if (wxRentContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){ @@ -1591,7 +1612,12 @@ public class WxRentContractServiceImpl implements WxRentContractService { if(isFirstDay(startDate)){ months++; } - needpay = new Double(months * priceD).longValue(); + //如果当月费用需要按天计算 + if (monthCalDay) { + needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + }else { + needpay = new Double(months * priceD).longValue(); + } } } return needpay; @@ -3288,12 +3314,4 @@ public class WxRentContractServiceImpl implements WxRentContractService { return count; } - - public static void main(String[] args) { - String s = "{\"siteMoney\":\"2\",\"facilityMoney\":\"3\",\"administratorMoney\":\"4\"}"; - JSONObject jsonObject = JSONObject.parseObject(s); - String siteMoney = jsonObject.getString("siteMoney"); - System.out.println(siteMoney); - } - } From a256c2fefc0a7c03042d3802d8fb0278d53a4d6c Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Mon, 14 Nov 2022 16:56:23 +0800 Subject: [PATCH 2/7] fix bug --- .../com/iformall/service/impl/WxRentContractServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 0a7023099..079e9d431 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -1463,8 +1463,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { //如果是按自然月,则这一年和下一年交叉部分需要重新计算 if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())) { Date currentYearRentDate = getCurrentYearRentDate(endDate,wxRentContract.getRentalStartDate()); - needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], endDate, currentYearRentDate, i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); - needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], DateUtils.getDaySet(currentYearRentDate, Calendar.DATE, 1), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); + needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index - 1], endDate, DateUtils.getDaySet(currentYearRentDate, Calendar.DATE, -1), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); + needpayAfter = getNeedPayMoney(wxRentContract, priceArrs[index], currentYearRentDate, billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb, dayType, receivePeriod,true,true); }else { //按账单日 needpayFront = getNeedPayMoney(wxRentContract, priceArrs[index], billTimeVo.getStartDate(), billTimeVo.getEndDate(), i, billTimeVoList.size(), saveDb,dayType,receivePeriod,false,false); From d1afb648c2ad87e5fd609d454b2e551dc1e59b77 Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 15 Nov 2022 10:20:50 +0800 Subject: [PATCH 3/7] //cuser --- .../iformall/service/cuser/wx/WxCUserServiceAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java index 2c63c66f5..3d2080092 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -127,7 +127,12 @@ public class WxCUserServiceAdapter extends BasicCUserService implements CUserSer updateUser.setId(cuser.getId()); updateUser.updateTenantInfo(cuser); updateUser.setUnionId(userInfo.getUnionId()); - updateUser.setNickName(userInfo.getNickName()); + if(userInfo.getNickName() == null){ + updateUser.setNickName(AppUtils.getAppId());//获取不到微信昵称 + }else{ + updateUser.setNickName(userInfo.getNickName()); + } + updateUser.setGender(Integer.parseInt(userInfo.getGender())); updateUser.setAvatarUrl(userInfo.getAvatarUrl()); updateUser.setProvince(userInfo.getProvince()); From 8f94ad23f2f0371eecc4912faa8e26ae4600fbf9 Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Tue, 15 Nov 2022 14:45:45 +0800 Subject: [PATCH 4/7] fix bug --- .../iformall/service/impl/WxRentContractServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 079e9d431..83ef1f758 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -1614,7 +1614,10 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //如果当月费用需要按天计算 if (monthCalDay) { - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + //取整 + //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + //四舍五入 + needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); }else { needpay = new Double(months * priceD).longValue(); } @@ -1622,7 +1625,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } return needpay; } - + public void setExpiredDay(WxBillRent wxBillRent,int dayType, int receivePeriod){ //截止收租日在当前时间之前 Date date = new Date(); From 306f7a644139beff495e00e7e4ab70c773acb3d9 Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Tue, 15 Nov 2022 15:14:33 +0800 Subject: [PATCH 5/7] fix bug --- .../impl/WxRentContractServiceImpl.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index 83ef1f758..c52b590a6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -1546,7 +1546,10 @@ public class WxRentContractServiceImpl implements WxRentContractService { if (wxRentContract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){ Double priceD = new Double(price); double needpayD = WxRentContractServiceImpl.getNeedPay(0,priceD,startDate,endDate); - needpay = new Double(needpayD).longValue(); + //取整 + //needpay = new Double(needpayD).longValue(); + //四舍五入 + needpay = new BigDecimal(needpayD).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); }else{ Double priceD = new Double(price); if (EnumRentContractType.RENT_BY_JOINT.getCode().equals(wxRentContract.getType())) { @@ -1568,7 +1571,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { //生成金额直接计算 if(!saveDb){ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,part)).longValue(); + //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,part)).longValue(); + needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,part)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); return needpay; } @@ -1585,7 +1589,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { int months = getMonths(sdM.format(startDate)+"-01",sdM.format(DateUtils.getDaySet(endDate,Calendar.DATE,1))+"-01"); needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); } }else if(i == 0){//第一期 if(wxRentContract.getAdjustPeriod().equals(EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode())){ @@ -1594,7 +1599,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { months++; needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); } }else{ if(isFirstDay(startDate)){ @@ -1604,7 +1610,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { } needpay = new Double(months * priceD).longValue(); }else{ - needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); + needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); } } }else{//中间 @@ -1614,9 +1621,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { } //如果当月费用需要按天计算 if (monthCalDay) { - //取整 //needpay = new Double(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).longValue(); - //四舍五入 needpay = new BigDecimal(getMonthNeedPay(priceD, startDate, endDate,dayType,receivePeriod,false)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); }else { needpay = new Double(months * priceD).longValue(); From 886eebc581d90afde236450fa7df540f7105c432 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 16 Nov 2022 11:02:07 +0800 Subject: [PATCH 6/7] //cps --- .../iformall/controller/basic/TtPoiPlanController.java | 2 +- .../service/impl/TtCouponGoodsServiceImpl.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtPoiPlanController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtPoiPlanController.java index 48b0ab30f..3d7165a17 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtPoiPlanController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/TtPoiPlanController.java @@ -152,7 +152,7 @@ public class TtPoiPlanController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"定向达人抖音号为空"); } //达人去重 - List collect = record.getDouyinIdList().stream().collect(Collectors.toList()); + List collect = record.getDouyinIdList().stream().distinct().collect(Collectors.toList()); record.setDouyinIdList(collect); if(record.getCouponId() == null){ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java index db76a33d0..1d3dcf6b0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/TtCouponGoodsServiceImpl.java @@ -663,6 +663,9 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { if(oldTakeRate == null || StringUtils.isBlank(oldTakeRate.getDouyinId())){ throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); } + if(!EnumCpsPlanStatus.ING.getCode().equals(oldTakeRate.getStatus())){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该计划已取消或已完成"); + } List addDouyinIdList = new ArrayList<>(); addDouyinIdList.addAll(record.getDouyinIdList()); @@ -682,6 +685,13 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { } if(EnumCpsPlanContentType.VIDEO.getCode().equals(record.getContentType())){ + //当时间改变时, + if(record.getStartTime() != null && record.getStartTime().after(oldTakeRate.getStartTime())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"开始时间只能向前修改"); + } + if(record.getEndTime() != null && record.getEndTime().before(oldTakeRate.getEndTime())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"结束时间只能向后延长"); + } //当时间未改变时, if(record.getStartTime() == null || record.getStartTime().equals(oldTakeRate.getStartTime())){ record.setStartTime(null); From fed09e6cc83f7166cb8dade2e2fde0e16723db7e Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 16 Nov 2022 12:10:42 +0800 Subject: [PATCH 7/7] //cps --- .../src/main/java/com/iformall/mapper/WxMallMapper.java | 3 +++ .../java/com/iformall/service/impl/WxMallServiceImpl.java | 1 + mallinkService/src/main/resources/mapper/WxMallMapper.xml | 6 +++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java index c5f8e8fc2..502d43285 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java @@ -20,6 +20,7 @@ public interface WxMallMapper extends CommonMapper { String queryMenusByTenantInfo(WxMall wxMall); + void updateUnSubMall(@Param(value = "parentTenantId")String parentTenantId); void undateSubmall(@Param(value = "parentTenantId")String parentTenantId, @Param(value = "tenantIds")List tenantIds); List listAsSelectMall(@Param(value = "id")Long id); @@ -27,4 +28,6 @@ public interface WxMallMapper extends CommonMapper { List getTenantEntitys(TenantEntity tenantEntity); List findListAadmin(WxMall record); + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java index 5de801946..12b00b4c5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java @@ -238,6 +238,7 @@ public class WxMallServiceImpl implements WxMallService { @Override public void undateSubmall(String parentTenantId, List tenantIds) { + wxMallMapper.updateUnSubMall(parentTenantId); wxMallMapper.undateSubmall(parentTenantId, tenantIds); TenantEntity tenantEntity = new TenantEntity(); tenantEntity.setTenantId(parentTenantId); diff --git a/mallinkService/src/main/resources/mapper/WxMallMapper.xml b/mallinkService/src/main/resources/mapper/WxMallMapper.xml index 30216f082..60eaab8e0 100644 --- a/mallinkService/src/main/resources/mapper/WxMallMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallMapper.xml @@ -207,9 +207,13 @@ and m.`parent_tenant_id` = #{parentTenantId} + + + + update wx_mall set parent_tenant_id = null where parent_tenant_id = #{parentTenantId} + - update wx_mall set parent_tenant_id = null where parent_tenant_id = #{parentTenantId} ; update wx_mall set parent_tenant_id = #{parentTenantId} where tenant_id in