Browse Source

发送小程序服务消息;其他

dev
yujintao 6 years ago
parent
commit
b6df6d726a
  1. 23
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/async/AppUserTask.java
  2. 17
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java
  3. 9
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java
  4. 162
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java
  5. 2
      esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/form/EpdcDeleteWxFormIdFormDTO.java
  6. 49
      esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/EpdcUserRegisterAuditMsgResultDTO.java
  7. 14
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppUserController.java
  8. 4
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppUserWxFormIdController.java
  9. 11
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/dao/UserDao.java
  10. 11
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/UserService.java
  11. 7
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/impl/UserServiceImpl.java
  12. 23
      esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserDao.xml

23
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/async/AppUserTask.java

@ -0,0 +1,23 @@
package com.elink.esua.epdc.async;
import com.elink.esua.epdc.feign.UserFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* @author work@yujt.net.cn
* @date 19/09/26 15:50
*/
@Component
public class AppUserTask {
@Autowired
private UserFeignClient userFeignClient;
@Async
public void updateUserLoginInfo(){
}
}

17
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/UserFeignClient.java

@ -5,9 +5,10 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.UserWxFormIdDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcDeleteWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserSaveWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.feign.fallback.UserFeignClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
@ -105,15 +106,15 @@ public interface UserFeignClient {
Result updateMobileOrAvatar(@RequestBody UserDTO userDTO);
/**
* 根据ID获取用户信
* 用户注册审核之后查询用户审核结果用于发送服务消息和短信消
*
* @param id
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.UserDTO>
* @param userId
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO>
* @author work@yujt.net.cn
* @date 2019/9/25 15:29
* @date 2019/9/27 09:22
*/
@GetMapping(value = "app-user/user/{id}")
Result<UserDTO> getUserById(@PathVariable("id") String id);
@GetMapping("app-user/epdc-app/user/registerResult/{userId}")
Result<EpdcUserRegisterAuditMsgResultDTO> getUserRegisterAuditResult(@PathVariable("userId") String userId);
/**
* 完成推送之后删除用过的formid
@ -124,7 +125,7 @@ public interface UserFeignClient {
* @date 2019/9/26 14:15
*/
@PostMapping(value = "app-user/epdc-app/wxformid/deleteById", consumes = MediaType.APPLICATION_JSON_VALUE)
Result deleteWxFormIdById(EpdcUserWxFormIdFormDTO dto);
Result deleteWxFormIdById(EpdcDeleteWxFormIdFormDTO dto);
/**
* 新增一条

9
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/UserFeignClientFallback.java

@ -6,9 +6,10 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.UserWxFormIdDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcDeleteWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserSaveWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.feign.UserFeignClient;
import org.springframework.stereotype.Component;
@ -56,12 +57,12 @@ public class UserFeignClientFallback implements UserFeignClient {
}
@Override
public Result<UserDTO> getUserById(String id) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "getUserById", id);
public Result<EpdcUserRegisterAuditMsgResultDTO> getUserRegisterAuditResult(String userId) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "getUserRegisterAuditResult", userId);
}
@Override
public Result deleteWxFormIdById(EpdcUserWxFormIdFormDTO dto) {
public Result deleteWxFormIdById(EpdcDeleteWxFormIdFormDTO dto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_USER_SERVER, "deleteWxFormIdById", dto);
}

162
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/MessageServiceImpl.java

@ -1,26 +1,31 @@
package com.elink.esua.epdc.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaMsgService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
import cn.binarywang.wx.miniapp.bean.WxMaUniformMessage;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.UserWxFormIdDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcDeleteWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.dto.form.EpdcRegisterResultSmsFormDTO;
import com.elink.esua.epdc.enums.AppUserAuditStateEnum;
import com.elink.esua.epdc.feign.MessageFeignClient;
import com.elink.esua.epdc.feign.UserFeignClient;
import com.elink.esua.epdc.service.MessageService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author yujintao
* @email yujintao@elink-cn.com
* @date 2019/9/11 21:03
*/
@Slf4j
@Service
public class MessageServiceImpl implements MessageService {
@ -55,22 +60,159 @@ public class MessageServiceImpl implements MessageService {
if (null == userAuditStateEnum || userAuditStateEnum.equals(AppUserAuditStateEnum.UNDER_AUDIT)) {
return new Result().error("审核状态无效");
}
Result<UserDTO> userResult = userFeignClient.getUserById(userId);
Result<EpdcUserRegisterAuditMsgResultDTO> userResult = userFeignClient.getUserRegisterAuditResult(userId);
if (!userResult.success() || null == userResult.getData()) {
return new Result().error("查询用户信息失败");
}
UserDTO userDto = userResult.getData();
// 用户审核结果
EpdcUserRegisterAuditMsgResultDTO registerAuditResultDto = userResult.getData();
switch (userAuditStateEnum) {
case AUDIT_FAILURE:
EpdcRegisterResultSmsFormDTO form = new EpdcRegisterResultSmsFormDTO();
form.setMobile(userDto.getMobile());
form.setReason(userDto.getRemark());
return this.messageFeignClient.registerFailure(form);
form.setMobile(registerAuditResultDto.getMobile());
form.setReason(registerAuditResultDto.getRemark());
// 发送审核失败短信
this.messageFeignClient.registerFailure(form);
if (StringUtils.isNotBlank(registerAuditResultDto.getWxFormId())) {
this.sendRegisterFailureMaMsg(registerAuditResultDto);
this.deleteWxFormId(registerAuditResultDto.getWxFormIdId());
}
return new Result();
case AUDIT_SUCCESS:
return this.messageFeignClient.registerSuccess(userDto.getMobile());
// 发送审核成功信息
this.messageFeignClient.registerSuccess(registerAuditResultDto.getMobile());
if (StringUtils.isNotBlank(registerAuditResultDto.getWxFormId())) {
this.sendRegisterSuccessMaMsg(registerAuditResultDto);
this.deleteWxFormId(registerAuditResultDto.getWxFormIdId());
}
return new Result();
default:
return new Result().error("短信发送失败");
return new Result().error("发送审核结果信息失败");
}
}
/**
* 删除用过的wxFormId
*
* @param id 存放formId的数据库表主键
* @return void
* @author work@yujt.net.cn
* @date 2019/9/27 09:33
*/
private void deleteWxFormId(String id) {
EpdcDeleteWxFormIdFormDTO dto = new EpdcDeleteWxFormIdFormDTO();
dto.setId(id);
userFeignClient.deleteWxFormIdById(dto);
}
/**
* 注册失败的小程序服务消息
*
* @param registerAuditResultDto
* @return void
* @author work@yujt.net.cn
* @date 2019/9/26 17:26
*/
private void sendRegisterFailureMaMsg(EpdcUserRegisterAuditMsgResultDTO registerAuditResultDto) {
/*姓名,手机号,申请时间,审核时间,不通过原因,审核结果 jL6UPR2ZBcZT8Qu2UijcApvUI2xa3K68paDl8ZZV7as*/
List<WxMaTemplateData> dataList = this.getWxMaTemplateData(registerAuditResultDto);
WxMaTemplateData templateData = new WxMaTemplateData();
templateData.setName("keyword5");
templateData.setValue(registerAuditResultDto.getRemark());
templateData.setColor("#FF4500");
dataList.add(templateData);
templateData = new WxMaTemplateData();
templateData.setName("keyword6");
templateData.setValue("注册失败");
dataList.add(templateData);
WxMaUniformMessage message = WxMaUniformMessage.builder()
.isMpTemplateMsg(false)
.toUser(registerAuditResultDto.getWxOpenId())
.formId(registerAuditResultDto.getWxFormId())
.templateId("jL6UPR2ZBcZT8Qu2UijcApvUI2xa3K68paDl8ZZV7as")
.page("/pages/index/index")
.data(dataList)
.emphasisKeyword("keyword6.DATA")
.build();
try {
wxMaService.getMsgService().sendUniformMsg(message);
} catch (WxErrorException e) {
log.error("->sendRegisterFailureMaMsg::发送小程序服务通知失败::userId:::{}::errorMsg::{}",
registerAuditResultDto.getUserId(), e.getMessage());
}
}
/**
* 注册成功的小程序服务消息
*
* @param registerAuditResultDto
* @return void
* @author work@yujt.net.cn
* @date 2019/9/26 17:26
*/
private void sendRegisterSuccessMaMsg(EpdcUserRegisterAuditMsgResultDTO registerAuditResultDto) {
/*姓名,手机号,申请时间,审核时间,审核结果 jL6UPR2ZBcZT8Qu2UijcAoGddYg70BGAyFZXyr4XBSY*/
List<WxMaTemplateData> dataList = this.getWxMaTemplateData(registerAuditResultDto);
WxMaTemplateData templateData = new WxMaTemplateData();
templateData.setName("keyword5");
templateData.setValue("注册成功");
dataList.add(templateData);
WxMaUniformMessage message = WxMaUniformMessage.builder()
.isMpTemplateMsg(false)
.toUser(registerAuditResultDto.getWxOpenId())
.formId(registerAuditResultDto.getWxFormId())
.templateId("jL6UPR2ZBcZT8Qu2UijcAoGddYg70BGAyFZXyr4XBSY")
.page("/pages/index/index")
.data(dataList)
.emphasisKeyword("keyword5.DATA")
.build();
try {
wxMaService.getMsgService().sendUniformMsg(message);
} catch (WxErrorException e) {
log.error("->sendRegisterSuccessMaMsg::发送小程序服务通知失败::userId:::{}::errorMsg::{}",
registerAuditResultDto.getUserId(), e.getMessage());
}
}
/**
* 因为注册审核的两个模版消息的前四项关键词是一样的所以抽出了方法
*
* @param registerAuditResultDto
* @return java.util.List<cn.binarywang.wx.miniapp.bean.WxMaTemplateData>
* @author work@yujt.net.cn
* @date 2019/9/26 17:24
*/
private List<WxMaTemplateData> getWxMaTemplateData(EpdcUserRegisterAuditMsgResultDTO registerAuditResultDto) {
List<WxMaTemplateData> dataList = Lists.newArrayList();
WxMaTemplateData templateData = new WxMaTemplateData();
templateData.setName("keyword1");
templateData.setValue(registerAuditResultDto.getRealName());
dataList.add(templateData);
templateData = new WxMaTemplateData();
templateData.setName("keyword2");
templateData.setValue(registerAuditResultDto.getMobile());
dataList.add(templateData);
templateData = new WxMaTemplateData();
templateData.setName("keyword3");
templateData.setValue(registerAuditResultDto.getCreatedTime());
dataList.add(templateData);
templateData = new WxMaTemplateData();
templateData.setName("keyword4");
templateData.setValue(registerAuditResultDto.getRegisterTime());
dataList.add(templateData);
return dataList;
}
}

2
esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/form/EpdcUserWxFormIdFormDTO.java → esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/form/EpdcDeleteWxFormIdFormDTO.java

@ -11,7 +11,7 @@ import java.io.Serializable;
* @Description: 发送完消息之后删除
*/
@Data
public class EpdcUserWxFormIdFormDTO implements Serializable {
public class EpdcDeleteWxFormIdFormDTO implements Serializable {
private static final long serialVersionUID = 1708791774502867360L;

49
esua-epdc/epdc-module/epdc-user/epdc-user-client/src/main/java/com/elink/esua/epdc/dto/epdc/result/EpdcUserRegisterAuditMsgResultDTO.java

@ -0,0 +1,49 @@
package com.elink.esua.epdc.dto.epdc.result;
import lombok.Data;
import java.io.Serializable;
/**
* 用于发送关于用户注册审核结果的服务通知
*
* @author work@yujt.net.cn
* @date 19/09/27 9:03
*/
@Data
public class EpdcUserRegisterAuditMsgResultDTO implements Serializable {
private static final long serialVersionUID = -5435160234376760275L;
private String userId;
private String realName;
private String mobile;
private String state;
/**
* 审核时间
*/
private String registerTime;
/**
* 提交注册时间
*/
private String createdTime;
/**
* 审核备注
*/
private String remark;
private String wxOpenId;
private String wxFormId;
/**
* 存放wxFormId的表的主键
*/
private String wxFormIdId;
}

14
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppUserController.java

@ -5,6 +5,7 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -116,4 +117,17 @@ public class EpdcAppUserController {
public Result verifyUserRegisterData(@RequestBody EpdcUserRegistFormDTO formDto) {
return userService.verifyUserRegisterData(formDto);
}
/**
* 用户注册审核之后查询用户审核结果用于发送服务消息和短信消息
*
* @param userId
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO>
* @author work@yujt.net.cn
* @date 2019/9/27 09:13
*/
@GetMapping("registerResult/{userId}")
public Result<EpdcUserRegisterAuditMsgResultDTO> getUserRegisterAuditResult(@PathVariable("userId") String userId) {
return userService.getUserRegisterAuditResult(userId);
}
}

4
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppUserWxFormIdController.java

@ -22,7 +22,7 @@ import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils;
import com.elink.esua.epdc.commons.tools.validator.group.DefaultGroup;
import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup;
import com.elink.esua.epdc.dto.UserWxFormIdDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcDeleteWxFormIdFormDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserSaveWxFormIdFormDTO;
import com.elink.esua.epdc.service.UserWxFormIdService;
import org.springframework.beans.BeanUtils;
@ -51,7 +51,7 @@ public class EpdcAppUserWxFormIdController {
* @date 2019/9/26 14:15
*/
@PostMapping("deleteById")
public Result deleteById(@RequestBody EpdcUserWxFormIdFormDTO dto) {
public Result deleteById(@RequestBody EpdcDeleteWxFormIdFormDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
userWxFormIdService.deleteById(dto.getId());

11
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/dao/UserDao.java

@ -19,8 +19,10 @@ package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 用户信息表
@ -50,4 +52,13 @@ public interface UserDao extends BaseDao<UserEntity> {
*/
void deleteByUnionId(String wxUnionId);
/**
* 用户注册审核之后查询用户审核结果用于发送服务消息和短信消息
*
* @param userId
* @return com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO
* @author work@yujt.net.cn
* @date 2019/9/27 09:14
*/
EpdcUserRegisterAuditMsgResultDTO getUserRegisterAuditResult(@Param("userId") String userId);
}

11
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/UserService.java

@ -23,6 +23,7 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.entity.UserEntity;
import java.util.List;
@ -122,4 +123,14 @@ public interface UserService extends BaseService<UserEntity> {
* @date 2019/9/24 13:57
*/
Result<UserDTO> getUserForLoginByOpenId(String openId);
/**
* 用户注册审核之后查询用户审核结果用于发送服务消息和短信消息
*
* @param userId
* @return com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO>
* @author work@yujt.net.cn
* @date 2019/9/27 09:13
*/
Result<EpdcUserRegisterAuditMsgResultDTO> getUserRegisterAuditResult(String userId);
}

7
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/service/impl/UserServiceImpl.java

@ -35,6 +35,7 @@ import com.elink.esua.epdc.dto.PartyMembersDTO;
import com.elink.esua.epdc.dto.UserDTO;
import com.elink.esua.epdc.dto.epdc.form.EpdcUserRegistFormDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserInfoResultDTO;
import com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO;
import com.elink.esua.epdc.entity.UserEntity;
import com.elink.esua.epdc.enums.AppUserAuditStateEnum;
import com.elink.esua.epdc.redis.UserRedis;
@ -263,4 +264,10 @@ public class UserServiceImpl extends BaseServiceImpl<UserDao, UserEntity> implem
}
return new Result();
}
@Override
public Result<EpdcUserRegisterAuditMsgResultDTO> getUserRegisterAuditResult(String userId) {
EpdcUserRegisterAuditMsgResultDTO dto = this.baseDao.getUserRegisterAuditResult(userId);
return new Result().ok(dto);
}
}

23
esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/mapper/UserDao.xml

@ -34,4 +34,27 @@
AND STATE = '2'
</select>
<select id="getUserRegisterAuditResult"
resultType="com.elink.esua.epdc.dto.epdc.result.EpdcUserRegisterAuditMsgResultDTO">
SELECT
u.ID,
u.MOBILE,
u.REMARK,
u.REAL_NAME,
DATE_FORMAT( u.CREATED_TIME, '%Y-%m-%d %H:%i:%s' ) AS CREATED_TIME,
DATE_FORMAT( u.REGISTER_TIME, '%Y-%m-%d %H:%i:%s' ) AS REGISTER_TIME,
u.WX_OPEN_ID,
u.STATE,
f.ID AS wxFormIdId,
f.WX_FORM_ID
FROM
epdc_user u
LEFT JOIN epdc_user_wx_form_id f ON u.WX_OPEN_ID = f.WX_OPEN_ID
AND f.DEL_FLAG = '0'
WHERE
u.DEL_FLAG = '0' AND u.ID = #{userId}
ORDER BY f.CREATED_TIME DESC
LIMIT 1
</select>
</mapper>
Loading…
Cancel
Save