Przeglądaj źródła

//OfflineActivity

release_toaliyun_real
xiaohu 1 rok temu
rodzic
commit
7de4a7a9b1
13 zmienionych plików z 263 dodań i 8 usunięć
  1. +18
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java
  2. +0
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java
  3. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java
  4. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java
  5. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java
  6. +4
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java
  7. +1
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java
  8. +163
    -3
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  9. +3
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java
  10. +14
    -0
      mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java
  11. +40
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml
  12. +1
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml
  13. +13
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml

+ 18
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java Wyświetl plik

@@ -10,17 +10,21 @@ import com.iformall.domain.po.*;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import jodd.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;

@@ -37,6 +41,9 @@ public class WxOfflineActivityController extends BaseController {
@Autowired
private WxOfflineActivityService wxOfflineActivityService;

@Autowired
private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService;

@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@@ -52,7 +59,6 @@ public class WxOfflineActivityController extends BaseController {
return new ResultData(page);
}
@ApiOperation("新增修改接口")
@PostMapping("saveOrUpdate")
public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) {
@@ -129,5 +135,16 @@ public class WxOfflineActivityController extends BaseController {
return new ResultData(activity);
}

@ApiOperation("活动奖品发放明细导出")
@GetMapping("/grantExport")
public void grantExport(@ModelAttribute WxOfflineActivity wxOfflineActivity, HttpServletRequest request, HttpServletResponse response) {
if(wxOfflineActivity.getId() == null){
throw new MallinkException(Result.ERROR,"ID 为空");
}

TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantInfo);
wxOfflineActivityGrantAwardService.activityGrantExport(request,response,wxOfflineActivity);
}

}

+ 0
- 2
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java Wyświetl plik

@@ -63,8 +63,6 @@ public class WxOfflineActivityRecordController extends BaseController {
return new ResultData(waitAudiCount);
}



@ApiOperation("导出")
@GetMapping("/export")
public void export(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) {


+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java Wyświetl plik

@@ -86,6 +86,8 @@ public class WxOfflineActivityGrantAward extends TenantEntity{
@TableField(value = "create_by")
private Long createBy;
@TableField(exist = false)
private List<Long> createByName;
@TableField(exist = false)
private List<Long> createByIds;

/**


+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java Wyświetl plik

@@ -19,6 +19,8 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflin
List<Long> getRecordIdList(WxOfflineActivityGrantAward grantAwardQ);

WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ);
}




+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java Wyświetl plik

@@ -29,6 +29,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineAct
Integer getCount(WxOfflineActivityRecord recordQ);

Integer getMerchantCount(WxOfflineActivityRecord recordQ);

List<WxOfflineActivityRecord> findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId);
}




+ 4
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java Wyświetl plik

@@ -1,5 +1,6 @@
package com.iformall.service;

import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iformall.domain.po.WxOfflineActivityRecord;
@@ -7,6 +8,7 @@ import com.iformall.domain.po.base.TenantEntity;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.util.List;
import java.util.Map;

@@ -30,4 +32,6 @@ public interface WxOfflineActivityGrantAwardService {
void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord);

WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity);
}

+ 1
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java Wyświetl plik

@@ -451,7 +451,7 @@ public class WxGameServiceImpl implements WxGameService {
List<Object> couponIdsList = wxGame.getCouponIdsList();
int x = (int)(Math.random()*100+1);
int y = 0;
if(couponIdsList != null || couponIdsList.size() > 0){
if(couponIdsList != null && !couponIdsList.isEmpty()){
for (Object a:couponIdsList) {
int weight = 0;
if(a instanceof WxCouponChannelVo){


+ 163
- 3
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java Wyświetl plik

@@ -1,5 +1,7 @@
package com.iformall.service.impl;

import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants;
import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +15,7 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import com.iformall.utils.DownFileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,6 +23,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.NumberFormat;
import java.util.*;
import java.util.function.Function;
@@ -60,6 +65,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
@Autowired
WxOfflineActivityItemService wxOfflineActivityItemService;

@Autowired
WxOfflineActivityService wxOfflineActivityService;

@Autowired
WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService;

@@ -183,7 +191,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
activityItem.setIsMeet(true);
//奖项限制数量
int limitCount = 0;
if(activityItem.getAwardsItemPrice() != null || activityItem.getAwardsItemPrice() > 0){
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice() > 0){
limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice();
}
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
@@ -345,7 +353,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
}
//奖项限制数量
int limitCount = 0;
if(activityItem.getAwardsItemPrice() != null || activityItem.getAwardsItemPrice() > 0){
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice() > 0){
limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice();
}
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
@@ -406,7 +414,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);

}

}
if(i == 0){
throw new MallinkException(Result.ERROR, "请检查是否有活动奖项");
@@ -519,6 +526,159 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
return grantAward;
}

@Override
public void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity) {
WxOfflineActivity activity = wxOfflineActivityService.getInfoById(wxOfflineActivity.getId(), wxOfflineActivity.getTenantId());
if(activity == null){
throw new MallinkException(Result.ERROR, "未查询到活动");
}
List<ExcelExportEntity> headList = getActivityGrantExportHead(activity);

List<Map<String,Object>> activityGrantObjectList = new ArrayList<>();

WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(wxOfflineActivity);
grantAwardQ.setActivityId(wxOfflineActivity.getId());
List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ);
if(grantAwardList != null){
WxMerchant merchantQ = new WxMerchant();
merchantQ.updateTenantInfo(wxOfflineActivity);
Map<Long, String> merchantMap = wxMerchantService.getIdAndNamesMap(merchantQ);

MallUserInfo userInfoQ = new MallUserInfo();
userInfoQ.updateTenantInfo(wxOfflineActivity);
Map<Long, MallUserInfo> userMap = mallUserInfoService.getUserMap(userInfoQ);
//
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(wxOfflineActivity);
grantItemQ.setActivityId(wxOfflineActivity.getId());
List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ);
Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(Collectors.groupingBy(WxOfflineActivityGrantItem::getGrantId));
for (WxOfflineActivityGrantAward grantAward : grantAwardList) {
List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findGrantList(grantAward.getId(),grantAward.getTenantId());
List<WxOfflineActivityGrantItem> grantItemList = grantItemMap.get(grantAward.getId());
Map<String,Object> activityGrantObject = new HashMap<>();
activityGrantObject.put("activityName",activity.getName());
List<String> merchantOrder = new ArrayList<>();
for (WxOfflineActivityRecord record : recordList) {
merchantOrder.add(record.getOrderNo()+"["+merchantMap.get(record.getMerchantId())+"]");
}
activityGrantObject.put("merchantOrder",merchantOrder.stream().collect(Collectors.joining(";")));
activityGrantObject.put("orderMoneySum",grantAward.getOrderMoneySum());
activityGrantObject.put("cusName",grantAward.getCusName());
activityGrantObject.put("cusPhone",grantAward.getCusPhone());
activityGrantObject.put("realName",grantAward.getRealName());
activityGrantObject.put("realCard",grantAward.getRealCard());
activityGrantObject.put("createByName",grantAward.getCreateBy()!=null?userMap.get(grantAward.getCreateBy()).getName():"");
activityGrantObject.put("createDate",DateUtils.date2String(grantAward.getCreateDate()));
Map<Long, List<WxOfflineActivityGrantItem>> granActivityItemMap = grantItemList.stream().collect(Collectors.groupingBy(WxOfflineActivityGrantItem::getActivityItemId));
for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) {
List<WxOfflineActivityGrantItem> granActivityItemList = granActivityItemMap.get(activityItem.getId());
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
Map<Long, WxOfflineActivityGrantItem> granAwardItamMap = new HashMap<>();
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
granAwardItamMap = granActivityItemList.stream().collect(Collectors.toMap(WxOfflineActivityGrantItem::getAwardItamId, Function.identity()));
}
for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
WxOfflineActivityGrantItem grantAwardsItem = granAwardItamMap.get(awardsItem.getId());
if(grantAwardsItem != null){
activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),grantAwardsItem.getAwardCount());
} else {
activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),0);
}
}
}else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
activityGrantObject.put(String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardName());
}
}else if(EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())){
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
activityGrantObject.put("r"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getCashBackRatio());
activityGrantObject.put("p"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardPrice());
}else{
activityGrantObject.put("r"+String.valueOf(activityItem.getId()),0);
activityGrantObject.put("p"+String.valueOf(activityItem.getId()),0);
}
}
}
activityGrantObject.put("lotteryNum",grantAward.getLotteryNum());
activityGrantObject.put("lotteryCount",grantAward.getLotteryCount());
activityGrantObject.put("anniversaryLotteryNum",grantAward.getAnniversaryLotteryNum());
// if(StringUtils.isNotBlank(grantAward.getSignImg())){
// try{
// activityGrantObject.put("signImg",DownFileUtil.url2byte(grantAward.getSignImg()));
// }catch (Exception e){}
// }
activityGrantObjectList.add(activityGrantObject);
}
}

excelService.exportExcel(headList, activityGrantObjectList, null, "活动奖品发放明细", "活动奖品发放明细.xlsx",true, response);
}

private List<ExcelExportEntity> getActivityGrantExportHead(WxOfflineActivity activity){
List<ExcelExportEntity> headList = new ArrayList<>();
ExcelExportEntity entity1 = new ExcelExportEntity("活动名称","activityName",20);
headList.add(entity1);
ExcelExportEntity entity2 = new ExcelExportEntity("订单[门店]","merchantOrder",20);
headList.add(entity2);
ExcelExportEntity entity3 = new ExcelExportEntity("订单总金额","orderMoneySum",20);
headList.add(entity3);
ExcelExportEntity entity4 = new ExcelExportEntity("客户姓名","cusName",20);
headList.add(entity4);
ExcelExportEntity entity5 = new ExcelExportEntity("客户电话","cusPhone",20);
headList.add(entity5);
ExcelExportEntity entity6 = new ExcelExportEntity("实际领奖人","realName",20);
headList.add(entity6);
ExcelExportEntity entity7 = new ExcelExportEntity("实际领奖人身份证号","realCard",20);
headList.add(entity7);
ExcelExportEntity entity8 = new ExcelExportEntity("发奖人","createByName",20);
headList.add(entity8);
ExcelExportEntity entity9 = new ExcelExportEntity("发奖时间","createDate",20);
headList.add(entity9);

for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) {
//抽奖活动
//【活动项名称】【奖项名称】数量
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
ExcelExportEntity entity10 = new ExcelExportEntity("【"+activityItem.getName()+"】【"+awardsItem.getName()+"】数量",
String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),20);
headList.add(entity10);
}
}
//满额赠礼活动
//【活动项名称】奖项
else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) {
ExcelExportEntity entity11 = new ExcelExportEntity("【"+activityItem.getName()+"】奖项",
String.valueOf(activityItem.getId()),20);
headList.add(entity11);
}
//返现活动
//【活动项名称】返现比例
//【活动项名称】返现金额
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
ExcelExportEntity entity12 = new ExcelExportEntity("【"+activityItem.getName()+"】返现比例",
"r"+String.valueOf(activityItem.getId()),20);
headList.add(entity12);
ExcelExportEntity entity13 = new ExcelExportEntity("【"+activityItem.getName()+"】返现金额",
"p"+String.valueOf(activityItem.getId()),20);
headList.add(entity13);
}
}
ExcelExportEntity entity14 = new ExcelExportEntity("抽奖券编码","lotteryNum",20);
headList.add(entity14);
ExcelExportEntity entity15 = new ExcelExportEntity("抽奖券数量","lotteryCount",20);
headList.add(entity15);
ExcelExportEntity entity16 = new ExcelExportEntity("周年庆抽奖编码","anniversaryLotteryNum",20);
headList.add(entity16);
ExcelExportEntity entity17 = new ExcelExportEntity("签名图片","signImg",20);
// entity17.setType(BaseEntityTypeConstants.IMAGE_TYPE);
headList.add(entity17);

return headList;
}

}




+ 3
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java Wyświetl plik

@@ -146,6 +146,9 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{
@Override
public WxOfflineActivity getInfoById(Long id, String tenantId) {
WxOfflineActivity wxOfflineActivity = wxOfflineActivityMapper.selectById(id, tenantId);
if (wxOfflineActivity == null) {
return null;
}
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(wxOfflineActivity.getId(),tenantId);
wxOfflineActivity.setActivityItemList(activityItemList);
if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){


+ 14
- 0
mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java Wyświetl plik

@@ -82,4 +82,18 @@ public class DownFileUtil {
return bos.toByteArray();
}

public static byte[] url2byte(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组
return readInputStream(inputStream);
}

}

+ 40
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml Wyświetl plik

@@ -33,6 +33,46 @@
lottery_count,anniversary_lottery_num
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1

<if test=" null != id ">
and `id` = #{id}
</if>

<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != activityId">
and `activity_id` = #{activityId}
</if>

<if test=" null != cusName and cusName != '' ">
and `cus_name` like concat('%', #{cusName},'%')
</if>

<if test=" null != cusPhone and cusPhone != '' ">
and `cus_phone` = #{cusPhone}
</if>

<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>

<select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_award
<include refid="dynamicWhereConditions" />
</select>


<select id="getCusCount" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Integer">
SELECT COUNT(DISTINCT cus_phone) FROM wx_offline_activity_grant_award


+ 1
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml Wyświetl plik

@@ -60,7 +60,7 @@
</if>

<if test=" null != activityId">
and `activityId` = #{activityId}
and `activity_id` = #{activityId}
</if>
<if test=" null != activityItemId">
and `activity_item_id` = #{activityItemId}


+ 13
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml Wyświetl plik

@@ -229,4 +229,17 @@

</sql>

<select id="findGrantList" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select r.id,r.tenant_id,r.parent_tenant_id,
r.order_no,r.order_money,r.cus_name,
r.real_cus_name,r.cus_phone,r.cus_address,
r.cus_card,r.lottery_num,r.lottery_count,
r.anniversary_lottery_num,r.create_by,r.merchant_id,r.business_id,
r.create_date,r.update_date,r.audit_remark,
r.audit_status,r.audit_by,audit_time
from wx_offline_activity_record_grant rg
left join wx_offline_activity_record r on rg.record_id = r.id
where rg.grant_id = #{grantId} and rg.tenant_id=#{tenantId}
</select>

</mapper>

Ładowanie…
Anuluj
Zapisz