diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java index c7db07834..9a3b301d6 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxUserStructureController.java @@ -7,11 +7,10 @@ import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.*; +import com.iformall.domain.vo.KwMeterDataVo; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.UserStructureVo; -import com.iformall.enums.EnumAgeInfo; -import com.iformall.enums.EnumCUserBaseInfoSex; -import com.iformall.enums.EnumScoreType; -import com.iformall.enums.EnumTag; +import com.iformall.enums.*; import com.iformall.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -261,27 +260,51 @@ public class WxUserStructureController extends BaseController { } /********************************会员数据**************************************/ + + private Date addDay(Date date , int addDayAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.DATE, addDayAmount); + Date result = c.getTime(); + return result; + } + + private Date addMonth(Date date, int addMountAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.MONTH, addMountAmount); + Date result = c.getTime(); + return result; + } + + private Date addYear(Date date, int addYearAmount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(Calendar.YEAR, addYearAmount); + Date result = c.getTime(); + return result; + } + @ApiOperation("查询会员数量") @GetMapping("/findUserDataCount") @SystemControllerLog(description = "会员管理-查询会员数量") - public ResultData findUserCount(Date startTime, Date endTime) { - - final int daysBefore = 29; + public ResultData findUserCount(Date startTime, Date endTime, Integer reportType) { logger.debug("[" + getIpAddr() + "] WxUserStructureController::findUserCount"); + + + //昨日同比 + Map map = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); dto.setTenantId(getTenantId()); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - if (endTime != null) { - Calendar c = Calendar.getInstance(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, 1); - endTime = c.getTime(); - } + dto.setEndTime(new Date()); + //微信用户数据 + long wxTotalCount = wxCUserService.findCount(dto);//总量 //微信用户数据 - long wxallCount = wxCUserService.findCount(dto);//总量 - //会员数据 - Map member=getMemberData(dto); + long memTotalCount = wxCUserBasicInfoService.findCount(dto);//总量 + + map.put("wxTotalCount",wxTotalCount); + map.put("memTotalCount",memTotalCount); Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, 0); @@ -290,46 +313,12 @@ public class WxUserStructureController extends BaseController { Date today = c.getTime(); dto.setStartTime(today); dto.setEndTime(null); - long wxtodayCount = wxCUserService.findCount(dto);//今天新增 - List wxnewCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserService.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - wxnewCountVos.add(vo); - } - List wxallCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserService.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : wxnewCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - wxallCountVos.add(vo); - i++; - } + long wxTodayCount = wxCUserService.findCount(dto);//今天新增 + long memTodayCount = wxCUserBasicInfoService.findCount(dto);//今天新增 + map.put("wxTodayCount",wxTodayCount); + map.put("memTodayCount",memTodayCount); - //昨日同比 - Map map = new HashMap<>(); //昨日同比 c.clear(); c.setTime(today); @@ -337,98 +326,137 @@ public class WxUserStructureController extends BaseController { dto.setStartTime(c.getTime()); c.add(Calendar.DAY_OF_YEAR, 1); dto.setEndTime(c.getTime()); - long yesterdayCount = wxCUserService.findCount(dto); - if(yesterdayCount>0){ - double yesterday=(double) (wxtodayCount-yesterdayCount)/yesterdayCount*100; + long wxYesterdayCount = wxCUserService.findCount(dto); + long memYesterdayCount = wxCUserBasicInfoService.findCount(dto); + if (wxYesterdayCount > 0) { + double yesterday = (double) (wxTodayCount - wxYesterdayCount) / wxYesterdayCount * 100; double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - map.put("wxhb",zrhb+"%"); - }else{ - map.put("wxhb","--%"); + map.put("wxhb", zrhb + "%"); + } else { + map.put("wxhb", "--%"); + } + if (memYesterdayCount > 0) { + double yesterday = (double) (wxTodayCount - memYesterdayCount) / memYesterdayCount * 100; + double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + map.put("memhb", zrhb + "%"); + } else { + map.put("memhb", "--%"); } - map.put("wxallCount", wxallCount);//累计会员总数 - map.put("wxtodayCount", wxtodayCount);//今日新增会员数 - map.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) - map.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) - map.putAll(member); - return new ResultData(map); - } - - private Map getMemberData(WxCUserBasicInfoDto dto) { - final int daysBefore = 29; - long allCount = wxCUserBasicInfoService.findCount(dto);//总量 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - dto.setStartTime(today); - dto.setEndTime(null); - long todayCount = wxCUserBasicInfoService.findCount(dto);//今天新增 - List newCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserBasicInfoService.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - newCountVos.add(vo); + if (startTime == null || endTime == null) { + startTime = addMonth(new Date(), -1); + endTime = new Date(); + reportType = EnumUserCountReportType.DAY.getCode(); } - List allCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserBasicInfoService.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : newCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - allCountVos.add(vo); - i++; + + dto.setTenantId(getTenantId()); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + dto.setReportType(reportType); + + List wxCountList = new ArrayList<>();//每日新增会员数 + List wxCounts = wxCUserService.findCountHistory(dto);//每日新增会员数 + List memCountList = new ArrayList<>();//每日新增会员数 + List memCounts = wxCUserBasicInfoService.findCountHistory(dto);//每日新增会员数 + + SimpleDateFormat sdf; + SimpleDateFormat fsdf; + if (reportType.equals(EnumUserCountReportType.YEAR.getCode())) { + sdf = new SimpleDateFormat("yyyy"); + fsdf = new SimpleDateFormat("yyyy"); + }else if (reportType.equals(EnumUserCountReportType.MONTH.getCode())) { + sdf = new SimpleDateFormat("yyyy-MM"); + fsdf = new SimpleDateFormat("yyyy-MM"); + }else { + sdf = new SimpleDateFormat("yyyy-MM-dd"); + fsdf = new SimpleDateFormat("MM-dd"); } + Date curTime = new Date(startTime.getTime()); + do { + UserCountVo wxUc = new UserCountVo(); + UserCountVo memUc = new UserCountVo(); + wxUc.setReportTime(fsdf.format(curTime)); + memUc.setReportTime(fsdf.format(curTime)); + + final Date ct = new Date(curTime.getTime()); + + if (ct.before(new Date()) || ct.equals(new Date())) { + //用户 + Optional opWxUserCountVo = + wxCounts.stream().filter(md -> md.getReportTime().equals(sdf.format(ct))).findFirst(); + if (opWxUserCountVo.isPresent()) { + wxUc.setIncCount(opWxUserCountVo.get().getIncCount()); + wxUc.setTotalCount(opWxUserCountVo.get().getTotalCount()); + } else { + wxUc.setIncCount(0L); + wxUc.setTotalCount(0L); + } - Map map = new HashMap<>(); - //昨日同比 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -1); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long yesterdayCount = wxCUserService.findCount(dto); - if(yesterdayCount>0){ - double yesterday=(double) (todayCount-yesterdayCount)/yesterdayCount*100; - double zrhb = new BigDecimal(yesterday).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - map.put("hb",zrhb+"%"); - }else{ - map.put("hb","--%"); - } + //会员 + Optional opMemUserCountVo = + memCounts.stream().filter(md -> md.getReportTime().equals(sdf.format(ct))).findFirst(); + if (opMemUserCountVo.isPresent()) { + memUc.setIncCount(opMemUserCountVo.get().getIncCount()); + memUc.setTotalCount(opMemUserCountVo.get().getTotalCount()); + } else { + memUc.setIncCount(0L); + memUc.setTotalCount(0L); + } + } + memCountList.add(memUc); + wxCountList.add(wxUc); + if (reportType.equals(EnumUserCountReportType.YEAR.getCode())) { + curTime = addYear(curTime, 1); + } else if (reportType.equals(EnumUserCountReportType.MONTH.getCode())) { + curTime = addMonth(curTime, 1); + } else { + curTime = addDay(curTime, 1); + } - map.put("allCount", allCount);//累计会员总数 - map.put("todayCount", todayCount);//今日新增会员数 - map.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) - map.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) + }while (curTime.before(endTime)); - return map; + if (wxCountList.size() > 0 + && wxCountList.get(0).getTotalCount() != null + && wxCountList.get(0).getTotalCount() == 0) { + WxCUserBasicInfoDto pdto = new WxCUserBasicInfoDto(); + pdto.setTenantId(getTenantId()); + pdto.setEndTime(startTime); + wxCountList.get(0).setTotalCount(wxCUserService.findCount(pdto)); + } + for (int i = 1; i < wxCountList.size(); i++){ + if (wxCountList.get(i).getTotalCount() != null && + wxCountList.get(i-1).getTotalCount() != null && + wxCountList.get(i).getTotalCount() < wxCountList.get(i-1).getTotalCount()){ + wxCountList.get(i).setTotalCount(wxCountList.get(i-1).getTotalCount()); + } + } + + if (memCountList.size() > 0 + && memCountList.get(0).getTotalCount() != null + && memCountList.get(0).getTotalCount() == 0) { + WxCUserBasicInfoDto pdto = new WxCUserBasicInfoDto(); + pdto.setTenantId(getTenantId()); + pdto.setEndTime(startTime); + memCountList.get(0).setTotalCount(wxCUserBasicInfoService.findCount(pdto)); + } + for (int i = 1; i < memCountList.size(); i++){ + if ( memCountList.get(i).getTotalCount() != null && + memCountList.get(i-1).getTotalCount() != null && + memCountList.get(i).getTotalCount() < memCountList.get(i-1).getTotalCount()){ + memCountList.get(i).setTotalCount(memCountList.get(i-1).getTotalCount()); + } + } + + map.put("wxCountList", wxCountList);//累计/新增用户列表( 日期和数量list) + map.put("memCountList", memCountList);//累计/新增会员列表( 日期和数量list) + + return new ResultData(map); } + @ApiOperation("拓客分析") @GetMapping("/findUserByChannel") @ApiImplicitParams({ diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java index f72027687..3743582f8 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxCUserBasicInfoDto.java @@ -42,7 +42,10 @@ public class WxCUserBasicInfoDto extends BaseEntity { @Transient @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") private String tenantId; - + + @Transient + private Integer reportType; + @Transient private Date birthStartTime; @@ -73,11 +76,9 @@ public class WxCUserBasicInfoDto extends BaseEntity { @Transient List tagIds; - @Transient private String phones; - @Transient @io.swagger.annotations.ApiModelProperty(value="1查询导入的数据",name="queryImport") protected Integer queryImport; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java new file mode 100644 index 000000000..623acb1a8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/UserCountVo.java @@ -0,0 +1,27 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.text.DecimalFormat; + +/** + * 会员结构vo + * @author jinguo + * + */ + +@Data +public class UserCountVo implements Serializable { + + private static final long serialVersionUID = 6780570955120276661L; + //名称 + private String reportTime; + + //数量 + private Long incCount; + + //数量 + private Long totalCount; + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java b/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java new file mode 100644 index 000000000..803f330b6 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumUserCountReportType.java @@ -0,0 +1,34 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumUserCountReportType { + DAY(1, "日"), + MONTH(2, "月"), + YEAR(3, "年"); + public static EnumUserCountReportType getEnum(Integer code) { + for (EnumUserCountReportType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumUserCountReportType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java index bccf0891c..2c9be950e 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java @@ -4,6 +4,7 @@ import com.iformall.common.CommonMapper; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.vo.CUserBaseVo; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxCUserBasicInfoVo; import java.util.List; @@ -31,6 +32,7 @@ public interface WxCUserBasicInfoMapper extends CommonMapper findBirthdayList(WxCUserBasicInfoDto wxCUserBasicInfoDto); long findCount(WxCUserBasicInfoDto dto); + List findCountHistory(WxCUserBasicInfoDto dto); List findVoList(WxCUserBasicInfo wxCUserBasicInfo); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java index 6d81d824f..99f9033f9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java @@ -6,6 +6,7 @@ import java.util.Map; import com.iformall.common.CommonMapper; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUser; +import com.iformall.domain.vo.UserCountVo; public interface WxCUserMapper extends CommonMapper { @@ -19,6 +20,8 @@ public interface WxCUserMapper extends CommonMapper { long findCount(WxCUserBasicInfoDto dto); + List findCountHistory(WxCUserBasicInfoDto dto); + List listByChannel(WxCUser wxCUser); long countByChannel(WxCUser wxCUser); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index 5a33ab869..655250b99 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -6,6 +6,7 @@ import com.iformall.domain.dto.WxCUserBasicInfoFilterDto; import com.iformall.domain.dto.WxCUserBasicInfoFilterListDto; import com.iformall.domain.po.*; import com.iformall.domain.vo.CUserBaseInfoT; +import com.iformall.domain.vo.UserCountVo; import com.iformall.domain.vo.WxTagsGroupVo; import javax.servlet.http.HttpServletRequest; @@ -119,7 +120,7 @@ public interface WxCUserBasicInfoService { void importOneMem(String tenantId, String importKey, List tagList, CUserBaseInfoT uBase,MallUserInfo mallUserInfo); long findCount(WxCUserBasicInfoDto dto); - + List findCountHistory(WxCUserBasicInfoDto dto); /** * 停车会员记录导出 * @param record diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index c7a4638b5..607aab594 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java @@ -5,9 +5,13 @@ import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCreditHistory; +import com.iformall.domain.vo.UserCountVo; import com.iformall.enums.EnumScoreType; import me.chanjar.weixin.mp.bean.result.WxMpUser; +import java.util.List; +import java.util.Map; + public interface WxCUserService { /** @@ -94,6 +98,13 @@ public interface WxCUserService { */ long findCount(WxCUserBasicInfoDto dto); + /** + * 统计数量 + * @param dto + * @return + */ + List findCountHistory(WxCUserBasicInfoDto dto); + /** * 通过渠道获取会员信息 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index d6256281f..aae8f2fcd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -982,6 +982,11 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService { return wxCUserBasicInfoMapper.findCount(dto); } + @Override + public List findCountHistory(WxCUserBasicInfoDto dto) { + return wxCUserBasicInfoMapper.findCountHistory(dto); + } + @Override public void exportCarPayData(WxCarPayRecord record, HttpServletRequest request, HttpServletResponse response) { List list = wxCarPayRecordMapper.findCarPayList(record); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index a23e2808f..c368a91fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCreditHistory; import com.iformall.domain.po.msg.FmInsideCLoginMsg; +import com.iformall.domain.vo.UserCountVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCUserMapper; @@ -23,6 +24,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; +import java.util.Map; @Service public class WxCUserServiceImpl implements WxCUserService { @@ -205,6 +207,11 @@ public class WxCUserServiceImpl implements WxCUserService { return wxCUserMapper.findCount(dto); } + @Override + public List findCountHistory(WxCUserBasicInfoDto dto) { + return wxCUserMapper.findCountHistory(dto); + } + @Override public PageInfo listByChannel(WxCUser user, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserMapper.listByChannel(user)); diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index 954b74840..f3b9c61f3 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -256,6 +256,51 @@ + + diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml index d7d715d17..c9a5a5097 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml @@ -253,6 +253,50 @@ + +